Class: ActiveMocker::MockCreator

Inherits:
Object
  • Object
show all
Defined in:
lib/active_mocker/mock_creator.rb,
lib/active_mocker/mock_creator/scopes.rb,
lib/active_mocker/mock_creator/attributes.rb,
lib/active_mocker/mock_creator/associations.rb,
lib/active_mocker/mock_creator/class_methods.rb,
lib/active_mocker/mock_creator/defined_methods.rb,
lib/active_mocker/mock_creator/modules_constants.rb,
lib/active_mocker/mock_creator/recreate_class_method_calls.rb

Defined Under Namespace

Modules: Associations, Attributes, ClassMethods, DefinedMethods, ModulesConstants, RecreateClassMethodCalls, Scopes

Constant Summary collapse

ENABLED_PARTIALS_DEFAULT =
[
  :modules_constants,
  :class_methods,
  :attributes,
  :scopes,
  :recreate_class_method_calls,
  :defined_methods,
  :associations,
].freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#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) ⇒ MockCreator

Returns a new instance of MockCreator.



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/active_mocker/mock_creator.rb', line 17

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

Instance Attribute Details

#errorsObject (readonly)

Returns the value of attribute errors.



60
61
62
# File 'lib/active_mocker/mock_creator.rb', line 60

def errors
  @errors
end

Instance Method Details

#class_nameObject



136
137
138
# File 'lib/active_mocker/mock_creator.rb', line 136

def class_name
  @class_name ||= class_introspector.parsed_source.class_name.split("::").last
end

#completed?Boolean

Returns:

  • (Boolean)


56
57
58
# File 'lib/active_mocker/mock_creator.rb', line 56

def completed?
  @completed
end

#createObject



41
42
43
44
45
# File 'lib/active_mocker/mock_creator.rb', line 41

def create
  verify_class
  render { file_out.close } if errors.empty?
  self
end

#nested_modulesObject



140
141
142
143
144
# File 'lib/active_mocker/mock_creator.rb', line 140

def nested_modules
  @nested_modules ||= begin
    class_introspector.parsed_source.module_nesting.join("::")
  end
end

#partialsObject



115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
# File 'lib/active_mocker/mock_creator.rb', line 115

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_keyObject



146
147
148
# File 'lib/active_mocker/mock_creator.rb', line 146

def primary_key
  @primary_key ||= ActiveRecordSchemaScrapper::Attribute.new(name: "id", type: :integer)
end

#renderObject



47
48
49
50
51
52
53
54
# File 'lib/active_mocker/mock_creator.rb', line 47

def render
  template_creator.render
rescue => e
  raise e unless error_already_collected?(e)
ensure
  yield
  @completed = true
end