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 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