active_mocker 2.1.3 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +13 -0
- data/README.md +5 -0
- data/lib/active_mocker.rb +7 -6
- data/lib/active_mocker/config.rb +6 -8
- data/lib/active_mocker/deprecated_components/mock_abilities.rb +6 -10
- data/lib/active_mocker/deprecated_components/rspec.rb +2 -1
- data/lib/active_mocker/display_errors.rb +3 -2
- data/lib/active_mocker/error_object.rb +13 -13
- data/lib/active_mocker/file_path_to_ruby_class.rb +2 -3
- data/lib/active_mocker/file_writer.rb +125 -0
- data/lib/active_mocker/generate.rb +56 -71
- data/lib/active_mocker/hash_new_style.rb +2 -1
- data/lib/active_mocker/loaded_mocks.rb +9 -11
- data/lib/active_mocker/mock.rb +28 -26
- data/lib/active_mocker/mock/alias_attribute.rb +19 -0
- data/lib/active_mocker/mock/association.rb +2 -1
- data/lib/active_mocker/mock/base.rb +22 -20
- data/lib/active_mocker/mock/belongs_to.rb +1 -1
- data/lib/active_mocker/mock/collection.rb +6 -6
- data/lib/active_mocker/mock/do_nothing_active_record_methods.rb +4 -7
- data/lib/active_mocker/mock/exceptions.rb +1 -4
- data/lib/active_mocker/mock/has_and_belongs_to_many.rb +2 -1
- data/lib/active_mocker/mock/has_many.rb +6 -7
- data/lib/active_mocker/mock/has_one.rb +2 -2
- data/lib/active_mocker/mock/hash_process.rb +2 -2
- data/lib/active_mocker/mock/mock_relation.rb +1 -0
- data/lib/active_mocker/mock/object_inspect.rb +2 -2
- data/lib/active_mocker/mock/queries.rb +12 -16
- data/lib/active_mocker/mock/records.rb +3 -3
- data/lib/active_mocker/mock/relation.rb +5 -5
- data/lib/active_mocker/mock/single_relation.rb +2 -4
- data/lib/active_mocker/mock/template_methods.rb +3 -5
- data/lib/active_mocker/mock_creator.rb +78 -22
- data/lib/active_mocker/mock_template.erb +1 -0
- data/lib/active_mocker/mock_template/_recreate_class_method_calls.erb +12 -0
- data/lib/active_mocker/null_progress.rb +2 -2
- data/lib/active_mocker/parent_class.rb +4 -2
- data/lib/active_mocker/progress.rb +6 -8
- data/lib/active_mocker/public_methods.rb +3 -2
- data/lib/active_mocker/railtie.rb +3 -3
- data/lib/active_mocker/rspec.rb +2 -1
- data/lib/active_mocker/rspec_helper.rb +4 -3
- data/lib/active_mocker/task.rake +9 -10
- data/lib/active_mocker/template_creator.rb +5 -5
- data/lib/active_mocker/version.rb +2 -1
- metadata +25 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 05720b7a53a8a8d14dacf57d5ba1d92be772ff13
|
4
|
+
data.tar.gz: 9a2db70acca737f482b0b0d73ab13cf2c7e49595
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0296c4a1536fd52d860b604877191ba75102221095546685dfdef441860f361a6b71352b7f74eb21a5dd487d33913575363986e8f9b8caa469a78a80f43f6126
|
7
|
+
data.tar.gz: 478ec70d8c0fa0cb8d439ab86ab9f6920f0b098b40a1887435cbf96bb1082b04a5d76f2654fa3b10ae336523f46dc75ce1720811d65c8f9b65c3123c9eb2cd8d
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,19 @@
|
|
1
1
|
# Changelog
|
2
2
|
All notable changes to this project will be documented in this file.
|
3
3
|
|
4
|
+
## 2.2.0 - 2016-05-03
|
5
|
+
### Feature
|
6
|
+
- Add `ActiveMocker::Mock#slice`
|
7
|
+
- Import alias_attribute usage to mock - With supporting methods `attribute_alias?(name)` and `attribute_alias(name)`
|
8
|
+
|
9
|
+
### Fix
|
10
|
+
- When an include/extended module is not locally defined, but defined in the same namespace as the mock it was not correctly namespaced
|
11
|
+
- Fix issue NoMethodError in Rails 5.beta when introspection activerecord model.
|
12
|
+
|
13
|
+
## Enhancement
|
14
|
+
- Ignore all non ActiveRecord::Base subclasses
|
15
|
+
- Make rake dependency less strict `>= 10.0`
|
16
|
+
|
4
17
|
## 2.1.3 - 2016-03-21
|
5
18
|
### Fix
|
6
19
|
- Issue where namespaced mocks would not be auto stubbed.
|
data/README.md
CHANGED
@@ -288,6 +288,8 @@ See [Documentation](http://rdoc.info/github/zeisler/active_mocker/master/ActiveM
|
|
288
288
|
* column_names/attribute_names
|
289
289
|
* delete_all/destroy_all
|
290
290
|
* table_name
|
291
|
+
* slice
|
292
|
+
* alias_attributes
|
291
293
|
|
292
294
|
**Query Methods** - [docs](http://rdoc.info/github/zeisler/active_mocker/master/ActiveMocker/Mock/Queries)
|
293
295
|
|
@@ -340,6 +342,9 @@ See [Documentation](http://rdoc.info/github/zeisler/active_mocker/master/ActiveM
|
|
340
342
|
* attribute_names
|
341
343
|
* attribute_present?
|
342
344
|
* has_attribute?
|
345
|
+
* slice
|
346
|
+
* attribute_alias?
|
347
|
+
* alias_attributes
|
343
348
|
|
344
349
|
**has_one/belongs_to/has_many**
|
345
350
|
|
data/lib/active_mocker.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
# _ _ __ __ _
|
2
3
|
# /\ | | (_) | \/ | | |
|
3
4
|
# / \ ___| |_ ___ _____| \ / | ___ ___| | _____ _ __
|
@@ -8,12 +9,12 @@
|
|
8
9
|
# By Dustin Zeisler
|
9
10
|
|
10
11
|
require "rubygems"
|
11
|
-
require
|
12
|
-
require
|
13
|
-
require
|
14
|
-
require
|
15
|
-
require
|
16
|
-
require
|
12
|
+
require "active_mocker/version"
|
13
|
+
require "active_mocker/railtie" if defined?(Rails)
|
14
|
+
require "forwardable"
|
15
|
+
require "active_support/all"
|
16
|
+
require "active_mocker/public_methods"
|
17
|
+
require "active_mocker/config"
|
17
18
|
require "reverse_parameters"
|
18
19
|
require "active_record_schema_scrapper"
|
19
20
|
require "dissociated_introspection"
|
data/lib/active_mocker/config.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module ActiveMocker
|
2
3
|
class Config
|
3
4
|
class << self
|
4
|
-
|
5
5
|
attr_accessor :model_dir,
|
6
6
|
:mock_dir,
|
7
7
|
:single_model_path,
|
@@ -10,9 +10,7 @@ module ActiveMocker
|
|
10
10
|
:disable_modules_and_constants,
|
11
11
|
:mock_append_name
|
12
12
|
|
13
|
-
|
14
|
-
@model_base_classes = val
|
15
|
-
end
|
13
|
+
attr_writer :model_base_classes
|
16
14
|
|
17
15
|
# @see ActiveMocker#configure
|
18
16
|
def set
|
@@ -27,7 +25,7 @@ module ActiveMocker
|
|
27
25
|
@model_dir = nil unless @model_dir
|
28
26
|
@mock_dir = nil unless @mock_dir
|
29
27
|
@mock_append_name = "Mock"
|
30
|
-
rails_defaults if Object.const_defined?(
|
28
|
+
rails_defaults if Object.const_defined?("Rails")
|
31
29
|
end
|
32
30
|
|
33
31
|
def reset_all
|
@@ -37,13 +35,13 @@ module ActiveMocker
|
|
37
35
|
:single_model_path,
|
38
36
|
:progress_bar,
|
39
37
|
:error_verbosity,
|
40
|
-
:mock_append_name
|
38
|
+
:mock_append_name,
|
41
39
|
].each { |ivar| instance_variable_set("@#{ivar}", nil) }
|
42
40
|
end
|
43
41
|
|
44
42
|
def rails_defaults
|
45
|
-
@model_dir = File.join(Rails.root,
|
46
|
-
@mock_dir = File.join(Rails.root,
|
43
|
+
@model_dir = File.join(Rails.root, "app/models") unless @model_dir
|
44
|
+
@mock_dir = File.join(Rails.root, "spec/mocks") unless @mock_dir
|
47
45
|
end
|
48
46
|
|
49
47
|
def progress_class
|
@@ -1,13 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module ActiveMocker
|
2
3
|
# @deprecated to keep using until removal, require this file.
|
3
4
|
module MockAbilities
|
4
5
|
module InstanceAndClassMethods
|
5
|
-
|
6
|
-
def mock_instance_method(method, exe_bind=false, &block)
|
6
|
+
def mock_instance_method(method, exe_bind = false, &block)
|
7
7
|
mockable_instance_methods[method.to_sym] = MockMethod.new(block, exe_bind)
|
8
8
|
end
|
9
9
|
|
10
|
-
|
10
|
+
alias stub_instance_method mock_instance_method
|
11
11
|
|
12
12
|
def clear_mocked_methods
|
13
13
|
mockable_instance_methods.clear
|
@@ -39,7 +39,6 @@ module ActiveMocker
|
|
39
39
|
return instance_exec(method.arguments, &method.block) if method.exe_bind
|
40
40
|
method.block.call(*method.arguments)
|
41
41
|
end
|
42
|
-
|
43
42
|
end
|
44
43
|
|
45
44
|
def self.included(base)
|
@@ -53,28 +52,26 @@ module ActiveMocker
|
|
53
52
|
end
|
54
53
|
|
55
54
|
module ClassMethods
|
56
|
-
|
57
55
|
include InstanceAndClassMethods
|
58
56
|
|
59
57
|
def mockable_class_methods
|
60
58
|
@mockable_class_methods ||= {}
|
61
59
|
end
|
62
60
|
|
63
|
-
def mock_class_method(method, exe_bind=false, &block)
|
61
|
+
def mock_class_method(method, exe_bind = false, &block)
|
64
62
|
mockable_class_methods[method.to_sym] = MockMethod.new(block, exe_bind)
|
65
63
|
end
|
66
64
|
|
67
|
-
|
65
|
+
alias stub_class_method mock_class_method
|
68
66
|
|
69
67
|
def call_mock_method(method:, caller:, arguments: [])
|
70
68
|
mock_method = mockable_class_methods[method.to_sym]
|
71
|
-
is_implemented(mock_method, method,
|
69
|
+
is_implemented(mock_method, method, "::", caller)
|
72
70
|
mock_method.arguments = arguments
|
73
71
|
execute_block(mock_method)
|
74
72
|
end
|
75
73
|
|
76
74
|
private :call_mock_method
|
77
|
-
|
78
75
|
end
|
79
76
|
|
80
77
|
include InstanceAndClassMethods
|
@@ -94,7 +91,6 @@ module ActiveMocker
|
|
94
91
|
end
|
95
92
|
|
96
93
|
class MockMethod
|
97
|
-
|
98
94
|
attr_accessor :block, :arguments, :exe_bind
|
99
95
|
|
100
96
|
def initialize(block, exe_bind)
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module ActiveMocker
|
2
3
|
class DisplayErrors
|
3
4
|
attr_reader :errors, :model_count, :out
|
@@ -29,7 +30,7 @@ module ActiveMocker
|
|
29
30
|
|
30
31
|
def display_errors
|
31
32
|
uniq_errors.each do |e|
|
32
|
-
next
|
33
|
+
next unless ENV["DEBUG"] || !(e.level == :debug)
|
33
34
|
if ActiveMocker::Config.error_verbosity == 3
|
34
35
|
out.puts "#{e.class_name} has the following errors:"
|
35
36
|
out.puts e.message.colorize(e.level_color)
|
@@ -62,7 +63,7 @@ module ActiveMocker
|
|
62
63
|
|
63
64
|
def failure_count_message
|
64
65
|
if ActiveMocker::Config.error_verbosity > 0 && (success_count < model_count || uniq_errors.count > 0)
|
65
|
-
out.puts "#{
|
66
|
+
out.puts "#{model_count - success_count} mock(s) out of #{model_count} failed."
|
66
67
|
end
|
67
68
|
end
|
68
69
|
end
|
@@ -1,6 +1,6 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module ActiveMocker
|
2
3
|
class ErrorObject
|
3
|
-
|
4
4
|
attr_reader :message, :level, :original_error, :type, :class_name
|
5
5
|
|
6
6
|
def initialize(level: :warn, message:, class_name:, type:, original_error: nil)
|
@@ -13,17 +13,17 @@ module ActiveMocker
|
|
13
13
|
|
14
14
|
def self.build_from(object: nil, exception: nil, class_name: nil, type: nil)
|
15
15
|
if object
|
16
|
-
args
|
16
|
+
args = [:message, :original_error, :level, :type, :class_name].each_with_object({}) do |meth, hash|
|
17
17
|
hash[meth] = object.public_send(meth) if object.respond_to? meth
|
18
18
|
end
|
19
19
|
args[:type] = type unless type.nil?
|
20
20
|
args[:class_name] = class_name unless class_name.nil?
|
21
|
-
return
|
21
|
+
return new(args)
|
22
22
|
elsif exception && class_name
|
23
|
-
return
|
24
|
-
|
25
|
-
|
26
|
-
|
23
|
+
return new(message: exception.message,
|
24
|
+
class_name: class_name,
|
25
|
+
original_error: exception,
|
26
|
+
type: type ? type : :standard_error)
|
27
27
|
end
|
28
28
|
raise ArgumentError
|
29
29
|
end
|
@@ -34,12 +34,12 @@ module ActiveMocker
|
|
34
34
|
|
35
35
|
def level_color
|
36
36
|
case level
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
37
|
+
when :standard_error, :fatal, :error
|
38
|
+
:red
|
39
|
+
when :warn
|
40
|
+
:yellow
|
41
|
+
when :info
|
42
|
+
:default
|
43
43
|
end
|
44
44
|
end
|
45
45
|
end
|
@@ -1,6 +1,6 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module ActiveMocker
|
2
3
|
class FilePathToRubyClass
|
3
|
-
|
4
4
|
attr_reader :class_path, :base_path
|
5
5
|
|
6
6
|
def initialize(base_path:, class_path:)
|
@@ -9,8 +9,7 @@ module ActiveMocker
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def to_s
|
12
|
-
File.basename(
|
12
|
+
File.basename(class_path.gsub(base_path + "/", "").split("/").map(&:camelize).join("::"), ".rb")
|
13
13
|
end
|
14
|
-
|
15
14
|
end
|
16
15
|
end
|
@@ -0,0 +1,125 @@
|
|
1
|
+
module ActiveMocker
|
2
|
+
class FileWriter
|
3
|
+
include Virtus.model
|
4
|
+
delegate :name, to: :model, prefix: true
|
5
|
+
|
6
|
+
attribute :model, Object
|
7
|
+
attribute :file, String
|
8
|
+
attribute :display_errors
|
9
|
+
attribute :config
|
10
|
+
attribute :model_names, Array
|
11
|
+
|
12
|
+
def write!
|
13
|
+
assure_dir_path_exists!
|
14
|
+
|
15
|
+
safe_write { |f| process!(f) }
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def process!(file_out)
|
21
|
+
result = create_mock(file_out, model)
|
22
|
+
status = collect_errors(result.errors)
|
23
|
+
|
24
|
+
ok = result.completed? && status.successful?
|
25
|
+
return unless ok
|
26
|
+
|
27
|
+
display_errors.success_count += 1
|
28
|
+
end
|
29
|
+
|
30
|
+
def safe_write
|
31
|
+
File.open(mock_file_path, "w") do |file_out|
|
32
|
+
begin
|
33
|
+
yield file_out
|
34
|
+
rescue StandardError => e
|
35
|
+
rescue_clean_up(e, file_out)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def rescue_clean_up(e, file_out)
|
41
|
+
display_errors.failed_models << model_name
|
42
|
+
file_out.close unless file_out.closed?
|
43
|
+
File.delete(file_out.path) if File.exist?(file_out.path)
|
44
|
+
display_errors.wrap_an_exception(e, model_name)
|
45
|
+
end
|
46
|
+
|
47
|
+
def scrapper
|
48
|
+
@scrapper ||= ActiveRecordSchemaScrapper.new(model: model)
|
49
|
+
end
|
50
|
+
|
51
|
+
def mock_file_path
|
52
|
+
File.join(Config.mock_dir, mock_file_name)
|
53
|
+
end
|
54
|
+
|
55
|
+
def mock_file_name
|
56
|
+
"#{model_name.underscore}_#{config.mock_append_name.underscore}.rb"
|
57
|
+
end
|
58
|
+
|
59
|
+
def assure_dir_path_exists!
|
60
|
+
unless File.exist?(File.dirname(mock_file_path))
|
61
|
+
FileUtils.mkdir_p(File.dirname(mock_file_path))
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def create_mock(file_out, model)
|
66
|
+
MockCreator.new(file: File.open(file),
|
67
|
+
file_out: file_out,
|
68
|
+
schema_scrapper: scrapper,
|
69
|
+
klasses_to_be_mocked: model_names,
|
70
|
+
enabled_partials: enabled_partials,
|
71
|
+
mock_append_name: config.mock_append_name,
|
72
|
+
active_record_model: model).create
|
73
|
+
end
|
74
|
+
|
75
|
+
OtherErrors = Struct.new(:successful?)
|
76
|
+
|
77
|
+
def collect_errors(create_mock_errors)
|
78
|
+
add_errors!
|
79
|
+
|
80
|
+
if create_mock_errors.present? || schema.attribute_errors?
|
81
|
+
display_errors.failed_models << model_name
|
82
|
+
File.delete(mock_file_path) if File.exist?(mock_file_path)
|
83
|
+
display_errors.add(create_mock_errors)
|
84
|
+
OtherErrors.new(false)
|
85
|
+
else
|
86
|
+
OtherErrors.new(true)
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def add_errors!
|
91
|
+
add_error(schema.association_errors, :associations)
|
92
|
+
add_error(schema.attribute_errors, :attributes)
|
93
|
+
end
|
94
|
+
|
95
|
+
def add_error(error, type)
|
96
|
+
display_errors.wrap_errors(error, model_name, type: type)
|
97
|
+
end
|
98
|
+
|
99
|
+
def enabled_partials
|
100
|
+
if config.disable_modules_and_constants
|
101
|
+
MockCreator.enabled_partials_default - [*:modules_constants]
|
102
|
+
else
|
103
|
+
MockCreator.enabled_partials_default
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
def schema
|
108
|
+
@schema ||= Schema.new(ActiveRecordSchemaScrapper.new(model: model))
|
109
|
+
end
|
110
|
+
|
111
|
+
class Schema < SimpleDelegator
|
112
|
+
def attribute_errors?
|
113
|
+
attribute_errors.any? { |e| e.level == :error }
|
114
|
+
end
|
115
|
+
|
116
|
+
def association_errors
|
117
|
+
associations.errors
|
118
|
+
end
|
119
|
+
|
120
|
+
def attribute_errors
|
121
|
+
attributes.errors
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
@@ -1,10 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require_relative "file_writer"
|
3
|
+
|
1
4
|
module ActiveMocker
|
2
5
|
class Generate
|
3
|
-
|
4
6
|
def initialize
|
5
|
-
|
7
|
+
check_directory!(:mock_dir)
|
6
8
|
create_mock_dir
|
7
|
-
|
9
|
+
check_directory!(:model_dir)
|
10
|
+
raise_missing_arg(:model_dir) unless Dir.exist?(config.model_dir)
|
11
|
+
|
8
12
|
@display_errors = DisplayErrors.new(models_paths.count)
|
9
13
|
end
|
10
14
|
|
@@ -12,92 +16,81 @@ module ActiveMocker
|
|
12
16
|
def call
|
13
17
|
clean_up
|
14
18
|
progress_init
|
15
|
-
|
16
|
-
|
17
|
-
model
|
18
|
-
|
19
|
-
mock_file_path = File.join(Config.mock_dir, mock_file_name)
|
20
|
-
assure_dir_path_exists(mock_file_path)
|
21
|
-
schema_scrapper = ActiveRecordSchemaScrapper.new(model: model)
|
22
|
-
File.open(mock_file_path, 'w') do |file_out|
|
23
|
-
begin
|
24
|
-
result = create_mock(file, file_out, schema_scrapper)
|
25
|
-
status = collect_errors(mock_file_path, result.errors, schema_scrapper, model_name)
|
26
|
-
display_errors.success_count += 1 if result.completed? && status.successful?
|
27
|
-
rescue => e
|
28
|
-
rescue_clean_up(e, file_out, model_name)
|
29
|
-
end
|
30
|
-
end
|
19
|
+
|
20
|
+
active_record_models_with_files.each do |model, file|
|
21
|
+
write_file(model, file)
|
22
|
+
|
31
23
|
progress.increment
|
32
24
|
end
|
25
|
+
|
33
26
|
display_errors.display_errors
|
34
27
|
self
|
35
28
|
end
|
36
29
|
|
37
|
-
def
|
38
|
-
|
39
|
-
rescue StandardError, LoadError => e
|
40
|
-
display_errors.wrap_an_exception(e, model_name)
|
30
|
+
def active_record_models
|
31
|
+
@active_record_models ||= active_record_models_with_files.map(&:first)
|
41
32
|
end
|
42
33
|
|
43
34
|
private
|
44
35
|
|
45
|
-
attr_reader :display_errors
|
46
|
-
|
47
|
-
def
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
enabled_partials: enabled_partials,
|
53
|
-
mock_append_name: config.mock_append_name).create
|
54
|
-
end
|
55
|
-
|
56
|
-
OtherErrors = Struct.new(:successful?)
|
57
|
-
def collect_errors(mock_file_path, create_mock_errors, schema_scrapper, model_name)
|
58
|
-
display_errors.wrap_errors(schema_scrapper.associations.errors, model_name, type: :associations)
|
59
|
-
display_errors.wrap_errors(schema_scrapper.attributes.errors, model_name, type: :attributes)
|
60
|
-
if create_mock_errors.present? || schema_scrapper.attributes.errors.any? { |e| e.level == :error }
|
61
|
-
display_errors.failed_models << model_name
|
62
|
-
File.delete(mock_file_path) if File.exists?(mock_file_path)
|
63
|
-
display_errors.add(create_mock_errors)
|
64
|
-
OtherErrors.new(false)
|
65
|
-
else
|
66
|
-
OtherErrors.new(true)
|
36
|
+
attr_reader :display_errors, :progress
|
37
|
+
|
38
|
+
def check_directory!(type)
|
39
|
+
value = config.send(type)
|
40
|
+
|
41
|
+
if value.nil? || value.empty?
|
42
|
+
raise_missing_arg(type)
|
67
43
|
end
|
68
44
|
end
|
69
45
|
|
70
|
-
def
|
71
|
-
|
72
|
-
file_out.close unless file_out.closed?
|
73
|
-
File.delete(file_out.path) if File.exists?(file_out.path)
|
74
|
-
display_errors.wrap_an_exception(e, model_name)
|
46
|
+
def raise_missing_arg(type)
|
47
|
+
raise ArgumentError, "#{type} is missing a valued value!"
|
75
48
|
end
|
76
49
|
|
77
|
-
def
|
78
|
-
|
50
|
+
def write_file(model, file)
|
51
|
+
writer = FileWriter.new(
|
52
|
+
model: model,
|
53
|
+
file: file,
|
54
|
+
display_errors: display_errors,
|
55
|
+
config: config,
|
56
|
+
model_names: model_names)
|
57
|
+
|
58
|
+
writer.write!
|
79
59
|
end
|
80
60
|
|
81
|
-
def
|
82
|
-
@
|
61
|
+
def progress_init
|
62
|
+
@progress = config.progress_class.create(active_record_models.count)
|
83
63
|
end
|
84
64
|
|
85
|
-
def
|
86
|
-
@
|
65
|
+
def model_names
|
66
|
+
@model_names ||= active_record_models.map(&:name)
|
87
67
|
end
|
88
68
|
|
89
|
-
def
|
90
|
-
@
|
69
|
+
def active_record_models_with_files
|
70
|
+
@active_record_models_with_files ||= models_paths.map do |file|
|
71
|
+
model = constant_from(model_name_from(file))
|
72
|
+
[model, file] if model
|
73
|
+
end.compact
|
91
74
|
end
|
92
75
|
|
93
76
|
def models_paths
|
94
77
|
@models_paths ||= Dir.glob(config.single_model_path || File.join(config.model_dir, "**/*.rb"))
|
95
78
|
end
|
96
79
|
|
97
|
-
def
|
98
|
-
|
99
|
-
|
100
|
-
|
80
|
+
def constant_from(model_name)
|
81
|
+
constant = model_name.constantize
|
82
|
+
return unless constant.ancestors.include?(ActiveRecord::Base)
|
83
|
+
constant
|
84
|
+
rescue NameError, LoadError => e
|
85
|
+
display_errors.wrap_an_exception(e, model_name)
|
86
|
+
nil
|
87
|
+
end
|
88
|
+
|
89
|
+
def model_name_from(file)
|
90
|
+
FilePathToRubyClass.new(
|
91
|
+
base_path: config.model_dir,
|
92
|
+
class_path: file
|
93
|
+
).to_s
|
101
94
|
end
|
102
95
|
|
103
96
|
def config
|
@@ -105,15 +98,7 @@ module ActiveMocker
|
|
105
98
|
end
|
106
99
|
|
107
100
|
def create_mock_dir
|
108
|
-
FileUtils
|
109
|
-
end
|
110
|
-
|
111
|
-
def enabled_partials
|
112
|
-
if config.disable_modules_and_constants
|
113
|
-
MockCreator.enabled_partials_default - [*:modules_constants]
|
114
|
-
else
|
115
|
-
MockCreator.enabled_partials_default
|
116
|
-
end
|
101
|
+
FileUtils.mkdir_p(config.mock_dir) unless Dir.exist?(config.mock_dir)
|
117
102
|
end
|
118
103
|
|
119
104
|
def clean_up
|