teamsnap_rb 0.0.8 → 1.0.0.beta1
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/.travis.yml +13 -0
- data/Gemfile +2 -1
- data/LICENSE +1 -1
- data/README.md +31 -79
- data/Rakefile +19 -1
- data/lib/teamsnap/version.rb +3 -0
- data/lib/teamsnap.rb +270 -0
- data/spec/cassettes/apiv3-init.yml +1963 -0
- data/spec/cassettes/teamsnap_rb/adds_find_if_search_is_available.yml +56 -0
- data/spec/cassettes/teamsnap_rb/can_follow_plural_links.yml +111 -0
- data/spec/cassettes/teamsnap_rb/can_follow_singular_links.yml +105 -0
- data/spec/cassettes/teamsnap_rb/can_handle_an_empty_bulk_load.yml +52 -0
- data/spec/cassettes/teamsnap_rb/can_handle_an_error_with_bulk_load.yml +50 -0
- data/spec/cassettes/teamsnap_rb/can_handle_errors_generated_by_command.yml +50 -0
- data/spec/cassettes/teamsnap_rb/can_handle_links_with_no_data.yml +101 -0
- data/spec/cassettes/teamsnap_rb/can_use_bulk_load.yml +61 -0
- data/spec/cassettes/teamsnap_rb/handles_executing_an_action_via_commands.yml +54 -0
- data/spec/cassettes/teamsnap_rb/handles_fetching_data_via_queries.yml +56 -0
- data/spec/cassettes/teamsnap_rb/handles_queries_with_no_data.yml +53 -0
- data/spec/cassettes/teamsnap_rb/raises_an_exception_if_find_returns_nothing.yml +53 -0
- data/spec/spec_helper.rb +18 -13
- data/spec/teamsnap_spec.rb +125 -0
- data/teamsnap_rb.gemspec +17 -15
- metadata +100 -84
- data/lib/teamsnap_rb/client.rb +0 -8
- data/lib/teamsnap_rb/collection.rb +0 -179
- data/lib/teamsnap_rb/command.rb +0 -39
- data/lib/teamsnap_rb/commands.rb +0 -40
- data/lib/teamsnap_rb/config.rb +0 -14
- data/lib/teamsnap_rb/exceptions.rb +0 -3
- data/lib/teamsnap_rb/item.rb +0 -136
- data/lib/teamsnap_rb/link.rb +0 -24
- data/lib/teamsnap_rb/links_proxy.rb +0 -40
- data/lib/teamsnap_rb/models/event.rb +0 -4
- data/lib/teamsnap_rb/models/user.rb +0 -4
- data/lib/teamsnap_rb/queries_proxy.rb +0 -68
- data/lib/teamsnap_rb/request_builder.rb +0 -67
- data/lib/teamsnap_rb/template.rb +0 -37
- data/lib/teamsnap_rb/version.rb +0 -3
- data/lib/teamsnap_rb.rb +0 -22
- data/spec/client_spec.rb +0 -39
- data/spec/collection_spec.rb +0 -175
- data/spec/command_spec.rb +0 -60
- data/spec/commands_spec.rb +0 -35
- data/spec/config_spec.rb +0 -16
- data/spec/fixtures/cassettes/production_root.yml +0 -59
- data/spec/fixtures/cassettes/root.yml +0 -573
- data/spec/fixtures/cassettes/team.yml +0 -4858
- data/spec/fixtures/cassettes/teams.yml +0 -160
- data/spec/item_spec.rb +0 -133
- data/spec/link_spec.rb +0 -43
- data/spec/links_proxy_spec.rb +0 -32
- data/spec/queries_proxy_spec.rb +0 -31
- data/spec/template_spec.rb +0 -57
data/spec/client_spec.rb
DELETED
@@ -1,39 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe TeamsnapRb::Client do
|
4
|
-
describe "#new (GET production root/)" do
|
5
|
-
use_vcr_cassette "production_root"
|
6
|
-
|
7
|
-
it "raises an HttpError for unauthorized access" do
|
8
|
-
expect{TeamsnapRb::Client.new}.to raise_exception(TeamsnapRb::HttpError)
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
context "#new (GET local root/)" do
|
13
|
-
use_vcr_cassette "root"
|
14
|
-
|
15
|
-
it "does not raise an error when authorized" do
|
16
|
-
expect{TeamsnapRb::Client.new("http://localhost:3003/")}.to_not raise_exception
|
17
|
-
end
|
18
|
-
|
19
|
-
it "return a TeamsnapRb::Collection" do
|
20
|
-
expect(TeamsnapRb::Client.new("http://localhost:3003/")).to be_a(TeamsnapRb::Collection)
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
context "#teams (GET local teams/)" do
|
25
|
-
use_vcr_cassette "root"
|
26
|
-
let(:client) { TeamsnapRb::Client.new("http://localhost:3003") }
|
27
|
-
|
28
|
-
describe "client navigation of the api" do
|
29
|
-
it "responds to links in the root collection, returning the appropriate collection" do
|
30
|
-
expect(client.teams).to be_a(TeamsnapRb::Collection)
|
31
|
-
end
|
32
|
-
|
33
|
-
it "enables access to collections and items directly from the client" do
|
34
|
-
team = client.teams.search(:id => 1).first
|
35
|
-
expect(team.id).to eq(1)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
data/spec/collection_spec.rb
DELETED
@@ -1,175 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe TeamsnapRb::Collection do
|
4
|
-
describe "default attributes" do
|
5
|
-
it "includes Enumerable" do
|
6
|
-
expect(TeamsnapRb::Collection).to include(Enumerable)
|
7
|
-
end
|
8
|
-
end
|
9
|
-
|
10
|
-
context "GET root", :vcr, record: :once do
|
11
|
-
use_vcr_cassette "root"
|
12
|
-
let(:root_collection) { TeamsnapRb::Collection.new("http://localhost:3003", {}, TeamsnapRb::Config.new) }
|
13
|
-
|
14
|
-
describe "#href" do
|
15
|
-
it "responds to href with the correct value" do
|
16
|
-
expect(root_collection.href).to eq("http://localhost:3003/")
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
describe "#links" do
|
21
|
-
it "returns a LinksProxy object" do
|
22
|
-
expect(root_collection.links).to be_a(TeamsnapRb::LinksProxy)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
describe "#[]" do
|
27
|
-
it "returns nil when the collection does not have any data elements" do
|
28
|
-
expect(root_collection[0]).to be_nil
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
describe "#queries" do
|
33
|
-
it "returns a QueriesProxy object" do
|
34
|
-
expect(root_collection.queries).to be_a(TeamsnapRb::QueriesProxy)
|
35
|
-
end
|
36
|
-
|
37
|
-
it "contains a set of Query objects" do
|
38
|
-
expect(root_collection.queries.first).to be_a(TeamsnapRb::Query)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
describe "#each" do
|
43
|
-
it "returns an empty array when there are not data elements" do
|
44
|
-
expect(root_collection.each).to eq([])
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
describe "#where" do
|
49
|
-
it "returns a CollectionWhereProxy" do
|
50
|
-
expect(root_collection.where({})).to be_a(TeamsnapRb::Collection::CollectionWhereProxy)
|
51
|
-
end
|
52
|
-
|
53
|
-
it "returns nil when trying to access an empty collection" do
|
54
|
-
expect(root_collection.where({})[0]).to be_nil
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
describe "#error" do
|
59
|
-
it "returns an empty array if there are no errors" do
|
60
|
-
expect(root_collection.error).to be_empty
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
describe "#error?" do
|
65
|
-
it "returns false if there are no errors" do
|
66
|
-
expect(root_collection.error?).to eq(false)
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
describe "size" do
|
71
|
-
it "returns zero when there are no items" do
|
72
|
-
expect(root_collection.size).to eq(0)
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
describe "present?" do
|
77
|
-
it "returns false when there are no iteams" do
|
78
|
-
expect(root_collection.present?).to eq(false)
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
describe "blank?" do
|
83
|
-
it "returns true when there are no iteams" do
|
84
|
-
expect(root_collection.blank?).to eq(true)
|
85
|
-
end
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
context "GET /teams/1", :vcr, record: :once do
|
90
|
-
use_vcr_cassette "team"
|
91
|
-
let(:team_collection) { TeamsnapRb::Collection.new("http://localhost:3003/teams/1", {}, TeamsnapRb::Config.new) }
|
92
|
-
|
93
|
-
describe "#href" do
|
94
|
-
it "responds to href with the correct value" do
|
95
|
-
expect(team_collection.href).to eq("http://localhost:3003/teams")
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
describe "#links" do
|
100
|
-
it "returns a LinksProxy object" do
|
101
|
-
expect(team_collection.links).to be_a(TeamsnapRb::LinksProxy)
|
102
|
-
end
|
103
|
-
end
|
104
|
-
|
105
|
-
describe "#[]" do
|
106
|
-
it "returns an Item when the collection has data elements" do
|
107
|
-
expect(team_collection[0]).to be_a(TeamsnapRb::Item)
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
describe "#queries" do
|
112
|
-
it "returns a QueriesProxy object" do
|
113
|
-
expect(team_collection.queries).to be_a(TeamsnapRb::QueriesProxy)
|
114
|
-
end
|
115
|
-
|
116
|
-
it "contains a set of Query objects" do
|
117
|
-
expect(team_collection.queries.first).to be_a(TeamsnapRb::Query)
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
|
-
describe "#each" do
|
122
|
-
it "returns an array of items" do
|
123
|
-
expect(team_collection.each {|item|}).to_not be_empty
|
124
|
-
end
|
125
|
-
end
|
126
|
-
|
127
|
-
describe "size" do
|
128
|
-
it "returns zero when there are no items" do
|
129
|
-
expect(team_collection.size).to eq(1)
|
130
|
-
end
|
131
|
-
end
|
132
|
-
|
133
|
-
describe "present?" do
|
134
|
-
it "returns true when there are no iteams" do
|
135
|
-
expect(team_collection.present?).to eq(true)
|
136
|
-
end
|
137
|
-
end
|
138
|
-
|
139
|
-
describe "blank?" do
|
140
|
-
it "returns false when there are no iteams" do
|
141
|
-
expect(team_collection.blank?).to eq(false)
|
142
|
-
end
|
143
|
-
end
|
144
|
-
|
145
|
-
describe "#where" do
|
146
|
-
it "returns a CollectionWhereProxy" do
|
147
|
-
expect(team_collection.where({})).to be_a(TeamsnapRb::Collection::CollectionWhereProxy)
|
148
|
-
end
|
149
|
-
|
150
|
-
it "returns nil when trying to access a type that doesn't exist in the collection" do
|
151
|
-
expect(team_collection.where({type: "division"})[0]).to be_nil
|
152
|
-
end
|
153
|
-
|
154
|
-
it "returns an array of items that match the type passed in" do
|
155
|
-
expect(team_collection.where({type: "team"})[0]).to be_a(TeamsnapRb::Item)
|
156
|
-
end
|
157
|
-
|
158
|
-
it "the item selected has the expected data" do
|
159
|
-
expect(team_collection.where({type: "team"})[0].name).to eq("Test Mania")
|
160
|
-
end
|
161
|
-
end
|
162
|
-
|
163
|
-
describe "#error" do
|
164
|
-
it "returns an empty array if there are no errors" do
|
165
|
-
expect(team_collection.error).to be_empty
|
166
|
-
end
|
167
|
-
end
|
168
|
-
|
169
|
-
describe "#error?" do
|
170
|
-
it "returns false if there are no errors" do
|
171
|
-
expect(team_collection.error?).to eq(false)
|
172
|
-
end
|
173
|
-
end
|
174
|
-
end
|
175
|
-
end
|
data/spec/command_spec.rb
DELETED
@@ -1,60 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe TeamsnapRb::Command do
|
4
|
-
use_vcr_cassette "team", :match_requests_on => [:host, :path, :body], :record => :new_episodes
|
5
|
-
|
6
|
-
let(:client) { TeamsnapRb::Client.new("http://localhost:3003/teams/1") }
|
7
|
-
let(:command) { client.commands.first }
|
8
|
-
|
9
|
-
describe "#new" do
|
10
|
-
it "is built from a TeamsnapRb::Collection" do
|
11
|
-
expect{command}.to_not raise_exception
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
describe "#execute" do
|
16
|
-
it "returns a Faraday::Response" do
|
17
|
-
expect(
|
18
|
-
command.execute(
|
19
|
-
[:team_id => 1, :member_id => 8, :notify_as_member_id => 1]
|
20
|
-
)
|
21
|
-
).to be_a(Faraday::Response)
|
22
|
-
end
|
23
|
-
|
24
|
-
it "returns an appropriate status code" do
|
25
|
-
expect(
|
26
|
-
command.execute(
|
27
|
-
[:team_id => 1, :member_id => 8, :notify_as_member_id => 1]
|
28
|
-
).status
|
29
|
-
).to eq(202)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
describe "#href" do
|
34
|
-
it "returns the href for the command" do
|
35
|
-
expect(command.href).to eq("http://localhost:3003/teams/invite")
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
describe "#rel" do
|
40
|
-
it "returns the name of the command" do
|
41
|
-
expect(command.rel).to eq("invite")
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
describe "#prompt" do
|
46
|
-
it "returns the prompt for the command" do
|
47
|
-
expect(command.prompt).to eq("invite team members or contacts to join TeamSnap.")
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
describe "#data" do
|
52
|
-
it "returns the data for the command" do
|
53
|
-
expect(command.data).to include("team_id", "member_id")
|
54
|
-
end
|
55
|
-
|
56
|
-
it "returns the data for the command" do
|
57
|
-
expect(command.data).to be_a(Array)
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
data/spec/commands_spec.rb
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe TeamsnapRb::CommandsProxy do
|
4
|
-
use_vcr_cassette "team", :match_requests_on => [:host, :path, :body]
|
5
|
-
|
6
|
-
let(:commands_proxy) { TeamsnapRb::Collection.new(
|
7
|
-
"http://localhost:3003/teams/1", {}, TeamsnapRb::Config.new
|
8
|
-
).commands }
|
9
|
-
|
10
|
-
describe "#new" do
|
11
|
-
it "accepts an array of commands from a collection+json response and a config" do
|
12
|
-
expect(commands_proxy).to be_a(TeamsnapRb::CommandsProxy)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
describe "#rels" do
|
17
|
-
it "returns an array of the different commands available for the collection" do
|
18
|
-
expect(commands_proxy.rels).to eq([:invite])
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
describe "executing a command" do
|
23
|
-
it "with valid data, it posts to the invite href when a match is found" do
|
24
|
-
expect(
|
25
|
-
commands_proxy.invite(
|
26
|
-
:team_id => 1, :member_id => 8, :notify_as_member_id => 1
|
27
|
-
).status
|
28
|
-
).to eq(202)
|
29
|
-
end
|
30
|
-
|
31
|
-
it "with invalid data, it returns a 400" do
|
32
|
-
expect(commands_proxy.invite.status).to eq(400)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
data/spec/config_spec.rb
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe TeamsnapRb::Config do
|
4
|
-
let(:config) { TeamsnapRb::Config.new }
|
5
|
-
|
6
|
-
describe "#new" do
|
7
|
-
it "uses sensible defaults when no options are passed in" do
|
8
|
-
expect(config.authorization).to be_nil
|
9
|
-
expect(config.access_token).to be_nil
|
10
|
-
expect(config.client_secret).to be_nil
|
11
|
-
expect(config.client_id).to be_nil
|
12
|
-
expect(config.response_middleware).to eq([])
|
13
|
-
expect(config.request_middleware).to eq([])
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
@@ -1,59 +0,0 @@
|
|
1
|
-
---
|
2
|
-
http_interactions:
|
3
|
-
- request:
|
4
|
-
method: get
|
5
|
-
uri: https://api.teamsnap.com/v3/
|
6
|
-
body:
|
7
|
-
encoding: US-ASCII
|
8
|
-
string: ''
|
9
|
-
headers:
|
10
|
-
User-Agent:
|
11
|
-
- Faraday v0.9.0
|
12
|
-
Accept-Encoding:
|
13
|
-
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
14
|
-
Accept:
|
15
|
-
- "*/*"
|
16
|
-
response:
|
17
|
-
status:
|
18
|
-
code: 401
|
19
|
-
message: Unauthorized
|
20
|
-
headers:
|
21
|
-
Content-Type:
|
22
|
-
- text/html;charset=utf-8
|
23
|
-
Content-Length:
|
24
|
-
- '138'
|
25
|
-
Connection:
|
26
|
-
- keep-alive
|
27
|
-
Status:
|
28
|
-
- 401 Unauthorized
|
29
|
-
X-Xss-Protection:
|
30
|
-
- 1; mode=block
|
31
|
-
X-Content-Type-Options:
|
32
|
-
- nosniff
|
33
|
-
X-Frame-Options:
|
34
|
-
- SAMEORIGIN
|
35
|
-
X-Ratelimit-Limit:
|
36
|
-
- '5000'
|
37
|
-
X-Ratelimit-Remaining:
|
38
|
-
- '4997'
|
39
|
-
X-Ratelimit-Reset:
|
40
|
-
- '1415731203'
|
41
|
-
Cache-Control:
|
42
|
-
- no-cache
|
43
|
-
X-Request-Id:
|
44
|
-
- 16f9d410-b994-472a-a2ef-097357c11915
|
45
|
-
X-Runtime:
|
46
|
-
- '0.004984'
|
47
|
-
X-Powered-By:
|
48
|
-
- Phusion Passenger 4.0.48
|
49
|
-
Date:
|
50
|
-
- Tue, 11 Nov 2014 17:46:29 GMT
|
51
|
-
Server:
|
52
|
-
- nginx/1.4.5 + Phusion Passenger 4.0.48
|
53
|
-
body:
|
54
|
-
encoding: UTF-8
|
55
|
-
string: '{"collection":{"error":{"message":"You are not authorized to access
|
56
|
-
this resource. Please ensure you''ve provided a valid access token."}}}'
|
57
|
-
http_version:
|
58
|
-
recorded_at: Tue, 11 Nov 2014 17:46:29 GMT
|
59
|
-
recorded_with: VCR 2.9.3
|