Sha256: a5c3e0762d66fd61c093fa3dffb606b431b90bde65e56cd7394e5b752275e82b

Contents?: true

Size: 1.48 KB

Versions: 2

Compression:

Stored size: 1.48 KB

Contents

require 'scout/annotation'
require_relative 'entity/format'
require_relative 'entity/property'
require_relative 'entity/object'
require_relative 'entity/identifiers'
require_relative 'entity/named_array'

module Entity
  def self.extended(base)
    base.extend Annotation
    base.extend Entity::Property
    base.instance_variable_set(:@properties, [])
    base.instance_variable_set(:@persisted_methods, {})
    base.include Entity::Object
    base.include AnnotatedArray
    base.format = base.to_s
    base
  end

  def self.prepare_entity(entity, field, options = {})
    return entity unless defined? Entity
    return entity unless String === entity or Array === entity or Numeric === entity

    if Entity === field or (Entity.respond_to?(:formats) and (_format = Entity.formats.find(field)))
      options ||= {}

      dup_array = options.delete :dup_array

      params = options.dup

      params[:format] ||= params.delete "format"
      params.merge!(:format => _format) unless _format.nil? or (params.include?(:format) and not ((f = params[:format]).nil? or (String === f and f.empty?)))

      mod = Entity === field ? field : Entity.formats[field]

      entity = entity.dup
      entity = (entity.frozen? and not entity.nil?) ? entity.dup : ((Array === entity and dup_array) ? entity.collect{|e| e.nil? ? e : e.dup} : entity) 

      entity = mod.setup(entity, params)

      entity.extend AnnotatedArray if Array === entity && ! options[:annotated_array] == FalseClass
    end

    entity
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
scout-gear-10.7.3 lib/scout/entity.rb
scout-gear-10.7.2 lib/scout/entity.rb