groovehq 1.0.5 → 1.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 +4 -4
- data/Rakefile +2 -1
- data/lib/groovehq/resource.rb +1 -1
- data/lib/groovehq/resource_collection.rb +16 -3
- data/lib/groovehq/version.rb +1 -1
- data/spec/groovehq/client/connection_spec.rb +10 -0
- data/spec/groovehq/resource_collection_spec.rb +82 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2145e0b487829c02c6e0080c1720c7667426e8fe
|
4
|
+
data.tar.gz: 057464d5b2a57bc162728f8f4a65d8b29ba04ae4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f4a5e18231d02edeef700b2766135dc4f7737f933b5a20ff8832d79a10294b212e6e980c2a3bb923eaf45324e5f6025218e1c4c0d76e46cbb114fe95a14292e0
|
7
|
+
data.tar.gz: 643eb4a6844f303f509a002ebb3a4545a7be9643697fb0823817deba82e03fb02ef9c96bb7dafeecac4e666c1174f28418b6bf2b576bd9640fd257ed77ff668a
|
data/Rakefile
CHANGED
@@ -4,7 +4,8 @@ begin
|
|
4
4
|
require 'rspec/core/rake_task'
|
5
5
|
|
6
6
|
RSpec::Core::RakeTask.new(:spec) do |t|
|
7
|
-
|
7
|
+
travis_master = ENV["TRAVIS_BRANCH"] == "master" && ENV["TRAVIS_PULL_REQUEST"] == "false"
|
8
|
+
t.rspec_opts = ["--tag=~integration"] unless travis_master
|
8
9
|
end
|
9
10
|
|
10
11
|
task :default => :spec
|
data/lib/groovehq/resource.rb
CHANGED
@@ -20,7 +20,7 @@ module GrooveHQ
|
|
20
20
|
|
21
21
|
def parse_links(links)
|
22
22
|
(links || {}).each_with_object({}) do |(relation, value), result|
|
23
|
-
result[relation] = Relation.new(@client, value[:href])
|
23
|
+
result[relation] = Relation.new(@client, value[:href]) if value[:href]
|
24
24
|
end.with_indifferent_access
|
25
25
|
end
|
26
26
|
|
@@ -3,7 +3,9 @@ module GrooveHQ
|
|
3
3
|
class ResourceCollection < Resource
|
4
4
|
include Enumerable
|
5
5
|
|
6
|
-
|
6
|
+
attr_reader :options
|
7
|
+
|
8
|
+
def initialize(client, data, options = {})
|
7
9
|
data = {} unless data.is_a?(Hash)
|
8
10
|
data = data.with_indifferent_access
|
9
11
|
|
@@ -25,15 +27,26 @@ module GrooveHQ
|
|
25
27
|
prev: {
|
26
28
|
href: meta_data["pagination"]["prev_page"]
|
27
29
|
}
|
28
|
-
}
|
30
|
+
}
|
29
31
|
end
|
30
32
|
|
31
33
|
@data = OpenStruct.new(meta: meta_data, collection: collection)
|
32
34
|
@rels = parse_links(links)
|
35
|
+
@options = options.with_indifferent_access
|
33
36
|
end
|
34
37
|
|
35
|
-
def each
|
38
|
+
def each
|
39
|
+
return enum_for(:each) unless block_given?
|
40
|
+
|
36
41
|
collection.each { |item| yield item }
|
42
|
+
|
43
|
+
rel = @rels[:next] or return self
|
44
|
+
resource_collection = rel.get(@options.except(:page))
|
45
|
+
resource_collection.each(&Proc.new)
|
46
|
+
|
47
|
+
@data = OpenStruct.new(meta: resource_collection.meta,
|
48
|
+
collection: collection + resource_collection.collection)
|
49
|
+
@rels = resource_collection.rels
|
37
50
|
end
|
38
51
|
|
39
52
|
end
|
data/lib/groovehq/version.rb
CHANGED
@@ -106,6 +106,16 @@ describe GrooveHQ::Client::Connection do
|
|
106
106
|
expect(subject.rels[:next]).to be_instance_of(GrooveHQ::Relation)
|
107
107
|
end
|
108
108
|
|
109
|
+
context "with request options" do
|
110
|
+
subject { client.get(resource_path, per_page: 20) }
|
111
|
+
|
112
|
+
it "retains options" do
|
113
|
+
stub_request(:get, "#{api_groovehq_url}#{resource_path}?per_page=20").to_return(body: response)
|
114
|
+
expect(subject.options).to eq({})
|
115
|
+
end
|
116
|
+
|
117
|
+
end
|
118
|
+
|
109
119
|
end
|
110
120
|
|
111
121
|
end
|
@@ -39,6 +39,88 @@ describe GrooveHQ::Resource do
|
|
39
39
|
resource = GrooveHQ::ResourceCollection.new(client, data)
|
40
40
|
expect(resource.rels[:next]).to be_instance_of(GrooveHQ::Relation)
|
41
41
|
expect(resource.rels[:next].href).to eq("http://api.groovehq.dev/v1/tickets?page=2")
|
42
|
+
expect(resource.rels[:prev]).to be_nil
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
context "#each" do
|
48
|
+
|
49
|
+
it "returns an enumerator when block omitted" do
|
50
|
+
data = {
|
51
|
+
tickets: [ { name: "When I am small" } ]
|
52
|
+
}
|
53
|
+
|
54
|
+
resource = GrooveHQ::ResourceCollection.new(client, data)
|
55
|
+
expect(resource.each).to be_instance_of(Enumerator)
|
56
|
+
expect(resource.first.name).to eql "When I am small"
|
57
|
+
end
|
58
|
+
|
59
|
+
context "paginated requests" do
|
60
|
+
|
61
|
+
before do
|
62
|
+
page_1 = {
|
63
|
+
tickets: [{ title: "Ticket 1" }],
|
64
|
+
meta: {
|
65
|
+
pagination: {
|
66
|
+
next_page: "http://api.groovehq.dev/v1/tickets?page=2"
|
67
|
+
}
|
68
|
+
}
|
69
|
+
}.stringify_keys
|
70
|
+
|
71
|
+
page_2 = {
|
72
|
+
tickets: [{ title: "Ticket 2"}],
|
73
|
+
meta: {
|
74
|
+
pagination: {
|
75
|
+
prev_page: "http://api.groovehq.dev/v1/tickets?page=1",
|
76
|
+
next_page: "http://api.groovehq.dev/v1/tickets?page=3"
|
77
|
+
}
|
78
|
+
}
|
79
|
+
}.stringify_keys
|
80
|
+
|
81
|
+
page_3 = {
|
82
|
+
tickets: [{ title: "Ticket 3"}],
|
83
|
+
meta: {
|
84
|
+
pagination: {
|
85
|
+
prev_page: "http://api.groovehq.dev/v1/tickets?page=2",
|
86
|
+
}
|
87
|
+
}
|
88
|
+
}.stringify_keys
|
89
|
+
|
90
|
+
stub_request(:get, "http://api.groovehq.dev/v1/tickets?page=2").
|
91
|
+
with(headers: {'Authorization' => 'Bearer phantogram'}).
|
92
|
+
to_return(body: page_2.to_json, status: 200)
|
93
|
+
|
94
|
+
stub_request(:get, "http://api.groovehq.dev/v1/tickets?page=3").
|
95
|
+
with(headers: {'Authorization' => 'Bearer phantogram'}).
|
96
|
+
to_return(body: page_3.to_json, status: 200)
|
97
|
+
|
98
|
+
@page_1 = page_1
|
99
|
+
end
|
100
|
+
|
101
|
+
it "enumerates all pages" do
|
102
|
+
resource = GrooveHQ::ResourceCollection.new(client, @page_1)
|
103
|
+
|
104
|
+
all_tickets = resource.each.to_a
|
105
|
+
expect(all_tickets.size).to eql(3)
|
106
|
+
expect(all_tickets.map(&:title)).to eql(["Ticket 1", "Ticket 2", "Ticket 3"])
|
107
|
+
end
|
108
|
+
|
109
|
+
it "merges data" do
|
110
|
+
resource = GrooveHQ::ResourceCollection.new(client, @page_1)
|
111
|
+
|
112
|
+
expect(resource.map(&:title)).to eql(["Ticket 1", "Ticket 2", "Ticket 3"])
|
113
|
+
expect(resource.collection.size).to eql(3)
|
114
|
+
end
|
115
|
+
|
116
|
+
it "respects :per_page and other parameters except :page" do
|
117
|
+
resource = GrooveHQ::ResourceCollection.new(client, @page_1, page: 1, per_page: 20, foo: "bar")
|
118
|
+
stub_request(:get, "http://api.groovehq.dev/v1/tickets?page=2&per_page=20&foo=bar").
|
119
|
+
with(headers: {'Authorization' => 'Bearer phantogram'}).
|
120
|
+
to_return(body: {tickets: []}.to_json, status: 200)
|
121
|
+
|
122
|
+
expect(resource.map(&:title)).to eql(["Ticket 1"])
|
123
|
+
end
|
42
124
|
end
|
43
125
|
|
44
126
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: groovehq
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kirill Shirinkin
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-02-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|