simple_calendar 2.0.6 → 2.1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 85669f41ecd3dd528d09f115f81cfefd06cd4b30
4
- data.tar.gz: f87d40f4648b321822b95a9a7dab9be787db0024
3
+ metadata.gz: 30f9a905897bec1f2aa6ca50db79a859af2e1620
4
+ data.tar.gz: 7f2e0f099aa7bdb9bb2630aaf28a3b8f5c58dcca
5
5
  SHA512:
6
- metadata.gz: 6e124dcfe0427ffbfc7cf4f6fef1e1bff46c615f3efd6817242473b3fcc4058b1b656ca56ee246b96c8bd6f9acb21271fbd0be8404afedd91412e30138b3af05
7
- data.tar.gz: 54c24e93b348ac200ebcd7d266a7f33ae590e7c44bbb6368ac2a4383f5fe37eda004daa66f2d2af37de6a2089d3c86f795290ac25b31d85545b9be654476390c
6
+ metadata.gz: f5665ddcfa19aca666994ec0dacbe3ad4fba3be565a5ace251fb104b829732e94c933d116d714664992fcb053e76a5edbb55d0389758bc88e677db0405e88675
7
+ data.tar.gz: 83b695471fc4da275e318c2575c608a7e458935ee991f67a8ad9c153637568455b413eb61fc1d7eb870070a4ca967c3ca372cdef151931dde28da10811b0ab30
@@ -1,5 +1,6 @@
1
1
  language: ruby
2
2
  rvm:
3
+ - 2.3.0
3
4
  - 2.2.2
4
5
  - 2.1.6
5
6
  - 2.0.0
@@ -1,7 +1,7 @@
1
1
  <div class="simple-calendar">
2
- <%= link_to "Previous", url_for(params.merge(start_date: date_range.first - 1.day)) %>
2
+ <%= link_to "Previous", calendar.url_for_previous_view %>
3
3
  <%= I18n.t("date.month_names")[start_date.month] %> <%= start_date.year %>
4
- <%= link_to "Next", url_for(params.merge(start_date: date_range.last + 1.day)) %>
4
+ <%= link_to "Next", calendar.url_for_next_view %>
5
5
 
6
6
  <table class="table table-striped">
7
7
  <thead>
@@ -1,7 +1,7 @@
1
1
  <div class="simple-calendar">
2
- <%= link_to "Previous", url_for(params.merge(start_date: date_range.first - 1.day)) %>
2
+ <%= link_to "Previous", calendar.url_for_previous_view %>
3
3
  <%= I18n.t("date.month_names")[start_date.month] %> <%= start_date.year %>
4
- <%= link_to "Next", url_for(params.merge(start_date: date_range.last + 1.day)) %>
4
+ <%= link_to "Next", calendar.url_for_next_view %>
5
5
 
6
6
  <table class="table table-striped">
7
7
  <thead>
@@ -1,7 +1,7 @@
1
1
  <div class="simple-calendar">
2
- <%= link_to "Previous", url_for(params.merge(start_date: date_range.first - 1.day)) %>
2
+ <%= link_to "Previous", calendar.url_for_previous_view %>
3
3
  Week <%= start_date.strftime("%U").to_i %>
4
- <%= link_to "Next", url_for(params.merge(start_date: date_range.last + 1.day)) %>
4
+ <%= link_to "Next", calendar.url_for_next_view %>
5
5
 
6
6
  <table class="table table-striped">
7
7
  <thead>
@@ -2,11 +2,17 @@ require 'rails'
2
2
 
3
3
  module SimpleCalendar
4
4
  class Calendar
5
+ PARAM_KEY_BLACKLIST = :authenticity_token, :commit, :utf8, :_method, :script_name
6
+
5
7
  attr_accessor :view_context, :options
6
8
 
7
9
  def initialize(view_context, opts={})
8
10
  @view_context = view_context
9
11
  @options = opts
12
+
13
+ @params = @view_context.params
14
+ @params = @params.to_unsafe_h if @params.respond_to?(:to_unsafe_h)
15
+ @params = @params.with_indifferent_access.except(*PARAM_KEY_BLACKLIST)
10
16
  end
11
17
 
12
18
  def render(&block)
@@ -39,6 +45,14 @@ module SimpleCalendar
39
45
  td_class
40
46
  end
41
47
 
48
+ def url_for_next_view
49
+ view_context.url_for(@params.merge(start_date: date_range.last + 1.day))
50
+ end
51
+
52
+ def url_for_previous_view
53
+ view_context.url_for(@params.merge(start_date: date_range.first - 1.day))
54
+ end
55
+
42
56
  private
43
57
 
44
58
  def partial_name
@@ -51,18 +65,9 @@ module SimpleCalendar
51
65
 
52
66
  def sorted_events
53
67
  events = options.fetch(:events, []).sort_by(&attribute)
54
- sorted = {}
55
-
56
- events.each do |event|
57
- start_time = event.send(attribute)
58
- if start_time.present?
59
- date = start_time.to_date
60
- sorted[date] ||= []
61
- sorted[date] << event
62
- end
63
- end
64
68
 
65
- sorted
69
+ scheduled = events.reject { |e| e.send(attribute).nil? }
70
+ scheduled.group_by { |e| e.send(attribute).to_date }
66
71
  end
67
72
 
68
73
  def start_date
@@ -1,3 +1,3 @@
1
1
  module SimpleCalendar
2
- VERSION = "2.0.6"
2
+ VERSION = "2.1.0"
3
3
  end
@@ -35,7 +35,28 @@ describe SimpleCalendar::Calendar do
35
35
  end
36
36
 
37
37
  describe "#sorted_events" do
38
- it 'converts an array of events to a hash sorted by days'
38
+ it 'converts an array of events to a hash sorted by days' do
39
+ today, tomorrow = Date.today, Date.tomorrow
40
+
41
+ event1 = double(start_time: today.at_midnight)
42
+ event2 = double(start_time: today.at_noon)
43
+ event3 = double(start_time: tomorrow.at_noon)
44
+
45
+ events = [event1, event2, event3].shuffle
46
+ calendar = SimpleCalendar::Calendar.new(nil, events: events)
47
+
48
+ sorted_events = calendar.send(:sorted_events)
49
+
50
+ expect(sorted_events[today]).to eq([event1, event2])
51
+ expect(sorted_events[tomorrow]).to eq([event3])
52
+ end
53
+
54
+ it 'handles events without a start time' do
55
+ event = double(start_time: nil)
56
+ calendar = SimpleCalendar::Calendar.new(nil, events: [event])
57
+
58
+ expect{calendar.send(:sorted_events)}.not_to raise_error
59
+ end
39
60
  end
40
61
 
41
62
  describe "#start_date" do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_calendar
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.6
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Oliver
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-09 00:00:00.000000000 Z
11
+ date: 2016-04-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -94,7 +94,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
94
94
  version: '0'
95
95
  requirements: []
96
96
  rubyforge_project: simple_calendar
97
- rubygems_version: 2.4.5.1
97
+ rubygems_version: 2.5.1
98
98
  signing_key:
99
99
  specification_version: 4
100
100
  summary: A simple Rails 3 and Rails 4 calendar