active_mocker 2.0.0.beta1 → 2.0.0.pre1

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.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +18 -1
  3. data/README.md +11 -18
  4. data/lib/active_mocker.rb +5 -0
  5. data/lib/active_mocker/config.rb +7 -8
  6. data/lib/active_mocker/{mock → deprecated_components}/mock_abilities.rb +19 -7
  7. data/lib/active_mocker/deprecated_components/rspec.rb +12 -0
  8. data/lib/active_mocker/display_errors.rb +64 -0
  9. data/lib/active_mocker/error_object.rb +46 -0
  10. data/lib/active_mocker/generate.rb +30 -64
  11. data/lib/active_mocker/mock.rb +1 -2
  12. data/lib/active_mocker/mock/association.rb +0 -2
  13. data/lib/active_mocker/mock/base.rb +270 -256
  14. data/lib/active_mocker/mock/belongs_to.rb +14 -20
  15. data/lib/active_mocker/mock/collection.rb +0 -6
  16. data/lib/active_mocker/mock/do_nothing_active_record_methods.rb +39 -41
  17. data/lib/active_mocker/mock/exceptions.rb +4 -11
  18. data/lib/active_mocker/mock/has_and_belongs_to_many.rb +0 -2
  19. data/lib/active_mocker/mock/has_many.rb +4 -5
  20. data/lib/active_mocker/mock/has_one.rb +5 -11
  21. data/lib/active_mocker/mock/hash_process.rb +14 -17
  22. data/lib/active_mocker/mock/mock_relation.rb +10 -0
  23. data/lib/active_mocker/mock/object_inspect.rb +29 -32
  24. data/lib/active_mocker/mock/queries.rb +14 -18
  25. data/lib/active_mocker/mock/records.rb +45 -43
  26. data/lib/active_mocker/mock/relation.rb +1 -4
  27. data/lib/active_mocker/mock/single_relation.rb +13 -17
  28. data/lib/active_mocker/mock/template_methods.rb +1 -4
  29. data/lib/active_mocker/mock_creator.rb +4 -5
  30. data/lib/active_mocker/mock_template/_associations.erb +6 -6
  31. data/lib/active_mocker/mock_template/_class_methods.erb +1 -1
  32. data/lib/active_mocker/mock_template/_scopes.erb +3 -3
  33. data/lib/active_mocker/parent_class.rb +1 -1
  34. data/lib/active_mocker/public_methods.rb +5 -2
  35. data/lib/active_mocker/rspec.rb +0 -8
  36. data/lib/active_mocker/rspec_helper.rb +0 -2
  37. data/lib/active_mocker/task.rake +0 -2
  38. data/lib/active_mocker/version.rb +1 -1
  39. metadata +36 -19
  40. data/lib/active_mocker/logger.rb +0 -15
  41. data/lib/active_mocker/output_capture.rb +0 -32
@@ -1,29 +1,23 @@
1
1
  module ActiveMocker
2
- module Mock
2
+ class BelongsTo < SingleRelation
3
+ attr_reader :item
3
4
 
4
- class BelongsTo < SingleRelation
5
-
6
- attr_reader :item
7
-
8
- def initialize(item, child_self:, foreign_key:)
9
- save_item(item, child_self)
10
- assign_foreign_key(child_self, foreign_key, item.try(:id))
11
- super
12
- end
13
-
14
- private
15
-
16
- def assign_foreign_key(child_self, foreign_key, foreign_id)
17
- child_self.send(:write_attribute, foreign_key, foreign_id)
18
- end
5
+ def initialize(item, child_self:, foreign_key:)
6
+ save_item(item, child_self)
7
+ assign_foreign_key(child_self, foreign_key, item.try(:id))
8
+ super
9
+ end
19
10
 
20
- def save_item(item, child_self)
21
- return if item.nil?
22
- item.try(:save) if child_self.persisted?
23
- end
11
+ private
24
12
 
13
+ def assign_foreign_key(child_self, foreign_key, foreign_id)
14
+ child_self.send(:write_attribute, foreign_key, foreign_id)
25
15
  end
26
16
 
17
+ def save_item(item, child_self)
18
+ return if item.nil?
19
+ item.try(:save) if child_self.persisted?
20
+ end
27
21
  end
28
22
  end
29
23
 
@@ -1,10 +1,7 @@
1
1
  require 'forwardable'
2
2
 
3
3
  module ActiveMocker
4
- module Mock
5
-
6
4
  class Collection
7
-
8
5
  include Enumerable
