simple_calendar 2.1.5 → 2.2.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 +4 -4
- data/.travis.yml +2 -4
- data/README.md +28 -14
- data/lib/simple_calendar/calendar.rb +23 -3
- data/lib/simple_calendar/version.rb +1 -1
- data/simple_calendar.gemspec +0 -1
- data/spec/calendar_spec.rb +26 -0
- metadata +3 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8eae1b807d337ea3455ee73edfc5f72347d76f03
|
4
|
+
data.tar.gz: 31892462fa9549830caacf088c2bf5e29257e3be
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6b1f60f31bc3f24e674bfabb1b29a4b8976fb9e0750b8cdb4a74ce443e6ebcce13903c25aa9591bfc9682895b534c077c66283af42f84f23f876ea9b05aeba2e
|
7
|
+
data.tar.gz: b5ee956d4ee2764ddee313684693f36fecaa5bf4120d98d69d7b4a6995845d3334bdc11ecb5d92478b3bb9afaffa7dc0c2f2a5a77bdd048dd52a66a1df59a898
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -20,8 +20,9 @@ Installation
|
|
20
20
|
------------
|
21
21
|
|
22
22
|
Just add this into your Gemfile followed by a bundle install:
|
23
|
-
|
24
|
-
|
23
|
+
```ruby
|
24
|
+
gem "simple_calendar", "~> 2.0"
|
25
|
+
```
|
25
26
|
|
26
27
|
Usage
|
27
28
|
-----
|
@@ -68,6 +69,18 @@ You can generate calendars of any length by passing in the number of days you wa
|
|
68
69
|
|
69
70
|
Setting `number_of_days` is optional and defaults to 4.
|
70
71
|
|
72
|
+
### Custom Partial
|
73
|
+
|
74
|
+
You can set a different partial name for calendars by passing the partial path.
|
75
|
+
|
76
|
+
```erb
|
77
|
+
<%= calendar partial: 'products/calendar' do |date| %>
|
78
|
+
<%= date %>
|
79
|
+
<% end %>
|
80
|
+
```
|
81
|
+
|
82
|
+
Setting `number_of_days` is optional and defaults to 4.
|
83
|
+
|
71
84
|
## Rendering Events
|
72
85
|
|
73
86
|
What's a calendar without events in it? There are two simple steps for creating
|
@@ -79,13 +92,18 @@ model called Meeting, but you can add this to any model or Ruby object.
|
|
79
92
|
Here's an example model:
|
80
93
|
|
81
94
|
```bash
|
82
|
-
|
95
|
+
# single day events
|
96
|
+
$ rails g scaffold Meeting name start_time:datetime
|
97
|
+
|
98
|
+
# multi-day events
|
99
|
+
$ rails g scaffold Meeting name start_time:datetime end_time:datetime
|
83
100
|
```
|
84
101
|
|
85
|
-
By default it uses `start_time` as the attribute name.
|
102
|
+
By default it uses `start_time` as the attribute name. Optionally the `end_time`
|
103
|
+
attribute can be used which enables multi-day event rendering.
|
86
104
|
|
87
|
-
**If you'd like to use another attribute other than start_time, just
|
88
|
-
pass it in as the `attribute`
|
105
|
+
**If you'd like to use another attribute other than start_time or end_time, just
|
106
|
+
pass it in as the `attribute` or `end_attribute` options respectively**
|
89
107
|
|
90
108
|
```erb
|
91
109
|
<%= month_calendar(attribute: :starts_at) do |date| %>
|
@@ -96,7 +114,7 @@ pass it in as the `attribute` option**
|
|
96
114
|
```ruby
|
97
115
|
class MyModel
|
98
116
|
## Other code related to your model lives here
|
99
|
-
|
117
|
+
|
100
118
|
def start_time
|
101
119
|
self.my_related_model.start ##Where 'start' is a attribute of type 'Date' accessible through MyModel's relationship
|
102
120
|
end
|
@@ -146,7 +164,7 @@ You can customize the layouts for each of the calendars by running the
|
|
146
164
|
generators for simple_calendar:
|
147
165
|
|
148
166
|
```bash
|
149
|
-
rails g simple_calendar:views
|
167
|
+
$ rails g simple_calendar:views
|
150
168
|
```
|
151
169
|
|
152
170
|
This will generate a folder in app/views called simple_calendar that you
|
@@ -210,9 +228,6 @@ your `app/assets/stylesheets/application.css` file:
|
|
210
228
|
|
211
229
|
Setting classes on the table and elements are pretty easy.
|
212
230
|
|
213
|
-
You can simply run the following command to install the calendar views
|
214
|
-
and then add your own helpers to the table, rows, headers, and days.
|
215
|
-
|
216
231
|
simple_calendar comes with a handful of useful classes for each day in
|
217
232
|
the calendar that you can use:
|
218
233
|
|
@@ -292,14 +307,14 @@ it will correspond to the name of the template it will try to render.
|
|
292
307
|
The main method you'll need to implement is the `date_range` so that
|
293
308
|
your calendar can have a custom length.
|
294
309
|
|
295
|
-
```
|
310
|
+
```ruby
|
296
311
|
class SimpleCalendar::BusinessWeekCalendar
|
297
312
|
private
|
298
313
|
|
299
314
|
def date_range
|
300
315
|
beginning = start_date.beginning_of_week + 1.day
|
301
316
|
ending = start_date.end_of_week - 1.day
|
302
|
-
(beginning..ending)
|
317
|
+
(beginning..ending).to_a
|
303
318
|
end
|
304
319
|
end
|
305
320
|
```
|
@@ -338,7 +353,6 @@ With modifications as appropriate.
|
|
338
353
|
|
339
354
|
## TODO
|
340
355
|
|
341
|
-
- Multi-day events
|
342
356
|
- Rspec tests for Calendar
|
343
357
|
- Rspec tests for MonthCalendar
|
344
358
|
- Rspec tests for WeekCalendar
|
@@ -56,18 +56,34 @@ module SimpleCalendar
|
|
56
56
|
private
|
57
57
|
|
58
58
|
def partial_name
|
59
|
-
self.class.name.underscore
|
59
|
+
@options[:partial] || self.class.name.underscore
|
60
60
|
end
|
61
61
|
|
62
62
|
def attribute
|
63
63
|
options.fetch(:attribute, :start_time).to_sym
|
64
64
|
end
|
65
65
|
|
66
|
+
def end_attribute
|
67
|
+
options.fetch(:end_attribute, :end_time).to_sym
|
68
|
+
end
|
69
|
+
|
66
70
|
def sorted_events
|
67
71
|
events = options.fetch(:events, []).sort_by(&attribute)
|
68
|
-
|
69
72
|
scheduled = events.reject { |e| e.send(attribute).nil? }
|
70
|
-
scheduled
|
73
|
+
group_events_by_date(scheduled)
|
74
|
+
end
|
75
|
+
|
76
|
+
def group_events_by_date(events)
|
77
|
+
events_grouped_by_date = Hash.new {|h,k| h[k] = [] }
|
78
|
+
|
79
|
+
events.each do |event|
|
80
|
+
event_start_date = event.send(attribute).to_date
|
81
|
+
event_end_date = (event.respond_to?(end_attribute) && !event.respond_to?(end_attribute).nil?) ? event.send(end_attribute).to_date : event_start_date
|
82
|
+
(event_start_date..event_end_date).to_a.each do |enumerated_date|
|
83
|
+
events_grouped_by_date[enumerated_date] << event
|
84
|
+
end
|
85
|
+
end
|
86
|
+
events_grouped_by_date
|
71
87
|
end
|
72
88
|
|
73
89
|
def start_date
|
@@ -78,6 +94,10 @@ module SimpleCalendar
|
|
78
94
|
end
|
79
95
|
end
|
80
96
|
|
97
|
+
def end_date
|
98
|
+
date_range.last
|
99
|
+
end
|
100
|
+
|
81
101
|
def date_range
|
82
102
|
(start_date..(start_date + additional_days.days)).to_a
|
83
103
|
end
|
data/simple_calendar.gemspec
CHANGED
@@ -16,7 +16,6 @@ Gem::Specification.new do |s|
|
|
16
16
|
|
17
17
|
s.files = `git ls-files`.split("\n")
|
18
18
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
|
-
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
19
|
s.require_paths = ["lib"]
|
21
20
|
|
22
21
|
s.add_dependency 'rails', '>= 3.0'
|
data/spec/calendar_spec.rb
CHANGED
@@ -33,6 +33,16 @@ describe SimpleCalendar::Calendar do
|
|
33
33
|
it 'allows you to override the default attribute' do
|
34
34
|
expect(SimpleCalendar::Calendar.new(ViewContext.new, attribute: :starts_at).send(:attribute)).to eq(:starts_at)
|
35
35
|
end
|
36
|
+
|
37
|
+
it "set a default when `partial` option isn't present" do
|
38
|
+
expect(SimpleCalendar::Calendar.new(ViewContext.new).send(:partial_name)).to eq('simple_calendar/calendar')
|
39
|
+
expect(SimpleCalendar::MonthCalendar.new(ViewContext.new).send(:partial_name)).to eq('simple_calendar/month_calendar')
|
40
|
+
expect(SimpleCalendar::WeekCalendar.new(ViewContext.new).send(:partial_name)).to eq('simple_calendar/week_calendar')
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'allows to override the default partial' do
|
44
|
+
expect(SimpleCalendar::Calendar.new(ViewContext.new, partial: 'simple_calendar/custom_calendar').send(:partial_name)).to eq('simple_calendar/custom_calendar')
|
45
|
+
end
|
36
46
|
end
|
37
47
|
|
38
48
|
describe "#sorted_events" do
|
@@ -52,6 +62,22 @@ describe SimpleCalendar::Calendar do
|
|
52
62
|
expect(sorted_events[tomorrow]).to eq([event3])
|
53
63
|
end
|
54
64
|
|
65
|
+
it 'converts an array of multi-day events to a hash sorted by days' do
|
66
|
+
today, tomorrow = Date.today, Date.tomorrow
|
67
|
+
|
68
|
+
event1 = double(start_time: today.at_midnight, end_time: tomorrow.at_midnight)
|
69
|
+
event2 = double(start_time: today.at_noon)
|
70
|
+
event3 = double(start_time: tomorrow.at_noon)
|
71
|
+
|
72
|
+
events = [event1, event2, event3].shuffle
|
73
|
+
calendar = SimpleCalendar::Calendar.new(ViewContext.new, events: events)
|
74
|
+
|
75
|
+
sorted_events = calendar.send(:sorted_events)
|
76
|
+
|
77
|
+
expect(sorted_events[today]).to eq([event1, event2])
|
78
|
+
expect(sorted_events[tomorrow]).to eq([event1, event3])
|
79
|
+
end
|
80
|
+
|
55
81
|
it 'handles events without a start time' do
|
56
82
|
event = double(start_time: nil)
|
57
83
|
calendar = SimpleCalendar::Calendar.new(ViewContext.new, events: [event])
|
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.2.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-
|
11
|
+
date: 2016-09-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -41,9 +41,7 @@ dependencies:
|
|
41
41
|
description: A simple Rails 3 and Rails 4 calendar
|
42
42
|
email:
|
43
43
|
- excid3@gmail.com
|
44
|
-
executables:
|
45
|
-
- console
|
46
|
-
- setup
|
44
|
+
executables: []
|
47
45
|
extensions: []
|
48
46
|
extra_rdoc_files: []
|
49
47
|
files:
|