alba 2.4.0 → 2.4.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 +4 -4
- data/CHANGELOG.md +12 -0
- data/lib/alba/association.rb +11 -10
- data/lib/alba/conditional_attribute.rb +14 -3
- data/lib/alba/version.rb +1 -1
- data/lib/alba.rb +5 -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: e96e153192419f36d10cdd2377720a4d818bd935e8b4d7364e0272f460f74c30
         | 
| 4 | 
            +
              data.tar.gz: 2ca78d61d8e01c1655f294f1836c386bb561db3fca45e964bd3c2b0023912b03
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 45c70af557b2fcb5ec1e8e7d2269fa6639e086d506b5b8706361a208c24a436ce61807d5d6466accfc516c4f1e556d23a3535236ed2d9047f3c72491702028bb
         | 
| 7 | 
            +
              data.tar.gz: 148818585445adde1fa4f992df975400863856e227e12fe706f241523a06901e34d099511d13ae5fff4cbd5a9ea29c659551034ffb188bc1cc3d519c72e2a88e
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -6,6 +6,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 | |
| 6 6 |  | 
| 7 7 | 
             
            ## [Unreleased]
         | 
| 8 8 |  | 
| 9 | 
            +
            ## [2.4.2] 2023-10-11
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            ### Fixed
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            - Multithread bug
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            ## [2.4.1] 2023-08-02
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            #### Fixed
         | 
| 18 | 
            +
             | 
