almanack 1.1.5 → 1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fd1677c0cdd5da474a3d19e6e2b883e023a7723f3ccea179ac2098cb75773569
4
- data.tar.gz: 4c9e72b26356e55d3a7e8cd0ada49264dc79762066eaf2b119343ba6bc2db1d9
3
+ metadata.gz: 496b67de75b42507bf08fec988d5eaccf26d4dfa7fee4232bdf16daf058f5b33
4
+ data.tar.gz: 7c9a6be3cbe1cb94be79ecccbf5ba8f31c3f017433de545502b5770d3d594260
5
5
  SHA512:
6
- metadata.gz: f1887ce7f38753cabeca433265b85d5e455b2e48321db6d8625f94c1d266b7990cd8041bf3445baf5a0424e5f3ade8366db50eb4b55a3c2fceeb3a43d84b9092
7
- data.tar.gz: c1cc81a1d3bbe45aab4073cee57695fba7658cd6ed24efc072b1f507c9fd0d7a5cbdea0b13ae3dc0f21412dd3ba7179bab2d054cefe51ed7c64f028ac744925d
6
+ metadata.gz: 91bce6c336dee09a859086bff2a11d1a6083918db0fff67c109690da8ea4fb4fad9ff1dc7396f7e38ab21671716f7b1d97628b4ad1d0c3a09059d79cac859b18
7
+ data.tar.gz: 00bf2e37d9c258ecbeec1b02db98b70a639f6f2a7f031270510351dc83dd0703b4bb4db72b882817347112560560c606c123aaaf8ceff9d45b005c59e9860ae2
checksums.yaml.gz.sig CHANGED
@@ -1,3 +1 @@
1
- ne6��ɳ(v��o
2
- E(����8��x���G����+�S�� p����}Q�4��r��A.\a ����juqXOwb��
3
- ��9� ������훟�B��ODI���S���� \�i������ԇު��T}�4����2��)h�����1.���3C�¤�ܼ�9K��A��-&\��,�8T%Q�M�̑�-E�G�d�>�Ѫ�З��^���8�@5&j5��R�wS]��Z����#���y,�!�!�`O���d63X�z`�H�A:ŋ�����z��&�@N��`-�]iD�iIc�B�'<q�8�.�a� #�Pn� K��*qˤ�A�Zh��4���y#uo�:�0���g4��4Ԛ�-]��/L��G�
1
+ y2��9"�F!uP@��r�<���7KPt�T,��X�oYh>Ģ5qAVV�R�����#��J���H�^��v�={��T.`/�.��K����7�����?cًa&�x�\�lK�}=��t�G��Su=��.F�R�&N�xs�� a�=Gz��Z���iZ��Z��C�{r�v�,!�9�s.[?�g6}���\�`PN��C��7�-Me�+��y����N�&SB@ޣ(W���K�ߓ��8Rǒs���B,�?D�5@m4��G�BnX8U������I���m�X�\ۦ�z9X׾���O�BB�Э��e��8�'�3�J�ӜZ��~��� ��J���I�i-,���4�: ���ʵ
data.tar.gz.sig CHANGED
Binary file
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- almanack (1.1.5)
4
+ almanack (1.2.0)
5
5
  activesupport
6
6
  addressable
7
7
  faraday
