ams_hal 0.2.2 → 0.2.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.
- checksums.yaml +4 -4
- data/lib/ams_hal/adapter.rb +47 -38
- data/lib/ams_hal/embed.rb +2 -1
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 7ae5d537e7726b7aa36721d90fe6e39156b9bf82
         | 
| 4 | 
            +
              data.tar.gz: 64a517fb6e9d71e1ef16270a2f8660cb7e113fcb
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 17a14cc150b84c8a9aa63a7c5be4cdefa286daee74ea6ff66223f160d0ed9ca751cd0d19b8a7785947a8abc27e1326ba7e4914bad698861cbbadd5a1631cd05a
         | 
| 7 | 
            +
              data.tar.gz: cf7033fb8efdc620b498023d16eb1fe1005029404363b0cfad3e9c4d8ae4dd5ca7d588e79a258e692461b877fddaa4905ac028fb46da9732197529635bee606c
         | 
    
        data/lib/ams_hal/adapter.rb
    CHANGED
    
    | @@ -1,38 +1,57 @@ | |
| 1 1 | 
             
            module AmsHal
         | 
| 2 2 | 
             
              class Adapter < ActiveModelSerializers::Adapter::Base
         | 
| 3 | 
            -
                def serializable_hash(options =  | 
| 3 | 
            +
                def serializable_hash(options = {})
         | 
| 4 4 | 
             
                  options = serialization_options(options)
         | 
| 5 5 | 
             
                  options[:fields] ||= instance_options[:fields]
         | 
| 6 | 
            -
                   | 
| 7 | 
            -
                                 serializer | 
| 8 | 
            -
                                   array << serialize_resource(_serializer, instance_options, options)
         | 
| 9 | 
            -
                                 end
         | 
| 6 | 
            +
                  hash = if serializer.respond_to?(:each)
         | 
| 7 | 
            +
                                 serialize_collection(serializer, instance_options, options)
         | 
| 10 8 | 
             
                               else
         | 
| 11 9 | 
             
                                 serialize_resource(serializer, instance_options, options)
         | 
| 12 10 | 
             
                               end
         | 
| 13 11 |  | 
| 14 | 
            -
                  self.class.transform_key_casing!( | 
| 12 | 
            +
                  self.class.transform_key_casing!(hash, instance_options)
         | 
| 15 13 | 
             
                end
         | 
| 16 14 |  | 
| 17 15 | 
             
                protected
         | 
| 18 16 |  | 
| 19 17 | 
             
                def serialize_resource(serializer, adapter_options, options)
         | 
| 18 | 
            +
                  skip_embedded = options.delete(:skip_embedded) || false
         | 
| 19 | 
            +
             | 
| 20 20 | 
             
                  options[:include_directive] = {} # Don't include associations as attributes
         | 
| 21 | 
            -
                   | 
| 21 | 
            +
                  hash = serializer.serializable_hash(adapter_options, options, self)
         | 
| 22 22 |  | 
| 23 23 | 
             
                  if links = serialize_links(serializer)
         | 
| 24 | 
            -
                     | 
| 24 | 
            +
                    hash[:_links] = links if links.any?
         | 
| 25 25 | 
             
                  end
         | 
| 26 26 |  | 
| 27 | 
            +
                  return hash if skip_embedded
         | 
| 28 | 
            +
             | 
| 27 29 | 
             
                  if embedded = serialize_embedded(serializer)
         | 
| 28 | 
            -
                     | 
| 30 | 
            +
                    hash[:_embedded] = embedded if embedded.any?
         | 
| 31 | 
            +
                  end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                  if associations = serialize_associations(serializer, adapter_options)
         | 
| 34 | 
            +
                    hash[:_embedded] = associations if associations.any?
         | 
| 35 | 
            +
                  end
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                  hash
         | 
| 38 | 
            +
                end
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                def serialize_collection(serializer, adapter_options, options)
         | 
| 41 | 
            +
                  options[:include_directive] = {} # Don't include associations as attributes
         | 
| 42 | 
            +
                  hash = {}
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                  if links = serialize_links(serializer)
         | 
| 45 | 
            +
                    hash[:_links] = links if links.any?
         | 
| 29 46 | 
             
                  end
         | 
| 30 47 |  | 
| 31 | 
            -
                   | 
| 32 | 
            -
                     | 
| 48 | 
            +
                  embedded = serializer.map do |_serializer|
         | 
| 49 | 
            +
                    options[:skip_embedded] = true
         | 
| 50 | 
            +
                    serialize_resource(_serializer, instance_options, options)
         | 
| 33 51 | 
             
                  end
         | 
| 52 | 
            +
                  hash[:_embedded] = embedded if embedded.any?
         | 
| 34 53 |  | 
| 35 | 
            -
                   | 
| 54 | 
            +
                  hash
         | 
| 36 55 | 
             
                end
         | 
| 37 56 |  | 
| 38 57 | 
             
                def serialize_links(serializer)
         | 
| @@ -85,34 +104,24 @@ module AmsHal | |
| 85 104 | 
             
                  end
         | 
| 86 105 | 
             
                end
         | 
| 87 106 |  | 
| 88 | 
            -
                def serialize_associations(serializer)
         | 
| 107 | 
            +
                def serialize_associations(serializer, adapter_options)
         | 
| 89 108 | 
             
                  serializer.associations.each_with_object({}) do |association, embedded|
         | 
| 90 | 
            -
                     | 
| 91 | 
            -
             | 
| 92 | 
            -
             | 
| 93 | 
            -
             | 
| 94 | 
            -
             | 
| 95 | 
            -
             | 
| 96 | 
            -
             | 
| 97 | 
            -
             | 
| 98 | 
            -
             | 
| 99 | 
            -
             | 
| 100 | 
            -
             | 
| 101 | 
            -
             | 
| 102 | 
            -
             | 
| 103 | 
            -
                       | 
| 104 | 
            -
                         | 
| 105 | 
            -
                        serialize_embedded_resource(
         | 
| 106 | 
            -
                          resrc,
         | 
| 107 | 
            -
                          serializer: association.serializer.send(:options)[:serializer]
         | 
| 108 | 
            -
                        )
         | 
| 109 | 
            +
                    embedded[association.name] =
         | 
| 110 | 
            +
                      if association.serializer.nil? || association.serializer.object.nil?
         | 
| 111 | 
            +
                        # active_model_serializers <= 0.10.4 
         | 
| 112 | 
            +
                        object = serializer.object
         | 
| 113 | 
            +
                        resource = object.public_send(association.name)
         | 
| 114 | 
            +
                        serialized = [resource].flatten.map do |resrc|
         | 
| 115 | 
            +
                          serialize_embedded_resource(resrc, serializer: association.serializer&.class)
         | 
| 116 | 
            +
                        end
         | 
| 117 | 
            +
                        serialized.size == 1 ? serialized.first : serialized
         | 
| 118 | 
            +
                      elsif association.serializer.respond_to? :each
         | 
| 119 | 
            +
                        association.serializer.map do |_serializer|
         | 
| 120 | 
            +
                          serialize_resource(_serializer, instance_options, {skip_embedded: true})
         | 
| 121 | 
            +
                        end
         | 
| 122 | 
            +
                      else
         | 
| 123 | 
            +
                        serialize_resource(association.serializer, instance_options, {skip_embedded: true})
         | 
| 109 124 | 
             
                      end
         | 
| 110 | 
            -
                    else
         | 
| 111 | 
            -
                      embedded[association.name] = serialize_embedded_resource(
         | 
| 112 | 
            -
                        resource, 
         | 
| 113 | 
            -
                        serializer: association.serializer&.class
         | 
| 114 | 
            -
                      )
         | 
| 115 | 
            -
                    end
         | 
| 116 125 | 
             
                  end
         | 
| 117 126 | 
             
                end
         | 
| 118 127 |  | 
    
        data/lib/ams_hal/embed.rb
    CHANGED
    
    | @@ -4,9 +4,10 @@ module AmsHal | |
| 4 4 | 
             
              class Embed
         | 
| 5 5 | 
             
                include ActiveModelSerializers::SerializationContext::UrlHelpers
         | 
| 6 6 |  | 
| 7 | 
            -
                attr_reader :name, :options
         | 
| 7 | 
            +
                attr_reader :serializer, :name, :options
         | 
| 8 8 |  | 
| 9 9 | 
             
                def initialize(serializer, name, options = {}, &block)
         | 
| 10 | 
            +
                  @serializer = serializer
         | 
| 10 11 | 
             
                  @name = name
         | 
| 11 12 | 
             
                  @options = options
         | 
| 12 13 | 
             
                  @block = block
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: ams_hal
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.2. | 
| 4 | 
            +
              version: 0.2.3
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Sammy Henningsson
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2017-04- | 
| 11 | 
            +
            date: 2017-04-17 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: active_model_serializers
         |