almanack 1.1.5 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
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