almanack 1.1.0 → 1.1.1

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 (43) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/.gitignore +12 -17
  4. data/.rspec +3 -0
  5. data/.travis.yml +2 -0
  6. data/CODE_OF_CONDUCT.md +74 -0
  7. data/Gemfile +1 -1
  8. data/Gemfile.lock +123 -0
  9. data/LICENSE.txt +17 -18
  10. data/README.md +22 -4
  11. data/Rakefile +16 -0
  12. data/almanack.gemspec +18 -8
  13. data/bin/console +14 -0
  14. data/bin/setup +8 -0
  15. data/bin/test +2 -0
  16. data/certs/aupajo.pem +25 -0
  17. data/{bin → exe}/almanack +0 -0
  18. data/lib/almanack/version.rb +1 -1
  19. data.tar.gz.sig +0 -0
  20. metadata +62 -59
  21. metadata.gz.sig +3 -0
  22. data/spec/almanack_spec.rb +0 -8
  23. data/spec/calendar_spec.rb +0 -71
  24. data/spec/configuration_spec.rb +0 -113
  25. data/spec/event_source/ical_feed_spec.rb +0 -40
  26. data/spec/event_source/meetup_group_spec.rb +0 -63
  27. data/spec/event_source/static_spec.rb +0 -41
  28. data/spec/event_spec.rb +0 -121
  29. data/spec/features/api_feature_spec.rb +0 -24
  30. data/spec/features/calendar_feature_spec.rb +0 -44
  31. data/spec/features/sass_features_spec.rb +0 -15
  32. data/spec/features/subscription_feature_spec.rb +0 -60
  33. data/spec/fixtures/responses/google_calendar.yml +0 -1896
  34. data/spec/fixtures/responses/meetup-without-location.yml +0 -11880
  35. data/spec/fixtures/responses/meetup.yml +0 -1437
  36. data/spec/fixtures/themes/sassy/stylesheets/imported.scss +0 -0
  37. data/spec/fixtures/themes/sassy/stylesheets/imports.scss +0 -1
  38. data/spec/representation/json_feed_spec.rb +0 -44
  39. data/spec/serialized_transformation_spec.rb +0 -45
  40. data/spec/spec_helper.rb +0 -21
  41. data/spec/support/event_matchers.rb +0 -54
  42. data/spec/support/server_support.rb +0 -10
  43. data/spec/support/time_comparison_matchers.rb +0 -14
metadata CHANGED
@@ -1,14 +1,40 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: almanack
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pete Nicholls
8
8
  autorequire:
