Sha256: e74d16318b391fd3a3d4947a846eca937356d73b2d6346d6e54166a49783d340

Contents?: true

Size: 1.78 KB

Versions: 33

Compression:

Stored size: 1.78 KB

Contents

# frozen_string_literal: true

class ReeMapper::Field
  attr_reader :type, :name, :from, :doc, :optional, :null, :roles, :default,
              :name_as_str, :name_as_instance_var_name, :from_as_str,
              :fields_filter, :location

  NO_DEFAULT = Object.new.freeze

  contract(
    Any,
    Nilor[Symbol],
    Kwargs[
      from:     Nilor[Symbol],
      doc:      Nilor[String],
      optional: Bool,
      null:     Bool,
      role:     Nilor[ArrayOf[Symbol], Symbol],
      default:  Any,
      only:     Nilor[ReeMapper::FilterFieldsContract],
      except:   Nilor[ReeMapper::FilterFieldsContract],
      location: Nilor[String],
    ] => Any
  ).throws(ArgumentError)
  def initialize(type, name = nil, from: nil, doc: nil, optional: false, null: false, role: nil, default: NO_DEFAULT,
                 only: nil, except: nil, location: nil)
    @type     = type
    @name     = name
    @from     = from || name
    @doc      = doc
    @optional = optional
    @null     = null
    @roles    = Array(role)
    @default  = default

    @fields_filter = ReeMapper::FieldsFilter.build(only, except)

    @name_as_str               = @name.to_s
    @name_as_instance_var_name = :"@#{@name}"
    @from_as_str               = @from.to_s

    @location = location
    if @location
      @location = @location
        .sub(Ree.root_dir, ".")
        .sub(/:in.+/, "")
    end

    raise ArgumentError, 'required fields do not support defaults' if has_default? && !optional
  end

  contract None => Bool
  def has_default?
    default != NO_DEFAULT
  end

  contract Nilor[Symbol, ArrayOf[Symbol]] => Bool
  def has_role?(role)
    return true  if roles.empty?
    return false if role.nil?

    if role.is_a?(Array)
      role.any? { roles.include?(_1) }
    else
      roles.include?(role)
    end
  end
end

Version data entries

33 entries across 33 versions & 1 rubygems

Version Path
ree_lib-1.1.1 lib/ree_lib/packages/ree_mapper/package/ree_mapper/field.rb
ree_lib-1.1.0 lib/ree_lib/packages/ree_mapper/package/ree_mapper/field.rb
ree_lib-1.0.124 lib/ree_lib/packages/ree_mapper/package/ree_mapper/field.rb
ree_lib-1.0.123 lib/ree_lib/packages/ree_mapper/package/ree_mapper/field.rb
ree_lib-1.0.122 lib/ree_lib/packages/ree_mapper/package/ree_mapper/field.rb
ree_lib-1.0.121 lib/ree_lib/packages/ree_mapper/package/ree_mapper/field.rb
ree_lib-1.0.120 lib/ree_lib/packages/ree_mapper/package/ree_mapper/field.rb
ree_lib-1.0.119 lib/ree_lib/packages/ree_mapper/package/ree_mapper/field.rb
ree_lib-1.0.118 lib/ree_lib/packages/ree_mapper/package/ree_mapper/field.rb
ree_lib-1.0.117 lib/ree_lib/packages/ree_mapper/package/ree_mapper/field.rb
ree_lib-1.0.116 lib/ree_lib/packages/ree_mapper/package/ree_mapper/field.rb
ree_lib-1.0.115 lib/ree_lib/packages/ree_mapper/package/ree_mapper/field.rb
ree_lib-1.0.114 lib/ree_lib/packages/ree_mapper/package/ree_mapper/field.rb
ree_lib-1.0.113 lib/ree_lib/packages/ree_mapper/package/ree_mapper/field.rb
ree_lib-1.0.112 lib/ree_lib/packages/ree_mapper/package/ree_mapper/field.rb
ree_lib-1.0.111 lib/ree_lib/packages/ree_mapper/package/ree_mapper/field.rb
ree_lib-1.0.110 lib/ree_lib/packages/ree_mapper/package/ree_mapper/field.rb
ree_lib-1.0.109 lib/ree_lib/packages/ree_mapper/package/ree_mapper/field.rb
ree_lib-1.0.108 lib/ree_lib/packages/ree_mapper/package/ree_mapper/field.rb
ree_lib-1.0.107 lib/ree_lib/packages/ree_mapper/package/ree_mapper/field.rb