data/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
  [![Gem Version](https://badge.fury.io/rb/almanack.svg)](http://badge.fury.io/rb/almanack)
5
5
  [![Deploy](https://www.herokucdn.com/deploy/button.svg)](https://heroku.com/deploy?template=https://github.com/Aupajo/almanack/tree/heroku-button)
6
6
 
7
- A calendar that combines events from different sources (such as Google Calendar, Meetup.com, and iCal feeds), and can be hosted for free on [Heroku](http://heroku.com).
7
+ A calendar that combines events from different sources (such as Google Calendar and iCal feeds), and can be hosted for free on [Heroku](http://heroku.com).
8
8
 
9
9
  ![Sinatra GCal example](http://i.imgur.com/odgyR.png)
10
10
 
@@ -14,7 +14,7 @@ See a demo running at [http://chch-events.herokuapp.com/](http://chch-events.her
14
14
 
15
15
  * Aggregate multiple calendars together into one stream
16
16
  * Supports iCal feeds (incuding Google Calendars)
17
- * Supports Meetup.com groups
17
+ * ~Supports Meetup.com groups~ (see https://github.com/Aupajo/almanack/issues/36)
18
18
  * Just supply a hash to create any arbitrary event
19
19
  * Supports being freely hosted on Heroku
20
20
  * 100% customisable themes with Sass and CoffeeScript support
@@ -67,7 +67,7 @@ By default, your calendar will run on http://localhost:9292.
67
67
 
68
68
  ## Configuration
69
69
 
70
- See examples inside `config.ru` for iCal feeds, Meetup.com, or static events.
70
+ See examples inside `config.ru` for iCal feeds, or static events.
71
71
 
72
72
  ```ruby
73
73
  Almanack.config do |config|
@@ -81,14 +81,9 @@ Almanack.config do |config|
81
81
 
82
82
  # Include a downloaded iCal
83
83
  config.add_ical Pathname('downloaded-calendar.ical')
84
-
85
- # Include Meetup events
86
- config.add_meetup_group group_urlname: 'Christchurch-Ruby-Group', key: 'mysecretkey'
87
84
  end
88
85
  ```
89
86
 
90
- **Note:** You'll need your [Meetup.com API key](https://secure.meetup.com/meetup_api/key) to use Meetup.
91
-
92
87
  ### Time zone
93
88
 
94
89
  To set your time zone, set your system's `TZ` environment variable.
data/almanack.gemspec CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |spec|
8
8
  spec.version = Almanack::VERSION
9
9
  spec.authors = ["Pete Nicholls"]
10
10
  spec.email = ["aupajo@gmail.com"]
11
- spec.summary = %q{Combined events calendar for Google Calendar, iCal, Meetup.com and friends.}
11
+ spec.summary = %q{Combined events calendar for Google Calendar, iCal, and friends.}
12
12
  spec.homepage = Almanack::HOMEPAGE
13
13
  spec.license = "MIT"
14
14
 
data/app.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "Almanack",
3
3
  "description": "Combine iCal, Google Calendar, and Meetup.com events into a single calendar with a public website and calendar subscription feed.",
4
4
  "repository": "https://github.com/Aupajo/almanack",
5
- "keywords": ["calendar", "events", "meetup", "gcal" , "ical", "web", "feed", "rss"],
5
+ "keywords": ["calendar", "events", "gcal" , "ical", "web", "feed", "rss"],
6
6
  "buildpacks": [
7
7
  { "url": "heroku/ruby" }
8
8
  ],
@@ -20,16 +20,8 @@
20
20
  "description": "An optional list of iCal feed URLs separated by spaces. For Google Calendars, look for the “address in iCal format” URLs in the calendar's settings.",
21
21
  "required": false
22
22
  },
23
- "MEETUP_COM_GROUPS": {
24
- "description": "An optional list of Meetup.com groups to subscribe to, separated by spaces. A group can be the full URL (e.g. `https://www.meetup.com/Christchurch-Ruby-Group/`) or the URL slug (e.g. `Christchurch-Ruby-Group`). Requires MEETUP_COM_API_KEYS also be set.",
25
- "required": false
26
- },
27
- "MEETUP_COM_API_KEYS": {
28
- "description": "If retrieving events from Meetup.com, you need to specify one or more API keys to use. You can find your API key at https://secure.meetup.com/meetup_api/key. If you have a lot of groups, use multiple API keys to avoid hitting API request limits separated by spaces.",
29
- "required": false
30
- },
31
23
  "CACHE_DURATION_IN_SECONDS": {
32
- "description": "How long to keep calendar events cached for. Set to `0` to always show an up-to-date calendar, but be wary of API request limits when using Meetup.com. Default is 15 minutes.",
24
+ "description": "How long to keep calendar events cached for. Set to `0` to always show an up-to-date calendar.",
33
25
  "value": "900"
34
26
  },
35
27
  "DAYS_LOOKAHEAD": {
@@ -0,0 +1 @@
1
+ 3d267c6f652968bf5184b57bcf50dd7898b07f5ca7fbfcc5ee1c3b12eb705670
@@ -0,0 +1 @@
1
+ 16041fb8e3be78094936c8740eddd05568135f51dcde0fc991f2818d81235464d53bc0fc7e474e5af327777a6dc464fea05d0e6993b3baace9bd382ec696b039
data/lib/almanack.rb CHANGED
@@ -17,6 +17,5 @@ require "almanack/representation/ical_feed"
17
17
  require "almanack/representation/json_feed"
18
18
  require "almanack/event"
19
19
  require "almanack/event_source/static"
20
- require "almanack/event_source/meetup_group"
21
20
  require "almanack/event_source/ical"
22
21
  require "almanack/event_source/ical_feed"
@@ -67,7 +67,7 @@ module Almanack
67
67
  end
68
68
 
69
69
  def add_meetup_group(options)
70
- add_event_source EventSource::MeetupGroup.new(options.merge(connection: connection))
70
+ fail "Unfortunately, due to Meetup's changes to their API, this integration is no longer supported. See https://github.com/Aupajo/almanack/issues/36 for more information."
71
71
  end
72
72
 
73
73
  def cache_store
@@ -1,6 +1,6 @@
1
1
  module Almanack
2
2
  CODENAME = "Garlick"
3
- VERSION = "1.1.5"
3
+ VERSION = "1.2.0"
4
4
  HOMEPAGE = "https://github.com/Aupajo/almanack"
5
5
  ISSUES = "https://github.com/Aupajo/almanack/issues"
6
6
  end
@@ -9,10 +9,6 @@ Almanack.config do |c|
9
9
  c.cache_responses = true
10
10
  c.cache_expiry = 900 # seconds
11
11
 
12
- # Your group's URL name is what you'd find at www.meetup.com/Your-Group-URL-Name/
13
- # You can get a Meetup API key from https://secure.meetup.com/meetup_api/key
14
- # c.add_meetup_group group_urlname: 'Christchurch-Ruby-Group', key: 'mysecretkey'
15
-
16
12
  # For a Google Calendar, find the "iCal" link under your Calendar's settings
17
13
  # c.add_ical_feed 'https://example.com/basic.ics'
18
14
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: almanack
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.5
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pete Nicholls
@@ -347,6 +347,8 @@ files:
347
347
  - checksums/almanack-1.1.3.gem.sha512
348
348
  - checksums/almanack-1.1.3.rc1.gem.sha256
349
349
  - checksums/almanack-1.1.3.rc1.gem.sha512
350
+ - checksums/almanack-1.1.5.gem.sha256
351
+ - checksums/almanack-1.1.5.gem.sha512
350
352
  - example.ru
351
353
  - exe/almanack
352
354
  - lib/almanack.rb
@@ -357,7 +359,6 @@ files:
357
359
  - lib/almanack/event.rb
358
360
  - lib/almanack/event_source/ical.rb
359
361
  - lib/almanack/event_source/ical_feed.rb
360
- - lib/almanack/event_source/meetup_group.rb
361
362
  - lib/almanack/event_source/static.rb
362
363
  - lib/almanack/representation/built_ical_event.rb
363
364
  - lib/almanack/representation/ical_feed.rb
@@ -402,5 +403,5 @@ requirements: []
402
403
  rubygems_version: 3.0.3
403
404
  signing_key:
404
405
  specification_version: 4
405
- summary: Combined events calendar for Google Calendar, iCal, Meetup.com and friends.
406
+ summary: Combined events calendar for Google Calendar, iCal, and friends.
406
407
  test_files: []
metadata.gz.sig CHANGED
Binary file
@@ -1,129 +0,0 @@
1
- module Almanack
2
- module EventSource
3
- class MeetupGroup
4
- def initialize(options = {})
5
- warn "Meetup have disabled support for API keys. Read more at https://github.com/Aupajo/almanack/issues/36"
6
- @request_options = options
7
- @group_properties = {}
8
- end
9
-
10
- def events_between(date_range)
11
- events.select do |event|
12
- event.start_time >= date_range.min && event.start_time <= date_range.max
13
- end
14
- end
15
-
16
- def serialized_between(date_range)
17
- # TODO `events` must be called before @group_properties is accessed
18
- serialized_events = events_between(date_range).map(&:serialized)
19
- @group_properties.merge(events: serialized_events)
20
- end
21
-
22
- private
23
-
24
- def events
25
- results = MeetupAPIRequest.new(@request_options.clone).results
26
- record_group_details_from results
27
- results.map { |result| event_from(result) }
28
- end
29
-
30
- def record_group_details_from(results)
31
- first_result = results.first
32
- return if !first_result
33
-
34
- group = first_result['group']
35
- return if !group
36
-
37
- @group_properties = {
38
- name: group['name'],
39
- url: "http://www.meetup.com/" + group['urlname']
40
- }
41
- end
42
-
43
- def event_from(result)
44
- # 3 hours, as recommended by Meetup.com if duration isn't present
45
- default_duration_in_ms = 3 * 60 * 60 * 1000
46
-
47
- event_name = [result['group']['name'], result['name']].compact.join(': ')
48
- start_time = Time.at(result['time'] / 1000)
49
- duration_in_secs = (result['duration'] || default_duration_in_ms) / 1000
50
- end_time = start_time + duration_in_secs
51
-
52
- Event.new(
53
- title: event_name,
54
- start_time: start_time,
55
- end_time: end_time,
56
- description: result['description'],
57
- location: location_from_venue(result['venue']),
58
- url: result['event_url']
59
- )
60
- end
61
-
62
- def location_from_venue(venue)
63
- return nil if venue.nil?
64
-
65
- %w{ name address_1 address_2 address_3 city state country }.map do |attr|
66
- venue[attr]
67
- end.compact.join(', ')
68
- end
69
- end
70
-
71
- class MeetupAPIError < StandardError
72
- end
73
-
74
- class MeetupAPIException < Exception
75
- end
76
-
77
- class MeetupAPIRequest
78
- REQUIRED_OPTIONS = [:group_domain, :group_urlname, :group_id]
79
-
80
- attr_reader :options, :connection
81
-
82
- def initialize(options = {})
83
- @connection = options.delete(:connection)
84
- @options = options
85
- end
86
-
87
- def results
88
- response['results']
89
- end
90
-
91
- def uri
92
- if !options.has_key?(:key)
93
- raise MeetupAPIException, 'Cannot form valid URI, missing :key option'
94
- end
95
-
96
- if (options.keys & REQUIRED_OPTIONS).empty?
97
- raise MeetupAPIException, "Cannot form valid URI, missing one of: #{REQUIRED_OPTIONS}"
98
- end
99
-
100
- endpoint = "https://api.meetup.com/2/events"
101
-
102
- Addressable::URI.parse(endpoint).tap do |uri|
103
- uri.query_values = options
104
- end
105
- end
106
-
107
- def response
108
- response = connection.get(uri)
109
- data = JSON.parse(response.body)
110
-
111
- if data['problem']
112
- raise MeetupAPIError, error_message_from(data)
113
- end
114
-
115
- data
116
- end
117
-
118
- def error_message_from(data)
119
- message = [data['problem'], data['details']].compact.join(' - ')
120
-
121
- if message.include?('not authorized')
122
- message << ' ⚠️ See https://github.com/Aupajo/almanack/issues/36 for more details'
123
- end
124
-
125
- message
126
- end
127
- end
128
- end
129
- end