restfulness 0.2.3 → 0.2.4
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 +4 -4
 - data/README.md +29 -1
 - data/lib/restfulness/request.rb +5 -0
 - data/lib/restfulness/resource.rb +11 -0
 - data/lib/restfulness/version.rb +1 -1
 - data/lib/restfulness.rb +2 -0
 - data/restfulness.gemspec +1 -0
 - data/spec/spec_helper.rb +3 -0
 - data/spec/unit/request_spec.rb +11 -0
 - data/spec/unit/resource_spec.rb +40 -1
 - metadata +16 -2
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: cfa898034332002c6aca448027bc52cf29abfbd7
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 17961f1c4475131c07321a775575b7c32f66360a
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 493a6d814a922764739e3698bea3a8bf16573bb207f940b0f240f7e70a27c50a9607cc2a3e5d7ad2053ddad95593109fd8370e591e07669cbbd0f6ec23d6185c
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: a62d90e70f22d2db78e0df083ecaf77c8fa769b6c2372874ad0b88b544cd963a95d8d5ac35d6d064f2aac6d6c56afcba6a7ce1969f20f27b493394c4723ae109
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -255,6 +255,30 @@ class ProjectResource < Restfulness::Resource 
     | 
|
| 
       255 
255 
     | 
    
         
             
            end
         
     | 
| 
       256 
256 
     | 
    
         
             
            ```
         
     | 
| 
       257 
257 
     | 
    
         | 
| 
      
 258 
     | 
    
         
            +
            #### I18n in Resources
         
     | 
| 
      
 259 
     | 
    
         
            +
             
     | 
| 
      
 260 
     | 
    
         
            +
            Restfulness uses the [http_accept_language](https://github.com/iain/http_accept_language) gem to automatically handle the `Accept-Language` header coming in from a client. After trying to make a match between the available locales, it will automatically set the `I18n.locale`. You can access the http_accept_language parser via the `request.http_accept_language` method.
         
     | 
| 
      
 261 
     | 
    
         
            +
             
     | 
| 
      
 262 
     | 
    
         
            +
            For most APIs this should work great, especially for mobile applications where this header is automatically set by the phone. There may however be situations where you need a bit more control. If a user has a preferred language setting for example.
         
     | 
| 
      
 263 
     | 
    
         
            +
             
     | 
| 
      
 264 
     | 
    
         
            +
            Resources contain two protected methods that can be overwritten if you need more precise control. This is what they look like in the Restfulness code:
         
     | 
| 
      
 265 
     | 
    
         
            +
             
     | 
| 
      
 266 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 267 
     | 
    
         
            +
            protected
         
     | 
| 
      
 268 
     | 
    
         
            +
             
     | 
| 
      
 269 
     | 
    
         
            +
            def locale
         
     | 
| 
      
 270 
     | 
    
         
            +
              request.http_accept_language.compatible_language_from(I18n.available_locales)
         
     | 
| 
      
 271 
     | 
    
         
            +
            end
         
     | 
| 
      
 272 
     | 
    
         
            +
             
     | 
| 
      
 273 
     | 
    
         
            +
            def set_locale
         
     | 
| 
      
 274 
     | 
    
         
            +
              I18n.locale = locale
         
     | 
| 
      
 275 
     | 
    
         
            +
            end
         
     | 
| 
      
 276 
     | 
    
         
            +
            ``` 
         
     | 
| 
      
 277 
     | 
    
         
            +
             
     | 
| 
      
 278 
     | 
    
         
            +
            The `Resource#set_locale` method is called before any of the other callbacks are handled. This is important as it allows the locale to be set before returning any translatable error messages.
         
     | 
| 
      
 279 
     | 
    
         
            +
             
     | 
| 
      
 280 
     | 
    
         
            +
            Most users will probably just want to override the `Resource#locale` method and provide the appropriate locale for the request. If you are using a User object or similar, double check your authentication process as the default `authorized?` method will be called *after* the locale is prepared.
         
     | 
| 
      
 281 
     | 
    
         
            +
             
     | 
| 
       258 
282 
     | 
    
         | 
| 
       259 
283 
     | 
    
         
             
            ### Requests
         
     | 
| 
       260 
284 
     | 
    
         | 
| 
         @@ -565,7 +589,11 @@ Restfulness is still a work in progress but at Cabify we are using it in product 
     | 
|
| 
       565 
589 
     | 
    
         | 
| 
       566 
