listview 1.2.1 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/listview.rb +55 -80
- metadata +1 -1
data/lib/listview.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'date'
|
2
2
|
|
3
|
+
#this is included in rails, but unfortunately not in the general ruby date library
|
3
4
|
class DateTime
|
4
5
|
def to_i
|
5
6
|
seconds_since_unix_epoch.to_i
|
@@ -15,99 +16,73 @@ end
|
|
15
16
|
class ListView
|
16
17
|
|
17
18
|
class << self
|
18
|
-
#example use:
|
19
|
-
#
|
20
|
-
#class ObjectThatRespondsToDate
|
21
|
-
# attr_accessor :date
|
22
|
-
#end
|
23
|
-
#
|
24
|
-
#obj1 = ObjectThatRespondsToDate.new
|
25
|
-
#obj1.date = DateTime.now
|
26
|
-
#
|
27
|
-
#
|
28
|
-
#get_events(events: [obj1], events_per_page: 5, page: 0)
|
29
|
-
def get_events vars
|
30
|
-
get_events_that_havent_happened_yet(vars[:events], vars[:events_per_page], (vars[:page].to_i)*vars[:events_per_page])[:events_that_havent_happened_yet]
|
31
|
-
end
|
32
|
-
|
33
|
-
#example use:
|
34
|
-
#
|
35
|
-
#get_events(events: [obj1], events_per_page: 5, page: 0, date_format: "%B, %d")
|
36
|
-
#date_format help: http://ruby-doc.org/stdlib-1.9.3/libdoc/date/rdoc/DateTime.html#method-i-to_date
|
37
|
-
def organization_events_by_day vars
|
38
|
-
vars[:date_format] ||= "%B, %d"
|
39
|
-
events_dict = get_events_that_havent_happened_yet(vars[:events], vars[:events_per_page], (vars[:page].to_i)*vars[:events_per_page])
|
40
|
-
|
41
|
-
organized_events = events_dict[:events_that_havent_happened_yet]
|
42
|
-
rightmost_page = events_dict[:rightmost_page]
|
43
|
-
leftmost_page = events_dict[:leftmost_page]
|
44
19
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
current_day = event.date
|
57
|
-
events_organized_by_day += [date: event_date(event.date, vars[:date_format]), events: [event]]
|
58
|
-
elsif index == 0
|
59
|
-
events_organized_by_day += [date: event_date(event.date, vars[:date_format]), events: [event]]
|
60
|
-
else
|
61
|
-
events_organized_by_day[-1][:events] += [event]
|
62
|
-
end
|
63
|
-
end
|
20
|
+
#parameters: vars[:events], vars[:date], vars[:page], vars[:events_per_page], vars[:date_format]
|
21
|
+
def get_events_and_page_info vars
|
22
|
+
vars[:date] ||= DateTime.now
|
23
|
+
event_closed_to_today = get_event_closed_to_today(vars[:events], vars[:date])
|
24
|
+
next_event = event_closed_to_today + (vars[:page].to_i * vars[:events_per_page].to_i)
|
25
|
+
events = get_events(events: vars[:events],
|
26
|
+
date: vars[:date],
|
27
|
+
page: vars[:page],
|
28
|
+
events_per_page: vars[:events_per_page])
|
29
|
+
rightmost_page = rightmost_page(events: vars[:events].length, next_event: next_event, events_per_page: vars[:events_per_page])
|
30
|
+
leftmost_page = leftmost_page(next_event: next_event, events_per_page: vars[:events_per_page])
|
64
31
|
return {
|
65
|
-
events:
|
32
|
+
events: events,
|
66
33
|
rightmost_page: rightmost_page,
|
67
34
|
leftmost_page: leftmost_page,
|
68
35
|
}
|
69
36
|
end
|
70
37
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
events_that_havent_happened_yet.sort_by! {|event| event.date}
|
80
|
-
closest_to_today = get_event_closed_to_today(events_that_havent_happened_yet)
|
81
|
-
|
82
|
-
return_var = {}
|
83
|
-
return_var[:events_that_havent_happened_yet] = []
|
84
|
-
event_index = closest_to_today + offset
|
85
|
-
return_var[:leftmost_page] = -((event_index / number_of_events_per_page).to_i)
|
86
|
-
return_var[:rightmost_page] = (((events_that_havent_happened_yet.length - 1) - (event_index)) / number_of_events_per_page).to_i
|
87
|
-
|
88
|
-
return return_var if closest_to_today.nil?
|
89
|
-
|
90
|
-
start_event_index = [closest_to_today + offset, 0].max
|
91
|
-
return_var[:events_that_havent_happened_yet] = events_that_havent_happened_yet[start_event_index, number_of_events_per_page]
|
92
|
-
return return_var
|
38
|
+
#parameters: vars[:events], vars[:date], vars[:page], vars[:events_per_page]
|
39
|
+
def get_events vars
|
40
|
+
vars[:date] ||= DateTime.now
|
41
|
+
events_closed_to_today = get_event_closed_to_today(vars[:events], vars[:date])
|
42
|
+
sorted_events = vars[:events].sort{ |x,y| x.date <=> y.date }
|
43
|
+
left_most_index = events_closed_to_today + (vars[:page].to_i * vars[:events_per_page].to_i)
|
44
|
+
if left_most_index < 0
|
45
|
+
return sorted_events[0, vars[:events_per_page].to_i + left_most_index] || []
|
93
46
|
end
|
47
|
+
sorted_events[left_most_index, vars[:events_per_page].to_i] || []
|
48
|
+
end
|
94
49
|
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
50
|
+
def get_event_closed_to_today events, the_date=nil
|
51
|
+
the_date ||= DateTime.now
|
52
|
+
closest_to_today = nil
|
53
|
+
sorted_events = events.sort{ |x,y| x.date <=> y.date }
|
54
|
+
sorted_events.each_with_index do |event, index|
|
55
|
+
if event.date.to_i > the_date.to_i
|
56
|
+
if closest_to_today == nil
|
57
|
+
closest_to_today = index
|
58
|
+
else
|
59
|
+
if event.date.to_i - the_date.to_i < sorted_events[closest_to_today].date.to_i - the_date.to_i
|
101
60
|
closest_to_today = index
|
102
|
-
else
|
103
|
-
if event.date.to_i - today.to_i < events[closest_to_today].date.to_i - today.to_i
|
104
|
-
closest_to_today = index
|
105
|
-
end
|
106
61
|
end
|
107
62
|
end
|
108
63
|
end
|
109
|
-
return closest_to_today
|
110
64
|
end
|
111
|
-
|
65
|
+
return closest_to_today
|
66
|
+
end
|
112
67
|
|
68
|
+
#parameters: vars[:events_per_page], vars[:next_event]
|
69
|
+
def leftmost_page vars
|
70
|
+
if vars[:events_per_page] > vars[:next_event]
|
71
|
+
return -1
|
72
|
+
elsif vars[:events_per_page] == 0
|
73
|
+
return 0
|
74
|
+
end
|
75
|
+
-(((vars[:next_event].to_i) / vars[:events_per_page].to_f).ceil)
|
76
|
+
end
|
77
|
+
|
78
|
+
#parameters:
|
79
|
+
#vars[:events],
|
80
|
+
#vars[:next_event]
|
81
|
+
#vars[:events_per_page]
|
82
|
+
def rightmost_page vars
|
83
|
+
events_after_today_minus_page_zero = (vars[:events] - (vars[:next_event] + vars[:events_per_page]))
|
84
|
+
(events_after_today_minus_page_zero / vars[:events_per_page].to_f).ceil
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
113
88
|
end
|