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
@@ -1,7 +1,7 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module ActiveMocker
|
2
3
|
class LoadedMocks
|
3
4
|
class << self
|
4
|
-
|
5
5
|
extend Forwardable
|
6
6
|
def_delegators :mocks, :find, :delete_all
|
7
7
|
|
@@ -17,20 +17,19 @@ module ActiveMocker
|
|
17
17
|
end
|
18
18
|
|
19
19
|
# @deprecated Use {#mocks} instead of this method.
|
20
|
-
|
20
|
+
alias class_name_to_mock mocks
|
21
21
|
|
22
22
|
# @deprecated Use {#mocks} instead of this method.
|
23
|
-
|
23
|
+
alias all mocks
|
24
24
|
|
25
25
|
# @deprecated Use {#delete_all} instead of this method.
|
26
|
-
|
26
|
+
alias clear_all delete_all
|
27
27
|
|
28
28
|
class Collection
|
29
|
-
|
30
29
|
include Enumerable
|
31
30
|
|
32
31
|
# @option opts [Hash] hash
|
33
|
-
def initialize(hash={})
|
32
|
+
def initialize(hash = {})
|
34
33
|
@hash = Hash[hash]
|
35
34
|
end
|
36
35
|
|
@@ -70,21 +69,21 @@ module ActiveMocker
|
|
70
69
|
def mocks
|
71
70
|
hash.values
|
72
71
|
end
|
73
|
-
|
72
|
+
alias values mocks
|
74
73
|
|
75
74
|
private
|
75
|
+
|
76
76
|
attr_reader :hash
|
77
77
|
|
78
78
|
def get_item(args, k, v)
|
79
79
|
args.map do |e|
|
80
|
-
if [:to_str, :to_sym].any?{|i| e.respond_to? i}
|
80
|
+
if [:to_str, :to_sym].any? { |i| e.respond_to? i }
|
81
81
|
e.to_s == k
|
82
82
|
else
|
83
83
|
e == v
|
84
84
|
end
|
85
85
|
end.any? { |a| a }
|
86
86
|
end
|
87
|
-
|
88
87
|
end
|
89
88
|
|
90
89
|
private
|
@@ -94,9 +93,8 @@ module ActiveMocker
|
|
94
93
|
end
|
95
94
|
|
96
95
|
def add(mocks_to_add)
|
97
|
-
mocks_store.merge!(
|
96
|
+
mocks_store.merge!(mocks_to_add.name => mocks_to_add)
|
98
97
|
end
|
99
|
-
|
100
98
|
end
|
101
99
|
end
|
102
100
|
end
|
data/lib/active_mocker/mock.rb
CHANGED
@@ -1,27 +1,29 @@
|
|
1
|
-
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require "active_support/deprecation"
|
3
|
+
require "active_support/dependencies/autoload"
|
4
|
+
require "active_support/hash_with_indifferent_access"
|
5
|
+
require "active_support/core_ext/module/delegation"
|
6
|
+
require "active_support/inflector"
|
7
|
+
require "active_support/core_ext"
|
8
|
+
require "virtus"
|
8
9
|
|
9
|
-
require
|
10
|
-
require
|
11
|
-
require
|
12
|
-
require
|
13
|
-
require
|
14
|
-
require
|
15
|
-
require
|
16
|
-
require
|
17
|
-
require
|
18
|
-
require
|
19
|
-
require
|
20
|
-
require
|
21
|
-
require
|
22
|
-
require
|
23
|
-
require
|
24
|
-
require
|
25
|
-
require
|
26
|
-
require
|
27
|
-
require
|
10
|
+
require "active_mocker/version"
|
11
|
+
require "active_mocker/loaded_mocks"
|
12
|
+
require "active_mocker/mock/hash_process"
|
13
|
+
require "active_mocker/mock/collection"
|
14
|
+
require "active_mocker/mock/queries"
|
15
|
+
require "active_mocker/mock/relation"
|
16
|
+
require "active_mocker/mock/mock_relation"
|
17
|
+
require "active_mocker/mock/association"
|
18
|
+
require "active_mocker/mock/has_many"
|
19
|
+
require "active_mocker/mock/single_relation"
|
20
|
+
require "active_mocker/mock/has_one"
|
21
|
+
require "active_mocker/mock/has_and_belongs_to_many"
|
22
|
+
require "active_mocker/mock/belongs_to"
|
23
|
+
require "active_mocker/mock/exceptions"
|
24
|
+
require "active_mocker/mock/template_methods"
|
25
|
+
require "active_mocker/mock/do_nothing_active_record_methods"
|
26
|
+
require "active_mocker/mock/records"
|
27
|
+
require "active_mocker/mock/object_inspect"
|
28
|
+
require "active_mocker/mock/alias_attribute"
|
29
|
+
require "active_mocker/mock/base"
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module ActiveMocker
|
2
|
+
module AliasAttribute
|
3
|
+
# Is +new_name+ an alias?
|
4
|
+
def attribute_alias?(new_name)
|
5
|
+
attribute_aliases.key? new_name.to_s
|
6
|
+
end
|
7
|
+
|
8
|
+
# Returns the original name for the alias +name+
|
9
|
+
def attribute_alias(name)
|
10
|
+
attribute_aliases[name.to_s]
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def attribute_aliases
|
16
|
+
@attribute_aliases ||= {}
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -1,15 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module ActiveMocker
|
2
3
|
class Base
|
3
4
|
include DoNothingActiveRecordMethods
|
4
5
|
include TemplateMethods
|
5
6
|
extend Queries
|
7
|
+
extend AliasAttribute
|
6
8
|
|
7
9
|
def self.inherited(subclass)
|
8
10
|
return ActiveMocker::LoadedMocks.send(:add, subclass) if subclass.superclass == Base
|
9
11
|
end
|
10
12
|
|
11
13
|
class << self
|
12
|
-
|
13
14
|
# Creates an object (or multiple objects) and saves it to memory.
|
14
15
|
#
|
15
16
|
# The +attributes+ parameter can be either a Hash or an Array of Hashes. These Hashes describe the
|
@@ -43,7 +44,7 @@ module ActiveMocker
|
|
43
44
|
end
|
44
45
|
end
|
45
46
|
|
46
|
-
|
47
|
+
alias create! create
|
47
48
|
|
48
49
|
def records
|
49
50
|
@records ||= Records.new
|
@@ -51,8 +52,8 @@ module ActiveMocker
|
|
51
52
|
|
52
53
|
private :records
|
53
54
|
|
54
|
-
delegate :insert, :exists?, :to_a, :
|
55
|
-
delegate :first, :last, :
|
55
|
+
delegate :insert, :exists?, :to_a, to: :records
|
56
|
+
delegate :first, :last, to: :all
|
56
57
|
|
57
58
|
# Delete an object (or multiple objects) that has the given id.
|
58
59
|
#
|
@@ -78,17 +79,17 @@ module ActiveMocker
|
|
78
79
|
end
|
79
80
|
end
|
80
81
|
|
81
|
-
|
82
|
+
alias destroy delete
|
82
83
|
|
83
84
|
# Deletes the records matching +conditions+.
|
84
85
|
#
|
85
86
|
# Post.where(person_id: 5).where(category: ['Something', 'Else']).delete_all
|
86
|
-
def delete_all(conditions=nil)
|
87
|
+
def delete_all(conditions = nil)
|
87
88
|
return records.reset if conditions.nil?
|
88
89
|
super
|
89
90
|
end
|
90
91
|
|
91
|
-
|
92
|
+
alias destroy_all delete_all
|
92
93
|
|
93
94
|
# @api private
|
94
95
|
def from_limit?
|
@@ -130,12 +131,12 @@ module ActiveMocker
|
|
130
131
|
private
|
131
132
|
|
132
133
|
def created_with(version)
|
133
|
-
raise UpdateMocksError.new(
|
134
|
+
raise UpdateMocksError.new(name, version, ActiveMocker::VERSION) if version != ActiveMocker::VERSION
|
134
135
|
end
|
135
136
|
|
136
137
|
# @deprecated
|
137
138
|
def call_mock_method(method:, caller:, arguments: [])
|
138
|
-
is_implemented(method,
|
139
|
+
is_implemented(method, "::", caller)
|
139
140
|
end
|
140
141
|
|
141
142
|
# @deprecated
|
@@ -183,12 +184,12 @@ module ActiveMocker
|
|
183
184
|
|
184
185
|
private :setup_instance_variables
|
185
186
|
|
186
|
-
def update(attributes={})
|
187
|
+
def update(attributes = {})
|
187
188
|
assign_attributes(attributes)
|
188
189
|
end
|
189
190
|
|
190
191
|
# @api private
|
191
|
-
def assign_attributes(new_attributes
|
192
|
+
def assign_attributes(new_attributes)
|
192
193
|
yield self if block_given?
|
193
194
|
unless new_attributes.respond_to?(:stringify_keys)
|
194
195
|
raise ArgumentError, "When assigning attributes, you must pass a hash as an argument."
|
@@ -213,10 +214,8 @@ module ActiveMocker
|
|
213
214
|
end
|
214
215
|
end
|
215
216
|
|
216
|
-
def save(*
|
217
|
-
unless self.class.exists?(self)
|
218
|
-
self.class.send(:insert, self)
|
219
|
-
end
|
217
|
+
def save(*_args)
|
218
|
+
self.class.send(:insert, self) unless self.class.exists?(self)
|
220
219
|
true
|
221
220
|
end
|
222
221
|
|
@@ -232,7 +231,7 @@ module ActiveMocker
|
|
232
231
|
records.delete(self)
|
233
232
|
end
|
234
233
|
|
235
|
-
|
234
|
+
alias destroy delete
|
236
235
|
|
237
236
|
delegate :[], :[]=, to: :attributes
|
238
237
|
|
@@ -256,7 +255,7 @@ module ActiveMocker
|
|
256
255
|
# person.has_attribute?('age') # => true
|
257
256
|
# person.has_attribute?(:nothing) # => false
|
258
257
|
def has_attribute?(attr_name)
|
259
|
-
@attributes.
|
258
|
+
@attributes.key?(attr_name.to_s)
|
260
259
|
end
|
261
260
|
|
262
261
|
# Returns +true+ if the specified +attribute+ has been set and is neither +nil+ nor <tt>empty?</tt> (the latter only applies
|
@@ -275,6 +274,11 @@ module ActiveMocker
|
|
275
274
|
!value.nil? && !(value.respond_to?(:empty?) && value.empty?)
|
276
275
|
end
|
277
276
|
|
277
|
+
# Returns a hash of the given methods with their names as keys and returned values as values.
|
278
|
+
def slice(*methods)
|
279
|
+
Hash[methods.map! { |method| [method, public_send(method)] }].with_indifferent_access
|
280
|
+
end
|
281
|
+
|
278
282
|
# Returns an array of names for the attributes available on this object.
|
279
283
|
#
|
280
284
|
# person = Person.new
|
@@ -298,7 +302,6 @@ module ActiveMocker
|
|
298
302
|
end
|
299
303
|
|
300
304
|
module PropertiesGetterAndSetter
|
301
|
-
|
302
305
|
# Returns the value of the attribute identified by <tt>attr_name</tt> after
|
303
306
|
# it has been typecast (for example, "2004-12-12" in a date column is cast
|
304
307
|
# to a date object, like Date.new(2004, 12, 12))
|
@@ -314,7 +317,7 @@ module ActiveMocker
|
|
314
317
|
end
|
315
318
|
|
316
319
|
# @api private
|
317
|
-
def read_association(attr, assign_if_value_nil=nil)
|
320
|
+
def read_association(attr, assign_if_value_nil = nil)
|
318
321
|
@associations[attr.to_sym] ||= assign_if_value_nil.try(:call)
|
319
322
|
end
|
320
323
|
|
@@ -324,7 +327,6 @@ module ActiveMocker
|
|
324
327
|
end
|
325
328
|
|
326
329
|
protected :read_attribute, :write_attribute, :read_association, :write_association
|
327
|
-
|
328
330
|
end
|
329
331
|
|
330
332
|
include PropertiesGetterAndSetter
|
@@ -1,14 +1,14 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require "forwardable"
|
2
3
|
|
3
4
|
module ActiveMocker
|
4
5
|
class Collection
|
5
6
|
include Enumerable
|
6
7
|
extend ::Forwardable
|
7
8
|
def_delegators :@collection, :[], :take, :push, :clear, :first, :last, :concat, :replace, :uniq, :count, :size, :length, :empty?, :any?, :many?, :include?, :delete
|
8
|
-
|
9
|
+
alias distinct uniq
|
9
10
|
|
10
|
-
|
11
|
-
def initialize(collection=[])
|
11
|
+
def initialize(collection = [])
|
12
12
|
@collection = [*collection]
|
13
13
|
end
|
14
14
|
|
@@ -16,7 +16,7 @@ module ActiveMocker
|
|
16
16
|
collection.concat(records.flatten)
|
17
17
|
end
|
18
18
|
|
19
|
-
def each
|
19
|
+
def each
|
20
20
|
collection.each do |item|
|
21
21
|
yield(item)
|
22
22
|
end
|
@@ -46,4 +46,4 @@ module ActiveMocker
|
|
46
46
|
|
47
47
|
attr_accessor :collection
|
48
48
|
end
|
49
|
-
end
|
49
|
+
end
|
@@ -1,12 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module ActiveMocker
|
2
3
|
module DoNothingActiveRecordMethods
|
3
|
-
|
4
4
|
def self.included(base)
|
5
5
|
base.extend(ClassMethods)
|
6
6
|
end
|
7
7
|
|
8
8
|
module ClassMethods
|
9
|
-
|
10
9
|
def transaction
|
11
10
|
yield
|
12
11
|
rescue LocalJumpError => err
|
@@ -18,7 +17,6 @@ module ActiveMocker
|
|
18
17
|
def column_names
|
19
18
|
attribute_names
|
20
19
|
end
|
21
|
-
|
22
20
|
end
|
23
21
|
|
24
22
|
def readonly?
|
@@ -28,11 +26,11 @@ module ActiveMocker
|
|
28
26
|
def errors
|
29
27
|
obj = Object.new
|
30
28
|
|
31
|
-
def obj.[](
|
29
|
+
def obj.[](_key)
|
32
30
|
[]
|
33
31
|
end
|
34
32
|
|
35
|
-
def obj.full_messages
|
33
|
+
def obj.full_messages
|
36
34
|
[]
|
37
35
|
end
|
38
36
|
|
@@ -54,6 +52,5 @@ module ActiveMocker
|
|
54
52
|
def reload
|
55
53
|
self
|
56
54
|
end
|
57
|
-
|
58
55
|
end
|
59
|
-
end
|
56
|
+
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module ActiveMocker
|
2
3
|
class RecordNotFound < StandardError
|
3
4
|
end
|
@@ -12,7 +13,6 @@ module ActiveMocker
|
|
12
13
|
|
13
14
|
# Raised when unknown attributes are supplied via mass assignment.
|
14
15
|
class UnknownAttributeError < NoMethodError
|
15
|
-
|
16
16
|
attr_reader :record, :attribute
|
17
17
|
|
18
18
|
def initialize(record, attribute)
|
@@ -20,15 +20,12 @@ module ActiveMocker
|
|
20
20
|
@attribute = attribute.to_s
|
21
21
|
super("unknown attribute: #{attribute}")
|
22
22
|
end
|
23
|
-
|
24
23
|
end
|
25
24
|
|
26
25
|
class UpdateMocksError < Exception
|
27
|
-
|
28
26
|
def initialize(name, mock_version, gem_version)
|
29
27
|
super("#{name} was built with #{mock_version} but the gem version is #{gem_version}. Run `rake active_mocker:build` to update.")
|
30
28
|
end
|
31
|
-
|
32
29
|
end
|
33
30
|
|
34
31
|
class NotImplementedError < Exception
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module ActiveMocker
|
2
3
|
class HasMany < Association
|
3
4
|
include Queries
|
@@ -7,7 +8,7 @@ module ActiveMocker
|
|
7
8
|
super(collection, options)
|
8
9
|
end
|
9
10
|
|
10
|
-
def initialize(collection, options={})
|
11
|
+
def initialize(collection, options = {})
|
11
12
|
@relation_class = options[:relation_class]
|
12
13
|
@foreign_key = options[:foreign_key]
|
13
14
|
@foreign_id = options[:foreign_id]
|
@@ -26,7 +27,7 @@ module ActiveMocker
|
|
26
27
|
# @api private
|
27
28
|
attr_reader :relation_class, :foreign_key, :foreign_id, :source
|
28
29
|
|
29
|
-
def build(options={}, &block)
|
30
|
+
def build(options = {}, &block)
|
30
31
|
new_record = relation_class.new(init_options.merge!(options), &block)
|
31
32
|
|
32
33
|
# @private
|
@@ -45,23 +46,21 @@ module ActiveMocker
|
|
45
46
|
new_record
|
46
47
|
end
|
47
48
|
|
48
|
-
def create(options={}, &block)
|
49
|
+
def create(options = {}, &block)
|
49
50
|
created_record = relation_class.create(init_options.merge!(options), &block)
|
50
51
|
collection << created_record
|
51
52
|
created_record
|
52
53
|
end
|
53
54
|
|
54
|
-
|
55
|
+
alias create! create
|
55
56
|
|
56
57
|
# @api private
|
57
58
|
def init_options
|
58
|
-
{foreign_key => foreign_id}
|
59
|
+
{ foreign_key => foreign_id }
|
59
60
|
end
|
60
|
-
|
61
61
|
end
|
62
62
|
module Mock
|
63
63
|
# @deprecated
|
64
64
|
HasMany = ActiveMocker::HasMany
|
65
65
|
end
|
66
66
|
end
|
67
|
-
|