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 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: []