groovehq 1.0.5 → 1.0.6

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
2
  SHA1:
3
- metadata.gz: e61b3bab09b188fd2d9c2f1aad3dead54143be4b
4
- data.tar.gz: a2c9ce9160d98b446c0ab415f473b1e7c7a267f8
3
+ metadata.gz: 2145e0b487829c02c6e0080c1720c7667426e8fe
4
+ data.tar.gz: 057464d5b2a57bc162728f8f4a65d8b29ba04ae4
5
5
  SHA512:
6
- metadata.gz: d57eacb85e4bd8b1855bbcbcce1e80641ff9bfdb1501fa8e344b7153320676d9ff415445f54ed7e978bc0f8066facf3448846ac9b4a2888e121f476d876061b2
7
- data.tar.gz: ecdc813e58dfd8a11e7eca21748aa910ffddd9c26f217892a071a47dec23b0d377d82746ee3ce41d6fc7956b15abcb2261557a691a9845e50e9a098c2f90a641
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
- t.rspec_opts = ["--tag=~integration"] unless ENV["TRAVIS_BRANCH"] == "master"
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
@@ -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
- def initialize(client, data)
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
- }.with_indifferent_access
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(&block)
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
@@ -1,3 +1,3 @@
1
1
  module GrooveHQ
2
- VERSION = "1.0.5"
2
+ VERSION = "1.0.6"
3
3
  end
@@ -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.5
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-01-31 00:00:00.000000000 Z
11
+ date: 2016-02-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty