groupme-api 0.5.0 → 0.6.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
- SHA256:
3
- metadata.gz: 570e2a4a593dbf2b1230e6613444e778caa494e9a0c04675632e9b0eafab7ed9
4
- data.tar.gz: 2432e495fa8a324c8b6da9edd65d2a8cf2ed7ee315a0561e563fd11981a129be
2
+ SHA1:
3
+ metadata.gz: ac0f859ba8eaddcf6b9acf212bfef6e20915aab5
4
+ data.tar.gz: d5c1743b72c49eede05915faf033c9206e7c7e91
5
5
  SHA512:
6
- metadata.gz: 3fe24ea9b1550413b7f3da932e134bfc45056c436a3068ae1158adf04a3b9b5f0048c9ea5ded585d541c406ea768595fee2375fc10d2d849bd17ef4ea565f108
7
- data.tar.gz: 5c7f672ccafb76b8d36ba8f0d880272b35786d5f770e9be9a1897487394e9a0f0a4d9f39274fda11957b6199bbeb3d8e3d542429d065740eb0c24f18194c714f
6
+ metadata.gz: 9ea0417528eab7af4f850faca868e6fd2d734749b335e326aeca49fdacfe9d8b2a15217c9e71aeb8748654b94b256fc60f660359a2c27f6f9d8902b32360baac
7
+ data.tar.gz: fbb9f36f96b639106b7a2e818f4be8916941c240555a1b51b2615b5036a08cf7884d11007db686f2206886a8146c0ebcd62404d63946791d6f3be4109b63a2e6
@@ -0,0 +1 @@
1
+ 2.3.0
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- groupme-api (0.5.0)
4
+ groupme-api (0.6.0)
5
5
  httpclient (~> 2.8)
6
6
 
7
7
  GEM
@@ -17,6 +17,7 @@ Gem::Specification.new do |spec|
17
17
 
18
18
  spec.files = `git ls-files`.split("\n")
19
19
  spec.require_path = 'lib'
20
+ spec.required_ruby_version = Gem::Requirement.new('>= 2.3.0')
20
21
 
21
22
  spec.add_dependency 'httpclient', '~> 2.8'
22
23
 
@@ -4,7 +4,13 @@ require 'httpclient'
4
4
  require 'json'
5
5
 
6
6
  require 'groupme/client'
7
+ require 'groupme/configuration'
8
+ require 'groupme/errors'
9
+ require 'groupme/group'
7
10
  require 'groupme/version'
8
11
 
9
12
  module GroupMe
13
+ def self.reset!
14
+ @configuration = Configuration.new
15
+ end
10
16
  end
@@ -5,13 +5,15 @@ module GroupMe
5
5
  API_BASE_URL = 'https://api.groupme.com/v3/'
6
6
  API_DEFAULT_HEADER = { 'Content-Type': 'application/json' }.freeze
7
7
 
8
- def initialize(access_token:)
9
- @access_token = access_token
8
+ attr_accessor :access_token
9
+
10
+ def initialize(args = {})
11
+ @access_token = args[:access_token] || GroupMe.configuration.access_token
10
12
  @client = HTTPClient.new(base_url: API_BASE_URL, default_header: API_DEFAULT_HEADER)
11
13
  end
12
14
 
13
- def request(method, path, query: {}, body: {})
14
- response = @client.request(method, path, { token: @access_token }.merge(query), body.to_json)
15
+ def request(method, path, query: {}, body: nil)
16
+ response = @client.request(method, path, { token: @access_token }.merge(query), body&.to_json)
15
17
  [parse_response_body(response), response.status]
16
18
  end
17
19
 
@@ -35,4 +37,12 @@ module GroupMe
35
37
  JSON.parse(response.body, symbolize_names: true).fetch(:response)
36
38
  end
37
39
  end
40
+
41
+ def self.client
42
+ @client ||= Client.new
43
+ end
44
+
45
+ def self.client=(client)
46
+ @client = client
47
+ end
38
48
  end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module GroupMe
4
+ class Configuration
5
+ API_MAX_GROUPS_PER_PAGE = 500
6
+
7
+ attr_writer :access_token, :groups_per_page
8
+
9
+ def access_token
10
+ raise MissingConfigurationError unless @access_token
11
+
12
+ @access_token
13
+ end
14
+
15
+ def groups_per_page
16
+ @groups_per_page || API_MAX_GROUPS_PER_PAGE
17
+ end
18
+ end
19
+
20
+ def self.configuration
21
+ @configuration ||= Configuration.new
22
+ end
23
+
24
+ def self.configuration=(configuration)
25
+ @configuration = configuration
26
+ end
27
+
28
+ def self.configure
29
+ yield(configuration)
30
+ end
31
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module GroupMe
4
+ class MissingConfigurationError < StandardError; end
5
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module GroupMe
4
+ class Group
5
+ def self.all
6
+ GroupMe.client.get('groups', omit: :memberships, per_page: GroupMe.configuration.groups_per_page).first
7
+ end
8
+ end
9
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module GroupMe
4
- VERSION = '0.5.0'
4
+ VERSION = '0.6.0'
5
5
  end
@@ -1,26 +1,36 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  RSpec.describe GroupMe::Client do
4
- let(:client) { GroupMe::Client.new(access_token: ACCESS_TOKEN) }
5
- let(:base_url) { 'https://api.groupme.com/v3/' }
4
+ include_context :with_default_groupme_configuration
5
+
6
+ let(:client) { GroupMe::Client.new(access_token: access_token) }
7
+ let(:base_url) { GroupMe::Client::API_BASE_URL }
6
8
 
7
9
  describe '.new' do
8
- context 'when :access_token argument is missing' do
9
- it 'should raise an error' do
10
- expect { GroupMe::Client.new }.to raise_error(ArgumentError)
10
+ context 'when :access_token is not supplied' do
11
+ let(:client) { GroupMe::Client.new }
12
+
13
+ it 'should use configured :access_token' do
14
+ expect(client.access_token).to eq(GroupMe.configuration.access_token)
11
15
  end
12
16
  end
13
17
 
14
- context 'when :access_token is set' do
15
- it 'should not raise an error' do
16
- expect { GroupMe::Client.new(access_token: ACCESS_TOKEN) }.not_to raise_error
18
+ context 'when :access_token is supplied' do
19
+ let(:client) { GroupMe::Client.new(access_token: new_access_token) }
20
+
21
+ it 'should not use configured :access_token' do
22
+ expect(client.access_token).not_to eq(GroupMe.configuration.access_token)
23
+ end
24
+
25
+ it 'should use the supplied :access_token' do
26
+ expect(client.access_token).to eq(new_access_token)
17
27
  end
18
28
  end
19
29
  end
20
30
 
21
31
  describe '#request' do
22
- let(:stubbed_data) { { id: 1, name: 'Group' } }
23
- let(:stubbed_response_body) { { response: stubbed_data }.to_json }
32
+ let(:stubbed_data) { { id: 1, name: 'Group' } }
33
+ let(:stubbed_response_body) { { response: stubbed_data }.to_json }
24
34
  let(:stubbed_response_status) { 200 }
25
35
 
26
36
  before do
@@ -30,31 +40,31 @@ RSpec.describe GroupMe::Client do
30
40
  )
31
41
  end
32
42
 
33
- context 'when there are no parameters' do
43
+ context 'when no parameters are supplied' do
34
44
  it 'should send the correct HTTP request' do
35
45
  client.request(:get, 'groups')
36
46
 
37
- expect(WebMock).to have_requested(:get, "#{base_url}groups").with(query: { token: ACCESS_TOKEN })
47
+ expect(WebMock).to have_requested(:get, "#{base_url}groups").with(query: { token: access_token })
38
48
  end
39
49
  end
40
50
 
41
- context 'when there are query parameters' do
51
+ context 'when query parameters are supplied' do
42
52
  it 'should send the correct HTTP request' do
43
53
  client.request(:get, 'groups', query: { per_page: 1 })
44
54
 
45
- expect(WebMock).to have_requested(:get, "#{base_url}groups").with(query: { token: ACCESS_TOKEN, per_page: 1 })
55
+ expect(WebMock).to have_requested(:get, "#{base_url}groups").with(query: { token: access_token, per_page: 1 })
46
56
  end
47
57
  end
48
58
 
49
- context 'when there are body parameters' do
59
+ context 'when body parameters are supplied' do
50
60
  it 'should send the correct HTTP request' do
51
61
  client.request(:post, 'groups', body: { name: 'Group' })
52
62
 
53
- expect(WebMock).to have_requested(:post, "#{base_url}groups?token=#{ACCESS_TOKEN}").with(body: { name: 'Group' }.to_json)
63
+ expect(WebMock).to have_requested(:post, "#{base_url}groups?token=#{access_token}").with(body: { name: 'Group' }.to_json)
54
64
  end
55
65
  end
56
66
 
57
- context 'when response is successful' do
67
+ context 'when the response is successful' do
58
68
  let(:stubbed_response_body) { { response: stubbed_data }.to_json }
59
69
  let(:stubbed_response_status) { 201 }
60
70
 
@@ -71,7 +81,7 @@ RSpec.describe GroupMe::Client do
71
81
  end
72
82
  end
73
83
 
74
- context 'when response is unsuccessful' do
84
+ context 'when the response is unsuccessful' do
75
85
  let(:stubbed_response_body) { '' }
76
86
  let(:stubbed_response_status) { [404, 'Not Found'] }
77
87
 
@@ -161,3 +171,24 @@ RSpec.describe GroupMe::Client do
161
171
  end
162
172
  end
163
173
  end
174
+
175
+ RSpec.describe GroupMe do
176
+ include_context :with_default_groupme_configuration
177
+
178
+ describe '.client' do
179
+ it 'should return a GroupMe::Client object' do
180
+ expect(GroupMe.client).to be_a_instance_of(GroupMe::Client)
181
+ end
182
+ end
183
+
184
+ describe '.client=' do
185
+ it 'should set a new default client' do
186
+ old_client = GroupMe.client
187
+ new_client = GroupMe::Client.new
188
+ GroupMe.client = new_client
189
+
190
+ expect(GroupMe.client).not_to eq(old_client)
191
+ expect(GroupMe.client).to eq(new_client)
192
+ end
193
+ end
194
+ end
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ RSpec.describe GroupMe::Configuration do
6
+ before(:each) { GroupMe.reset! }
7
+
8
+ describe '#access_token' do
9
+ context 'when :access_token is not configured' do
10
+ it 'should raise an error' do
11
+ expect { GroupMe.configuration.access_token }.to raise_error(GroupMe::MissingConfigurationError)
12
+ end
13
+ end
14
+
15
+ context 'when :access_token is configured' do
16
+ include_context :with_default_groupme_configuration
17
+
18
+ it 'should return the access_token' do
19
+ expect(GroupMe.configuration.access_token).to eq(access_token)
20
+ end
21
+ end
22
+ end
23
+ end
24
+
25
+ RSpec.describe GroupMe do
26
+ describe '.configuration' do
27
+ it 'should return a GroupMe::Configuration object' do
28
+ expect(GroupMe.configuration).to be_an_instance_of(GroupMe::Configuration)
29
+ end
30
+ end
31
+
32
+ describe '.configuration=' do
33
+ it 'should set a new default configuration' do
34
+ old_configuration = GroupMe.configuration
35
+ new_configuration = GroupMe::Configuration.new
36
+ GroupMe.configuration = new_configuration
37
+
38
+ expect(GroupMe.configuration).not_to eq(old_configuration)
39
+ expect(GroupMe.configuration).to eq(new_configuration)
40
+ end
41
+ end
42
+
43
+ describe 'configure' do
44
+ it 'should set configuration attributes' do
45
+ GroupMe.configure { |config| config.access_token = access_token }
46
+
47
+ expect(GroupMe.configuration.access_token).to eq(access_token)
48
+ end
49
+ end
50
+
51
+ describe 'reset!' do
52
+ it 'should reset the configuration' do
53
+ old_configuration = GroupMe.configuration
54
+ GroupMe.reset!
55
+
56
+ expect(GroupMe.configuration).not_to eq(old_configuration)
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe GroupMe::Group do
4
+ include_context :with_default_groupme_configuration
5
+
6
+ let(:base_url) { GroupMe::Client::API_BASE_URL }
7
+
8
+ describe '#all' do
9
+ it 'should send the correct HTTP request' do
10
+ _groups = GroupMe::Group.all
11
+
12
+ expect(WebMock).to have_requested(:get, "#{base_url}groups").with(query: { token: access_token, omit: :memberships, per_page: GroupMe.configuration.groups_per_page })
13
+ end
14
+ end
15
+ end
@@ -2,5 +2,19 @@
2
2
 
3
3
  require 'securerandom'
4
4
 
5
- # TEST_ACCOUNT_ACCESS_TOKEN = ''
6
- ACCESS_TOKEN = defined?(TEST_ACCOUNT_ACCESS_TOKEN) ? TEST_ACCOUNT_ACCESS_TOKEN : SecureRandom.base64(30).tr('+', '0')
5
+ RSpec.shared_context :with_defined_access_token do
6
+ let(:access_token) { 'cQOvtsbxn7mHCS6yRimKuKHwXCGtqRwcU4E4NToe' }
7
+ let(:new_access_token) { SecureRandom.base64(30).tr('+', '0') }
8
+ end
9
+
10
+ RSpec.shared_context :with_default_groupme_configuration do
11
+ before(:each) do
12
+ GroupMe.configure do |config|
13
+ config.access_token = 'cQOvtsbxn7mHCS6yRimKuKHwXCGtqRwcU4E4NToe'
14
+ end
15
+ end
16
+ end
17
+
18
+ RSpec.configure do |config|
19
+ config.include_context :with_defined_access_token
20
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: groupme-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kinnell Shah
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-11-05 00:00:00.000000000 Z
11
+ date: 2019-10-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httpclient
@@ -145,6 +145,7 @@ files:
145
145
  - ".gitignore"
146
146
  - ".rspec"
147
147
  - ".rubocop.yml"
148
+ - ".ruby-version"
148
149
  - ".travis.yml"
149
150
  - Gemfile
150
151
  - Gemfile.lock
@@ -156,9 +157,14 @@ files:
156
157
  - lib/groupme-api.rb
157
158
  - lib/groupme.rb
158
159
  - lib/groupme/client.rb
160
+ - lib/groupme/configuration.rb
161
+ - lib/groupme/errors.rb
162
+ - lib/groupme/group.rb
159
163
  - lib/groupme/version.rb
160
164
  - lib/groupme_api.rb
161
165
  - spec/groupme/client_spec.rb
166
+ - spec/groupme/configuration_spec.rb
167
+ - spec/groupme/group_spec.rb
162
168
  - spec/groupme_spec.rb
163
169
  - spec/spec_helper.rb
164
170
  - spec/support/groupme.rb
@@ -175,7 +181,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
175
181
  requirements:
176
182
  - - ">="
177
183
  - !ruby/object:Gem::Version
178
- version: '0'
184
+ version: 2.3.0
179
185
  required_rubygems_version: !ruby/object:Gem::Requirement
180
186
  requirements:
181
187
  - - ">="
@@ -183,7 +189,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
183
189
  version: '0'
184
190
  requirements: []
185
191
  rubyforge_project:
186
- rubygems_version: 2.7.3
192
+ rubygems_version: 2.5.1
187
193
  signing_key:
188
194
  specification_version: 4
189
195
  summary: A Ruby wrapper for GroupMe REST API (v3)