9
- bindir: bin
10
- cert_chain: []
11
- date: 2019-04-13 00:00:00.000000000 Z
9
+ bindir: exe
10
+ cert_chain:
11
+ - |
12
+ -----BEGIN CERTIFICATE-----
13
+ MIIEMDCCApigAwIBAgIBATANBgkqhkiG9w0BAQsFADAhMR8wHQYDVQQDDBZhdXBh
14
+ am8vREM9Z21haWwvREM9Y29tMB4XDTE5MDUxMDIzNTU1MFoXDTIwMDUwOTIzNTU1
15
+ MFowITEfMB0GA1UEAwwWYXVwYWpvL0RDPWdtYWlsL0RDPWNvbTCCAaIwDQYJKoZI
16
+ hvcNAQEBBQADggGPADCCAYoCggGBALifHcsBTFzJr4CcSnTsc3X2hjTYHi3CEJYY
17
+ DZmcF4CyWYTzc1yw6D8JmekoZHphceFBaCmWDQdRap4yXuqT3RgW+EotBfkoWSY3
18
+ fp9KmjpvDK1g0uvt9jAUzAHVtWNOwwwSN6cs/L8/AxuvxMC1VJ798T82eruM39SB
19
+ Uq24isPXm8RMEZsChgRlksr4ZwbP7cTLTqecG4XTd+4kVXEQ5xIUrGxSSOfasckB
20
+ I5peEg8PP3DAwMIfh3bM6jyWu5f/WO8lwVOjqQIbsD8llxI2u3vsOwigXkfoe6bd
21
+ 3zAsmrmuoqv5WYhgkzz3Te55/Mp1grdDnHv3wWGdlU+1u5K9l54NnlZvMlRbKp+v
22
+ Hjta3M1sCnbNGH25Lasd3cxHd2S5Pf7Gx5vqyAUtDDqRS6lPNHqCVHm93kiR9Vs8
23
+ hI8a33sPpQlAxjpDSdbRyenbZVGDoMh7ckj5Jecl8OWpNtjbiuh8o3wcFMwuq2vg
24
+ pczlifnwXj/mFQrZ8JOVc7GM6I6D9QIDAQABo3MwcTAJBgNVHRMEAjAAMAsGA1Ud
25
+ DwQEAwIEsDAdBgNVHQ4EFgQUKjXKGxvH9cq/vGtrslK9I/Ym/GcwGwYDVR0RBBQw
26
+ EoEQYXVwYWpvQGdtYWlsLmNvbTAbBgNVHRIEFDASgRBhdXBham9AZ21haWwuY29t
27
+ MA0GCSqGSIb3DQEBCwUAA4IBgQB4zcSM0JA0El9w0T6/DHs0qtqqrzMw8vgde4WF
28
+ N3lYtLtOt9HHmbOfBuUSdZVcONDJ59S6Q6xkortWZob7LER/KZw2IBL07HrlvMyP
29
+ 2ZivUYvBJqK+osMH2/Efuu/53N1rRRvN7AH4Q+ghFtRESJ3+7yXbvc56dLLnLcxJ
30
+ 1mwWlpcraXFnhCyHZxqJWIqumnqhQ9QLyHL99oXJyxp1fyBBUW2/LqVg1bRZeXW8
31
+ HM3NveDgfHtxsN7/xokEqx9dJZLNIquuh/Mkf/feIfaIbd5yvMg5jI0uFaiyGBAn
32
+ 5oyawSfYQPqmfb+Kek8nEjX90Ul+HHpwHGCe0OfQ9Bo5lwRW5i9ph9iHwzUCIO7s
33
+ acolbc/fvwdOW4ly/TKaL/1YW/eS3Oi9Yn4RSYTsxSLfVLt2+M3A8Hk1vQFMW/23
34
+ dZpUW6Gfv2VtOtiN0Q3PjLK+TRjHtqYBjbxa771Msax3xs40e2cSVU/dO+OY5NmR
35
+ a61dVmZ1PIJiY+jyzJSb8ohHVx4=
36
+ -----END CERTIFICATE-----
37
+ date: 2019-05-11 00:00:00.000000000 Z
12
38
  dependencies:
13
39
  - !ruby/object:Gem::Dependency
14
40
  name: sinatra
@@ -150,6 +176,20 @@ dependencies:
150
176
  - - ">="
151
177
  - !ruby/object:Gem::Version
152
178
  version: '0'
179
+ - !ruby/object:Gem::Dependency
180
+ name: bundler
181
+ requirement: !ruby/object:Gem::Requirement
182
+ requirements:
183
+ - - "~>"
184
+ - !ruby/object:Gem::Version
185
+ version: '2.0'
186
+ type: :development
187
+ prerelease: false
188
+ version_requirements: !ruby/object:Gem::Requirement
189
+ requirements:
190
+ - - "~>"
191
+ - !ruby/object:Gem::Version
192
+ version: '2.0'
153
193
  - !ruby/object:Gem::Dependency
154
194
  name: pry
155
195
  requirement: !ruby/object:Gem::Requirement
@@ -168,30 +208,30 @@ dependencies:
168
208
  name: rake
169
209
  requirement: !ruby/object:Gem::Requirement
170
210
  requirements:
171
- - - ">="
211
+ - - "~>"
172
212
  - !ruby/object:Gem::Version
173
- version: '0'
213
+ version: '10.0'
174
214
  type: :development
175
215
  prerelease: false
176
216
  version_requirements: !ruby/object:Gem::Requirement
177
217
  requirements:
178
- - - ">="
218
+ - - "~>"
179
219
  - !ruby/object:Gem::Version
180
- version: '0'
220
+ version: '10.0'
181
221
  - !ruby/object:Gem::Dependency
182
222
  name: rspec
183
223
  requirement: !ruby/object:Gem::Requirement
184
224
  requirements:
185
- - - ">="
225
+ - - "~>"
186
226
  - !ruby/object:Gem::Version
187
- version: '0'
227
+ version: '3.0'
188
228
  type: :development
189
229
  prerelease: false
190
230
  version_requirements: !ruby/object:Gem::Requirement