9
6
  extend ::Forwardable
10
7
  def_delegators :@collection, :[], :take, :push, :clear, :first, :last, :concat, :replace, :uniq, :count, :size, :length, :empty?, :any?, :many?, :include?, :delete
@@ -48,8 +45,5 @@ module Mock
48
45
  protected
49
46
 
50
47
  attr_accessor :collection
51
-
52
48
  end
53
-
54
- end
55
49
  end
@@ -1,61 +1,59 @@
1
1
  module ActiveMocker
2
- module Mock
3
- module DoNothingActiveRecordMethods
2
+ module DoNothingActiveRecordMethods
4
3
 
5
- def self.included(base)
6
- base.extend(ClassMethods)
7
- end
4
+ def self.included(base)
5
+ base.extend(ClassMethods)
6
+ end
7
+
8
+ module ClassMethods
9
+
10
+ def transaction
11
+ yield
12
+ rescue LocalJumpError => err
13
+ raise err
14
+ rescue StandardError => e
15
+ raise e
16
+ end
8
17
 
9
- module ClassMethods
18
+ def column_names
19
+ attribute_names
20
+ end
10
21
 
11
- def transaction
12
- yield
13
- rescue LocalJumpError => err
14
- raise err
15
- rescue StandardError => e
16
- raise e
17
22
  end
18
23
 
19
- def column_names
20
- attribute_names
24
+ def readonly?
25
+ false
21
26
  end
22
27
 
23
- end
28
+ def errors
29
+ obj = Object.new
24
30
 
25
- def readonly?
26
- false
27
- end
31
+ def obj.[](key)
32
+ []
33
+ end
28
34
 
29
- def errors
30
- obj = Object.new
35
+ def obj.full_messages()
36
+ []
37
+ end
31
38
 
32
- def obj.[](key)
33
- []
39
+ obj
34
40
  end
35
41
 
36
- def obj.full_messages()
37
- []
42
+ def valid?
43
+ true
38
44
  end
39
45
 
40
- obj
41
- end
42
-
43
- def valid?
44
- true
45
- end
46
+ def marked_for_destruction?
47
+ false
48
+ end
46
49
 
47
- def marked_for_destruction?
48
- false
49
- end
50
+ def destroyed?
51
+ false
52
+ end
50
53
 
51
- def destroyed?
52
- false
53
- end
54
+ def reload
55
+ self
56
+ end
54
57
 
55
- def reload
56
- self
57
58
  end
58
-
59
- end
60
- end
61
59
  end
@@ -1,24 +1,22 @@
1
1
  module ActiveMocker
2
- module Mock
3
2
  class RecordNotFound < StandardError
4
3
  end
5
4
 
6
- class ReservedFieldError < StandardError
5
+ module Mock
6
+ # @deprecated
7
+ RecordNotFound = ActiveMocker::RecordNotFound
7
8
  end
8
9
 
9
10
  class IdError < StandardError
10
11
  end
11
12
 
12
- class FileTypeMismatchError < StandardError
13
- end
14
-
15
13
  # Raised when unknown attributes are supplied via mass assignment.
16
14
  class UnknownAttributeError < NoMethodError
17
15
 
18
16
  attr_reader :record, :attribute
19
17
 
20
18
  def initialize(record, attribute)
21
- @record = record
19
+ @record = record
22
20
  @attribute = attribute.to_s
23
21
  super("unknown attribute: #{attribute}")
24
22
  end
@@ -36,11 +34,6 @@ module Mock
36
34
  class NotImplementedError < Exception
37
35
  end
38
36
 
39
- class IdNotNumber < Exception
40
- end
41
-
42
37
  class Error < Exception
43
38
  end
44
-
45
- end
46
39
  end
@@ -1,6 +1,4 @@
1
1
  module ActiveMocker
2
- module Mock
3
2
  class HasAndBelongsToMany < HasMany
4
3
  end
5
- end
6
4
  end
@@ -1,8 +1,5 @@
1
1
  module ActiveMocker
2
- module Mock
3
-
4
2
  class HasMany < Association
5
-
6
3
  include Queries
7
4
 
8
5
  def self.new(collection, options = {})
@@ -62,7 +59,9 @@ module Mock
62
59
  end
63
60
 
64
61
  end
65
-
66
- end
62
+ module Mock
63
+ # @deprecated
64
+ HasMany = ActiveMocker::HasMany
65
+ end
67
66
  end
68
67
 
@@ -1,17 +1,11 @@
1
1
  module ActiveMocker
2
- module Mock
3
-
4
- class HasOne < SingleRelation
5
-
6
- attr_reader :item
7
-
8
- def initialize(item, child_self:, foreign_key:)
9
- item.send(:write_attribute, foreign_key, item.try(:id)) if !item.try(:id).nil?
10
- super
11
- end
2
+ class HasOne < SingleRelation
3
+ attr_reader :item
12
4
 
5
+ def initialize(item, child_self:, foreign_key:)
6
+ item.send(:write_attribute, foreign_key, item.try(:id)) if !item.try(:id).nil?
7
+ super
13
8
  end
14
9
 
15
10
  end
16
11
  end
17
-
@@ -1,25 +1,22 @@
1
1
  module ActiveMocker
2
- module Mock
3
- # @api private
4
- class HashProcess
2
+ # @api private
3
+ class HashProcess
5
4
 
6
- attr_accessor :hash, :processor
5
+ attr_accessor :hash, :processor
7
6
 
8
- def initialize(hash, processor)
9
- @hash = hash
10
- @processor = processor
11
- @hash_process = {}
12
- end
13
-
14
- def [](val)
15
- @hash_process[val] ||= processor.call(hash[val])
16
- end
7
+ def initialize(hash, processor)
8
+ @hash = hash
9
+ @processor = processor
10
+ @hash_process = {}
11
+ end
17
12
 
18
- def merge(merge_hash)
19
- self.hash = hash.merge(merge_hash.hash)
20
- self
21
- end
13
+ def [](val)
14
+ @hash_process[val] ||= processor.call(hash[val])
15
+ end
22
16
 
17
+ def merge(merge_hash)
18
+ self.hash = hash.merge(merge_hash.hash)
19
+ self
23
20
  end
24
21
  end
25
22
  end
@@ -0,0 +1,10 @@
1
+ module ActiveMocker
2
+ class MockRelation
3
+ # @param [ActiveMocker::Base] mock, a generated mock class
4
+ # @param [Array<ActiveMocker::Base>] collection, an array of mock instances
5
+ # @return [ScopeRelation] for the given mock
6
+ def self.new(mock, collection)
7
+ mock.send(:__new_relation__, collection)
8
+ end
9
+ end
10
+ end
@@ -1,43 +1,40 @@
1
1
  module ActiveMocker
2
- module Mock
3
- class ObjectInspect
2
+ class ObjectInspect
4
3
 
5
- def initialize(class_name, attributes)
6
- @class_name = class_name
7
- @attributes = attributes
8
- @string = create_inspections
9
- end
4
+ def initialize(class_name, attributes)
5
+ @class_name = class_name
6
+ @attributes = attributes
7
+ @string = create_inspections
8
+ end
10
9
 
11
- def to_s
12
- @string
13
- end
10
+ def to_s
11
+ @string
12
+ end
14
13
 
15
- def to_str
16
- @string
17
- end
14
+ def to_str
15
+ @string
16
+ end
18
17
 
19
- private
18
+ private
20
19
 
21
- def create_inspections
22
- inspection = @attributes.map do |name ,value|
23
- "#{name}: #{object_for_inspect(value)}"
20
+ def create_inspections
21
+ inspection = @attributes.map do |name, value|
22
+ "#{name}: #{object_for_inspect(value)}"
23
+ end
24
+ "#<#{@class_name} #{inspection.compact.join(", ")}>"
24
25
  end
25
- "#<#{@class_name} #{inspection.compact.join(", ")}>"
26
- end
27
26
 
