meetupinator 0.5 → 0.6
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/lib/meetupinator/app.rb +1 -1
- data/lib/meetupinator/cli.rb +1 -1
- data/lib/meetupinator/meetup_api.rb +24 -16
- data/lib/meetupinator/version.rb +1 -1
- data/spec/lib/meetupinator/app_spec.rb +2 -2
- data/spec/lib/meetupinator/meetup_api_spec.rb +59 -25
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 650e65483735a0353ef8106235d686e9fdd448e6
|
4
|
+
data.tar.gz: 902cd77c38c9a1feafa23de2b52a0a7c4ce9c231
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b7831e74baec3cbb16e2cd1b37956266efad197147c5b19a056d6d45400a481363a221490eec263762fa74b8d48839ffcbceb889d8ab977d23a5f747412c662b
|
7
|
+
data.tar.gz: 9c2b72265e701802bea0cb90fc47ee5ed97dd51c87c295a90be2d14d724337816d43aca13316b68f872d74ebb5ccd748caeaa378c1f78818d7b9be2cd6cf2669
|
data/lib/meetupinator/app.rb
CHANGED
@@ -11,7 +11,7 @@ module Meetupinator
|
|
11
11
|
|
12
12
|
def run(args)
|
13
13
|
init(args)
|
14
|
-
events = @event_finder.extract_events(@group_names, @api, args[:
|
14
|
+
events = @event_finder.extract_events(@group_names, @api, args[:weeks])
|
15
15
|
@event_list_file_writer.write events, args[:output]
|
16
16
|
end
|
17
17
|
|
data/lib/meetupinator/cli.rb
CHANGED
@@ -25,7 +25,7 @@ module Meetupinator
|
|
25
25
|
default: 'output.csv',
|
26
26
|
desc: 'The name of the file you want to output. (default is ./output.csv)'
|
27
27
|
|
28
|
-
method_option :
|
28
|
+
method_option :weeks, aliases: '-w', required: false, type: :boolean
|
29
29
|
|
30
30
|
def run_app
|
31
31
|
Meetupinator::App.run(options)
|
@@ -11,11 +11,7 @@ module Meetupinator
|
|
11
11
|
@base_uri = 'api.meetup.com'
|
12
12
|
@groups_endpoint = '/2/groups'
|
13
13
|
@events_endpoint = '/2/events'
|
14
|
-
|
15
|
-
@api_key = retreive_key api_key
|
16
|
-
else
|
17
|
-
fail('no MEETUP_API_KEY provided')
|
18
|
-
end
|
14
|
+
@api_key = pick_which_api_key(api_key)
|
19
15
|
end
|
20
16
|
|
21
17
|
def get_meetup_id(group_url_name)
|
@@ -25,11 +21,11 @@ module Meetupinator
|
|
25
21
|
extract_meetup_id get_meetup_response(uri)
|
26
22
|
end
|
27
23
|
|
28
|
-
def get_upcoming_events(group_ids,
|
24
|
+
def get_upcoming_events(group_ids, weeks)
|
29
25
|
query_string = 'sign=true&photo-host=public&status=upcoming&key=' +
|
30
26
|
@api_key + '&group_id=' + group_ids.join(',')
|
31
27
|
|
32
|
-
query_string <<
|
28
|
+
query_string << "&time=,#{weeks}w" if weeks
|
33
29
|
|
34
30
|
uri = URI::HTTP.build(host: @base_uri, path: @events_endpoint,
|
35
31
|
query: query_string)
|
@@ -41,14 +37,17 @@ module Meetupinator
|
|
41
37
|
|
42
38
|
def get_meetup_response(uri)
|
43
39
|
response = Net::HTTP.get_response uri
|
44
|
-
|
45
|
-
msg = "Call to #{uri} failed: #{response.code} - #{response.message}"
|
46
|
-
msg << '. ' + response.body if response.class.body_permitted?
|
47
|
-
fail(msg)
|
48
|
-
end
|
40
|
+
fail_if_not_ok(response)
|
49
41
|
JSON.parse response.body
|
50
42
|
end
|
51
43
|
|
44
|
+
def fail_if_not_ok(response)
|
45
|
+
return unless response.code != '200'
|
46
|
+
msg = "Call to #{uri} failed: #{response.code} - #{response.message}"
|
47
|
+
msg << '. ' + response.body if response.class.body_permitted?
|
48
|
+
fail(msg)
|
49
|
+
end
|
50
|
+
|
52
51
|
def extract_meetup_id(response)
|
53
52
|
get_results(response)[0]['id']
|
54
53
|
end
|
@@ -57,17 +56,26 @@ module Meetupinator
|
|
57
56
|
response['results']
|
58
57
|
end
|
59
58
|
|
60
|
-
def
|
61
|
-
|
62
|
-
|
59
|
+
def pick_which_api_key(api_key)
|
60
|
+
key = api_key if key_valid?(api_key)
|
61
|
+
key = ENV['MEETUP_API_KEY'] if key_found_in_env? && key_invalid?(key)
|
62
|
+
key_invalid?(key) ? fail('no MEETUP_API_KEY provided') : key
|
63
63
|
end
|
64
64
|
|
65
65
|
def key_valid?(api_key)
|
66
66
|
!(api_key.nil? || api_key.empty?)
|
67
67
|
end
|
68
68
|
|
69
|
+
def key_invalid?(api_key)
|
70
|
+
!key_valid?(api_key)
|
71
|
+
end
|
72
|
+
|
73
|
+
def key_not_found_in_env?
|
74
|
+
!key_found_in_env?
|
75
|
+
end
|
76
|
+
|
69
77
|
def key_found_in_env?
|
70
|
-
!
|
78
|
+
(!ENV['MEETUP_API_KEY'].nil? && !ENV['MEETUP_API_KEY'].empty?)
|
71
79
|
end
|
72
80
|
end
|
73
81
|
end
|
data/lib/meetupinator/version.rb
CHANGED
@@ -16,7 +16,7 @@ describe Meetupinator::App do
|
|
16
16
|
meetup_api_key: 1234,
|
17
17
|
input: input_file,
|
18
18
|
output: output_file,
|
19
|
-
|
19
|
+
weeks: 1
|
20
20
|
}
|
21
21
|
end
|
22
22
|
|
@@ -26,7 +26,7 @@ describe Meetupinator::App do
|
|
26
26
|
expect(Meetupinator::InputFileReader).to receive(:group_names).with(input_file).and_return(group_names)
|
27
27
|
expect(Meetupinator::EventFinder).to receive(:new).and_return(event_finder)
|
28
28
|
expect(Meetupinator::EventListFileWriter).to receive(:new).and_return(file_writer)
|
29
|
-
expect(event_finder).to receive(:extract_events).with(group_names, meetup_api,
|
29
|
+
expect(event_finder).to receive(:extract_events).with(group_names, meetup_api, 1).and_return(events)
|
30
30
|
expect(file_writer).to receive(:write).with(events, output_file)
|
31
31
|
Meetupinator::App.run(args)
|
32
32
|
end
|
@@ -2,10 +2,35 @@ require 'spec_helper'
|
|
2
2
|
require 'vcr_setup'
|
3
3
|
require 'meetupinator/meetup_api'
|
4
4
|
|
5
|
+
# Query - Return something / change nothing
|
6
|
+
# Command - Return nothing / change something
|
7
|
+
# Test the interface not the implementation.
|
8
|
+
# eg
|
9
|
+
# Incoming Query Message --> [Test Object].return_balance
|
10
|
+
# Test incoming query messages, by making assertions about what they send back.
|
11
|
+
|
12
|
+
# Incoming Command Message --> [Test Object].set_something(y)
|
13
|
+
# Test incoming command messages by making assertions about the
|
14
|
+
# direct public side effects.
|
15
|
+
|
16
|
+
# Do not test private method calls, do not make assertions about their result.
|
17
|
+
# Don't expect to send/call them.
|
18
|
+
# (Break rule if it saves $$ during development)
|
19
|
+
|
20
|
+
# Do not test outgoing query messages.
|
21
|
+
# Do not make assertions about their result
|
22
|
+
# Do not expect them to send.
|
23
|
+
|
24
|
+
# If a message has no visible side effects the sender should not test it.
|
25
|
+
|
26
|
+
# Expect to send outgoing command messages.
|
27
|
+
# Break rule if side effects are stable and cheap.
|
28
|
+
|
5
29
|
describe Meetupinator::MeetupAPI do
|
6
30
|
let(:group_id) { 980_007_2 }
|
31
|
+
let(:env_api_key) { '1234' } # this key is coupled to the vcr tests
|
7
32
|
|
8
|
-
describe '#new' do
|
33
|
+
describe '#new' do # Command
|
9
34
|
context 'when there is no Meetup API key in the environment' do
|
10
35
|
before { ENV['MEETUP_API_KEY'] = nil }
|
11
36
|
|
@@ -21,9 +46,8 @@ describe Meetupinator::MeetupAPI do
|
|
21
46
|
end
|
22
47
|
|
23
48
|
context 'when there is a Meetup API key in the environment' do
|
24
|
-
let(:env_api_key) { '1234' }
|
25
|
-
|
26
49
|
before { ENV['MEETUP_API_KEY'] = env_api_key }
|
50
|
+
after { ENV['MEETUP_API_KEY'] = nil }
|
27
51
|
|
28
52
|
it 'uses the API given in the env if no API key is explicitly given' do
|
29
53
|
expect(subject.api_key).to eq(env_api_key)
|
@@ -37,40 +61,50 @@ describe Meetupinator::MeetupAPI do
|
|
37
61
|
end
|
38
62
|
end
|
39
63
|
|
40
|
-
describe '#get_meetup_id' do
|
41
|
-
|
64
|
+
describe '#get_meetup_id' do # Query
|
65
|
+
context 'when there is a Meetup API key in the environment' do
|
66
|
+
before { ENV['MEETUP_API_KEY'] = env_api_key }
|
67
|
+
after { ENV['MEETUP_API_KEY'] = nil }
|
68
|
+
|
69
|
+
let(:group_url_name) { 'Ruby-On-Rails-Oceania-Melbourne' }
|
42
70
|
|
43
|
-
|
44
|
-
|
45
|
-
|
71
|
+
it 'returns the id of the meetup' do
|
72
|
+
VCR.use_cassette('groups') do
|
73
|
+
expect(subject.get_meetup_id(group_url_name)).to eq(group_id)
|
74
|
+
end
|
46
75
|
end
|
47
76
|
end
|
48
77
|
end
|
49
78
|
|
50
|
-
describe '#get_upcoming_events' do
|
51
|
-
context '
|
52
|
-
|
79
|
+
describe '#get_upcoming_events' do # Query
|
80
|
+
context 'when there is a Meetup API key in the environment' do
|
81
|
+
before { ENV['MEETUP_API_KEY'] = env_api_key }
|
82
|
+
after { ENV['MEETUP_API_KEY'] = nil }
|
83
|
+
|
84
|
+
context 'single group' do
|
85
|
+
let(:expected_number_of_events) { 6 }
|
53
86
|
|
54
|
-
|
55
|
-
|
56
|
-
|
87
|
+
it 'returns all the upcoming events' do
|
88
|
+
VCR.use_cassette('events_single_group') do
|
89
|
+
expect(subject.get_upcoming_events([group_id], nil).size).to eq(expected_number_of_events)
|
90
|
+
end
|
57
91
|
end
|
58
|
-
end
|
59
92
|
|
60
|
-
|
61
|
-
|
62
|
-
|
93
|
+
it 'returns all the upcoming events for the next week' do
|
94
|
+
VCR.use_cassette('events_next_week') do
|
95
|
+
expect(subject.get_upcoming_events([group_id], 1).size).to eq(1)
|
96
|
+
end
|
63
97
|
end
|
64
98
|
end
|
65
|
-
end
|
66
99
|
|
67
|
-
|
68
|
-
|
69
|
-
|
100
|
+
context 'multiple groups' do
|
101
|
+
let(:meetup_ids) { [group_id, 183_050_22] }
|
102
|
+
let(:expected_number_of_events) { 73 }
|
70
103
|
|
71
|
-
|
72
|
-
|
73
|
-
|
104
|
+
it 'returns all the upcoming events' do
|
105
|
+
VCR.use_cassette('events_multiple_groups') do
|
106
|
+
expect(subject.get_upcoming_events([meetup_ids], nil).size).to eq(expected_number_of_events)
|
107
|
+
end
|
74
108
|
end
|
75
109
|
end
|
76
110
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: meetupinator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0.
|
4
|
+
version: '0.6'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joe Sustaric
|
@@ -153,7 +153,10 @@ dependencies:
|
|
153
153
|
- !ruby/object:Gem::Version
|
154
154
|
version: '0.19'
|
155
155
|
description: Tool to generate weekly meetup emails using the Meetup API
|
156
|
-
email:
|
156
|
+
email:
|
157
|
+
- joe8307@gmail.com
|
158
|
+
- jfulton@thoughtworks.com
|
159
|
+
- me@charleskorn.com
|
157
160
|
executables:
|
158
161
|
- meetupinator
|
159
162
|
extensions: []
|