191
231
  requirements:
192
- - - ">="
232
+ - - "~>"
193
233
  - !ruby/object:Gem::Version
194
- version: '0'
234
+ version: '3.0'
195
235
  - !ruby/object:Gem::Dependency
196
236
  name: rack-test
197
237
  requirement: !ruby/object:Gem::Requirement
@@ -264,21 +304,28 @@ dependencies:
264
304
  version: '0'
265
305
  description:
266
306
  email:
267
- - pete@metanation.com
307
+ - aupajo@gmail.com
268
308
  executables:
269
309
  - almanack
270
310
  extensions: []
271
311
  extra_rdoc_files: []
272
312
  files:
273
313
  - ".gitignore"
314
+ - ".rspec"
274
315
  - ".travis.yml"
316
+ - CODE_OF_CONDUCT.md
275
317
  - Gemfile
318
+ - Gemfile.lock
276
319
  - LICENSE.txt
277
320
  - README.md
278
321
  - Rakefile
279
322
  - almanack.gemspec
280
- - bin/almanack
323
+ - bin/console
324
+ - bin/setup
325
+ - bin/test
326
+ - certs/aupajo.pem
281
327
  - example.ru
328
+ - exe/almanack
282
329
  - lib/almanack.rb
283
330
  - lib/almanack/base.rb
284
331
  - lib/almanack/calendar.rb
@@ -304,28 +351,6 @@ files:
304
351
  - lib/almanack/themes/starter/views/events.erb
305
352
  - lib/almanack/themes/starter/views/layout.erb
306
353
  - lib/almanack/version.rb
307
- - spec/almanack_spec.rb
308
- - spec/calendar_spec.rb
309
- - spec/configuration_spec.rb
310
- - spec/event_source/ical_feed_spec.rb
311
- - spec/event_source/meetup_group_spec.rb
312
- - spec/event_source/static_spec.rb
313
- - spec/event_spec.rb
314
- - spec/features/api_feature_spec.rb
315
- - spec/features/calendar_feature_spec.rb
316
- - spec/features/sass_features_spec.rb
317
- - spec/features/subscription_feature_spec.rb
318
- - spec/fixtures/responses/google_calendar.yml
319
- - spec/fixtures/responses/meetup-without-location.yml
320
- - spec/fixtures/responses/meetup.yml
321
- - spec/fixtures/themes/sassy/stylesheets/imported.scss
322
- - spec/fixtures/themes/sassy/stylesheets/imports.scss
323
- - spec/representation/json_feed_spec.rb
324
- - spec/serialized_transformation_spec.rb
325
- - spec/spec_helper.rb
326
- - spec/support/event_matchers.rb
327
- - spec/support/server_support.rb
328
- - spec/support/time_comparison_matchers.rb
329
354
  - templates/gitignore
330
355
  - templates/new/Gemfile
331
356
  - templates/new/README.md.tt
@@ -353,26 +378,4 @@ rubygems_version: 3.0.3
353
378
  signing_key:
354
379
  specification_version: 4
355
380
  summary: Combined events calendar for Google Calendar, iCal, Meetup.com and friends.
