Sha256: 7bd115eac325a50ecb658518eebb8623d80df10a42ea75e58f9d19203f02e98e

Contents?: true

Size: 873 Bytes

Versions: 2

Compression:

Stored size: 873 Bytes

Contents

module Id::Field
  class Definition
    def initialize(name, options)
      @name = name
      @options = options
    end

    def default
      options.fetch(:default, nil)
    end

    def default!
      default.is_a?(Proc) ? default.call : default
    end

    def key
      options.fetch(:key, name).to_s
    end

    def type
      options.fetch(:type, Object)
    end

    def optional?
      options.fetch(:optional, false)
    end

    def to_s
      Id::Field::Summary.new(self).to_s
    end

    def value(data)
      # the following code is a bit verbose but can't use || as false is valid here
      value = data[key]
      value = data[key.to_sym] if value.nil?
      value = default!         if value.nil?
      value = Option[value]    if optional?

      Id::Coercion.coerce(value, type) unless value.nil?
    end

    attr_reader :name, :options
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
id-0.1.1 lib/id/field/definition.rb
id-0.1 lib/id/field/definition.rb