| 19 | 
            +
            - Fix the bug of resource name inference for classes whose name end with "Serializer" [No PR](https://github.com/okuramasafumi/alba/commit/1695af4351981725231fd071aaef5b2e4174fb26)
         | 
| 20 | 
            +
             | 
| 9 21 | 
             
            ## [2.4.0] 2023-08-02
         | 
| 10 22 |  | 
| 11 23 | 
             
            ### Added
         | 
    
        data/lib/alba/association.rb
    CHANGED
    
    | @@ -8,7 +8,7 @@ module Alba | |
| 8 8 | 
             
                  attr_reader :const_cache
         | 
| 9 9 | 
             
                end
         | 
| 10 10 |  | 
| 11 | 
            -
                attr_reader : | 
| 11 | 
            +
                attr_reader :name
         | 
| 12 12 |  | 
| 13 13 | 
             
                # @param name [Symbol, String] name of the method to fetch association
         | 
| 14 14 | 
             
                # @param condition [Proc, nil] a proc filtering data
         | 
| @@ -36,16 +36,16 @@ module Alba | |
| 36 36 | 
             
                # @return [Hash]
         | 
| 37 37 | 
             
                def to_h(target, within: nil, params: {})
         | 
| 38 38 | 
             
                  params = params.merge(@params)
         | 
| 39 | 
            -
                   | 
| 40 | 
            -
                   | 
| 41 | 
            -
                  return if  | 
| 39 | 
            +
                  object = target.__send__(@name)
         | 
| 40 | 
            +
                  object = @condition.call(object, params, target) if @condition
         | 
| 41 | 
            +
                  return if object.nil?
         | 
| 42 42 |  | 
| 43 43 | 
             
                  if @resource.is_a?(Proc)
         | 
| 44 | 
            -
                    return to_h_with_each_resource(within, params) if  | 
| 44 | 
            +
                    return to_h_with_each_resource(object, within, params) if object.is_a?(Enumerable)
         | 
| 45 45 |  | 
| 46 | 
            -
                    @resource.call( | 
| 46 | 
            +
                    @resource.call(object).new(object, within: within, params: params).to_h
         | 
| 47 47 | 
             
                  else
         | 
| 48 | 
            -
                    to_h_with_constantize_resource(within, params)
         | 
| 48 | 
            +
                    to_h_with_constantize_resource(object, within, params)
         | 
| 49 49 | 
             
                  end
         | 
| 50 50 | 
             
                end
         | 
| 51 51 |  | 
| @@ -56,6 +56,7 @@ module Alba | |
| 56 56 | 
             
                  when Class
         | 
| 57 57 | 
             
                    resource
         | 
| 58 58 | 
             
                  when Symbol, String
         | 
| 59 | 
            +
                    Object.const_get(resource)
         | 
| 59 60 | 
             
                    self.class.const_cache.fetch(resource) do
         | 
| 60 61 | 
             
                      self.class.const_cache[resource] = Object.const_get(resource)
         | 
| 61 62 | 
             
                    end
         | 
| @@ -76,13 +77,13 @@ module Alba | |
| 76 77 | 
             
                              end
         | 
| 77 78 | 
             
                end
         | 
| 78 79 |  | 
| 79 | 
            -
                def to_h_with_each_resource(within, params)
         | 
| 80 | 
            -
                   | 
| 80 | 
            +
                def to_h_with_each_resource(object, within, params)
         | 
| 81 | 
            +
                  object.map do |item|
         | 
| 81 82 | 
             
                    @resource.call(item).new(item, within: within, params: params).to_h
         | 
| 82 83 | 
             
                  end
         | 
| 83 84 | 
             
                end
         | 
| 84 85 |  | 
| 85 | 
            -
                def to_h_with_constantize_resource(within, params)
         | 
| 86 | 
            +
                def to_h_with_constantize_resource(object, within, params)
         | 
| 86 87 | 
             
                  @resource = constantize(@resource)
         | 
| 87 88 | 
             
                  @resource.new(object, params: params, within: within).to_h
         | 
| 88 89 | 
             
                end
         | 
| @@ -1,5 +1,6 @@ | |
| 1 1 | 
             
            require_relative 'association'
         | 
| 2 2 | 
             
            require_relative 'constants'
         | 
| 3 | 
            +
            require 'ostruct'
         | 
| 3 4 |  | 
| 4 5 | 
             
            module Alba
         | 
| 5 6 | 
             
              # Represents attribute with `if` option
         | 
| @@ -23,7 +24,7 @@ module Alba | |
| 23 24 | 
             
                  fetched_attribute = yield(@body)
         | 
| 24 25 | 
             
                  return fetched_attribute unless with_two_arity_proc_condition
         | 
| 25 26 |  | 
| 26 | 
            -
                  return Alba::REMOVE_KEY unless resource.instance_exec(object,  | 
| 27 | 
            +
                  return Alba::REMOVE_KEY unless resource.instance_exec(object, objectize(fetched_attribute), &@condition)
         | 
| 27 28 |  | 
| 28 29 | 
             
                  fetched_attribute
         | 
| 29 30 | 
             
                end
         | 
| @@ -48,8 +49,18 @@ module Alba | |
| 48 49 | 
             
                  @condition.is_a?(Proc) && @condition.arity >= 2
         | 
| 49 50 | 
             
                end
         | 
| 50 51 |  | 
| 51 | 
            -
                 | 
| 52 | 
            -
             | 
| 52 | 
            +
                # OpenStruct is used as a simple solution for converting Hash or Array of Hash into an object
         | 
| 53 | 
            +
                # Using OpenStruct is not good in general, but in this case there's no other solution
         | 
| 54 | 
            +
                def objectize(fetched_attribute)
         | 
| 55 | 
            +
                  return fetched_attribute unless @body.is_a?(Alba::Association)
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                  if fetched_attribute.is_a?(Array)
         | 
| 58 | 
            +
                    fetched_attribute.map do |hash|
         | 
| 59 | 
            +
                      OpenStruct.new(hash)
         | 
| 60 | 
            +
                    end
         | 
| 61 | 
            +
                  else
         | 
| 62 | 
            +
                    OpenStruct.new(fetched_attribute)
         | 
| 63 | 
            +
                  end
         | 
| 53 64 | 
             
                end
         | 
| 54 65 | 
             
              end
         | 
| 55 66 | 
             
            end
         | 
    
        data/lib/alba/version.rb
    CHANGED
    
    
    
        data/lib/alba.rb
    CHANGED
    
    | @@ -114,7 +114,11 @@ module Alba | |
| 114 114 | 
             
                  raise Alba::Error, 'Inference is disabled so Alba cannot infer resource name. Set inflector before use.' unless Alba.inflector
         | 
| 115 115 |  | 
| 116 116 | 
             
                  const_parent = nesting.nil? ? Object : Object.const_get(nesting)
         | 
| 117 | 
            -
                   | 
| 117 | 
            +
                  begin
         | 
| 118 | 
            +
                    const_parent.const_get("#{inflector.classify(name)}Resource")
         | 
| 119 | 
            +
                  rescue # Retry for serializer
         | 
| 120 | 
            +
                    const_parent.const_get("#{inflector.classify(name)}Serializer")
         | 
| 121 | 
            +
                  end
         | 
| 118 122 | 
             
                end
         | 
| 119 123 |  | 
| 120 124 | 
             
                # Configure Alba to symbolize keys
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: alba
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 2.4. | 
| 4 | 
            +
              version: 2.4.2
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - OKURA Masafumi
         | 
| 8 8 | 
             
            autorequire:
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2023- | 
| 11 | 
            +
            date: 2023-10-11 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies: []
         | 
| 13 13 | 
             
            description: Alba is the fastest JSON serializer for Ruby. It focuses on performance,
         | 
| 14 14 | 
             
              flexibility and usability.
         |