356
- test_files:
357
- - spec/almanack_spec.rb
358
- - spec/calendar_spec.rb
359
- - spec/configuration_spec.rb
360
- - spec/event_source/ical_feed_spec.rb
361
- - spec/event_source/meetup_group_spec.rb
362
- - spec/event_source/static_spec.rb
363
- - spec/event_spec.rb
364
- - spec/features/api_feature_spec.rb
365
- - spec/features/calendar_feature_spec.rb
366
- - spec/features/sass_features_spec.rb
367
- - spec/features/subscription_feature_spec.rb
368
- - spec/fixtures/responses/google_calendar.yml
369
- - spec/fixtures/responses/meetup-without-location.yml
370
- - spec/fixtures/responses/meetup.yml
371
- - spec/fixtures/themes/sassy/stylesheets/imported.scss
372
- - spec/fixtures/themes/sassy/stylesheets/imports.scss
373
- - spec/representation/json_feed_spec.rb
374
- - spec/serialized_transformation_spec.rb
375
- - spec/spec_helper.rb
376
- - spec/support/event_matchers.rb
377
- - spec/support/server_support.rb
378
- - spec/support/time_comparison_matchers.rb
381
+ test_files: []
metadata.gz.sig ADDED
@@ -0,0 +1,3 @@
1
+ 8����D� ���.L�OK��Z�^ZX?���
2
+ ���+-�.�%-������TH�~��oS��G�K���4�n�9ʞ�
3
+ ~�h؜���u;��?'� y����jI�!�8(ɠ�f�ыFx�E6zm]���w�x�>�v��"}����h��e�L�u]�����"c�ނU�]�u��Ĩ9O�2���
@@ -1,8 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Almanack do
4
- describe "#config" do
5
- specify { expect(Almanack.config).to be_an_instance_of(Almanack::Configuration) }
6
- specify { expect { |probe| Almanack.config(&probe) }.to yield_control }
7
- end
8
- end
@@ -1,71 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Almanack
4
- describe Calendar do
5
-
6
- describe "#title" do
7
- it "delegates to the config's title" do
8
- config = Configuration.new
9
- config.title = "Discworld Holidays"
10
- calendar = Calendar.new(config)
11
- expect(calendar.title).to eq("Discworld Holidays")
12
- end
13
- end
14
-
15
- describe "#events" do
16
- it "calls events_between with now and the days lookahead" do
17
- config = Configuration.new
18
- calendar = Calendar.new(config)
19
-
20
- now = Time.now
21
- lookahead = 42
22
- future = now + lookahead * 24 * 60 * 60
23
-
24
- Timecop.freeze(now) do
25
- expect(calendar).to receive(:days_lookahead) { lookahead }
26
- expect(calendar).to receive(:events_between) do |date_range|
27
- expect(date_range.min).to eq_time(now)
28
- expect(date_range.max).to eq_time(future)
29
- :results
30
- end
31
-
32
- expect(calendar.events).to eq(:results)
33
- end
34
- end
35
- end
36
-
37
- describe "#events_between" do
38
- it "collects the event sources' events between two dates" do
39
- today = Time.now
40
- yesterday = today - 1
41
- tomorrow = today + 1
42
-
43
- config = Configuration.new
44
- config.add_events [
45
- { title: 'Today', start_time: today },
46
- { title: 'Yesterday', start_time: yesterday },
47
- { title: 'Tomorrow', start_time: tomorrow },
48
- ]
49
-
50
- calendar = Calendar.new(config)
51
-
52
- expect(calendar.events_between(today..tomorrow).map(&:title)).to eq(%w( Today Tomorrow ))
53
- end
54
- end
55
-
56
- describe "#days_lookahead" do
57
- it "delegates to the configuration's days_lookahead" do
58
- config = double(days_lookahead: :delegated)
59
- expect(Calendar.new(config).days_lookahead).to eq(:delegated)
60
- end
61
- end
62
-
63
- describe "#feed_lookahead" do
64
- it "delegates to the configuration's feed_lookahead" do
65
- config = double(feed_lookahead: :delegated)
66
- expect(Calendar.new(config).feed_lookahead).to eq(:delegated)
67
- end
68
- end
69
-
70
- end
71
- end
@@ -1,113 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Almanack
4
- describe Configuration do
5
-
6
- describe "#title" do
7
- it "can be set and accessed" do
8
- config = Configuration.new
9
- config.title = "Discworld Holidays"
10
- expect(config.title).to eq("Discworld Holidays")
11
- end
12
- end
13
-
14
- describe "#theme" do
15
- it "can be set and accessed" do
16
- config = Configuration.new
17
- config.theme = "custom"
18
- expect(config.theme).to eq("custom")
19
- end
20
- end
21
-
22
- describe "#theme_root" do
23
- specify "it raises an error if no theme can be found" do
24
- config = Configuration.new
25
- config.theme = "nonexistent"
26
- expect { config.theme_root }.to raise_error(Configuration::ThemeNotFound)
27
- end
28
- end
29
-
30
- describe "#days_lookahead" do
31
- specify { expect(Configuration.new.days_lookahead).to eq(30) }
32
-
33
- specify "it can be set" do
34
- config = Configuration.new
35
- config.days_lookahead = 365
36
- expect(config.days_lookahead).to eq(365)
37
- end
38
- end
39
-
40
- describe "#feed_lookahead" do
41
- specify { expect(Configuration.new.feed_lookahead).to eq(365) }
42
-
43
- specify "it can be set" do
44
- config = Configuration.new
45
- config.feed_lookahead = 30
46
- expect(config.feed_lookahead).to eq(30)
47
- end
48
- end
49
-
50
- describe "#add_events" do
51
- it "adds a simple event collection event source" do
52
- config = Configuration.new
53
- expect(config.event_sources.size).to eq(0)
54
-
55
- config.add_events [
56
- { title: "Hogswatch" }
57
- ]
58
-
59
- expect(config.event_sources.size).to eq(1)
60
- expect(config.event_sources.first).to be_an_instance_of(EventSource::Static)
61
- end
62
- end
63
-
64
- describe "#ical_feed" do
65
- it "adds an iCal feed event source" do
66
- config = Configuration.new
67
- expect(config.event_sources.size).to eq(0)
68
-
69
- config.add_ical_feed "https://www.google.com/calendar/ical/61s2re9bfk01abmla4d17tojuo%40group.calendar.google.com/public/basic.ics"
70
-
71
- expect(config.event_sources.size).to eq(1)
72
- expect(config.event_sources.first).to be_an_instance_of(EventSource::IcalFeed)
73
- end
74
- end
75
-
76
- describe "#meetup_group" do
77
- it "adds a Meetup group event source" do
78
- config = Configuration.new
79
- expect(config.event_sources.size).to eq(0)
80
-
81
- config.add_meetup_group(group_urlname: "CHC-JS", key: "secrettoken")
82
-
83
- expect(config.event_sources.size).to eq(1)
84
- expect(config.event_sources.first).to be_an_instance_of(EventSource::MeetupGroup)
85
- end
86
- end
87
-
88
- describe "#cache_expiry" do
89
- it "is 15 minutes by default" do
90
- expect(Configuration.new.cache_expiry).to eq(900)
91
- end
92
-
93
- it "can be set" do
94
- config = Configuration.new
95
- config.cache_expiry = 3600
96
- expect(config.cache_expiry).to eq(3600)
97
- end
98
- end
99
-
100
- describe "#cache_responses" do
101
- it "is enabled by default" do
102
- expect(Configuration.new.cache_responses).to be(false)
103
- end
104
-
105
- it "can be disabled" do
106
- config = Configuration.new
107
- config.cache_responses = true
108
- expect(config.cache_responses).to be(true)
109
- end
110
- end
111
-
112
- end
113
- end
@@ -1,40 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Almanack::EventSource
4
- describe IcalFeed do
5
- describe "#events_between" do
6
- it "returns a list of events" do
7
- feed = IcalFeed.new('https://www.google.com/calendar/ical/61s2re9bfk01abmla4d17tojuo%40group.calendar.google.com/public/basic.ics',
8
- connection: Faraday.new)
9
- events = nil
10
-
11
- Timecop.freeze(2014, 4, 3) do
12
- VCR.use_cassette('google_calendar') do
13
- from = Time.now
14
- to = from + 30 * 24 * 60 * 60
15
- events = feed.events_between(from..to)
16
- end
17
- end
18
-
19
- start_times = events.map(&:start_time)
20
-
21
- expect(events.length).to eq(15)
22
- expect(events).to all_have_properties(:title, :start_time, :end_time, :description, :location)
23
- end
24
- end
25
-
26
- describe "#serialized_between" do
27
- it "returns a hash containing attributes" do
28
- source = IcalFeed.new 'url'
29
-
30
- events = [double(serialized: :serialized_event)]
31
- expect(source).to receive(:events_between).with(:date_range) { events }
32
-
33
- expect(source.serialized_between(:date_range)).to eq({
34
- events: [:serialized_event]
35
- })
36
- end
37
- end
38
-
39
- end
40
- end
@@ -1,63 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Almanack::EventSource
4
- describe MeetupGroup do
5
- describe "#events_between" do
6
- it "returns a list of events" do
7
- feed = MeetupGroup.new(group_urlname: 'The-Foundation-Christchurch',
8
- key: 'secrettoken',
9
- connection: Faraday.new)
10
- events = nil
11
-
12
- Timecop.freeze(2014, 5, 24) do
13
- VCR.use_cassette('meetup') do
14
- from = Time.now
15
- to = from + 30 * 24 * 60 * 60
16
- events = feed.events_between(from..to)
17
- end
18
- end
19
-
20
- start_times = events.map(&:start_time)
21
-
22
- expect(events.length).to eq(5)
23
- expect(events).to all_have_properties(:title, :start_time, :end_time, :description, :location)
24
- end
25
-
26
- it "handles a missing location" do
27
- feed = MeetupGroup.new(group_urlname: 'adventurewellington',
28
- key: 'secrettoken',
29
- connection: Faraday.new)
30
-
31
- Timecop.freeze(2014, 7, 23) do
32
- VCR.use_cassette('meetup-without-location') do
33
- from = Time.now
34
- to = from + 30 * 24 * 60 * 60
35
- expect { feed.events_between(from..to) }.not_to raise_error
36
- end
37
- end
38
- end
39
- end
40
-
41
- describe "#serialized_between" do
42
- it "returns a hash containing attributes" do
43
- feed = MeetupGroup.new(group_urlname: 'The-Foundation-Christchurch',
44
- key: 'secrettoken',
45
- connection: Faraday.new)
46
- serialized = nil
47
-
48
- Timecop.freeze(2014, 5, 24) do
49
- VCR.use_cassette('meetup') do
50
- from = Time.now
51
- to = from + 30 * 24 * 60 * 60
52
- serialized = feed.serialized_between(from..to)
53
- end
54
- end
55
-
56
- expect(serialized[:events].length).to eq 5
57
- expect(serialized[:name]).to eq("The Foundation")
58
- expect(serialized[:url]).to eq("http://www.meetup.com/The-Foundation-Christchurch")
59
- end
60
- end
61
-
62
- end
63
- end
@@ -1,41 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Almanack::EventSource
4
- describe Static do
5
- let(:yesterday) { now - 1 }
6
- let(:now) { Time.now }
7
- let(:tomorrow) { now + 1 }
8
-
9
- around do |test|
10
- Timecop.freeze(now, &test)
11
- end
12
-
13
- describe "#events_between" do
14
- it "returns events between two dates" do
15
- source = Static.new [
16
- { title: 'Yesterday', start_time: yesterday },
17
- { title: 'Today', start_time: now },
18
- { title: 'Tomorrow', start_time: tomorrow }
19
- ]
20
-
21
- expect(source.events_between(yesterday..tomorrow).map(&:title)).to eq(%w( Yesterday Today Tomorrow ))
22
- expect(source.events_between(now..tomorrow).map(&:title)).to eq(%w( Today Tomorrow ))
23
- expect(source.events_between(yesterday..now).map(&:title)).to eq(%w( Yesterday Today ))
24
- end
25
- end
26
-
27
- describe "#serialized_between" do
28
- it "returns a hash containing attributes" do
29
- source = Static.new []
30
- date_range = yesterday..tomorrow
31
-
32
- events = [double(serialized: :serialized_event)]
33
- expect(source).to receive(:events_between).with(date_range) { events }
34
-
35
- expect(source.serialized_between(date_range)).to eq({
36
- events: [:serialized_event]
37
- })
38
- end
39
- end
40
- end
41
- end
data/spec/event_spec.rb DELETED
@@ -1,121 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Almanack
4
- describe Event do
5
-
6
- it "has a title" do
7
- event = Event.new(title: "Music with rocks in")
8
- expect(event.title).to eq("Music with rocks in")
9
- end
10
-
11
- it "has a start time" do
12
- event = Event.new(start_time: Time.new(2014, 01, 01))
13
- expect(event.start_time).to eq_time(Time.new(2014, 01, 01))
14
- end
15
-
16
- it "has a end time" do
17
- event = Event.new(end_time: Time.new(2014, 01, 02))
18
- expect(event.end_time).to eq_time(Time.new(2014, 01, 02))
19
- end
20
-
21
- it "has a location" do
22
- event = Event.new(location: "Street of Cunning Artificers")
23
- expect(event.location).to eq("Street of Cunning Artificers")
24
- end
25
-
26
- it "has a description" do
27
- event = Event.new(description: "Be there or be a rectangular thynge.")
28
- expect(event.description).to eq("Be there or be a rectangular thynge.")
29
- end
30
-
31
- describe "#formatted_date" do
32
- it "handles events without an end date" do
33
- event = Event.new(start_time: Time.parse("2014-07-06 06:24:00 UTC"))
34
- expect(event.formatted_date).to eq("July 6 2014 at 6:24am")
35
- end
36
-
37
- it "handles events with an end date on the same day" do
38
- event = Event.new(start_time: Time.parse("2014-07-06 06:24:00 UTC"),
39
- end_time: Time.parse("2014-07-06 13:20:00 UTC"))
40
- expect(event.formatted_date).to eq("July 6 2014 at 6:24am to 1:20pm")
41
- end
42
-
43
- it "handles events with an end date on a different day" do
44
- event = Event.new(start_time: Time.parse("2014-07-06 06:00:00 UTC"),
45
- end_time: Time.parse("2014-08-07 10:00:00 UTC"))
46
- expect(event.formatted_date).to eq("July 6 2014 at 6:00am to August 7 2014 at 10:00am")
47
- end
48
- end
49
-
50
- describe "#start_date" do
51
- it "returns start_time for legacy reasons" do
52
- event = Event.new(start_time: Time.new(2014, 01, 01))
53
- result = nil
54
- expect { result = event.start_date }.to output(/deprecated/i).to_stderr
55
- expect(result).to eq_time(Time.new(2014, 01, 01))
56
- end
57
-
58
- it "can be set via start_date for legacy reasons" do
59
- event = Event.new(start_date: Time.new(2014, 01, 01))
60
- result = nil
61
- expect { result = event.start_time }.to output(/deprecated/i).to_stderr
62
- expect(result).to eq_time(Time.new(2014, 01, 01))
63
- end
64
-
65
- it "raises an error when both start_date and start_time are given" do
66
- event = Event.new(start_date: Time.new(2014, 01, 01),
67
- start_time: Time.new(2014, 01, 02))
68
- expect { event.start_date }.to raise_error
69
- expect { event.start_time }.to raise_error
70
- end
71
- end
72
-
73
- describe "#end_date" do
74
- it "returns end_time for legacy reasons" do
75
- event = Event.new(end_time: Time.new(2014, 01, 01))
76
- result = nil
77
- expect { result = event.end_date }.to output(/deprecated/i).to_stderr
78
- expect(result).to eq_time(Time.new(2014, 01, 01))
79
- end
80
-
81
- it "can be set via end_date for legacy reasons" do
82
- event = Event.new(end_date: Time.new(2014, 01, 01))
83
- result = nil
84
- expect { result = event.end_time }.to output(/deprecated/i).to_stderr
85
- expect(result).to eq_time(Time.new(2014, 01, 01))
86
- end
87
-
88
- it "raises an error when both end_date and end_time are given" do
89
- event = Event.new(end_date: Time.new(2014, 01, 01),
90
- end_time: Time.new(2014, 01, 02))
91
- expect { event.end_date }.to raise_error
92
- expect { event.end_time }.to raise_error
93
- end
94
-
95
- it "does not output a deprecation warning when using end_time if neither end_date or end_time is set" do
96
- event = Event.new
97
- expect { event.end_time }.not_to output.to_stderr
98
- end
99
- end
100
-
101
- describe "#serialized" do
102
- it "returns attributes as a hash" do
103
- wed = Time.new(2014, 01, 01)
104
- thu = Time.new(2014, 01, 02)
105
-
106
- event = Event.new(title: "Hogswatch",
107
- start_time: wed,
108
- end_time: thu,
109
- arbitrary: true)
110
-
111
- expect(event.serialized).to eq({
112
- title: "Hogswatch",
113
- start_time: wed.iso8601,
114
- end_time: thu.iso8601,
115
- arbitrary: true
116
- })
117
- end
118
- end
119
-
120
- end
121
- end
@@ -1,24 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe "API", :feature do
4
- before { Almanack.reset! }
5
-
6
- describe "/feed.json" do
7
- it "has a JSON content-type" do
8
- get '/feed.json'
9
- expect(last_response['Content-Type']).to eq 'application/json'
10
- end
11
-
12
- it "returns the JSON feed" do
13
- allow(Almanack.calendar).to receive(:json_feed) { "feed" }
14
- get '/feed.json'
15
- expect(last_response.body).to eq("feed")
16
- end
17
-
18
- it "supports JSONP" do
19
- allow(Almanack.calendar).to receive(:json_feed) { "feed" }
20
- get '/feed.json?callback=custom'
21
- expect(last_response.body).to include("custom(feed)")
22
- end
23
- end
24
- end