grape-entity 0.7.0 → 0.7.1
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/.rubocop_todo.yml +1 -1
 - data/CHANGELOG.md +6 -0
 - data/README.md +16 -0
 - data/lib/grape_entity/entity.rb +2 -2
 - data/lib/grape_entity/exposure/base.rb +4 -3
 - data/lib/grape_entity/version.rb +1 -1
 - data/spec/grape_entity/entity_spec.rb +10 -1
 - metadata +2 -2
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 31f997094eb9145e0e34541cc1083562afbc7724f68c343d9bb8f897b1af8c5f
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 271397df6ac51ffdd5e6380a1e4ab47affb3fbb14d805f6d00cc6715084d0f13
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: '0916c3b71d39463de13549202659f8e2c60634e6e6951b9999d45a045307c716f7bcada5a86c100066029a8e4f7da7aea5bf296bc8659f9a871162118c196d3d'
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: ed8956de1f403808e504a60b3759e19a0012f9d91db9200fc63891f7d5f5bc29116084619bd47e41d8afce3ef8a98180c620c1f902b3f0dbd4eb42f37d4bb596
         
     | 
    
        data/.rubocop_todo.yml
    CHANGED
    
    
    
        data/CHANGELOG.md
    CHANGED
    
    | 
         @@ -8,6 +8,12 @@ 
     | 
|
| 
       8 
8 
     | 
    
         | 
| 
       9 
9 
     | 
    
         
             
            * Your contribution here.
         
     | 
| 
       10 
10 
     | 
    
         | 
