Sha256: 8d86b91b8a6e84188be4aa796c4ba9b06c02a7faa965eaed5a103376aaf4d999

Contents?: true

Size: 1.55 KB

Versions: 1

Compression:

Stored size: 1.55 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.namespace = @oo_model.class.namespace
        @ruby_model.oo_name = @oo_model.model
        @ruby_model.oo_model = @oo_model
        @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 const_already_defined?(mod, name)
        mod.const_get name
      end
      
      def const_already_defined? mod, name
        if is_18?
          mod.const_defined? name
        else
          mod.const_defined? name, false
        end
      end
      
      protected
      def is_18?
        RUBY_VERSION =~ /^1\.8/
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
kangaroo-0.1.0.alpha1 lib/kangaroo/ruby_adapter/class_definition.rb