590 
     | 
    
         
             
            ## History
         
     | 
| 
       567 
591 
     | 
    
         | 
| 
       568 
     | 
    
         
            -
            ### 0.2. 
     | 
| 
      
 592 
     | 
    
         
            +
            ### 0.2.4 - February 7, 2014
         
     | 
| 
      
 593 
     | 
    
         
            +
             
     | 
| 
      
 594 
     | 
    
         
            +
             * Added I18n support with the help of the http_accept_language gem. (@samlown)
         
     | 
| 
      
 595 
     | 
    
         
            +
             
     | 
| 
      
 596 
     | 
    
         
            +
            ### 0.2.3 - February 6, 2014
         
     | 
| 
       569 
597 
     | 
    
         | 
| 
       570 
598 
     | 
    
         
             
             * Fixing issue where query parameters are set as Hash instead of HashWithIndifferentAccess.
         
     | 
| 
       571 
599 
     | 
    
         
             
             * Rewinding the body, incase rails got there first.
         
     | 
    
        data/lib/restfulness/request.rb
    CHANGED
    
    | 
         @@ -73,6 +73,11 @@ module Restfulness 
     | 
|
| 
       73 
73 
     | 
    
         
             
                  @sanitized_params ||= @params ? Sanitizer.sanitize_hash(@params) : nil
         
     | 
| 
       74 
74 
     | 
    
         
             
                end
         
     | 
| 
       75 
75 
     | 
    
         | 
| 
      
 76 
     | 
    
         
            +
                # Provide a wrapper for the http_accept_language parser
         
     | 
| 
      
 77 
     | 
    
         
            +
                def http_accept_language
         
     | 
| 
      
 78 
     | 
    
         
            +
                  @http_accept_language = HttpAcceptLanguage::Parser.new(headers[:accept_language])
         
     | 
| 
      
 79 
     | 
    
         
            +
                end
         
     | 
| 
      
 80 
     | 
    
         
            +
             
     | 
| 
       76 
81 
     | 
    
         
             
                [:get, :post, :put, :patch, :delete, :head, :options].each do |m|
         
     | 
| 
       77 
82 
     | 
    
         
             
                  define_method("#{m}?") do
         
     | 
| 
       78 
83 
     | 
    
         
             
                    action == m
         
     | 
    
        data/lib/restfulness/resource.rb
    CHANGED
    
    | 
         @@ -51,6 +51,9 @@ module Restfulness 
     | 
|
| 
       51 
51 
     | 
    
         
             
                end
         
     | 
| 
       52 
52 
     | 
    
         | 
| 
       53 
53 
     | 
    
         
             
                def check_callbacks
         
     | 
| 
      
 54 
     | 
    
         
            +
                  # Locale Handling
         
     | 
| 
      
 55 
     | 
    
         
            +
                  set_locale
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
       54 
57 
     | 
    
         
             
                  # Access control
         
     | 
| 
       55 
58 
     | 
    
         
             
                  method_not_allowed! unless method_allowed?
         
     | 
| 
       56 
59 
     | 
    
         
             
                  unauthorized!       unless authorized?
         
     | 
| 
         @@ -70,6 +73,14 @@ module Restfulness 
     | 
|
| 
       70 
73 
     | 
    
         | 
| 
       71 
74 
     | 
    
         
             
                protected
         
     | 
| 
       72 
75 
     | 
    
         | 
| 
      
 76 
     | 
    
         
            +
                def locale
         
     | 
| 
      
 77 
     | 
    
         
            +
                  request.http_accept_language.compatible_language_from(I18n.available_locales)
         
     | 
| 
      
 78 
     | 
    
         
            +
                end
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
      
 80 
     | 
    
         
            +
                def set_locale
         
     | 
| 
      
 81 
     | 
    
         
            +
                  I18n.locale = locale
         
     | 
| 
      
 82 
     | 
    
         
            +
                end
         
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
       73 
84 
     | 
    
         
             
                def logger
         
     | 
| 
       74 
85 
     | 
    
         
             
                  Restfulness.logger
         
     | 
| 
       75 
86 
     | 
    
         
             
                end
         
     | 
    
        data/lib/restfulness/version.rb
    CHANGED
    
    
    
        data/lib/restfulness.rb
    CHANGED
    
    
    
        data/restfulness.gemspec
    CHANGED
    
    | 
         @@ -21,6 +21,7 @@ Gem::Specification.new do |spec| 
     | 
|
| 
       21 
