Sha256: 87f18ddebf8784aef8ba3db2686465a71e43316dd1a8ecd1b71ad407ced253c4

Contents?: true

Size: 1.14 KB

Versions: 1

Compression:

Stored size: 1.14 KB

Contents

require 'kangaroo/model/base'

module Kangaroo
  module RubyAdapter
    module ClassDefinition
      def define_class
        initialize_namespace
        define_model_class
      end

      protected
      def model_subclass
        Class.new(Kangaroo::Model::Base)
      end

      def define_model_class
        @ruby_model = set_const_in @namespace, constant_names.last, model_subclass

        if !@ruby_model.is_a?(Class)
          raise ChildDefinedBeforeParentError
        end
        @ruby_model.database = @oo_model.class.database

        @ruby_model
      end

      def initialize_namespace
        @namespace = @root_namespace

        constant_names[1..-2].each do |mod|
          const = Module.new
          const.send :extend, Util::Loader::Namespace
          @namespace = set_const_in @namespace, mod, const
        end
      end

      def constant_names
        @constant_names ||= @oo_model.model_class_name.split("::")
      end

      # Set constant only if not already defined
      def set_const_in mod, name, const
        mod.const_set name, const unless mod.const_defined?(name)
        mod.const_get name
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
kangaroo-0.0.3 lib/kangaroo/ruby_adapter/class_definition.rb