Sha256: 91edc0fe36bb29e4ab5f14c7d4ffce458c7095d57d2f925e1c149488c2e66d48

Contents?: true

Size: 1.23 KB

Versions: 11

Compression:

Stored size: 1.23 KB

Contents

module EY
  class CloudClient
    class ApiStruct < Struct
      def self.new(*args, &block)
        args = [:api] | args
        super(*args) do |*block_args|
          block.call(*block_args) if block

          def self.from_array(api, array, common_values = {})
            if array
              array.map do |values|
                from_hash(api, values.merge(common_values))
              end
            end
          end

          def self.from_hash(api, attrs_or_struct)
            return nil unless attrs_or_struct

            if attrs_or_struct.respond_to?(:attributes=)
              # already a model
              obj = attrs_or_struct
            elsif obj = api.registry.find(self, attrs_or_struct['id'])
              obj.attributes = attrs_or_struct
            else
              obj = new(api, attrs_or_struct)
              api.registry.set(self, obj)
            end
            obj
          end
        end
      end

      def initialize(api, attrs)
        self.api = api
        self.attributes = attrs
      end

      def attributes=(attrs)
        attrs.each do |key, val|
          setter = :"#{key}="
          if respond_to?(setter)
            send(setter, val)
          end
        end
      end

    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
engineyard-cloud-client-1.0.8 lib/engineyard-cloud-client/models/api_struct.rb
engineyard-cloud-client-1.0.7 lib/engineyard-cloud-client/models/api_struct.rb
engineyard-cloud-client-1.0.6 lib/engineyard-cloud-client/models/api_struct.rb
engineyard-cloud-client-1.0.5 lib/engineyard-cloud-client/models/api_struct.rb
engineyard-cloud-client-1.0.4 lib/engineyard-cloud-client/models/api_struct.rb
engineyard-cloud-client-1.0.3 lib/engineyard-cloud-client/models/api_struct.rb
engineyard-cloud-client-1.0.2 lib/engineyard-cloud-client/models/api_struct.rb
engineyard-cloud-client-1.0.1 lib/engineyard-cloud-client/models/api_struct.rb
engineyard-cloud-client-1.0.0 lib/engineyard-cloud-client/models/api_struct.rb
engineyard-cloud-client-0.1.4 lib/engineyard-cloud-client/models/api_struct.rb
engineyard-cloud-client-0.1.2 lib/engineyard-cloud-client/models/api_struct.rb