springboard-retail 4.2.1 → 4.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 75887540f522a54dbca3eb013bffa99780b96d17846797c8072963c2567ebf89
4
- data.tar.gz: 9b72a1e965fedce2afd7c25da5a68e85b2caf587916fbccda22f0e9a3dbe1a99
3
+ metadata.gz: fd35455f3b848e238263429302242ec4897b99f9190841b9cc03cd78e7fe70c9
4
+ data.tar.gz: 1f768fc9359ac7ec8daff47888b647eedb7b84f9f91cf2a1b8fa24b474afe266
5
5
  SHA512:
6
- metadata.gz: a06be6e7ecf83216be6d5200b0044615719e7605911f5c1bf3f1ccf76b8bdf9a7480ae334028254ba49d50134e43ba7c858f5769b6fadde6fa4a9b27a5458121
7
- data.tar.gz: 4095a672bdeb383b19cffb6657137456e8dc8801255e7f43548ef0db9a2c3db01491f666d5508dd79e9b6275715b250cb13a683d1cbce812b966bc7fa616b5ad
6
+ metadata.gz: 3e1ea9566b62cd2cfc1676ef8ddb2aa9627cecb56b0d4a8d47ce8536586ff824d81bd44cc06bad91f91239ae84be33c4915abff21ae08bf759da4c9c4e7793bf
7
+ data.tar.gz: 7ad3f24caf64aa63b0608f63bd047c3472abbb6e81c51388de342089953cfedc3c1d441a10e714b3c482254c0146d2123eeca78e7b7cec2b35d5e17be6719b3d
@@ -1,8 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- springboard-retail (4.2.1)
5
- addressable (~> 2.2.8)
4
+ springboard-retail (4.3.0)
6
5
  hashie
7
6
  json (>= 1.7.4)
8
7
  patron (= 0.4.18)
@@ -24,7 +23,7 @@ GEM
24
23
  safe_yaml (~> 1.0.0)
25
24
  diff-lcs (1.2.5)
26
25
  docile (1.1.5)
27
- hashie (3.5.7)
26
+ hashie (3.6.0)
28
27
  json (2.1.0)
29
28
  method_source (0.8.2)
30
29
  mime-types (2.4.3)
@@ -30,7 +30,7 @@ module Springboard
30
30
  DEFAULT_CONNECT_TIMEOUT = 10
31
31
 
32
32
  ##
33
- # @return [Addressable::URI] The client's base URI
33
+ # @return [URI] The client's base URI
34
34
  attr_reader :base_uri
35
35
 
36
36
  ##
@@ -80,7 +80,7 @@ module Springboard
80
80
  unless opts[:username] && opts[:password]
81
81
  raise "Must specify :username and :password"
82
82
  end
83
- body = ::Addressable::URI.form_encode \
83
+ body = ::URI.encode_www_form \
84
84
  :auth_key => opts[:username],
85
85
  :password => opts[:password]
86
86
  response = post '/auth/identity/callback', body,
@@ -236,8 +236,7 @@ module Springboard
236
236
 
237
237
  def prepare_uri(uri)
238
238
  uri = URI.parse(uri)