28
- def object_for_inspect(value)
29
- if value.is_a?(String) && value.length > 50
30
- "#{value[0, 50]}...".inspect
31
- elsif value.is_a?(Date) || value.is_a?(Time)
32
- %("#{value.to_s(:db)}")
33
- elsif value.is_a?(Array) && value.size > 10
34
- inspected = value.first(10).inspect
35
- %(#{inspected[0...-1]}, ...])
36
- else
37
- value.inspect
27
+ def object_for_inspect(value)
28
+ if value.is_a?(String) && value.length > 50
29
+ "#{value[0, 50]}...".inspect
30
+ elsif value.is_a?(Date) || value.is_a?(Time)
31
+ %("#{value.to_s(:db)}")
32
+ elsif value.is_a?(Array) && value.size > 10
33
+ inspected = value.first(10).inspect
34
+ %(#{inspected[0...-1]}, ...])
35
+ else
36
+ value.inspect
37
+ end
38
38
  end
39
39
  end
40
-
41
- end
42
- end
43
40
  end
@@ -1,6 +1,4 @@
1
1
  module ActiveMocker
2
- module Mock
3
-
4
2
  module Queries
5
3
 
6
4
  class Find
@@ -61,9 +59,9 @@ module Mock
61
59
  # If a limit scope is supplied, +delete_all+ raises an ActiveMocker error:
62
60
  #
63
61
  # Post.limit(100).delete_all
64
- # # => ActiveMocker::Mock::Error: delete_all doesn't support limit scope
62
+ # # => ActiveMocker::Error: delete_all doesn't support limit scope
65
63
  def delete_all(conditions=nil)
66
- raise ActiveMocker::Mock::Error.new("delete_all doesn't support limit scope") if from_limit?
64
+ raise ActiveMocker::Error.new("delete_all doesn't support limit scope") if from_limit?
67
65
  if conditions.nil?
68
66
  to_a.map(&:delete)
69
67
  return to_a.clear
@@ -116,8 +114,8 @@ module Mock
116
114
  #
117
115
  # See WhereChain for more details on #not.
118
116
  def where(conditions=nil)
119
- return WhereNotChain.new(all, method(:new_relation)) if conditions.nil?
120
- new_relation(to_a.select do |record|
117
+ return WhereNotChain.new(all, method(:__new_relation__)) if conditions.nil?
118
+ __new_relation__(to_a.select do |record|
121
119
  Find.new(record).is_of(conditions)
122
120
  end)
123
121
  end
@@ -131,13 +129,13 @@ module Mock
131
129
  # Person.find([7, 17]) # returns an array for objects with IDs in (7, 17)
132
130
  # Person.find([1]) # returns an array for the object with ID = 1
133
131
  #
134
- # <tt>ActiveMocker::Mock::RecordNotFound</tt> will be raised if one or more ids are not found.
132
+ # <tt>ActiveMocker::RecordNotFound</tt> will be raised if one or more ids are not found.
135
133
  def find(ids)
136
134
  raise RecordNotFound.new("Couldn't find #{self.name} without an ID") if ids.nil?
137
135
  results = [*ids].map do |id|
138
136
  find_by!(id: id.to_i)
139
137
  end
140
- return new_relation(results) if ids.class == Array
138
+ return __new_relation__(results) if ids.class == Array
141
139
  results.first
142
140
  end
143
141
 
@@ -259,7 +257,7 @@ module Mock
259
257
  #
260
258
  # User.limit(10)
261
259
  def limit(num)
262
- relation = new_relation(all.take(num))
260
+ relation = __new_relation__(all.take(num))
263
261
  relation.send(:set_from_limit)
264
262
  relation
265
263
  end
@@ -281,7 +279,7 @@ module Mock
281
279
  # PersonMock.average(:age) # => 35.8
282
280
  def average(key)
283
281
  values = values_by_key(key)
284
- total = values.inject { |sum, n| sum + n }
282
+ total = values.inject { |sum, n| sum + n }
285
283
  BigDecimal.new(total) / BigDecimal.new(values.count)
286
284
  end
287
285
 
@@ -307,18 +305,18 @@ module Mock
307
305
  #
308
306
  # User.order(:name)
309
307
  def order(key)
310
- new_relation(all.sort_by { |item| item.send(key) })
308
+ __new_relation__(all.sort_by { |item| item.send(key) })
311
309
  end
312
310
 
313
311
  # Reverse the existing order clause on the relation.
314
312
  #
315
313
  # User.order('name').reverse_order
316
314
  def reverse_order
317
- new_relation(to_a.reverse)
315
+ __new_relation__(to_a.reverse)
318
316
  end
319
317
 
320
318
  def all
321
- new_relation(to_a || [])
319
+ __new_relation__(to_a || [])
322
320
  end
323
321
 
324
322
  # Returns a chainable relation with zero records.
@@ -346,7 +344,7 @@ module Mock
346
344
  # end
347
345
  #
348
346
  def none
349
- new_relation([])
347
+ __new_relation__([])
350
348
  end
351
349
 
352
350
  private
@@ -355,13 +353,11 @@ module Mock
355
353
  all.map { |obj| obj.send(key) }
356
354
  end
357
355
 
358
- def new_relation(collection)
359
- duped = self.dup
356
+ def __new_relation__(collection)
357
+ duped = self.dup
360
358
  duped.collection = collection
361
359
  duped
362
360
  end
363
361
 
364
362
  end
365
-
366
- end
367
363
  end