api-client 2.0.2 → 2.0.3
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.
- data/CHANGELOG.md +25 -1
- data/README.md +13 -2
- data/examples/config/initializers/api-client.rb +3 -1
- data/examples/controllers/user_controller.rb +1 -1
- data/examples/models/admin.rb +2 -2
- data/examples/models/author.rb +3 -0
- data/examples/models/book.rb +5 -0
- data/examples/models/group.rb +1 -0
- data/examples/models/user.rb +2 -2
- data/examples/scripts/example.rb +42 -0
- data/lib/api-client.rb +1 -0
- data/lib/api-client/class_methods.rb +8 -4
- data/lib/api-client/dispatcher/typhoeus.rb +5 -5
- data/lib/api-client/instance_methods.rb +29 -5
- data/lib/api-client/version.rb +1 -1
- metadata +10 -4
data/CHANGELOG.md
CHANGED
@@ -1,10 +1,34 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
|
+
## v2.0.3
|
4
|
+
|
5
|
+
* Fix put and patch requisitions.
|
6
|
+
|
7
|
+
## v2.0.2
|
8
|
+
|
9
|
+
* Changed to_hash method behavior to return a root node.
|
10
|
+
* Fix instance requisitions by send a root node.
|
11
|
+
|
12
|
+
## v2.0.1
|
13
|
+
|
14
|
+
* Removed trailing slash from post requisitions.
|
15
|
+
|
16
|
+
## v2.0.0
|
17
|
+
|
18
|
+
* Fix typhoeus requisitions by changing params method to body.
|
19
|
+
* Add Support to configure header globally.
|
20
|
+
* Improved readability by changing methods names.
|
21
|
+
|
22
|
+
## v2.0.0.rc2
|
23
|
+
|
24
|
+
* Fix initialization with root nodes for nested objects.
|
25
|
+
* Add Support for object initialization with strings as keys.
|
26
|
+
|
3
27
|
## v2.0.0.rc1
|
4
28
|
|
5
29
|
* Add Support for global url.
|
6
30
|
* Add Support for instance requests.
|
7
|
-
* Changed behavior of request methods to only accepts the resource id if needed
|
31
|
+
* Changed behavior of request methods to only accepts the resource id if needed.
|
8
32
|
|
9
33
|
## v1.10.0
|
10
34
|
|
data/README.md
CHANGED
@@ -84,7 +84,15 @@ In Some cases, that is not the required behavior. To Redefine it, use remote_obj
|
|
84
84
|
|
85
85
|
```ruby
|
86
86
|
class Admin < ApiClient::Base
|
87
|
-
self.
|
87
|
+
self.root_node = 'user'
|
88
|
+
end
|
89
|
+
```
|
90
|
+
|
91
|
+
To specify a resource path different from the expected, you can overwrite the behavior by setting resouce_path:
|
92
|
+
|
93
|
+
```ruby
|
94
|
+
class Admin < ApiClient::Base
|
95
|
+
self.resource_path = 'users?type=admin'
|
88
96
|
end
|
89
97
|
```
|
90
98
|
|
@@ -98,6 +106,9 @@ end
|
|
98
106
|
|
99
107
|
This code will create a setter and a getter for houses and cars and initialize the respective class.
|
100
108
|
|
109
|
+
Since version 2.0.0, it is possible to make api calls from the object. The syntax is pretty much the same.
|
110
|
+
It will make the call and update the fields with the response. Look at the examples folder to see more code examples
|
111
|
+
|
101
112
|
## TODO
|
102
113
|
* Add support for parallel requests
|
103
114
|
* Add more Response Handlers
|
@@ -112,4 +123,4 @@ This code will create a setter and a getter for houses and cars and initialize t
|
|
112
123
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
113
124
|
3. Commit your changes (`git commit -am 'Added some feature'`)
|
114
125
|
4. Push to the branch (`git push origin my-new-feature`)
|
115
|
-
5. Create new Pull Request
|
126
|
+
5. Create new Pull Request
|
data/examples/models/admin.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
class Admin < ApiClient::Base
|
2
|
-
self.
|
2
|
+
self.resource_path = 'users?type=admin'
|
3
3
|
self.association = { :groups => 'Group' }
|
4
4
|
|
5
5
|
# Any of this fields can be called to manage rails form.
|
6
|
-
attr_accessor :
|
6
|
+
attr_accessor :email, :password, :password_confirmation
|
7
7
|
|
8
8
|
# Validations will work as well
|
9
9
|
validates :email, :presence => true, :uniqueness => true
|
data/examples/models/group.rb
CHANGED
data/examples/models/user.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
class User < ApiClient::Base
|
2
|
-
self.
|
2
|
+
self.associations = { :groups => 'Group', :books => 'Book' }
|
3
3
|
|
4
4
|
# Any of this fields can be called to manage rails form.
|
5
|
-
attr_accessor :
|
5
|
+
attr_accessor :email, :password, :password_confirmation, :type
|
6
6
|
|
7
7
|
# Validations will work as well
|
8
8
|
validates :email, :presence => true, :uniqueness => true
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'api-client'
|
2
|
+
|
3
|
+
# Make a get requisition to http://api.example.com/users and initialize an user object for each user returned
|
4
|
+
users = User.collection
|
5
|
+
|
6
|
+
# Get the first user
|
7
|
+
user = users.first
|
8
|
+
|
9
|
+
# Set the attribute type to 'admin'
|
10
|
+
user.type = 'admin'
|
11
|
+
|
12
|
+
# Make a put requisition to http://api.example.com/users/:id to update the user attributes
|
13
|
+
user.put # or user.patch
|
14
|
+
|
15
|
+
# Iterate over the books of the given user
|
16
|
+
user.books.each do |book|
|
17
|
+
# Make a get requisition to http://api.example.com/books/:id to update the given book attributes
|
18
|
+
book.get
|
19
|
+
# Make a delete requisition to http://api.example.com/books/:id destroy the object if the publish_date is equal '1990'
|
20
|
+
book.delete if book.publish_date == '1990'
|
21
|
+
end
|
22
|
+
|
23
|
+
# Make a get requisition to http://api.example.com/authors and initialize an author object for each author returned
|
24
|
+
authors = Author.collection
|
25
|
+
|
26
|
+
# Iterate over the authors
|
27
|
+
authors.each do |author|
|
28
|
+
# Set @author to the current author if it is the one
|
29
|
+
@author = author if author.name == 'Author Name'
|
30
|
+
end
|
31
|
+
|
32
|
+
# Initialize a new object
|
33
|
+
book = Book.new
|
34
|
+
|
35
|
+
# Set the name on the book object
|
36
|
+
book.name = 'book'
|
37
|
+
# Set the author_id of the book object with the chosen author id
|
38
|
+
book.author_id = @author.id
|
39
|
+
# Set the publish date of the book object
|
40
|
+
book.publish_date = '2002'
|
41
|
+
# Make a post requisition to http://api.example.com/books to create the book with the object attributes
|
42
|
+
book.post
|
data/lib/api-client.rb
CHANGED
@@ -41,8 +41,8 @@ module ApiClient
|
|
41
41
|
# @param [Hash] attributes hash with the attributes to send.
|
42
42
|
# @param [Hash] header hash with the header options.
|
43
43
|
# @return [Base] the object initialized.
|
44
|
-
def put(
|
45
|
-
url = "#{ApiClient.config.path}#{self.resource_path}
|
44
|
+
def put(attributes, header = {})
|
45
|
+
url = "#{ApiClient.config.path}#{self.resource_path}"
|
46
46
|
response = ApiClient::Dispatcher.put(url, attributes, header)
|
47
47
|
params = ApiClient::Parser.response(response, url)
|
48
48
|
build(params)
|
@@ -54,8 +54,8 @@ module ApiClient
|
|
54
54
|
# @param [Hash] attributes hash with the attributes to send.
|
55
55
|
# @param [Hash] header hash with the header options.
|
56
56
|
# @return [Base] the object initialized.
|
57
|
-
def patch(
|
58
|
-
url = "#{ApiClient.config.path}#{self.resource_path}
|
57
|
+
def patch(attributes, header = {})
|
58
|
+
url = "#{ApiClient.config.path}#{self.resource_path}"
|
59
59
|
response = ApiClient::Dispatcher.patch(url, attributes, header)
|
60
60
|
params = ApiClient::Parser.response(response, url)
|
61
61
|
build(params)
|
@@ -73,6 +73,10 @@ module ApiClient
|
|
73
73
|
build(params)
|
74
74
|
end
|
75
75
|
|
76
|
+
# Removes the root node attribute if found.
|
77
|
+
#
|
78
|
+
# @param [Hash] attributes the hash with attributes.
|
79
|
+
# @return [Hash] the hash with attributes without the root node.
|
76
80
|
def remove_root(attributes = {})
|
77
81
|
attributes = attributes[self.root_node.to_sym] if attributes.key?(self.root_node.to_sym)
|
78
82
|
attributes = attributes[self.root_node.to_s] if attributes.key?(self.root_node.to_s)
|
@@ -8,7 +8,7 @@ module ApiClient::Dispatcher::Typhoeus
|
|
8
8
|
# @param [Hash] header attributes of the request.
|
9
9
|
# @return [Typhoeus::Request] the response object.
|
10
10
|
def self.get(url, header = {})
|
11
|
-
::Typhoeus
|
11
|
+
::Typhoeus.get(url, :headers => ApiClient.config.header.merge(header))
|
12
12
|
end
|
13
13
|
|
14
14
|
# Make a post request and returns it.
|
@@ -18,7 +18,7 @@ module ApiClient::Dispatcher::Typhoeus
|
|
18
18
|
# @param [Hash] header attributes of the request.
|
19
19
|
# @return [Typhoeus::Request] the response object.
|
20
20
|
def self.post(url, args, header = {})
|
21
|
-
::Typhoeus
|
21
|
+
::Typhoeus.post(url, :body => args, :headers => ApiClient.config.header.merge(header))
|
22
22
|
end
|
23
23
|
|
24
24
|
# Make a put request and returns it.
|
@@ -28,7 +28,7 @@ module ApiClient::Dispatcher::Typhoeus
|
|
28
28
|
# @param [Hash] header attributes of the request.
|
29
29
|
# @return [Typhoeus::Request] the response object.
|
30
30
|
def self.put(url, args, header = {})
|
31
|
-
::Typhoeus
|
31
|
+
::Typhoeus.put(url, :body => args, :headers => ApiClient.config.header.merge(header))
|
32
32
|
end
|
33
33
|
|
34
34
|
# Make a patch request and returns it.
|
@@ -38,7 +38,7 @@ module ApiClient::Dispatcher::Typhoeus
|
|
38
38
|
# @param [Hash] header attributes of the request.
|
39
39
|
# @return [Typhoeus::Request] the response object.
|
40
40
|
def self.patch(url, args, header = {})
|
41
|
-
::Typhoeus
|
41
|
+
::Typhoeus.patch(url, :body => args, :headers => ApiClient.config.header.merge(header))
|
42
42
|
end
|
43
43
|
|
44
44
|
# Make a delete request and returns it.
|
@@ -47,6 +47,6 @@ module ApiClient::Dispatcher::Typhoeus
|
|
47
47
|
# @param [Hash] header attributes of the request.
|
48
48
|
# @return [Typhoeus::Request] the response object.
|
49
49
|
def self.delete(url, header = {})
|
50
|
-
::Typhoeus
|
50
|
+
::Typhoeus.delete(url, :headers => ApiClient.config.header.merge(header))
|
51
51
|
end
|
52
52
|
end
|
@@ -3,7 +3,7 @@ module ApiClient
|
|
3
3
|
module InstanceMethods
|
4
4
|
# Update an object based on a hash of attributes.
|
5
5
|
#
|
6
|
-
# @param [Hash]
|
6
|
+
# @param [Hash] attributes hash of attributes.
|
7
7
|
# @return [Base] the update_attributes object.
|
8
8
|
def update_attributes(attributes)
|
9
9
|
hash = remove_root(attributes)
|
@@ -14,6 +14,10 @@ module ApiClient
|
|
14
14
|
self
|
15
15
|
end
|
16
16
|
|
17
|
+
# Make a get requisition and update the object with the response.
|
18
|
+
#
|
19
|
+
# @param [Hash] header hash with the header options.
|
20
|
+
# @return [Base] the object updated.
|
17
21
|
def get(header = {})
|
18
22
|
url = "#{ApiClient.config.path}#{self.class.resource_path}/#{id}"
|
19
23
|
response = ApiClient::Dispatcher.get(url, header)
|
@@ -21,6 +25,10 @@ module ApiClient
|
|
21
25
|
update_attributes(attributes)
|
22
26
|
end
|
23
27
|
|
28
|
+
# Make a post requisition and update the object with the response.
|
29
|
+
#
|
30
|
+
# @param [Hash] header hash with the header options.
|
31
|
+
# @return [Base] the object updated.
|
24
32
|
def post(header = {})
|
25
33
|
url = "#{ApiClient.config.path}#{self.class.resource_path}"
|
26
34
|
response = ApiClient::Dispatcher.post(url, self.to_hash, header)
|
@@ -28,27 +36,43 @@ module ApiClient
|
|
28
36
|
update_attributes(attributes)
|
29
37
|
end
|
30
38
|
|
39
|
+
# Make a put requisition and update the object with the response.
|
40
|
+
#
|
41
|
+
# @param [Hash] header hash with the header options.
|
42
|
+
# @return [Base] the object updated.
|
31
43
|
def put(header = {})
|
32
|
-
url = "#{ApiClient.config.path}#{self.class.resource_path}
|
44
|
+
url = "#{ApiClient.config.path}#{self.class.resource_path}"
|
33
45
|
response = ApiClient::Dispatcher.put(url, self.to_hash, header)
|
34
46
|
attributes = ApiClient::Parser.response(response, url)
|
35
47
|
update_attributes(attributes)
|
36
48
|
end
|
37
49
|
|
50
|
+
# Make a patch requisition and update the object with the response.
|
51
|
+
#
|
52
|
+
# @param [Hash] header hash with the header options.
|
53
|
+
# @return [Base] the object updated.
|
38
54
|
def patch(header = {})
|
39
|
-
url = "#{ApiClient.config.path}#{self.class.resource_path}
|
40
|
-
response = ApiClient::Dispatcher.
|
55
|
+
url = "#{ApiClient.config.path}#{self.class.resource_path}"
|
56
|
+
response = ApiClient::Dispatcher.patch(url, self.to_hash, header)
|
41
57
|
attributes = ApiClient::Parser.response(response, url)
|
42
58
|
update_attributes(attributes)
|
43
59
|
end
|
44
60
|
|
61
|
+
# Make a delete requisition and update the object with the response.
|
62
|
+
#
|
63
|
+
# @param [Hash] header hash with the header options.
|
64
|
+
# @return [Base] the object updated.
|
45
65
|
def delete(header = {})
|
46
66
|
url = "#{ApiClient.config.path}#{self.class.resource_path}/#{id}"
|
47
|
-
response = ApiClient::Dispatcher.
|
67
|
+
response = ApiClient::Dispatcher.delete(url, header)
|
48
68
|
attributes = ApiClient::Parser.response(response, url)
|
49
69
|
update_attributes(attributes)
|
50
70
|
end
|
51
71
|
|
72
|
+
# Removes the root node attribute if found.
|
73
|
+
#
|
74
|
+
# @param [Hash] attributes the hash with attributes.
|
75
|
+
# @return [Hash] the hash with attributes without the root node.
|
52
76
|
def remove_root(attributes = {})
|
53
77
|
attributes = attributes[self.class.root_node.to_sym] if attributes.key?(self.class.root_node.to_sym)
|
54
78
|
attributes = attributes[self.class.root_node.to_s] if attributes.key?(self.class.root_node.to_s)
|
data/lib/api-client/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: api-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-06-
|
12
|
+
date: 2013-06-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -144,8 +144,11 @@ files:
|
|
144
144
|
- examples/controllers/application_controller.rb
|
145
145
|
- examples/controllers/user_controller.rb
|
146
146
|
- examples/models/admin.rb
|
147
|
+
- examples/models/author.rb
|
148
|
+
- examples/models/book.rb
|
147
149
|
- examples/models/group.rb
|
148
150
|
- examples/models/user.rb
|
151
|
+
- examples/scripts/example.rb
|
149
152
|
- gemfiles/Gemfile.net_http
|
150
153
|
- gemfiles/Gemfile.typhoeus
|
151
154
|
- lib/api-client.rb
|
@@ -194,7 +197,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
194
197
|
version: '0'
|
195
198
|
segments:
|
196
199
|
- 0
|
197
|
-
hash:
|
200
|
+
hash: -3513012909283666012
|
198
201
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
199
202
|
none: false
|
200
203
|
requirements:
|
@@ -203,7 +206,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
203
206
|
version: '0'
|
204
207
|
segments:
|
205
208
|
- 0
|
206
|
-
hash:
|
209
|
+
hash: -3513012909283666012
|
207
210
|
requirements: []
|
208
211
|
rubyforge_project:
|
209
212
|
rubygems_version: 1.8.25
|
@@ -215,8 +218,11 @@ test_files:
|
|
215
218
|
- examples/controllers/application_controller.rb
|
216
219
|
- examples/controllers/user_controller.rb
|
217
220
|
- examples/models/admin.rb
|
221
|
+
- examples/models/author.rb
|
222
|
+
- examples/models/book.rb
|
218
223
|
- examples/models/group.rb
|
219
224
|
- examples/models/user.rb
|
225
|
+
- examples/scripts/example.rb
|
220
226
|
- gemfiles/Gemfile.net_http
|
221
227
|
- gemfiles/Gemfile.typhoeus
|
222
228
|
- spec/api-client/base_spec.rb
|