listview 1.2.1 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/lib/listview.rb +55 -80
  2. 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
- events_organized_by_day = []
46
- current_day = DateTime.now
47
- def event_date date, date_format
48
- if only_date(date) == only_date(DateTime.now)
49
- "Today"
50
- else
51
- date.strftime(date_format)
52
- end
53
- end
54
- organized_events.each_with_index do |event, index|
55
- if only_date(event.date) != only_date(current_day)
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: events_organized_by_day,
32
+ events: events,
66
33
  rightmost_page: rightmost_page,
67
34
  leftmost_page: leftmost_page,
68
35
  }
69
36
  end
70
37
 
71
- private
72
-
73
- def only_date date_time
74
- date_time.strftime("%d/%m/%Y")
75
- end
76
-
77
- def get_events_that_havent_happened_yet events, number_of_events_per_page, offset=0
78
- events_that_havent_happened_yet = events
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
- def get_event_closed_to_today events
96
- today = DateTime.now
97
- closest_to_today = nil
98
- events.each_with_index do |event, index|
99
- if event.date.to_i > today.to_i
100
- if closest_to_today == nil
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
- end
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
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: listview
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 2.0.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: