groupme-api 0.4.1 → 0.5.0
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/Gemfile.lock +7 -39
- data/Guardfile +1 -2
- data/LICENSE +21 -0
- data/README.md +10 -8
- data/groupme-api.gemspec +1 -2
- data/lib/groupme-api.rb +3 -0
- data/lib/groupme.rb +1 -18
- data/lib/groupme/client.rb +38 -0
- data/lib/groupme/version.rb +1 -1
- data/lib/groupme_api.rb +3 -0
- data/spec/groupme/client_spec.rb +163 -0
- data/spec/spec_helper.rb +4 -15
- data/spec/support/groupme.rb +6 -0
- data/spec/support/vcr.rb +11 -0
- data/spec/support/webmock.rb +5 -0
- metadata +13 -31
- data/lib/groupme/configuration.rb +0 -7
- data/lib/groupme/group.rb +0 -8
- data/lib/groupme/request.rb +0 -38
- data/lib/groupme/response.rb +0 -21
- data/spec/fixtures/groups/index.json +0 -674
- data/spec/fixtures/groups/new.json +0 -43
- data/spec/fixtures/groups/show.json +0 -42
- data/spec/groupme/configuration_spec.rb +0 -27
- data/spec/groupme/group_spec.rb +0 -6
- data/spec/groupme/request_spec.rb +0 -130
- data/spec/groupme/response_spec.rb +0 -64
- data/spec/support/fake_groupme.rb +0 -28
@@ -1,43 +0,0 @@
|
|
1
|
-
{
|
2
|
-
"id": "44835902",
|
3
|
-
"group_id": "44835902",
|
4
|
-
"name": "Family Group",
|
5
|
-
"phone_number": "+1 6193780416",
|
6
|
-
"type": "private",
|
7
|
-
"description": null,
|
8
|
-
"image_url": null,
|
9
|
-
"creator_user_id": "3193012",
|
10
|
-
"created_at": 1538721837,
|
11
|
-
"updated_at": 1538721837,
|
12
|
-
"office_mode": false,
|
13
|
-
"share_url": null,
|
14
|
-
"share_qr_code_url": null,
|
15
|
-
"members": [
|
16
|
-
{
|
17
|
-
"id": "384075821",
|
18
|
-
"user_id": "3193012",
|
19
|
-
"nickname": "Test Account",
|
20
|
-
"muted": false,
|
21
|
-
"image_url": null,
|
22
|
-
"autokicked": false,
|
23
|
-
"roles": [
|
24
|
-
"admin",
|
25
|
-
"owner"
|
26
|
-
],
|
27
|
-
"name": "Test Account"
|
28
|
-
}
|
29
|
-
],
|
30
|
-
"max_memberships": 500,
|
31
|
-
"max_members": 500,
|
32
|
-
"messages": {
|
33
|
-
"count": 0,
|
34
|
-
"last_message_id": null,
|
35
|
-
"last_message_created_at": null,
|
36
|
-
"preview": {
|
37
|
-
"nickname": null,
|
38
|
-
"text": null,
|
39
|
-
"image_url": null,
|
40
|
-
"attachments": []
|
41
|
-
}
|
42
|
-
}
|
43
|
-
}
|
@@ -1,42 +0,0 @@
|
|
1
|
-
{
|
2
|
-
"id": "44835935",
|
3
|
-
"group_id": "44835935",
|
4
|
-
"name": "Gaming Group",
|
5
|
-
"phone_number": "+1 3363554142",
|
6
|
-
"type": "private",
|
7
|
-
"description": "",
|
8
|
-
"image_url": null,
|
9
|
-
"creator_user_id": "3193012",
|
10
|
-
"created_at": 1538722180,
|
11
|
-
"updated_at": 1538722180,
|
12
|
-
"office_mode": false,
|
13
|
-
"share_url": null,
|
14
|
-
"share_qr_code_url": null,
|
15
|
-
"members": [
|
16
|
-
{
|
17
|
-
"user_id": "3193012",
|
18
|
-
"nickname": "Test Account",
|
19
|
-
"image_url": null,
|
20
|
-
"id": "384076097",
|
21
|
-
"muted": false,
|
22
|
-
"autokicked": false,
|
23
|
-
"roles": [
|
24
|
-
"admin",
|
25
|
-
"owner"
|
26
|
-
],
|
27
|
-
"name": "Test Account"
|
28
|
-
}
|
29
|
-
],
|
30
|
-
"messages": {
|
31
|
-
"count": 0,
|
32
|
-
"last_message_id": "",
|
33
|
-
"last_message_created_at": 0,
|
34
|
-
"preview": {
|
35
|
-
"nickname": null,
|
36
|
-
"text": null,
|
37
|
-
"image_url": null,
|
38
|
-
"attachments": []
|
39
|
-
}
|
40
|
-
},
|
41
|
-
"max_members": 500
|
42
|
-
}
|
@@ -1,27 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
RSpec.describe GroupMe::Configuration do
|
4
|
-
after(:each) { GroupMe.reset! }
|
5
|
-
|
6
|
-
context 'when access token is not set' do
|
7
|
-
it 'should not raise an error' do
|
8
|
-
expect { GroupMe.configuration.access_token }.not_to raise_error
|
9
|
-
end
|
10
|
-
|
11
|
-
it 'should return nil' do
|
12
|
-
expect(GroupMe.configuration.access_token).to eq(nil)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
context 'when access token is set' do
|
17
|
-
let(:access_token) { SecureRandom.base64(30) }
|
18
|
-
|
19
|
-
before do
|
20
|
-
GroupMe.configure { |config| config.access_token = access_token }
|
21
|
-
end
|
22
|
-
|
23
|
-
it 'should return it' do
|
24
|
-
expect(GroupMe.configuration.access_token).to eq(access_token)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
data/spec/groupme/group_spec.rb
DELETED
@@ -1,130 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
RSpec.describe GroupMe::Request do
|
4
|
-
let(:access_token) { SecureRandom.base64(30) }
|
5
|
-
|
6
|
-
before do
|
7
|
-
GroupMe.configure { |config| config.access_token = access_token }
|
8
|
-
end
|
9
|
-
|
10
|
-
describe '.new' do
|
11
|
-
let(:request) { GroupMe::Request.new(method, path, opts) }
|
12
|
-
|
13
|
-
context 'when no parameters are set' do
|
14
|
-
let(:request) { GroupMe::Request.new }
|
15
|
-
|
16
|
-
it 'should use :get as the method' do
|
17
|
-
expect(request.method).to eq(:get)
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'should use empty path as the path' do
|
21
|
-
expect(request.path).to eq('')
|
22
|
-
end
|
23
|
-
|
24
|
-
it 'should have an empty Hash as opts' do
|
25
|
-
expect(request.opts).to eq({})
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
context 'when method is not :get, :post, or :delete' do
|
30
|
-
it 'should raise an error' do
|
31
|
-
expect { GroupMe::Request.new(:patch) }.to raise_error(GroupMe::UnacceptableRequestMethodError)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
describe '#send' do
|
37
|
-
let(:request) { GroupMe::Request.new(:get, 'groups') }
|
38
|
-
|
39
|
-
it 'should not return an error' do
|
40
|
-
expect { request.send }.not_to raise_error
|
41
|
-
end
|
42
|
-
|
43
|
-
it 'should be get back a GroupMe::Response object' do
|
44
|
-
response = request.send
|
45
|
-
|
46
|
-
expect(response).to be_an_instance_of(GroupMe::Response)
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
describe '#method' do
|
51
|
-
let(:request) { GroupMe::Request.new(:delete, 'groups', per_page: 100) }
|
52
|
-
|
53
|
-
it 'should be able to retrieve the method' do
|
54
|
-
expect(request.method).to eq(:delete)
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
describe '#path' do
|
59
|
-
let(:request) { GroupMe::Request.new(:delete, 'groups', per_page: 100) }
|
60
|
-
|
61
|
-
it 'should be able to retrieve the path' do
|
62
|
-
expect(request.path).to eq('groups')
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
describe '#opts' do
|
67
|
-
let(:request) { GroupMe::Request.new(:delete, 'groups', per_page: 100) }
|
68
|
-
|
69
|
-
it 'should be able to retrieve the opts' do
|
70
|
-
expect(request.opts).to eq({ per_page: 100 })
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
describe '#full_uri' do
|
75
|
-
let(:request) { GroupMe::Request.new(:get, 'groups') }
|
76
|
-
let(:base_uri) { GroupMe::Request::API_BASE_URI }
|
77
|
-
|
78
|
-
it 'should be able to build & return a full uri' do
|
79
|
-
expect(request.full_uri).to eq("#{base_uri}/groups")
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
describe '#full_opts' do
|
84
|
-
let(:request) { GroupMe::Request.new(:get, 'groups', opts) }
|
85
|
-
|
86
|
-
context 'when opts are not initially set' do
|
87
|
-
let(:opts) { {} }
|
88
|
-
|
89
|
-
it 'should return just the token' do
|
90
|
-
expect(request.full_opts).to eq({ token: access_token })
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
context 'when opts are initially set' do
|
95
|
-
let(:opts) { { per_page: 100 } }
|
96
|
-
|
97
|
-
it 'should return opts & token' do
|
98
|
-
expect(request.full_opts).to eq({ token: access_token, per_page: 100 })
|
99
|
-
end
|
100
|
-
end
|
101
|
-
|
102
|
-
context 'when one of the opts is a new token' do
|
103
|
-
let(:new_access_token) { SecureRandom.base64(30) }
|
104
|
-
let(:opts) { { token: new_access_token, per_page: 100 } }
|
105
|
-
|
106
|
-
it 'should return opts & only the new token' do
|
107
|
-
expect(request.full_opts).to eq({ token: new_access_token, per_page: 100 })
|
108
|
-
end
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
112
|
-
describe '#token' do
|
113
|
-
context 'no token is specified in opts' do
|
114
|
-
let(:request) { GroupMe::Request.new(:get, 'groups') }
|
115
|
-
|
116
|
-
it 'should use the configured token' do
|
117
|
-
expect(request.token).to eq(access_token)
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
|
-
context 'a different token is specified in opts' do
|
122
|
-
let(:new_access_token) { SecureRandom.base64(30) }
|
123
|
-
let(:request) { GroupMe::Request.new(:get, 'groups', token: new_access_token) }
|
124
|
-
|
125
|
-
it 'should use the new token' do
|
126
|
-
expect(request.token).to eq(new_access_token)
|
127
|
-
end
|
128
|
-
end
|
129
|
-
end
|
130
|
-
end
|
@@ -1,64 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
RSpec.describe GroupMe::Response do
|
4
|
-
let(:request) { GroupMe::Request.new(:get, 'groups') }
|
5
|
-
let(:response) { request.send }
|
6
|
-
|
7
|
-
describe '#new' do
|
8
|
-
it 'should initialize a GroupMe::Response object' do
|
9
|
-
expect(response).to be_an_instance_of(GroupMe::Response)
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
describe '.raw' do
|
14
|
-
it 'should return an HTTP::Response object' do
|
15
|
-
expect(response.raw).to be_an_instance_of(HTTP::Message)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
describe '.code' do
|
20
|
-
let(:actual_code) { response.raw.code }
|
21
|
-
|
22
|
-
it 'should the response status code' do
|
23
|
-
expect(response.code).to eq(actual_code)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
describe '.body' do
|
28
|
-
let(:response_body) { response.body }
|
29
|
-
|
30
|
-
context 'when response will be an array' do
|
31
|
-
let(:request) { GroupMe::Request.new(:get, 'groups') }
|
32
|
-
|
33
|
-
it 'should parse the JSON response into an Array' do
|
34
|
-
expect(response_body).to be_an_instance_of(Array)
|
35
|
-
end
|
36
|
-
|
37
|
-
it 'should symbolize names' do
|
38
|
-
keys = response_body.first.keys
|
39
|
-
|
40
|
-
expect(keys.all? { |k| k.is_a? Symbol }).to eq(true)
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
context 'when response will be an hash' do
|
45
|
-
let(:request) { GroupMe::Request.new(:get, 'groups/1234567890') }
|
46
|
-
|
47
|
-
it 'should parse the JSON response into an Hash' do
|
48
|
-
expect(response_body).to be_an_instance_of(Hash)
|
49
|
-
end
|
50
|
-
|
51
|
-
it 'should symbolize names' do
|
52
|
-
expect(response_body.keys.all? { |k| k.is_a? Symbol }).to eq(true)
|
53
|
-
end
|
54
|
-
|
55
|
-
it 'should not have the key "response"' do
|
56
|
-
expect(response_body.has_key?(:response)).to eq(false)
|
57
|
-
end
|
58
|
-
|
59
|
-
it 'should not have the key "meta"' do
|
60
|
-
expect(response_body.has_key?(:meta)).to eq(false)
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
@@ -1,28 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'sinatra/base'
|
4
|
-
require 'sinatra/namespace'
|
5
|
-
|
6
|
-
class FakeGroupMe < Sinatra::Base
|
7
|
-
register Sinatra::Namespace
|
8
|
-
|
9
|
-
namespace '/v3' do
|
10
|
-
get '/groups' do
|
11
|
-
json_response('groups/index', 200)
|
12
|
-
end
|
13
|
-
|
14
|
-
get '/groups/:group_id' do
|
15
|
-
json_response('groups/show', 200)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
private
|
20
|
-
|
21
|
-
def json_response(fixture_path, status_code = 200)
|
22
|
-
"{\"response\":#{json_response_body(fixture_path)},\"meta\":{\"code\":#{status_code}}}"
|
23
|
-
end
|
24
|
-
|
25
|
-
def json_response_body(fixture_path)
|
26
|
-
File.open("#{File.dirname(__dir__)}/fixtures/#{fixture_path}.json").read
|
27
|
-
end
|
28
|
-
end
|