moving zebra to zebra-broken
[zcc.git] / lib / zcc / resultset.rb
blob9d5f0fa0768729ea54bf9a634ff80c53b7abf103
1 module ZCC  
2   class ResultSet
3     include Enumerable
4     
5     attr_accessor :query, :sort_by, :index_start, :index_end, :records
6     
7     #All values of initialize are optional, though you'll want to supply it with a query object if you intend on getting records into your set through a z39.50 search. index_start and index_end will be used for the TUI display.
8     def initialize(query_object=nil, sort_by='title', index_start=0, index_end=5 ) 
9       @query = query_object #query object
10       
11       @sort_by = sort_by
12       @index_start = index_start
13       @index_end = index_end
14       #puts self.sort_by
15       #puts self.index_start
16       @records = []
17       #puts self.records.class
18       
19     end
20     
21     #Pretty prints the result set object. Nests pretty printed record objects within.
22     def to_s
23       full_string =  "-------RESULT SET--------------\n" + "Result set has #{self.records.size} records."
24       self.records.each do |record|
25         full_string << record.to_s
26       end
27       full_string += "-------RESULT SET--------------\n"
28     end
30     # Method to add records only to a result set.
31     def ingest record
32       self.records << record
33     end
34     
35     # appends a result set to another.
36     # Replaces the query and sort_by instance variables with the new ones.
37     
38     
39     #Removes unselected records from the result set. Uses the selected instance variable to check for true or false.
40     def remove_unselected!
41       self.records.each_index do |i|
42         if self.records[i].nil?
43         else
44           self.records[i] = nil unless self.records[i].selected
45         end
46       end
47       self.records.flatten!
48       self.records.compact!
49       self.records.uniq!
50     end
51     
52     #Number of records in the result set
53     def size
54       self.records.length
55     end 
56     
57     alias length size
58     
59     def selected_size
60       selected_records = self.find_all{|record| record.selected unless record == nil}
61       selected_records.length
62     end #returns number of ZCC::Records with @selected set to true
63     
64     alias selected_length selected_size
65     
66     
67     
68     def each 
69       for record in @records
70         yield record
71       end
72     end
73     
74     def sort_relevant 
75     end #
76     
77     def sort_by_title!
78       self.records.compact!
79       self.records.flatten!
80       self.records = self.records.sort_by{|r| r.marc['245']['a']}
81     end
83     def sort_by_date!
84       self.remove_nil!
85       self.records = self.records.sort_by{ |r| r.year_260}         
86     end
88     def sort_by_subfield! sf
89       self.remove_nil!
90       field, subfield = sf[0,3], sf[3,10]
91       subfield = 'a' if subfield == ''
92       self.records = self.records.sort_by{ |r| r.marc[field][subfield]}
93     end
95     def sort_by_standard!
96       self.remove_nil!
97       self.records = self.records.sort_by{|r| r.marc.leader[18]}
98       #self.records.reverse
99     end
101     def rank_by_relevance!
102       raise NotImplementedError
103       unless self.query.type == 'title'
104         raise "Relevancy ranking only works with titles (and not even them yet)"
105       end
106       term = self.query.term
107       
108     end
110     def remove_nil!
111       self.records.compact!
112       self.records.flatten!
113     end
114     
115     def hits_per_source 
116     end #=> hash{zurl=>[rec, rec],zurl=>[rec, rec]
117     
118     def []
119       
120     
121     end # Record at that position
122     
123     def empty?
124       if self.records.size == 0
125         return true
126       elsif self.records.size > 0
127         return false
128       end
129     end #returns true if the @ZCCRecords array is empty or only nil values
130     
131     #def find_all
132       #self.find_all {|record| record.selected}
133     #end
135     def <<(result_set)
136       #puts record
137       self.records << result_set.records
138       self.query = result_set.query
139       self.sort_by = result_set.sort_by      
140       self.records.flatten!
141       #puts self.records.inspect
142     end
144     
145   end