simple_calendar 2.2.7 → 2.3.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 +5 -5
- data/.travis.yml +3 -2
- data/README.md +13 -17
- data/lib/simple_calendar/calendar.rb +4 -4
- data/lib/simple_calendar/month_calendar.rb +3 -5
- data/lib/simple_calendar/version.rb +1 -1
- data/lib/simple_calendar/week_calendar.rb +5 -7
- data/spec/calendar_spec.rb +58 -26
- data/spec/calendars/month_calendar_spec.rb +20 -2
- data/spec/support/fake_event.rb +9 -0
- data/spec/support/view_context.rb +20 -0
- metadata +7 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 498acc5a1c5fac24d47d7cdb9d3da21744bfa262d593dd2c1ea38fd15285d35e
|
4
|
+
data.tar.gz: '0689bdad34c54a9e5aad30c200d22cc3502326431db2a4525eb944e15d6436ba'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 65ad74303562bb5f3126732963dd8776871463234ef3ae3c53a309e0462d24d393e5cc40ad9ec2eee57996d7456f2c9440237753e4fad13c5b98d49da4799539
|
7
|
+
data.tar.gz: a46c0c61bacb99afd4e3265a0eaf165c408fda9b005954221732408e7250124d60e9dd04649a3705893df89cbe5aee1077f58324c02f742c242c36fd1d20447a
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -24,6 +24,16 @@ Just add this into your Gemfile followed by a bundle install:
|
|
24
24
|
gem "simple_calendar", "~> 2.0"
|
25
25
|
```
|
26
26
|
|
27
|
+
If you're using Bootstrap, the calendar should already have a border and
|
28
|
+
nice spacing for days.
|
29
|
+
|
30
|
+
Optionally, you can include the default stylesheet for the calendar in
|
31
|
+
your `app/assets/stylesheets/application.css` file:
|
32
|
+
|
33
|
+
```scss
|
34
|
+
*= require simple_calendar
|
35
|
+
```
|
36
|
+
|
27
37
|
Usage
|
28
38
|
-----
|
29
39
|
|
@@ -92,8 +102,6 @@ You can set a different partial name for calendars by passing the partial path.
|
|
92
102
|
<% end %>
|
93
103
|
```
|
94
104
|
|
95
|
-
Setting `number_of_days` is optional and defaults to 4.
|
96
|
-
|
97
105
|
## Rendering Events
|
98
106
|
|
99
107
|
What's a calendar without events in it? There are two simple steps for creating
|
@@ -197,7 +205,7 @@ edit to your heart's desire.
|
|
197
205
|
Setting `Time.zone` will make sure the calendar start days are correctly computed
|
198
206
|
in the right timezone. You can set this globally in your `application.rb` file or
|
199
207
|
if you have a User model with a time_zone attribute, you can set it on every request by using
|
200
|
-
a
|
208
|
+
a before_action like the following example.
|
201
209
|
|
202
210
|
This code example uses [Devise](https://github.com/plataformatec/devise)'s
|
203
211
|
`current_user` and `user_signed_in?` methods to retrieve the user's timezone and set it for the duration of the request.
|
@@ -206,7 +214,7 @@ using some other method of authentication.
|
|
206
214
|
|
207
215
|
```ruby
|
208
216
|
class ApplicationController < ActionController::Base
|
209
|
-
|
217
|
+
before_action :set_time_zone, if: :user_signed_in?
|
210
218
|
|
211
219
|
private
|
212
220
|
|
@@ -226,7 +234,7 @@ config.time_zone = 'Central Time (US & Canada)'
|
|
226
234
|
### Beginning Of Week
|
227
235
|
|
228
236
|
You can also change the beginning day of the week by setting
|
229
|
-
`Date.beginning_of_week` in a `
|
237
|
+
`Date.beginning_of_week` in a `before_action` just like in the previous
|
230
238
|
example. If you want to set this globally, you can put this line in
|
231
239
|
`config/application.rb`:
|
232
240
|
|
@@ -234,18 +242,6 @@ example. If you want to set this globally, you can put this line in
|
|
234
242
|
config.beginning_of_week = :sunday
|
235
243
|
```
|
236
244
|
|
237
|
-
### Default Stylesheet
|
238
|
-
|
239
|
-
If you're using Bootstrap, the calendar should already have a border and
|
240
|
-
nice spacing for days.
|
241
|
-
|
242
|
-
Optionally, you can include the default stylesheet for the calendar in
|
243
|
-
your `app/assets/stylesheets/application.css` file:
|
244
|
-
|
245
|
-
```scss
|
246
|
-
*= require simple_calendar
|
247
|
-
```
|
248
|
-
|
249
245
|
### Custom CSS Classes
|
250
246
|
|
251
247
|
Setting classes on the table and elements are pretty easy.
|
@@ -65,6 +65,10 @@ module SimpleCalendar
|
|
65
65
|
view_context.url_for(@params.merge(start_date_param => date_range.first - 1.day))
|
66
66
|
end
|
67
67
|
|
68
|
+
def date_range
|
69
|
+
(start_date..(start_date + additional_days.days)).to_a
|
70
|
+
end
|
71
|
+
|
68
72
|
private
|
69
73
|
|
70
74
|
def partial_name
|
@@ -116,10 +120,6 @@ module SimpleCalendar
|
|
116
120
|
date_range.last
|
117
121
|
end
|
118
122
|
|
119
|
-
def date_range
|
120
|
-
(start_date..(start_date + additional_days.days)).to_a
|
121
|
-
end
|
122
|
-
|
123
123
|
def additional_days
|
124
124
|
options.fetch(:number_of_days, 4) - 1
|
125
125
|
end
|
@@ -1,10 +1,8 @@
|
|
1
1
|
module SimpleCalendar
|
2
2
|
class MonthCalendar < SimpleCalendar::Calendar
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
(start_date.beginning_of_month.beginning_of_week..start_date.end_of_month.end_of_week).to_a
|
7
|
-
end
|
3
|
+
def date_range
|
4
|
+
(start_date.beginning_of_month.beginning_of_week..start_date.end_of_month.end_of_week).to_a
|
5
|
+
end
|
8
6
|
end
|
9
7
|
end
|
10
8
|
|
@@ -13,13 +13,11 @@ module SimpleCalendar
|
|
13
13
|
week_number + number_of_weeks - 1
|
14
14
|
end
|
15
15
|
|
16
|
-
|
16
|
+
def date_range
|
17
|
+
starting = start_date.beginning_of_week
|
18
|
+
ending = (starting + (number_of_weeks - 1).weeks).end_of_week
|
17
19
|
|
18
|
-
|
19
|
-
|
20
|
-
ending = (starting + (number_of_weeks - 1).weeks).end_of_week
|
21
|
-
|
22
|
-
(starting..ending).to_a
|
23
|
-
end
|
20
|
+
(starting..ending).to_a
|
21
|
+
end
|
24
22
|
end
|
25
23
|
end
|
data/spec/calendar_spec.rb
CHANGED
@@ -1,23 +1,8 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'action_controller'
|
3
3
|
require 'simple_calendar/calendar'
|
4
|
-
|
5
|
-
|
6
|
-
attr_accessor :start_date, :start_date_param
|
7
|
-
|
8
|
-
def initialize(start_date=nil, options={})
|
9
|
-
@start_date = start_date
|
10
|
-
@start_date_param = options.fetch(:start_date_param, :start_date)
|
11
|
-
end
|
12
|
-
|
13
|
-
def params
|
14
|
-
if @start_date.present?
|
15
|
-
ActionController::Parameters.new({start_date_param => @start_date})
|
16
|
-
else
|
17
|
-
ActionController::Parameters.new
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
4
|
+
require_relative 'support/fake_event'
|
5
|
+
require_relative 'support/view_context'
|
21
6
|
|
22
7
|
describe SimpleCalendar::Calendar do
|
23
8
|
let(:calendar) { SimpleCalendar::Calendar.new(ViewContext.new) }
|
@@ -116,29 +101,76 @@ describe SimpleCalendar::Calendar do
|
|
116
101
|
describe 'current week class' do
|
117
102
|
it 'should have the current week' do
|
118
103
|
calendar = SimpleCalendar::Calendar.new(ViewContext.new)
|
119
|
-
week = calendar.
|
104
|
+
week = calendar.date_range.each_slice(7).to_a[0]
|
120
105
|
expect(calendar.send(:tr_classes_for, week)).to include('current-week')
|
121
106
|
end
|
122
107
|
|
123
108
|
it 'should not have the current week if it does not contain today' do
|
124
|
-
calendar = SimpleCalendar::MonthCalendar.new(ViewContext.new)
|
125
|
-
week = calendar.
|
109
|
+
calendar = SimpleCalendar::MonthCalendar.new(ViewContext.new(6.months.ago))
|
110
|
+
week = calendar.date_range.each_slice(7).to_a[0]
|
126
111
|
expect(calendar.send(:tr_classes_for, week)).to_not include('current-week')
|
127
112
|
end
|
128
113
|
end
|
129
114
|
|
130
|
-
it 'has a param that determines the start date of the calendar'
|
131
|
-
|
132
|
-
|
115
|
+
it 'has a param that determines the start date of the calendar' do
|
116
|
+
calendar = SimpleCalendar::Calendar.new(ViewContext.new)
|
117
|
+
|
118
|
+
rendering_variables = calendar.render[:locals]
|
119
|
+
|
120
|
+
expect(rendering_variables[:start_date]).not_to be_nil
|
121
|
+
end
|
122
|
+
|
123
|
+
it 'generates a default date if no start date is present' do
|
124
|
+
calendar = SimpleCalendar::Calendar.new(ViewContext.new)
|
125
|
+
|
126
|
+
calendar_start_date = calendar.render[:locals][:start_date]
|
127
|
+
|
128
|
+
expect(calendar_start_date).not_to be_nil
|
129
|
+
expect(calendar_start_date).to be_a(Date)
|
130
|
+
end
|
131
|
+
|
132
|
+
it 'has a range of dates' do
|
133
|
+
calendar = SimpleCalendar::Calendar.new(ViewContext.new)
|
134
|
+
|
135
|
+
calendar_date_range = calendar.date_range
|
136
|
+
|
137
|
+
expect(calendar_date_range).to be_an(Array)
|
138
|
+
expect(calendar_date_range).to all(be_an(Date))
|
139
|
+
end
|
133
140
|
|
134
141
|
it 'can split the range of dates into weeks'
|
135
142
|
it 'has a title'
|
136
143
|
it 'has a next view link'
|
137
144
|
it 'has a previous view link'
|
138
145
|
|
139
|
-
it 'accepts an array of events'
|
140
|
-
|
141
|
-
|
146
|
+
it 'accepts an array of events' do
|
147
|
+
first_event = FakeEvent.new('event1', Date.today)
|
148
|
+
second_event = FakeEvent.new('event2', Date.today + 1.day)
|
149
|
+
events = [first_event, second_event]
|
150
|
+
calendar = SimpleCalendar::Calendar.new(ViewContext.new, events: events)
|
142
151
|
|
152
|
+
calendar_sorted_events = calendar.render[:locals][:sorted_events]
|
153
|
+
|
154
|
+
expect(calendar_sorted_events.length).to eq(2)
|
155
|
+
end
|
156
|
+
|
157
|
+
it 'sorts the events' do
|
158
|
+
first_event = FakeEvent.new('event1', Date.today + 2.days)
|
159
|
+
second_event = FakeEvent.new('event2', Date.today + 1.day)
|
160
|
+
third_event = FakeEvent.new('event3', Date.today)
|
161
|
+
events = [first_event, third_event, second_event]
|
162
|
+
calendar = SimpleCalendar::Calendar.new(ViewContext.new, events: events)
|
163
|
+
|
164
|
+
calendar_sorted_events = calendar.render[:locals][:sorted_events]
|
165
|
+
first_key = calendar_sorted_events.keys[0]
|
166
|
+
second_key = calendar_sorted_events.keys[1]
|
167
|
+
third_key = calendar_sorted_events.keys[2]
|
168
|
+
|
169
|
+
expect(calendar_sorted_events[first_key][0]).to eq(third_event)
|
170
|
+
expect(calendar_sorted_events[second_key][0]).to eq(second_event)
|
171
|
+
expect(calendar_sorted_events[third_key][0]).to eq(first_event)
|
172
|
+
end
|
173
|
+
|
174
|
+
it 'yields the events for each day'
|
143
175
|
it "doesn't crash when an event has a nil start_time"
|
144
176
|
end
|
@@ -1,7 +1,25 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
+
require 'action_controller'
|
3
|
+
require 'simple_calendar/calendar'
|
2
4
|
require 'simple_calendar/month_calendar'
|
5
|
+
require 'support/view_context'
|
3
6
|
|
4
7
|
describe SimpleCalendar::MonthCalendar do
|
5
|
-
|
6
|
-
|
8
|
+
describe '#date_range' do
|
9
|
+
it 'renders a full calendar month' do
|
10
|
+
today = Date.today
|
11
|
+
calendar = SimpleCalendar::MonthCalendar.new(ViewContext.new, start_date: Date.today)
|
12
|
+
|
13
|
+
expect(calendar.date_range.min).to be < today.beginning_of_month
|
14
|
+
expect(calendar.date_range.max).to be > today.end_of_month
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'render the days of next and previous months on the edges of the calendar' do
|
18
|
+
month = Date.new(2018, 8, 1)
|
19
|
+
calendar = SimpleCalendar::MonthCalendar.new(ViewContext.new, start_date: month)
|
20
|
+
|
21
|
+
expect(calendar.date_range.first).to eq Date.new(2018, 7, 30)
|
22
|
+
expect(calendar.date_range.last).to eq Date.new(2018, 9, 2)
|
23
|
+
end
|
24
|
+
end
|
7
25
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class ViewContext
|
2
|
+
attr_accessor :start_date, :start_date_param
|
3
|
+
|
4
|
+
def initialize(start_date=nil, options={})
|
5
|
+
@start_date = start_date
|
6
|
+
@start_date_param = options.fetch(:start_date_param, :start_date)
|
7
|
+
end
|
8
|
+
|
9
|
+
def params
|
10
|
+
if @start_date.present?
|
11
|
+
ActionController::Parameters.new({start_date_param => @start_date})
|
12
|
+
else
|
13
|
+
ActionController::Parameters.new
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def render(options = {})
|
18
|
+
options
|
19
|
+
end
|
20
|
+
end
|
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.
|
4
|
+
version: 2.3.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:
|
11
|
+
date: 2018-08-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -71,6 +71,8 @@ files:
|
|
71
71
|
- spec/calendars/month_calendar_spec.rb
|
72
72
|
- spec/simple_calendar_spec.rb
|
73
73
|
- spec/spec_helper.rb
|
74
|
+
- spec/support/fake_event.rb
|
75
|
+
- spec/support/view_context.rb
|
74
76
|
- spec/views_generators_spec.rb
|
75
77
|
homepage: https://github.com/excid3/simple_calendar
|
76
78
|
licenses:
|
@@ -92,7 +94,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
92
94
|
version: '0'
|
93
95
|
requirements: []
|
94
96
|
rubyforge_project: simple_calendar
|
95
|
-
rubygems_version: 2.6
|
97
|
+
rubygems_version: 2.7.6
|
96
98
|
signing_key:
|
97
99
|
specification_version: 4
|
98
100
|
summary: A simple Rails calendar
|
@@ -101,4 +103,6 @@ test_files:
|
|
101
103
|
- spec/calendars/month_calendar_spec.rb
|
102
104
|
- spec/simple_calendar_spec.rb
|
103
105
|
- spec/spec_helper.rb
|
106
|
+
- spec/support/fake_event.rb
|
107
|
+
- spec/support/view_context.rb
|
104
108
|
- spec/views_generators_spec.rb
|