api-client 1.3.0 → 1.4.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.
@@ -1,5 +1,9 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## v1.3.0
4
+
5
+ * functionality to read args with a root node added.
6
+
3
7
  ## v1.2.0
4
8
 
5
9
  * methods put, patch and delete added.
@@ -0,0 +1,18 @@
1
+ class ApplicationController < ActionController::Base
2
+ protect_from_forgery
3
+ respond_to :html
4
+
5
+ # NotFound errors will be redirected to the action not_found while any other will be redirected to the action generic.
6
+ rescue_from ApiClient::Exceptions::NotFound, :with => :not_found
7
+ rescue_from ApiClient::Exceptions::Generic, :with => :generic
8
+
9
+ # This code is only for example purposes.
10
+ # Any behavior can be executed here. Just write your own.
11
+ def not_found
12
+ ApplicationMailer.send_not_found_notice.deliver
13
+ end
14
+
15
+ def generic
16
+ ApplicationMailer.send_generic_error.deliver
17
+ end
18
+ end
@@ -0,0 +1,8 @@
1
+ class UserController < ApplicationController
2
+ # It will works with respond_with.
3
+ # Your action should looks like any other one: A model with a method call. =D
4
+ def index
5
+ @user = User.get("api.example.com/users")
6
+ respond_with(@users)
7
+ end
8
+ end
@@ -0,0 +1,4 @@
1
+ class User < ApiClient::Base
2
+ # Any of this fields can be called to manage rails form.
3
+ attr_accessor :id, :email, :password, :password_confirmation
4
+ end
@@ -3,6 +3,7 @@ require "api-client/version"
3
3
  # High Level Namespace of the library ApiClient.
4
4
  module ApiClient
5
5
  autoload :Exceptions, 'api-client/exceptions'
6
+ autoload :Errors, 'api-client/errors'
6
7
  autoload :Base, 'api-client/base'
7
8
  autoload :Dispatcher, 'api-client/dispatcher'
8
9
  autoload :Parser, 'api-client/parser'
@@ -14,7 +14,10 @@ class ApiClient::Base
14
14
  extend ApiClient::Parser
15
15
  extend ApiClient::Dispatcher
16
16
 
17
- # Initialize an object based on a hash of a attributes.
17
+ # @params [Hash] Hash of errors.
18
+ attr_writer :errors
19
+
20
+ # Initialize an object based on a hash of attributes.
18
21
  #
19
22
  # @param [Hash] attributes object attributes.
20
23
  # @return [Base] the object initialized.
@@ -26,11 +29,18 @@ class ApiClient::Base
26
29
 
27
30
  # Return if a object is persisted on the database or not.
28
31
  #
29
- # @return [False] it will always return false.
32
+ # @return [False] always return false.
30
33
  def persisted?
31
34
  false
32
35
  end
33
36
 
37
+ # Return the an array of errors if existent, otherwise instantiate a new ApiClient::Errors object with self.
38
+ #
39
+ # @return [ApiClient::Errors] the validation errors.
40
+ def errors
41
+ @errors ||= ApiClient::Errors.new(self)
42
+ end
43
+
34
44
  # Make a get request and returns a new instance with te response attributes.
35
45
  #
36
46
  # @param [String] url of the api request.
@@ -0,0 +1,17 @@
1
+ require "active_model"
2
+
3
+ # ApiClient::Errors provide extra functionality to ActiveModel::Errors.
4
+ class ApiClient::Errors < ActiveModel::Errors
5
+ # Create a hash of attributes with unique validation error messages.
6
+ #
7
+ # Example:
8
+ # user.errors.unique_messages #=> { :name => [ can't be empty and is invalid ]}
9
+ #
10
+ # @return [Hash] The hash of attributes with a unique error message.
11
+ #
12
+ def unique_messages
13
+ errors = {}
14
+ to_hash.each do |attribute, messages| errors[attribute] = messages.join(" and ") end
15
+ errors
16
+ end
17
+ end
@@ -1,5 +1,5 @@
1
1
  # High Level Namespace of the library ApiClient.
2
2
  module ApiClient
3
3
  # Version of the library.
4
- VERSION = "1.3.0"
5
- end
4
+ VERSION = "1.4.0"
5
+ end
@@ -22,4 +22,26 @@ describe ApiClient::Base do
22
22
  User.new.should_not be_persisted
23
23
  end
24
24
  end
25
+
26
+ describe "#errors" do
27
+ context "when @errors is not nil" do
28
+ before :each do
29
+ @user = User.new(:errors => {:a => :bc})
30
+ end
31
+
32
+ it "should return the errors" do
33
+ @user.errors.should == {:a => :bc}
34
+ end
35
+ end
36
+
37
+ context "when @errors is nil" do
38
+ before :each do
39
+ @user = User.new
40
+ end
41
+
42
+ it "should instantiate a new instance of ApiClient::Errors" do
43
+ @user.errors.should be_an_instance_of(ApiClient::Errors)
44
+ end
45
+ end
46
+ end
25
47
  end
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+
3
+ describe ApiClient::Errors do
4
+ describe "#unique_messages" do
5
+ before :each do
6
+ @user = User.new
7
+ @user.valid?
8
+ end
9
+
10
+ it "should set #a" do
11
+ @user.errors.unique_messages.should == { :a => "can't be blank and is not included in the list" }
12
+ end
13
+ end
14
+ end
@@ -6,4 +6,7 @@ require File.dirname(__FILE__) + "/../lib/api-client"
6
6
 
7
7
  class User < ApiClient::Base
8
8
  attr_accessor :a, :b
9
+
10
+ validates_presence_of :a
11
+ validates_inclusion_of :a, :in => %w(a A)
9
12
  end
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: 1.3.0
4
+ version: 1.4.0
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: 2012-07-06 00:00:00.000000000 Z
12
+ date: 2012-07-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -123,9 +123,13 @@ files:
123
123
  - README.md
124
124
  - Rakefile
125
125
  - api-client.gemspec
126
+ - examples/controllers/application_controller.rb
127
+ - examples/controllers/user_controller.rb
128
+ - examples/models/user.rb
126
129
  - lib/api-client.rb
127
130
  - lib/api-client/base.rb
128
131
  - lib/api-client/dispatcher.rb
132
+ - lib/api-client/errors.rb
129
133
  - lib/api-client/exceptions.rb
130
134
  - lib/api-client/exceptions/bad_gateway.rb
131
135
  - lib/api-client/exceptions/connection_refused.rb
@@ -144,6 +148,7 @@ files:
144
148
  - spec/api-client/base/put_spec.rb
145
149
  - spec/api-client/base_spec.rb
146
150
  - spec/api-client/dispatcher_spec.rb
151
+ - spec/api-client/errors_spec.rb
147
152
  - spec/api-client/parser_spec.rb
148
153
  - spec/spec_helper.rb
149
154
  homepage: ''
@@ -158,18 +163,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
158
163
  - - ! '>='
159
164
  - !ruby/object:Gem::Version
160
165
  version: '0'
161
- segments:
162
- - 0
163
- hash: -2404782696775397333
164
166
  required_rubygems_version: !ruby/object:Gem::Requirement
165
167
  none: false
166
168
  requirements:
167
169
  - - ! '>='
168
170
  - !ruby/object:Gem::Version
169
171
  version: '0'
170
- segments:
171
- - 0
172
- hash: -2404782696775397333
173
172
  requirements: []
174
173
  rubyforge_project:
175
174
  rubygems_version: 1.8.24