clean-mock 0.2.0 → 0.2.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 65e82efc44b05437a2a4cf194c21e7033a4d520a776325d9058719f380befc99
4
- data.tar.gz: dd0d2f1f5244c26861b79da0873d09d168353090c25efed9b99bf49ed1eb885f
3
+ metadata.gz: 97bf620be942c852cdb6816f98fdf633c4f64c27936df6d3ec7b6968699cc606
4
+ data.tar.gz: f97f714761ed44e115b62ffbeca3e90161a2ea802b82faea6e66aa1f7680c9df
5
5
  SHA512:
6
- metadata.gz: 6b82714d1d2103cb269decd5f032723132a3129ad64315578d77253428ad41930d5c7aa1eaf5d052f9e24654affb00286d12f63a0c7c7f55224ffeb54f188ad6
7
- data.tar.gz: 91b29dbc810dc6936aa7a8b180a4bb5b8ae43a8656165f6604cdc697a759528bedb5046aec9bbe67db251c2cd34ebb5488bbf4a65acab61bf48f7ba47635d5ec
6
+ metadata.gz: 4e80b5a3ae5d341e1d97901016e2330e2261fec2ea09712afcd9ac8991d4e1d614df212cd5165ad65902f52fa1e88d064e3d40f3a9d31b6a7e0a530d5e33e840
7
+ data.tar.gz: 4bdd8671d9a6b7010f2528e9dcdf94f1024aa1480f04e16ffaf72b84d1a71500ee56ab61fba77c9e3fb18d2fc1268e9f8479fc15ab89a7603c6208098e36f825
data/.version CHANGED
@@ -1 +1 @@
1
- 0.2.0
1
+ 0.2.3
@@ -1,13 +1,14 @@
1
1
  class CleanMock
2
+ VERSION ||= File.read(File.expand_path('../../.version', __dir__)).strip
3
+
2
4
  attr_reader :model
3
5
 
4
6
  @@fetched ||= {}
5
7
  @@mock_data ||= {}
6
8
  @@sequence ||= {}
7
- @@classes ||= {}
8
9
 
9
10
  class << self
10
- # defined mocked model
11
+ # define a mocked model factory
11
12
  def define name, opts={}, &block
12
13
  @@mock_data[name] = [block, opts]
13
14
  end
@@ -16,22 +17,19 @@ class CleanMock
16
17
  build(*args).attributes.select{ |k,v| v.present? }
17
18
  end
18
19
 
19
- # create a new model, no save
20
+ # create a new model without save
20
21
  def build *args
21
22
  new(*args).model
22
23
  end
23
24
 
24
- # save if possible
25
+ # save if responds to save
25
26
  def create *args
26
- build(*args).tap do |model|
27
- model.save if model.respond_to?(:save)
28
- end
27
+ new(*args).create_mock
29
28
  end
30
29
 
31
- # create only once
30
+ # create only once - cached on args identity
32
31
  def fetch *args, &block
33
- code = Digest::SHA1.hexdigest(args.to_s)
34
- @@fetched[code] ||= create(*args, &block)
32
+ @@fetched[args] ||= create(*args, &block)
35
33
  end
36
34
  end
37
35
 
@@ -42,14 +40,17 @@ class CleanMock
42
40
  @kind = args.shift
43
41
  @traits = args
44
42
 
45
- block, mock_opts = @@mock_data[@kind] || raise(ArgumentError, 'Mock model "%s" not defined' % @kind)
43
+ block, mock_opts = @@mock_data[@kind] || raise(
44
+ ArgumentError,
45
+ 'Mock model "%s" not defined. Known: %s' % [@kind, @@mock_data.keys.join(', ')]
46
+ )
46
47
 
47
48
  @model =
48
49
  case mock_opts[:class]
49
- when FalseClass
50
+ when false
50
51
  # define :foo, class: false
51
52
  nil
52
- when NilClass
53
+ when nil
53
54
  # define :foo
54
55
  @kind.to_s.classify.constantize.new
55
56
  when Symbol
@@ -82,7 +83,7 @@ class CleanMock
82
83
  end
83
84
  end
84
85
 
85
- # define or overlod current instance method
86
+ # define or overload current instance method
86
87
  def func name, &block
87
88
  @model.define_singleton_method(name, &block)
88
89
  end
@@ -96,10 +97,22 @@ class CleanMock
96
97
 
97
98
  # helper to create and link model
98
99
  # create :org -> @model.org_id = mock.create(org).id
99
- def create name, field=nil
100
+ def create name, field = nil
100
101
  field ||= name.to_s.singularize + '_id'
101
102
  new_model = CleanMock.create(name)
102
103
  @model.send('%s=' % field, new_model.id)
103
104
  new_model
104
105
  end
106
+
107
+ def create_mock
108
+ @model.save if @model.respond_to?(:save)
109
+ @after_create.call if @after_create
110
+ @model
111
+ end
112
+
113
+ # callback fired after `create` / `fetch` saves the model (not on `build`)
114
+ def after_create &block
115
+ @after_create = block
116
+ end
117
+
105
118
  end
@@ -8,7 +8,7 @@
8
8
  unless respond_to?(:mock)
9
9
  Object.class_eval do
10
10
  def mock *args, &block
11
- if args.first
11
+ if !args.empty?
12
12
  CleanMock.define *args, &block
13
13
  elsif block_given?
14
14
  CleanMock.instance_exec &block
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: clean-mock
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dino Reic
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2019-10-05 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies: []
13
12
  description: Clean and efficient ruby testing object creation helper/mocking library
14
13
  with interface similar to FactoryBot
@@ -25,7 +24,6 @@ homepage: https://github.com/dux/clean-mock
25
24
  licenses:
26
25
  - MIT
27
26
  metadata: {}
28
- post_install_message:
29
27
  rdoc_options: []
30
28
  require_paths:
31
29
  - lib
@@ -40,8 +38,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
40
38
  - !ruby/object:Gem::Version
41
39
  version: '0'
42
40
  requirements: []
43
- rubygems_version: 3.0.6
44
- signing_key:
41
+ rubygems_version: 4.0.11
45
42
  specification_version: 4
46
- summary: Ruby testing object creation helper/mocking lib
43
+ summary: Ruby object creation helper/mocking lib used for testing.
47
44
  test_files: []