Sha256: 3ee0b7289affe00def58376d77278c8d4a89e63580c2d4edf7a9fbf18bd66075

Contents?: true

Size: 1.23 KB

Versions: 4

Compression:

Stored size: 1.23 KB

Contents

module Yaks
  class Mapper
    class Control
      include Attributes.new(
                name: nil, href: nil, title: nil, method: nil, media_type: nil, fields: []
              ),
              Configurable

      def self.create(name = nil, options = {})
        new({name: name}.merge(options))
      end

      def add_to_resource(resource, parent_mapper, _context)
        resource.add_control(map_to_resource_control(resource, parent_mapper))
      end

      def map_to_resource_control(resource, parent_mapper)
        attrs = {
          fields: resource_fields,
          href: parent_mapper.expand_uri(href, true)
        }
        Resource::Control.new(to_h.merge(attrs))
      end

      def resource_fields
        fields.map(&:to_resource_field)
      end

      class Field
        include Attributes.new(:name, label: nil, type: "text", value: nil)

        def self.create(*args)
          attrs = args.last.instance_of?(Hash) ? args.pop : {}
          if name = args.shift
            attrs = attrs.merge(name: name)
          end
          new(attrs)
        end

        def to_resource_field
          Resource::Control::Field.new(to_h)
        end
      end

      config_method :field, create: Field, append_to: :fields
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
yaks-0.7.5 lib/yaks/mapper/control.rb
yaks-0.7.4 lib/yaks/mapper/control.rb
yaks-0.7.3 lib/yaks/mapper/control.rb
yaks-0.7.2 lib/yaks/mapper/control.rb