| 
      
 11 
     | 
    
         
            +
            ### 0.7.1 (2018-01-30)
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            #### Features
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            * [#292](https://github.com/ruby-grape/grape-entity/pull/297): Introduce `override` option for expose (fixes [#286](https://github.com/ruby-grape/grape-entity/issues/296)) - [@DmitryTsepelev](https://github.com/DmitryTsepelev).
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
       11 
17 
     | 
    
         
             
            ### 0.7.0 (2018-01-25)
         
     | 
| 
       12 
18 
     | 
    
         | 
| 
       13 
19 
     | 
    
         
             
            #### Features
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -256,6 +256,22 @@ class MailingAddress < UserData 
     | 
|
| 
       256 
256 
     | 
    
         
             
            end
         
     | 
| 
       257 
257 
     | 
    
         
             
            ```
         
     | 
| 
       258 
258 
     | 
    
         | 
| 
      
 259 
     | 
    
         
            +
            #### Overriding exposures
         
     | 
| 
      
 260 
     | 
    
         
            +
             
     | 
| 
      
 261 
     | 
    
         
            +
            If you want to add one more exposure for the field but don't want the first one to be fired (for instance, when using inheritance), you can use the `override` flag. For instance:
         
     | 
| 
      
 262 
     | 
    
         
            +
             
     | 
| 
      
 263 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 264 
     | 
    
         
            +
            class User < Grape::Entity
         
     | 
| 
      
 265 
     | 
    
         
            +
              expose :name
         
     | 
| 
      
 266 
     | 
    
         
            +
            end
         
     | 
| 
      
 267 
     | 
    
         
            +
             
     | 
| 
      
 268 
     | 
    
         
            +
            class Employee < UserData
         
     | 
| 
      
 269 
     | 
    
         
            +
              expose :name, as: :employee_name, override: true
         
     | 
| 
      
 270 
     | 
    
         
            +
            end
         
     | 
| 
      
 271 
     | 
    
         
            +
            ```
         
     | 
| 
      
 272 
     | 
    
         
            +
             
     | 
| 
      
 273 
     | 
    
         
            +
            `User` will return something like this `{ "name" : "John" }` while `Employee` will present the same data as `{ "employee_name" : "John" }` instead of `{ "name" : "John", "employee_name" : "John" }`.
         
     | 
| 
      
 274 
     | 
    
         
            +
             
     | 
| 
       259 
275 
     | 
    
         
             
            #### Returning only the fields you want
         
     | 
| 
       260 
276 
     | 
    
         | 
| 
       261 
277 
     | 
    
         
             
            After exposing the desired attributes, you can choose which one you need when representing some object or collection by using the only: and except: options. See the example:
         
     | 
    
        data/lib/grape_entity/entity.rb
    CHANGED
    
    | 
         @@ -197,7 +197,7 @@ module Grape 
     | 
|
| 
       197 
197 
     | 
    
         | 
| 
       198 
198 
     | 
    
         
             
                  exposure = Exposure.new(attribute, options)
         
     | 
| 
       199 
199 
     | 
    
         | 
| 
       200 
     | 
    
         
            -
                  exposure_list.delete_by(attribute) if  
     | 
| 
      
 200 
     | 
    
         
            +
                  exposure_list.delete_by(attribute) if exposure.override?
         
     | 
| 
       201 
201 
     | 
    
         | 
| 
       202 
202 
     | 
    
         
             
                  exposure_list << exposure
         
     | 
| 
       203 
203 
     | 
    
         | 
| 
         @@ -527,7 +527,7 @@ module Grape 
     | 
|
| 
       527 
527 
     | 
    
         | 
| 
       528 
528 
     | 
    
         
             
                # All supported options.
         
     | 
| 
       529 
529 
     | 
    
         
             
                OPTIONS = %i[
         
     | 
| 
       530 
     | 
    
         
            -
                  rewrite as if unless using with proc documentation format_with safe attr_path if_extras unless_extras merge expose_nil
         
     | 
| 
      
 530 
     | 
    
         
            +
                  rewrite as if unless using with proc documentation format_with safe attr_path if_extras unless_extras merge expose_nil override
         
     | 
| 
       531 
531 
     | 
    
         
             
                ].to_set.freeze
         
     | 
| 
       532 
532 
     | 
    
         | 
| 
       533 
533 
     | 
    
         
             
                # Merges the given options with current block options.
         
     | 
| 
         @@ -4,7 +4,7 @@ module Grape 
     | 
|
| 
       4 
4 
     | 
    
         
             
              class Entity
         
     | 
| 
       5 
5 
     | 
    
         
             
                module Exposure
         
     | 
| 
       6 
6 
     | 
    
         
             
                  class Base
         
     | 
| 
       7 
     | 
    
         
            -
                    attr_reader :attribute, :is_safe, :documentation, :conditions, :for_merge
         
     | 
| 
      
 7 
     | 
    
         
            +
                    attr_reader :attribute, :is_safe, :documentation, :override, :conditions, :for_merge
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
       9 
9 
     | 
    
         
             
                    def self.new(attribute, options, conditions, *args, &block)
         
     | 
| 
       10 
10 
     | 
    
         
             
                      super(attribute, options, conditions).tap { |e| e.setup(*args, &block) }
         
     | 
| 
         @@ -19,6 +19,7 @@ module Grape 
     | 
|
| 
       19 
19 
     | 
    
         
             
                      @for_merge = options[:merge]
         
     | 
| 
       20 
20 
     | 
    
         
             
                      @attr_path_proc = options[:attr_path]
         
     | 
| 
       21 
21 
     | 
    
         
             
                      @documentation = options[:documentation]
         
     | 
| 
      
 22 
     | 
    
         
            +
                      @override = options[:override]
         
     | 
| 
       22 
23 
     | 
    
         
             
                      @conditions = conditions
         
     | 
| 
       23 
24 
     | 
    
         
             
                    end
         
     | 
| 
       24 
25 
     | 
    
         | 
| 
         @@ -116,8 +117,8 @@ module Grape 
     | 
|
| 
       116 
117 
     | 
    
         
             
                      end
         
     | 
| 
       117 
118 
     | 
    
         
             
                    end
         
     | 
| 
       118 
119 
     | 
    
         | 
| 
       119 
     | 
    
         
            -
                    def  
     | 
| 
       120 
     | 
    
         
            -
                       
     | 
| 
      
 120 
     | 
    
         
            +
                    def override?
         
     | 
| 
      
 121 
     | 
    
         
            +
                      @override
         
     | 
| 
       121 
122 
     | 
    
         
             
                    end
         
     | 
| 
       122 
123 
     | 
    
         | 
| 
       123 
124 
     | 
    
         
             
                    protected
         
     | 
    
        data/lib/grape_entity/version.rb
    CHANGED
    
    
| 
         @@ -477,11 +477,20 @@ describe Grape::Entity do 
     | 
|
| 
       477 
477 
     | 
    
         
             
                      expect(child_class.represent({ name: 'bar' }, serializable: true)).to eq(email: nil, name: 'foo')
         
     | 
| 
       478 
478 
     | 
    
         
             
                    end
         
     | 
| 
       479 
479 
     | 
    
         | 
| 
       480 
     | 
    
         
            -
                    it 'overrides  
     | 
| 
      
 480 
     | 
    
         
            +
                    it 'not overrides exposure by default' do
         
     | 
| 
       481 
481 
     | 
    
         
             
                      subject.expose :name
         
     | 
| 
       482 
482 
     | 
    
         
             
                      child_class = Class.new(subject)
         
     | 
| 
       483 
483 
     | 
    
         
             
                      child_class.expose :name, as: :child_name
         
     | 
| 
       484 
484 
     | 
    
         | 
| 
      
 485 
     | 
    
         
            +
                      expect(subject.represent({ name: 'bar' }, serializable: true)).to eq(name: 'bar')
         
     | 
| 
      
 486 
     | 
    
         
            +
                      expect(child_class.represent({ name: 'bar' }, serializable: true)).to eq(name: 'bar', child_name: 'bar')
         
     | 
| 
      
 487 
     | 
    
         
            +
                    end
         
     | 
| 
      
 488 
     | 
    
         
            +
             
     | 
| 
      
 489 
     | 
    
         
            +
                    it 'overrides parent class exposure when option is specified' do
         
     | 
| 
      
 490 
     | 
    
         
            +
                      subject.expose :name
         
     | 
| 
      
 491 
     | 
    
         
            +
                      child_class = Class.new(subject)
         
     | 
| 
      
 492 
     | 
    
         
            +
                      child_class.expose :name, as: :child_name, override: true
         
     | 
| 
      
 493 
     | 
    
         
            +
             
     | 
| 
       485 
494 
     | 
    
         
             
                      expect(subject.represent({ name: 'bar' }, serializable: true)).to eq(name: 'bar')
         
     | 
| 
       486 
495 
     | 
    
         
             
                      expect(child_class.represent({ name: 'bar' }, serializable: true)).to eq(child_name: 'bar')
         
     | 
| 
       487 
496 
     | 
    
         
             
                    end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: grape-entity
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.7. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.7.1
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Michael Bleigh
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2018-01- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2018-01-30 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: activesupport
         
     |