239
- uri.path = uri.path.gsub(/^#{base_uri.path}/, '')
240
- uri
239
+ uri.to_s.gsub(/^#{base_uri.to_s}|^#{base_uri.path}/, '')
241
240
  end
242
241
 
243
242
  def new_response(patron_response)
@@ -21,7 +21,7 @@ module Springboard
21
21
  #
22
22
  # @return [Addressable::URI]
23
23
  attr_reader :uri
24
-
24
+
25
25
  ##
26
26
  # The underlying Springboard Client.
27
27
  #
@@ -31,9 +31,9 @@ module Springboard
31
31
  ##
32
32
  # @param [Springboard::Client] client
33
33
  # @param [Addressable::URI, #to_s] uri
34
- def initialize(client, uri)
34
+ def initialize(client, uri_or_path)
35
35
  @client = client
36
- @uri = URI.join('/', uri.to_s)
36
+ @uri = normalize_uri(uri_or_path)
37
37
  end
38
38
 
39
39
  ##
@@ -195,6 +195,16 @@ module Springboard
195
195
 
196
196
  private
197
197
 
198
+ ##
199
+ # Normalizes the URI or path given to a URI
200
+ def normalize_uri(uri_or_path)
201
+ uri = URI.parse(uri_or_path)
202
+ return uri if uri.to_s.start_with?(client.base_uri.to_s)
203
+ path = uri_or_path.to_s.start_with?('/') ? uri_or_path : "/#{uri_or_path}"
204
+ path.to_s.gsub!(/^#{client.base_uri.to_s}|^#{client.base_uri.path}/, '')
205
+ URI.parse("#{client.base_uri}#{path}")
206
+ end
207
+
198
208
  ##
199
209
  # Calls a client method, passing the URI as the first argument.
200
210
  def call_client(method, *args, &block)
@@ -1,9 +1,9 @@
1
- require 'addressable/uri'
1
+ require 'uri'
2
2
 
3
3
  module Springboard
4
4
  class Client
5
5
  ##
6
- # A wrapper around Addressable::URI
6
+ # A wrapper around URI
7
7
  class URI
8
8
  ##
9
9
  # Returns a URI object based on the parsed string.
@@ -11,15 +11,7 @@ module Springboard
11
11
  # @return [URI]
12
12
  def self.parse(value)
13
13
  return value.dup if value.is_a?(self)
14
- new(::Addressable::URI.parse(value))
15
- end
16
-
17
- ##
18
- # Joins several URIs together.
19
- #
20
- # @return [URI]
21
- def self.join(*args)
22
- new(::Addressable::URI.join(*args))
14
+ new(::URI.parse(value.to_s))
23
15
  end
24
16
 
25
17
  ##
@@ -46,59 +38,80 @@ module Springboard
46
38
  def subpath(subpath)
47
39
  uri = dup
48
40
  uri.path = "#{path}/" unless path.end_with?('/')
49
- uri.join subpath.to_s.gsub(/^\//, '')
41
+ uri.path = uri.path + ::URI.encode(subpath.to_s.gsub(/^\//, ''))
42
+ uri
50
43
  end
51
44
 
52
45
  ##
53
46
  # Merges the given hash of query string parameters and values with the URI's
54
47
  # existing query string parameters (if any).
55
48
  def merge_query_values!(values)
56
- self.springboard_query_values = (self.query_values || {}).merge(normalize_query_hash(values))
49
+ old_query_values = self.query_values || {}
50
+ self.query_values = old_query_values.merge(normalize_query_hash(values))
57
51
  end
58
52
 
53
+ ##
54
+ # Checks if supplied URI matches current URI
55
+ #
56
+ # @return [boolean]
59
57
  def ==(other_uri)
60
58
  return false unless other_uri.is_a?(self.class)
61
59
  uri == other_uri.__send__(:uri)
62
60
  end
63
61
 
62
+ ##
63
+ # Overwrites the query using the supplied query values
64
+ def query_values=(values)
65
+ self.query = ::URI.encode_www_form(normalize_query_hash(values).sort)
66
+ end
67
+
68
+ ##
69
+ # Returns a hash of query string parameters and values
70
+ #
71
+ # @return [hash]
72
+ def query_values
73
+ return nil if query.nil?
74
+ ::URI.decode_www_form(query).each_with_object({}) do |(k, v), hash|
75
+ if k.end_with?('[]')
76
+ k.gsub!(/\[\]$/, '')
77
+ hash[k] = Array(hash[k]) + [v]
78
+ else
79
+ hash[k] = v
80
+ end
81
+ end
82
+ end
83
+
64
84
  private
65
85
 
66
86
  attr_reader :uri
67
87
 
68
- def springboard_query_values=(values)
69
- retval = self.query_values = normalize_query_hash(values)
70
- # Hack to strip digits from Addressable::URI's subscript notation
71
- self.query = self.query.gsub(/\[\d+\]=/, '[]=')
72
- retval
73
- end
74
-
75
88
  def self.delegate_and_wrap(*methods)
76
89
  methods.each do |method|
77
90
  define_method(method) do |*args, &block|
78
- result = @uri.__send__(method, *args, &block)
79
- if result.is_a?(Addressable::URI)
80
- self.class.new(result)
81
- else
82
- result
83
- end
91
+ @uri.__send__(method, *args, &block)
84
92
  end
85
93
  end
86
94
  end
87
95
 
88
96
  delegate_and_wrap(
89
- :join, :path, :path=, :form_encode, :to_s,
90
- :query_values, :query_values=, :query, :query=
97
+ :path, :path=, :to_s, :query, :query=
91
98
  )
92
99
 
93
100
  def normalize_query_hash(hash)
94
101
  hash.inject({}) do |copy, (k, v)|
95
- copy[k.to_s] = case v
96
- when Hash then normalize_query_hash(v)
97
- when true, false then v.to_s
98
- else v end
102
+ k = "#{k}[]" if v.is_a?(Array) && !k.to_s.end_with?('[]')
103
+ copy[k.to_s] = normalize_query_value(v)
99
104
  copy
100
105
  end
101
106
  end
107
+
108
+ def normalize_query_value(value)
109
+ case value
110
+ when Hash then normalize_query_hash(value)
111
+ when true, false then value.to_s
112
+ when Array then value.uniq
113
+ else value end
114
+ end
102
115
  end
103
116
  end
104
117
  end
@@ -13,7 +13,7 @@ describe Springboard::Client::Resource do
13
13
  end
14
14
 
15
15
  it "should return a resource with the given subpath appended to its URI" do
16
- expect(resource["subpath"].uri.to_s).to eq("/some/path/subpath")
16
+ expect(resource["subpath"].uri.to_s).to eq("#{base_url}/some/path/subpath")
17
17
  end
18
18
 
19
19
  it "should return a resource with the same client instance" do
@@ -21,15 +21,13 @@ describe Springboard::Client::Resource do
21
21
  end
22
22
 
23
23
  it "should accept a symbol as a path" do
24
- expect(resource[:subpath].uri.to_s).to eq("/some/path/subpath")
24
+ expect(resource[:subpath].uri.to_s).to eq("#{base_url}/some/path/subpath")
25
25
  end
26
26
 
27
- it "should accept a symbol as a path" do
28
- expect(resource[:subpath].uri.to_s).to eq("/some/path/subpath")
29
- end
30
-
31
- it "should not URI encode the given subpath" do
32
- expect(resource["subpath with spaces"].uri.to_s).to eq("/some/path/subpath with spaces")
27
+ it "should URI encode the given subpath" do
28
+ expect(resource["subpath with spaces"].uri.to_s).to eq(
29
+ "#{base_url}/some/path/subpath%20with%20spaces"
30
+ )
33
31
  end
34
32
  end
35
33
 
@@ -37,22 +35,25 @@ describe Springboard::Client::Resource do
37
35
  describe method do
38
36
  describe "when called with a hash" do
39
37
  it "should set the query string parameters" do
40
- expect(resource.__send__(method, :a => 1, :b => 2).uri.to_s).to eq("/some/path?a=1&b=2")
38
+ expect(resource.__send__(method, :a => 1, :b => 2).uri.to_s).to eq("#{base_url}/some/path?a=1&b=2")
41
39
  end
42
40
 
43
41
  it "should URL encode the given keys and values" do
44
- expect(resource.__send__(method, "i have spaces" => "so do i: duh").uri.to_s).
45
- to eq("/some/path?i%20have%20spaces=so%20do%20i%3A%20duh")
42
+ expect(resource.__send__(method, "i have spaces" => "so do i: duh").uri.to_s).to eq(
43
+ "#{base_url}/some/path?i+have+spaces=so+do+i%3A+duh"
44
+ )
46
45
  end
47
46
 
48
47
  it "should add bracket notation for array parameters" do
49
- expect(resource.__send__(method, :somearray => [1, 2, 3]).uri.to_s).to eq("/some/path?somearray[]=1&somearray[]=2&somearray[]=3")
48
+ expect(resource.__send__(method, :somearray => [1, 2, 3]).uri.to_s).to eq(
49
+ "#{base_url}/some/path?somearray%5B%5D=1&somearray%5B%5D=2&somearray%5B%5D=3"
50
+ )
50
51
  end
51
52
 
52
53
  it "should return a new resource without modifying the existing URI" do
53
54
  new_resource = resource.query(per_page: 1)
54
- expect(new_resource.uri.to_s).to eq("/some/path?per_page=1")
55
- expect(resource.uri.to_s).to eq("/some/path")
55
+ expect(new_resource.uri.to_s).to eq("#{base_url}/some/path?per_page=1")
56
+ expect(resource.uri.to_s).to eq("#{base_url}/some/path")
56
57
  end
57
58
  end
58
59
 
@@ -70,7 +71,7 @@ describe Springboard::Client::Resource do
70
71
  describe "when given a hash" do
71
72
  it "should add a _filter query string param" do
72
73
  expect(resource.filter(:a => 1, :b => 2).uri).to eq(
73
- '/some/path?_filter={"a":1,"b":2}'.to_uri
74
+ "#{base_url}/some/path?_filter=%7B%22a%22%3A1%2C%22b%22%3A2%7D".to_uri
74
75
  )
75
76
  end
76
77
  end
@@ -78,7 +79,7 @@ describe Springboard::Client::Resource do
78
79
  describe "when called multiple times" do
79
80
  it "should append args to _filter param as JSON array" do
80
81
  expect(resource.filter(:a => 1).filter(:b => 2).filter(:c => 3).uri).to eq(
81
- '/some/path?_filter=[{"a":1},{"b":2},{"c":3}]'.to_uri
82
+ "#{base_url}/some/path?_filter=%5B%7B%22a%22%3A1%7D%2C%7B%22b%22%3A2%7D%2C%7B%22c%22%3A3%7D%5D".to_uri
82
83
  )
83
84
  end
84
85
  end
@@ -86,7 +87,15 @@ describe Springboard::Client::Resource do
86
87
  describe "when given a string" do
87
88
  it "should add a _filter query string param" do
88
89
  expect(resource.filter('{"a":1,"b":2}').uri).to eq(
89
- '/some/path?_filter={"a":1,"b":2}'.to_uri
90
+ "#{base_url}/some/path?_filter=%7B%22a%22%3A1%2C%22b%22%3A2%7D".to_uri
91
+ )
92
+ end
93
+ end
94
+
95
+ describe "when called multiple times with other methods" do
96
+ it "should append args to _filter param as JSON array" do
97
+ expect(resource.filter(:a => 1).embed(:other).only(:field).filter(:b => 2).uri).to eq(
98
+ "#{base_url}/some/path?_filter=%5B%7B%22a%22%3A1%7D%2C%7B%22b%22%3A2%7D%5D&_include%5B%5D=other&_only%5B%5D=field".to_uri
90
99
  )
91
100
  end
92
101
  end
@@ -94,22 +103,30 @@ describe Springboard::Client::Resource do
94
103
 
95
104
  describe "sort" do
96
105
  it "should set the sort parameter based on the given values" do
97
- expect(resource.sort('f1', 'f2,desc').uri.query).to eq('sort[]=f1&sort[]=f2%2Cdesc')
106
+ expect(resource.sort('f1', 'f2,desc').uri.to_s).to eq(
107
+ "#{base_url}/some/path?sort%5B%5D=f1&sort%5B%5D=f2%2Cdesc"
108
+ )
98
109
  end
99
110
 
100
111
  it "should replace any existing sort parameter" do
101
112
  resource.sort('f1', 'f2,desc')
102
- expect(resource.sort('f3,asc', 'f4').uri.query).to eq('sort[]=f3%2Casc&sort[]=f4')
113
+ expect(resource.sort('f3,asc', 'f4').uri.to_s).to eq(
114
+ "#{base_url}/some/path?sort%5B%5D=f3%2Casc&sort%5B%5D=f4"
115
+ )
103
116
  end
104
117
  end
105
118
 
106
119
  describe "only" do
107
120
  it "should set the _only parameter based on the given values" do
108
- expect(resource.only('f1', 'f2').uri.query).to eq('_only[]=f1&_only[]=f2')
121
+ expect(resource.only('f1', 'f2').uri.to_s).to eq(
122
+ "#{base_url}/some/path?_only%5B%5D=f1&_only%5B%5D=f2"
123
+ )
109
124
  end
110
125
 
111
126
  it "should replace the existing _only parameters" do
112
- expect(resource.only('f1').only('f2', 'f3').uri.query).to eq('_only[]=f2&_only[]=f3')
127
+ expect(resource.only('f1').only('f2', 'f3').uri.to_s).to eq(
128
+ "#{base_url}/some/path?_only%5B%5D=f2&_only%5B%5D=f3"
129
+ )
113
130
  end
114
131
  end
115
132
 
@@ -167,7 +184,7 @@ describe Springboard::Client::Resource do
167
184
  it "should not modify the original resource URI" do
168
185
  request_stub = stub_request(:get, "#{base_url}/some/path?page=1&per_page=1").to_return(response_data)
169
186
  resource.count
170
- expect(resource.uri.to_s).to eq("/some/path")
187
+ expect(resource.uri.to_s).to eq("#{base_url}/some/path")
171
188
  end
172
189
  end
173
190
 
@@ -193,38 +210,32 @@ describe Springboard::Client::Resource do
193
210
  it "should not modify the original resource URI" do
194
211
  request_stub = stub_request(:get, "#{base_url}/some/path?page=1&per_page=1").to_return(response_data)
195
212
  resource.first
196
- expect(resource.uri.to_s).to eq("/some/path")
213
+ expect(resource.uri.to_s).to eq("#{base_url}/some/path")
197
214
  end
198
215
  end
199
216
 
200
217
  describe "embed" do
201
218
  it "should support a single embed" do
202
219
  expect(resource.embed(:thing1).uri.to_s).to eq(
203
- '/some/path?_include[]=thing1'
220
+ "#{base_url}/some/path?_include%5B%5D=thing1"
204
221
  )
205
222
  end
206
223
 
207
224
  it "should support multiple embeds" do
208
225
  expect(resource.embed(:thing1, :thing2, :thing3).uri.to_s).to eq(
209
- '/some/path?_include[]=thing1&_include[]=thing2&_include[]=thing3'
210
- )
211
- end
212
-
213
- it "should merge multiple embed calls" do
214
- expect(resource.embed(:thing1, :thing2).embed(:thing3, :thing4).uri.to_s).to eq(
215
- '/some/path?_include[]=thing1&_include[]=thing2&_include[]=thing3&_include[]=thing4'
226
+ "#{base_url}/some/path?_include%5B%5D=thing1&_include%5B%5D=thing2&_include%5B%5D=thing3"
216
227
  )
217
228
  end
218
229
 
219
230
  it "should merge multiple embed calls" do
220
231
  expect(resource.embed(:thing1, :thing2).embed(:thing3, :thing4).uri.to_s).to eq(
221
- '/some/path?_include[]=thing1&_include[]=thing2&_include[]=thing3&_include[]=thing4'
232
+ "#{base_url}/some/path?_include%5B%5D=thing1&_include%5B%5D=thing2&_include%5B%5D=thing3&_include%5B%5D=thing4"
222
233
  )
223
234
  end
224
235
 
225
236
  it "should merge a call to embed with a manually added _include query param" do
226
237
  expect(resource.query('_include[]' => :thing1).embed(:thing2, :thing3).uri.to_s).to eq(
227
- '/some/path?_include[]=thing1&_include[]=thing2&_include[]=thing3'
238
+ "#{base_url}/some/path?_include%5B%5D=thing1&_include%5B%5D=thing2&_include%5B%5D=thing3"
228
239
  )
229
240
  end
230
241
  end
@@ -61,7 +61,7 @@ describe Springboard::Client::Response do
61
61
  end
62
62
 
63
63
  it "should have the Location header value as its URL" do
64
- expect(response.resource.uri.to_s).to eq('/new/path')
64
+ expect(response.resource.uri.to_s).to eq("#{base_url}/new/path")
65
65
  end
66
66
  end
67
67
 
@@ -70,40 +70,88 @@ describe Springboard::Client::URI do
70
70
  end
71
71
 
72
72
  describe "merge_query_values!" do
73
- it "should call springboard_query_values=" do
74
- uri.query_values = {'a' => '1'}
75
- expect(uri).to receive(:springboard_query_values=).with({'a' => '1', 'b' => '2'})
76
- uri.merge_query_values! 'b' => '2'
73
+ it "should merge the given values with the existing query_values" do
74
+ uri.query_values = {'a' => '1', 'b' => '2'}
75
+ uri.merge_query_values! 'c' => '3'
76
+ expect(uri.query_values).to eq(
77
+ {'a' => '1', 'b' => '2', 'c' => '3'}
78
+ )
77
79
  end
78
80
 
79
- it "should merge the given values with the existing query_values" do
81
+ it "should overwrite the previous values when a new value is given" do
80
82
  uri.query_values = {'a' => '1', 'b' => '2'}
81
- uri.merge_query_values! 'b' => '20', 'c' => '30'
82
- expect(uri.query_values).to eq({'a' => '1', 'b' => '20', 'c' => '30'})
83
+ uri.merge_query_values! 'a' => '3', 'b' => '4'
84
+ expect(uri.query_values).to eq(
85
+ {'a' => '3', 'b' => '4'}
86
+ )
87
+ end
88
+
89
+ it "should overwrite the previous values if a new array is given" do
90
+ uri.query_values = {'a' => '1', 'b' => ['2', '3']}
91
+ uri.merge_query_values! 'b' => ['4', '5']
92
+ expect(uri.query_values).to eq(
93
+ {'a' => '1', 'b' => ['4', '5']}
94
+ )
83
95
  end
84
96
 
85
97
  it "should set the given values if there are no existing query_values" do
86
98
  expect(uri.query_values).to be_nil
87
- uri.merge_query_values! 'b' => '20', 'c' => '30'
88
- expect(uri.query_values).to eq({'b' => '20', 'c' => '30'})
99
+ uri.merge_query_values! 'a' => ['10'], 'b' => '20', 'c' => '30'
100
+ expect(uri.query_values).to eq({'a' => ['10'], 'b' => '20', 'c' => '30'})
89
101
  end
90
102
  end
91
103
 
92
- describe "springboard_query_values=" do
104
+ describe "query_values=" do
105
+ it "should set the string value for the specified key" do
106
+ uri.query_values = {'p1' => '1'}
107
+ expect(uri.query_values).to eq({'p1' => '1'})
108
+ end
109
+
93
110
  it "should preserve empty bracket notation for array params" do
94
111
  uri.query = 'sort[]=f1&sort[]=f2'
95
- uri.__send__(:springboard_query_values=, uri.query_values)
96
- expect(uri.to_s).to eq('/relative/path?sort[]=f1&sort[]=f2')
112
+ uri.query_values = uri.query_values
113
+ expect(uri.to_s).to eq('/relative/path?sort%5B%5D=f1&sort%5B%5D=f2')
114
+ end
115
+
116
+ it "should stringify symbol keys" do
117
+ uri.query_values = {:a => '1'}
118
+ expect(uri.query_values).to eq({'a' => '1'})
97
119
  end
98
120
 
99
121
  it "should stringify boolean param values" do
100
- uri.__send__(:springboard_query_values=, {:p1 => true, :p2 => false})
122
+ uri.query_values = {:p1 => true, :p2 => false}
101
123
  expect(uri.to_s).to eq('/relative/path?p1=true&p2=false')
102
124
  end
103
125
 
104
126
  it "should support hash param values" do
105
- uri.__send__(:springboard_query_values=, {:a => {:b => {:c => 123}}})
106
- expect(uri.to_s).to eq('/relative/path?a[b][c]=123')
127
+ uri.query_values = {:a => {:b => {:c => 123}}}
128
+ expect(uri.to_s).to eq(
129
+ '/relative/path?a=%7B%22b%22%3D%3E%7B%22c%22%3D%3E123%7D%7D'
130
+ )
131
+ end
132
+
133
+ it "should add [] to the key for array values" do
134
+ uri.query_values = {:a => ['1', '2', '3']}
135
+ expect(uri.query).to eq('a%5B%5D=1&a%5B%5D=2&a%5B%5D=3')
136
+ end
137
+
138
+ it "should remove duplicate values for the same key" do
139
+ uri.query_values = {:a => ['1', '1', '2']}
140
+ expect(uri.query_values).to eq({'a' => ['1', '2']})
141
+ end
142
+ end
143
+
144
+ describe "query_values" do
145
+ it "should return the current query values" do
146
+ uri.query = 'sort[]=f1&sort[]=f2&per_page=all'
147
+ uri.query_values = uri.query_values
148
+ expect(uri.query_values).to eq({'sort' => ['f1', 'f2'], 'per_page' => 'all'})
149
+ end
150
+
151
+ it "should remove [] from array keys" do
152
+ uri.query = 'sort[]=f1&sort[]=f2'
153
+ uri.query_values = uri.query_values
154
+ expect(uri.query_values).to eq({'sort' => ['f1', 'f2']})
107
155
  end
108
156
  end
109
157
  end
@@ -84,8 +84,28 @@ describe Springboard::Client do
84
84
  end
85
85
 
86
86
  describe "[]" do
87
- it "should return a resource object with the given path and client" do
87
+ it "should return a resource object with the given path string and client" do
88
88
  expect(client["path"]).to be_a Springboard::Client::Resource
89
+ expect(client[:path].uri.to_s).to eq("#{base_url}/path")
90
+ end
91
+
92
+ it "should return a resource object when given a path as a symbol" do
93
+ expect(client[:path]).to be_a Springboard::Client::Resource
94
+ expect(client[:path].uri.to_s).to eq("#{base_url}/path")
95
+ end
96
+
97
+ it "should return a resource object when given a path as a URI" do
98
+ uri = 'path'.to_uri
99
+ expect(client[uri]).to be_a Springboard::Client::Resource
100
+ expect(client[uri].uri.to_s).to eq("#{base_url}/path")
101
+ end
102
+
103
+ it "should not duplicate the base URI path" do
104
+ expect(client['api/subpath'].uri.to_s).to eq("#{base_url}/subpath")
105
+ end
106
+
107
+ it "should not duplicate the base URI" do
108
+ expect(client["#{base_url}/subpath"].uri.to_s).to eq("#{base_url}/subpath")
89
109
  end
90
110
  end
91
111
 
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'springboard-retail'
3
- s.version = '4.2.1'
3
+ s.version = '4.3.0'
4
4
  s.platform = Gem::Platform::RUBY
5
5
  s.authors = ['Jay Stotz']
6
6
  s.summary = 'Springboard Retail API client library'
@@ -8,7 +8,6 @@ Gem::Specification.new do |s|
8
8
  s.required_rubygems_version = '>= 1.3.6'
9
9
 
10
10
  s.add_runtime_dependency 'patron', '0.4.18'
11
- s.add_runtime_dependency 'addressable', '~> 2.2.8'
12
11
  s.add_runtime_dependency 'json', '>= 1.7.4'
13
12
  s.add_runtime_dependency 'hashie'
14
13
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: springboard-retail
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.2.1
4
+ version: 4.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jay Stotz
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-07-31 00:00:00.000000000 Z
11
+ date: 2018-09-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: patron
@@ -24,20 +24,6 @@ dependencies:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
26
  version: 0.4.18
27
- - !ruby/object:Gem::Dependency
28
- name: addressable
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: 2.2.8
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: 2.2.8
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: json
43
29
  requirement: !ruby/object:Gem::Requirement
@@ -104,7 +90,7 @@ files:
104
90
  - vendor/cache/crack-0.4.2.gem
105
91
  - vendor/cache/diff-lcs-1.2.5.gem
106
92
  - vendor/cache/docile-1.1.5.gem
107
- - vendor/cache/hashie-3.5.7.gem
93
+ - vendor/cache/hashie-3.6.0.gem
108
94
  - vendor/cache/json-2.1.0.gem
109
95
  - vendor/cache/method_source-0.8.2.gem
110
96
  - vendor/cache/mime-types-2.4.3.gem