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.
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: