Sha256: 942f50dd04be5aa5ec28c8eedd344dbabe6de1b5fb81a754f822a48122c3c5f2

Contents?: true

Size: 891 Bytes

Versions: 3

Compression:

Stored size: 891 Bytes

Contents

module SonJay
  class ObjectModel

    class PropertyDefinition
      attr_reader :name, :model_class

      def initialize(name, instruction = nil)
        @name        = name
        @model_class = model_class_for_instruction(instruction)
      end

      private

      def model_class_for_instruction(instruction)
        if instruction.nil?
          nil
        elsif instruction.respond_to?(:to_ary)
          array_model_class(instruction)
        elsif instruction.respond_to?( :new )
          instruction
        end
      end

      private

      def array_model_class(instruction)
        return instruction unless instruction.respond_to?(:to_ary)
        return SonJay::ValueArray if instruction == []

        sub_instruction = instruction.first
        sub_model_class = array_model_class( sub_instruction )
        sub_model_class.array_class
      end

    end

  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
son_jay-0.2.0.alpha lib/son_jay/object_model/property_definition.rb
son_jay-0.1.1.alpha lib/son_jay/object_model/property_definition.rb
son_jay-0.1.0.alpha lib/son_jay/object_model/property_definition.rb