meetupinator 0.5 → 0.6
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|