Sha256: 03c1c480d03410738b8da7781689b1db466bafb7f99a41679f3087ed3ebea01a

Contents?: true

Size: 1.58 KB

Versions: 8

Compression:

Stored size: 1.58 KB

Contents

module ActiveMocker

  class ModelReader

    attr_reader :model_name, :model_dir, :file_reader

    def initialize(options={})
      @file_reader = options[:file_reader] ||= FileReader
      @model_dir   = options[:model_dir]
    end

    def parse(model_name)
      @model_name = model_name
      klass
      self
    end

    def klass
      @klass ||= eval_file
    end

    def eval_file
      failure = true
      while failure
        begin
          m = Module.new
          m.module_eval(read_file)
        rescue NameError => e
          raise e
          result = e.to_s.scan /::(\w*)$/ # gets the Constant name from error
          const_name = result.flatten.first
          Logger_.debug "ActiveMocker :: Can't can't find Constant #{const_name} from class #{model_name}..\n #{caller}"
          # Object.const_set(const_name,const_name)
          next
        end
        failure = false
        model = m.const_get m.constants.first
      end
      model
    end

    def read_file
      file_reader.read("#{model_dir}/#{model_name}.rb")
    end

    def class_methods
      klass.methods(false)
    end

    def class_methods_with_arguments
      class_methods.map do |m|
        {m => klass.method(m).parameters }
      end
    end

    def instance_methods_with_arguments
      instance_methods.map do |m|
        {m => klass.new.method(m).parameters }
      end
    end

    def instance_methods
      klass.public_instance_methods(false)
    end

    def relationships_types
      klass.relationships
    end

    def relationships
      relationships_types.to_h.values.flatten
    end

  end

end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
active_mocker-1.1.11 lib/active_mocker/model_reader.rb
active_mocker-1.1.10 lib/active_mocker/model_reader.rb
active_mocker-1.1.9 lib/active_mocker/model_reader.rb
active_mocker-1.1.8 lib/active_mocker/model_reader.rb
active_mocker-1.1.7 lib/active_mocker/model_reader.rb
active_mocker-1.1.6 lib/active_mocker/model_reader.rb
active_mocker-1.1.5 lib/active_mocker/model_reader.rb
active_mocker-1.1.4 lib/active_mocker/model_reader.rb