class ActiveMocker::MockCreator

Constants

ENABLED_PARTIALS_DEFAULT

Attributes

active_record_base_klass[R]
active_record_model[R]
class_introspector[R]
enabled_partials[R]
errors[R]
file[R]
file_out[R]
klasses_to_be_mocked[R]
mock_append_name[R]
schema_scrapper[R]
template_creator[R]

Public Class Methods

new(file:, file_out:, schema_scrapper:, template_creator: nil, class_introspector: nil, enabled_partials: nil, klasses_to_be_mocked:, mock_append_name:, active_record_model:, active_record_base_klass: ActiveRecord::Base) click to toggle source
# File lib/active_mocker/mock_creator.rb, line 18
def initialize(file:,
               file_out:,
               schema_scrapper:,
               template_creator: nil,
               class_introspector: nil,
               enabled_partials: nil,
               klasses_to_be_mocked:,
               mock_append_name:,
               active_record_model:,
               active_record_base_klass: ActiveRecord::Base)
  @file                     = file
  @file_out                 = file_out
  @schema_scrapper          = schema_scrapper
  @template_creator         = template_creator || template_creator_default(file_out)
  @class_introspector       = class_introspector || class_introspector_default
  @enabled_partials         = enabled_partials || ENABLED_PARTIALS_DEFAULT
  @klasses_to_be_mocked     = klasses_to_be_mocked
  @active_record_base_klass = active_record_base_klass
  @mock_append_name         = mock_append_name
  @active_record_model      = active_record_model
  @errors                   = []
  @completed                = false
end

Public Instance Methods

class_name() click to toggle source
# File lib/active_mocker/mock_creator.rb, line 137
def class_name
  @class_name ||= class_introspector.parsed_source.class_name.split("::").last
end
completed?() click to toggle source
# File lib/active_mocker/mock_creator.rb, line 57
def completed?
  @completed
end
create() click to toggle source
# File lib/active_mocker/mock_creator.rb, line 42
def create
  verify_class
  render { file_out.close } if errors.empty?
  self
end
nested_modules() click to toggle source
# File lib/active_mocker/mock_creator.rb, line 141
def nested_modules
  @nested_modules ||= begin
    class_introspector.parsed_source.module_nesting.join("::")
  end
end
partials() click to toggle source
# File lib/active_mocker/mock_creator.rb, line 116
def partials
  OpenStruct.new(enabled_partials.each_with_object({}) do |p, hash|
    begin
      file = File.new(File.join(File.dirname(__FILE__), "mock_template/_#{p}.erb"))
      extend(ActiveMocker::MockCreator.const_get(p.to_s.camelize))
      hash[p] = ERB.new(file.read, nil, "-", "_sub#{p}").result(binding)
    rescue => e
      errors << ErrorObject.new(class_name:     class_name,
                                original_error: e, type: :generation,
                                level:          :error,
                                message:        e.message)
      errors << ErrorObject.new(class_name:     class_name,
                                original_error: e,
                                type:           :erb,
                                level:          :debug,
                                message:        "Erb template: #{p} failed.\n#{file.path}")
      raise e
    end
  end)
end
primary_key() click to toggle source
# File lib/active_mocker/mock_creator.rb, line 147
def primary_key
  @primary_key ||= ActiveRecordSchemaScrapper::Attribute.new(name: "id", type: :integer)
end
render() { || ... } click to toggle source
# File lib/active_mocker/mock_creator.rb, line 48
def render
  template_creator.render
rescue => e
  raise e unless error_already_collected?(e)
ensure
  yield
  @completed = true
end

Private Instance Methods

class_introspector_default() click to toggle source
# File lib/active_mocker/mock_creator.rb, line 94
def class_introspector_default
  DissociatedIntrospection::Inspection.new(file: file)
end
error_already_collected?(e) click to toggle source
# File lib/active_mocker/mock_creator.rb, line 76
def error_already_collected?(e)
  errors.any? { |eo| eo.original_error == e }
end
parent_class_inspector() click to toggle source

– END defaults – #

# File lib/active_mocker/mock_creator.rb, line 100
def parent_class_inspector
  @parent_class_inspector ||= ParentClass.new(parsed_source:        class_introspector.parsed_source,
                                              klasses_to_be_mocked: klasses_to_be_mocked,
                                              mock_append_name:     mock_append_name).call
end
template_creator_default(file_out) click to toggle source

– Defaults – #

# File lib/active_mocker/mock_creator.rb, line 81
def template_creator_default(file_out)
  TemplateCreator.new(file_out:     file_out,
                      erb_template: File.new(File.join(File.dirname(__FILE__), "mock_template.erb"), "r"),
                      binding:      binding,
                      post_process: lambda do |str|
                        ruby_code = DissociatedIntrospection::RubyCode.build_from_source(str,
                                                                                         parse_with_comments: true)
                        DissociatedIntrospection::WrapInModules.new(ruby_code: ruby_code)
                          .call(modules: nested_modules)
                          .source_from_ast.gsub(/end\n/, "end\n\n")
                      end)
end
verify_class() click to toggle source
# File lib/active_mocker/mock_creator.rb, line 110
def verify_class
  verify_parent_class
end
verify_parent_class() click to toggle source
# File lib/active_mocker/mock_creator.rb, line 106
def verify_parent_class
  errors << parent_class_inspector.error if parent_class_inspector.error
end