meetupinator 0.5 → 0.6

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
  SHA1:
3
- metadata.gz: 807cb86ec05130fef1235a08122c6a80f7475699
4
- data.tar.gz: 532b7089fc9b8c295dbb33ef5390a8cdcdc0ca49
3
+ metadata.gz: 650e65483735a0353ef8106235d686e9fdd448e6
4
+ data.tar.gz: 902cd77c38c9a1feafa23de2b52a0a7c4ce9c231
5
5
  SHA512:
6
- metadata.gz: 6ef813072e22cd0c8f9818730a6b6e7e8d186a638d1b369498d79de625104aa1094377dca543ca874537a1ebab1a896a24925977c4e034d2faa55f5b80db3bef
7
- data.tar.gz: f311fc3c830f103787d7c72bde26a2681787bd524838621a6172a5af2a1a3baa31260d7e489e85bd01c4013faa7151bb348e13ceaa8e90c460c86c4aa394097f
6
+ metadata.gz: b7831e74baec3cbb16e2cd1b37956266efad197147c5b19a056d6d45400a481363a221490eec263762fa74b8d48839ffcbceb889d8ab977d23a5f747412c662b
7
+ data.tar.gz: 9c2b72265e701802bea0cb90fc47ee5ed97dd51c87c295a90be2d14d724337816d43aca13316b68f872d74ebb5ccd748caeaa378c1f78818d7b9be2cd6cf2669
@@ -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[:week])
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
 
@@ -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 :week, aliases: '-w', required: false, type: :boolean
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
- if key_valid?(api_key) || key_found_in_env?
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, week)
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 << '&time=,1w' if week
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
- if response.code != '200'
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 retreive_key(api_key)
61
- return api_key if key_valid? api_key
62
- return ENV['MEETUP_API_KEY'] if key_found_in_env?
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
- !(ENV['MEETUP_API_KEY'].nil? || ENV['MEETUP_API_KEY'].empty?)
78
+ (!ENV['MEETUP_API_KEY'].nil? && !ENV['MEETUP_API_KEY'].empty?)
71
79
  end
72
80
  end
73
81
  end
@@ -1,4 +1,4 @@
1
1
  # Module Comment
2
2
  module Meetupinator
3
- VERSION = '0.5'
3
+ VERSION = '0.6'
4
4
  end
@@ -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
- week: false
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, false).and_return(events)
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
- let(:group_url_name) { 'Ruby-On-Rails-Oceania-Melbourne' }
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
- it 'returns the id of the meetup' do
44
- VCR.use_cassette('groups') do
45
- expect(subject.get_meetup_id(group_url_name)).to eq(group_id)
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 'single group' do
52
- let(:expected_number_of_events) { 6 }
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
- it 'returns all the upcoming events' do
55
- VCR.use_cassette('events_single_group') do
56
- expect(subject.get_upcoming_events([group_id], nil).size).to eq(expected_number_of_events)
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
- it 'returns all the upcoming events for the next week' do
61
- VCR.use_cassette('events_next_week') do
62
- expect(subject.get_upcoming_events([group_id], true).size).to eq(1)
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
- context 'multiple groups' do
68
- let(:meetup_ids) { [group_id, 183_050_22] }
69
- let(:expected_number_of_events) { 73 }
100
+ context 'multiple groups' do
101
+ let(:meetup_ids) { [group_id, 183_050_22] }
102
+ let(:expected_number_of_events) { 73 }
70
103
 
71
- it 'returns all the upcoming events' do
72
- VCR.use_cassette('events_multiple_groups') do
73
- expect(subject.get_upcoming_events([meetup_ids], nil).size).to eq(expected_number_of_events)
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.5'
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: joe8307@gmail.com
156
+ email:
157
+ - joe8307@gmail.com
158
+ - jfulton@thoughtworks.com
159
+ - me@charleskorn.com
157
160
  executables:
158
161
  - meetupinator
159
162
  extensions: []