Renamed helpers to correspond to renamed Controller classes.
[merb_radiant.git] / radiant_extensions_plugins / extensions / archive / app / models / .svn / text-base / archive_finder.rb.svn-base
blob6263924b88fa6c200bae9e9501ed3112147467dc
1 class ArchiveFinder
2   
3   def initialize(&block)
4     @block = block
5   end
6   
7   def find(method, options = {})
8     @block.call(method, options)
9   end
10   
11   class << self
12     def year_finder(finder, year)
13       new do |method, options|
14         start = Time.local(year)
15         finish = start.next_year
16         add_condition(options, "published_at >= ? and published_at < ?", start, finish)
17         finder.find(method, options)
18       end
19     end
20     
21     def month_finder(finder, year, month)
22       new do |method, options|
23         start = Time.local(year, month)
24         finish = start.next_month
25         add_condition(options, "published_at >= ? and published_at < ?", start, finish)
26         finder.find(method, options)
27       end
28     end
29     
30     def day_finder(finder, year, month, day)
31       new do |method, options|
32         start = Time.local(year, month, day)
33         finish = start.tomorrow
34         add_condition(options, "published_at >= ? and published_at < ?", start, finish)
35         finder.find(method, options)
36       end
37     end
38     
39     private
40       
41       def concat_conditions(a, b)
42         sql = "(#{ [a.shift, b.shift].compact.join(") AND (") })"
43         params = a + b
44         [sql, *params]
45       end
46       
47       def add_condition(options, *condition)
48         old = options[:conditions] || []
49         conditions = concat_conditions(old, condition)
50         options[:conditions] = conditions
51         options
52       end
53       
54   end
55 end