api-resource 0.7.1 → 0.7.2

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: 12920e4c95319de6f1ad5bc8319ba6782ef2d1bd
4
- data.tar.gz: d1e236843cf77d8ceb0e10c513352070a0a7b434
3
+ metadata.gz: 5d337a40cfc027bdc85680315d1b0c87557a7e1b
4
+ data.tar.gz: cff63a9be56dd173e1a4df49be49d6397efc10e6
5
5
  SHA512:
6
- metadata.gz: 6570f8461faab3595bd5c7362ace4a92799da969c46bc5fe73d5e1936a7f93b0af26527d9fd0749a66aa57c6db22f08735235be2d559972e7deccdf85fbdde2c
7
- data.tar.gz: f4e2bbc66ef4aaaf70ea71f00ce82cc79995a48d4e0f09fe78799accb4b10db60b164c21c4ec8722ac76836ce7717bd2054a809f8e24c4895cbf29146e68966f
6
+ metadata.gz: dcf0645d2a1e55149238a85dae91fcc374bc6406e0034dfc0ab3258a62568012f8871500e28b8c30fbeb6acbbfe020c678efdc630d757c5eece7b3255972e505
7
+ data.tar.gz: d27781a96ca4e611aef5bcab3ae42747564210648b7708d1e8262a0acb204f9b91f3c2daa89558b22719ebab5467ab7f9b716c5ce4dd1528c78238823fa9a882
@@ -162,7 +162,7 @@ module ApiResource
162
162
  def self.method_missing(m, *args, &_)
163
163
  case (m)
164
164
  when /^by_(.+)/
165
- resource_path = build_url($1.pluralize, args[0], self.resource_path)
165
+ resource_path = build_path($1.pluralize, args[0], self.resource_path)
166
166
  Class.new(self) do
167
167
  self.resource_path = resource_path
168
168
  end
@@ -174,7 +174,7 @@ module ApiResource
174
174
  def method_missing(m, *args, &_)
175
175
  case m
176
176
  when /^by_(.+)/
177
- self.resource_path = self.class.build_url($1.pluralize, args[0], resource_path)
177
+ self.resource_path = self.class.build_path($1.pluralize, args[0], resource_path)
178
178
  self
179
179
  else
180
180
  super
@@ -240,7 +240,11 @@ module ApiResource
240
240
 
241
241
  def self.build_url(*paths)
242
242
  raise RuntimeError, 'Empty base_url' if base_url.blank?
243
- URI::parse(base_url).merge(paths.map { |p| "#{URI.encode p.to_s}" }.join('/')).to_s
243
+ URI::parse(base_url).merge(build_path(*paths)).to_s
244
+ end
245
+
246
+ def self.build_path(*paths)
247
+ paths.map { |p| URI.encode p.to_s.gsub(%r{\A/*(.*?)/*\z}, '\1') }.join('/')
244
248
  end
245
249
 
246
250
  def self.log=(param)
@@ -1,3 +1,3 @@
1
1
  module ApiResource
2
- VERSION = '0.7.1'
2
+ VERSION = '0.7.2'
3
3
  end
data/spec/blog_api.rb ADDED
@@ -0,0 +1,20 @@
1
+ module BlogApi
2
+ class Resource < ApiResource::Resource
3
+ self.base_url = 'http://api.example.com'
4
+ end
5
+
6
+ class Category < Resource
7
+ attr_accessor :id, :name
8
+ end
9
+
10
+ class Blog < Resource
11
+ attr_accessor :id, :title
12
+
13
+ def do_stuff_method
14
+ end
15
+ end
16
+
17
+ class Tag < Resource
18
+ attr_accessor :id, :name
19
+ end
20
+ end
@@ -0,0 +1,34 @@
1
+ require_relative 'blog_api'
2
+
3
+ RSpec.describe ApiResource::Resource do
4
+
5
+ class MyResource < ApiResource::Resource; end
6
+
7
+ let(:resource_class) { MyResource }
8
+
9
+ let(:resource_name) { MyResource.to_s.tableize }
10
+
11
+ it 'return tabeleized class name' do
12
+ expect(resource_class.resource_path).to eq(resource_name)
13
+ end
14
+
15
+ context '::by_resource' do
16
+ it 'prepends parent resource path' do
17
+ expect(resource_class.by_foo_bar('44').resource_path).to eq("foo_bars/44/#{ resource_name }")
18
+ end
19
+
20
+ it 'prepends multiple parent resource paths' do
21
+ expect(resource_class.by_bar(15).by_foo(88).resource_path).to eq("foos/88/bars/15/#{ resource_name }")
22
+ end
23
+ end
24
+
25
+ context '#by_resource' do
26
+ it 'prepends parent resource path' do
27
+ expect(resource_class.new.by_foo_bar('44').resource_path).to eq("foo_bars/44/#{ resource_name }")
28
+ end
29
+
30
+ it 'prepends multiple parent resource paths' do
31
+ expect(resource_class.new.by_bar(15).by_foo(88).resource_path).to eq("foos/88/bars/15/#{ resource_name }")
32
+ end
33
+ end
34
+ end
@@ -1,25 +1,6 @@
1
- RSpec.describe ApiResource::Resource do
2
- module BlogApi
3
- class Resource < ApiResource::Resource
4
- self.base_url = 'http://api.example.com'
5
- end
6
-
7
- class Category < Resource
8
- attr_accessor :id, :name
9
- end
10
-
11
- class Blog < Resource
12
- attr_accessor :id, :title
13
-
14
- def do_stuff_method
15
- end
16
- end
17
-
18
- class Tag < Resource
19
- attr_accessor :id, :name
20
- end
21
- end
1
+ require_relative 'blog_api'
22
2
 
3
+ RSpec.describe ApiResource::Resource do
23
4
  before do
24
5
  @expected_resources = { data: [{ id: 1257, title: 'Hello' },
25
6
  { id: 33, title: 'World' },
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: api-resource
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.1
4
+ version: 0.7.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chaker Nakhli
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-13 00:00:00.000000000 Z
11
+ date: 2015-04-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: simple-hmac
@@ -135,6 +135,8 @@ files:
135
135
  - lib/api-resource.rb
136
136
  - lib/api-resource/resource.rb
137
137
  - lib/api-resource/version.rb
138
+ - spec/blog_api.rb
139
+ - spec/resource_path_spec.rb
138
140
  - spec/resource_spec.rb
139
141
  - spec/spec_helper.rb
140
142
  homepage: http://www.wizypay.com
@@ -163,5 +165,7 @@ signing_key:
163
165
  specification_version: 4
164
166
  summary: A lightweight REST API access library.
165
167
  test_files:
168
+ - spec/blog_api.rb
169
+ - spec/resource_path_spec.rb
166
170
  - spec/resource_spec.rb
167
171
  - spec/spec_helper.rb