21 
     | 
    
         
             
              spec.add_dependency "rack", "~> 1.4"
         
     | 
| 
       22 
22 
     | 
    
         
             
              spec.add_dependency "multi_json", "~> 1.8"
         
     | 
| 
       23 
23 
     | 
    
         
             
              spec.add_dependency "activesupport", ">= 3.1"
         
     | 
| 
      
 24 
     | 
    
         
            +
              spec.add_dependency "http_accept_language", "~> 2.0"
         
     | 
| 
       24 
25 
     | 
    
         | 
| 
       25 
26 
     | 
    
         
             
              spec.add_development_dependency "bundler", "~> 1.3"
         
     | 
| 
       26 
27 
     | 
    
         
             
              spec.add_development_dependency "rake"
         
     | 
    
        data/spec/spec_helper.rb
    CHANGED
    
    
    
        data/spec/unit/request_spec.rb
    CHANGED
    
    | 
         @@ -169,6 +169,17 @@ describe Restfulness::Request do 
     | 
|
| 
       169 
169 
     | 
    
         
             
                end
         
     | 
| 
       170 
170 
     | 
    
         
             
              end
         
     | 
| 
       171 
171 
     | 
    
         | 
| 
      
 172 
     | 
    
         
            +
              describe "#http_accept_language" do
         
     | 
| 
      
 173 
     | 
    
         
            +
                it "should provide an instance of Parser" do
         
     | 
| 
      
 174 
     | 
    
         
            +
                  obj.http_accept_language.should be_a(HttpAcceptLanguage::Parser)
         
     | 
| 
      
 175 
     | 
    
         
            +
                end
         
     | 
| 
      
 176 
     | 
    
         
            +
                it "should use the accept_language header" do
         
     | 
| 
      
 177 
     | 
    
         
            +
                  header = "en-us,en-gb;q=0.8,en"
         
     | 
| 
      
 178 
     | 
    
         
            +
                  obj.headers[:accept_language] = header
         
     | 
| 
      
 179 
     | 
    
         
            +
                  obj.http_accept_language.header.should eql(header)
         
     | 
| 
      
 180 
     | 
    
         
            +
                end
         
     | 
| 
      
 181 
     | 
    
         
            +
              end
         
     | 
| 
      
 182 
     | 
    
         
            +
             
     | 
| 
       172 
183 
     | 
    
         
             
              describe "method helpers" do
         
     | 
| 
       173 
184 
     | 
    
         
             
                it "should respond to method questions" do
         
     | 
| 
       174 
185 
     | 
    
         
             
                  [:get?, :post?, :put?, :delete?, :head?, :options?].each do |q|
         
     | 
    
        data/spec/unit/resource_spec.rb
    CHANGED
    
    | 
         @@ -121,7 +121,7 @@ describe Restfulness::Resource do 
     | 
|
| 
       121 
121 
     | 
    
         | 
| 
       122 
122 
     | 
    
         
             
                let :obj do
         
     | 
| 
       123 
123 
     | 
    
         
             
                  request.action = :get
         
     | 
| 
       124 
     | 
    
         
            -
                   
     | 
| 
      
 124 
     | 
    
         
            +
                  resource.new(request, response)
         
     | 
| 
       125 
125 
     | 
    
         
             
                end
         
     | 
| 
       126 
126 
     | 
    
         | 
| 
       127 
127 
     | 
    
         
             
                it "should all be good by default" do
         
     | 
| 
         @@ -130,6 +130,11 @@ describe Restfulness::Resource do 
     | 
|
| 
       130 
130 
     | 
    
         
             
                  }.to_not raise_error
         
     | 
| 
       131 
131 
     | 
    
         
             
                end
         
     | 
| 
       132 
132 
     | 
    
         | 
| 
      
 133 
     | 
    
         
            +
                it "should try to set the locale" do
         
     | 
| 
      
 134 
     | 
    
         
            +
                  obj.should_receive(:set_locale)
         
     | 
| 
      
 135 
     | 
    
         
            +
                  obj.check_callbacks
         
     | 
| 
      
 136 
     | 
    
         
            +
                end
         
     | 
| 
      
 137 
     | 
    
         
            +
             
     | 
| 
       133 
138 
     | 
    
         
             
                it "should raise error on invalid method" do
         
     | 
| 
       134 
139 
     | 
    
         
             
                  obj.stub(:method_allowed?).and_return(false)
         
     | 
| 
       135 
140 
     | 
    
         
             
                  expect {
         
     | 
| 
         @@ -227,4 +232,38 @@ describe Restfulness::Resource do 
     | 
|
| 
       227 
232 
     | 
    
         
             
                end
         
     | 
| 
       228 
233 
     | 
    
         
             
              end
         
     | 
| 
       229 
234 
     | 
    
         | 
| 
      
 235 
     | 
    
         
            +
              describe "Locale handling" do
         
     | 
| 
      
 236 
     | 
    
         
            +
             
     | 
| 
      
 237 
     | 
    
         
            +
                let :resource do
         
     | 
| 
      
 238 
     | 
    
         
            +
                  Class.new(GetPostResource) do
         
     | 
| 
      
 239 
     | 
    
         
            +
                    def head; nil; end
         
     | 
| 
      
 240 
     | 
    
         
            +
                    def put; nil; end
         
     | 
| 
      
 241 
     | 
    
         
            +
                    def delete; nil; end
         
     | 
| 
      
 242 
     | 
    
         
            +
                  end
         
     | 
| 
      
 243 
     | 
    
         
            +
                end
         
     | 
| 
      
 244 
     | 
    
         
            +
             
     | 
| 
      
 245 
     | 
    
         
            +
                let :obj do
         
     | 
| 
      
 246 
     | 
    
         
            +
                  request.headers[:accept_language] = "nl, es, en"
         
     | 
| 
      
 247 
     | 
    
         
            +
                  request.action = :get
         
     | 
| 
      
 248 
     | 
    
         
            +
                  resource.new(request, response)
         
     | 
| 
      
 249 
     | 
    
         
            +
                end
         
     | 
| 
      
 250 
     | 
    
         
            +
             
     | 
| 
      
 251 
     | 
    
         
            +
                describe "#locale" do
         
     | 
| 
      
 252 
     | 
    
         
            +
                  it "should return acceptable locale" do
         
     | 
| 
      
 253 
     | 
    
         
            +
                    I18n.available_locales = ['es']
         
     | 
| 
      
 254 
     | 
    
         
            +
                    obj.send(:locale).should eql(:es)
         
     | 
| 
      
 255 
     | 
    
         
            +
                  end
         
     | 
| 
      
 256 
     | 
    
         
            +
                end
         
     | 
| 
      
 257 
     | 
    
         
            +
             
     | 
| 
      
 258 
     | 
    
         
            +
                describe "#set_locale" do
         
     | 
| 
      
 259 
     | 
    
         
            +
                  it "should set the global locale value" do
         
     | 
| 
      
 260 
     | 
    
         
            +
                    I18n.available_locales = ['en', 'es']
         
     | 
| 
      
 261 
     | 
    
         
            +
                    I18n.locale.should_not eql(:es)
         
     | 
| 
      
 262 
     | 
    
         
            +
                    obj.send(:set_locale)
         
     | 
| 
      
 263 
     | 
    
         
            +
                    I18n.locale.should eql(:es)
         
     | 
| 
      
 264 
     | 
    
         
            +
                  end
         
     | 
| 
      
 265 
     | 
    
         
            +
                end
         
     | 
| 
      
 266 
     | 
    
         
            +
             
     | 
| 
      
 267 
     | 
    
         
            +
              end
         
     | 
| 
      
 268 
     | 
    
         
            +
             
     | 
| 
       230 
269 
     | 
    
         
             
            end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: restfulness
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.2. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.2.4
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Sam Lown
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2014-02- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2014-02-07 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: rack
         
     | 
| 
         @@ -52,6 +52,20 @@ dependencies: 
     | 
|
| 
       52 
52 
     | 
    
         
             
                - - '>='
         
     | 
| 
       53 
53 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       54 
54 
     | 
    
         
             
                    version: '3.1'
         
     | 
| 
      
 55 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 56 
     | 
    
         
            +
              name: http_accept_language
         
     | 
| 
      
 57 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 58 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 59 
     | 
    
         
            +
                - - ~>
         
     | 
| 
      
 60 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 61 
     | 
    
         
            +
                    version: '2.0'
         
     | 
| 
      
 62 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 63 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 64 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 65 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 66 
     | 
    
         
            +
                - - ~>
         
     | 
| 
      
 67 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 68 
     | 
    
         
            +
                    version: '2.0'
         
     | 
| 
       55 
69 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       56 
70 
     | 
    
         
             
              name: bundler
         
     | 
| 
       57 
71 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     |