sham 1.1.0 → 1.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 50cf581e1b4b693c14936b60f01fa2d0f3d51664
4
+ data.tar.gz: a12752f43dd59710089327dd7d481215fac631df
5
+ SHA512:
6
+ metadata.gz: a00f590d9b3ccae87ef6cbd8966ebd958cff872d5587a414ea3ec044538bfa56ffb138e291c214ed80fcedf8dacc2203860638cefe2c5338cb878a3ef22bf76c
7
+ data.tar.gz: 6b02be8c8a28ccb1b03a36a75ff283671046453525c60478db7e605f4bf95c2ea932fec2ff9670bd7a934843fdf1aa3477068eb03ea8848979920d283737a548
@@ -1,9 +1,14 @@
1
1
  language: ruby
2
+ dist: trusty
2
3
  rvm:
3
4
  - 1.8.7
4
- - 1.9.2
5
5
  - 1.9.3
6
+ - 2.0.0
7
+ - 2.1.10
8
+ - 2.2.7
9
+ - 2.3.3
10
+ - 2.4.1
6
11
  - jruby-18mode
7
12
  - jruby-19mode
8
- - rbx-18mode
9
- - rbx-19mode
13
+ - jruby-head
14
+ - rbx-3.84
@@ -1,3 +1,9 @@
1
+ # master (unreleased)
2
+
3
+ # 1.2.0
4
+
5
+ - Add `Sham::Lazy` type.
6
+
1
7
  # 1.1.0
2
8
 
3
9
  * Added `assign` sham configuration.
data/Gemfile CHANGED
@@ -1,5 +1,3 @@
1
1
  source "http://rubygems.org"
2
2
 
3
3
  gemspec
4
-
5
- gem 'rake'
@@ -200,6 +200,23 @@ during initialization:
200
200
  LineItem.sham!
201
201
  LineItem.sham!(:item => Item.sham!(:weight => 100))
202
202
 
203
+ ## Lazy Shams
204
+
205
+ A more general form of Nested Sham is the Lazy Sham. Lazy Shams only evaluate
206
+ their blocks if they are not overwritten.
207
+
208
+ # sham/line_item_sham.rb
209
+ Sham.config(LineItem) do |c|
210
+ c.attributes do
211
+ { :item_id => Sham::Lazy.new { Item.sham!.id } }
212
+ end
213
+ end
214
+
215
+ The lazy shams will automatically be evaluated and can also be overwritten
216
+ during initialization:
217
+
218
+ LineItem.sham!
219
+ LineItem.sham!(:item_id => Item.sham!(:weight => 100).id)
203
220
 
204
221
  ## Sham Inheritance
205
222
 
@@ -239,3 +256,5 @@ with Spork. If you take this approach it's important to remove the call to
239
256
  `Sham::Config.activate!` from your `test.rb` file.
240
257
 
241
258
  ## Build Status [![Build Status](https://secure.travis-ci.org/panthomakos/sham.png)](http://travis-ci.org/panthomakos/sham)
259
+
260
+ ## Code Quality [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/panthomakos/sham)
@@ -4,6 +4,7 @@ require 'sham/data'
4
4
  require 'sham/util'
5
5
  require 'sham/base'
6
6
  require 'sham/nested'
7
+ require 'sham/lazy'
7
8
  require 'sham/config'
8
9
  require 'sham/shammable'
9
10
 
@@ -1,9 +1,11 @@
1
1
  require 'sham/config/base'
2
- require 'sham/util'
2
+ require 'sham/config/hash_options'
3
3
 
4
4
  module Sham
5
5
  class Config
6
6
  class Assign < Base
7
+ include HashOptions
8
+
7
9
  def initialize(config)
8
10
  @config = config
9
11
  end
@@ -22,16 +24,6 @@ module Sham
22
24
  object
23
25
  end
24
26
 
25
- def options(*args)
26
- @options = ::Sham::Util.extract_options!(args)
27
-
28
- @config.call.each do |key, value|
29
- @options[key] = parse!(value) unless @options.has_key?(key)
30
- end
31
-
32
- self
33
- end
34
-
35
27
  def args
36
28
  []
37
29
  end
@@ -1,23 +1,15 @@
1
1
  require 'sham/config/base'
2
- require 'sham/util'
2
+ require 'sham/config/hash_options'
3
3
 
4
4
  module Sham
5
5
  class Config
6
6
  class Attributes < Base
7
+ include HashOptions
8
+
7
9
  def initialize(config)
8
10
  @config = config
9
11
  end
10
12
 
11
- def options(*args)
12
- @options = ::Sham::Util.extract_options!(args)
13
-
14
- @config.call.each do |key, value|
15
- @options[key] = parse!(value) unless @options.has_key?(key)
16
- end
17
-
18
- self
19
- end
20
-
21
13
  def args
22
14
  [@options]
23
15
  end
@@ -1,4 +1,5 @@
1
1
  require 'sham/nested'
2
+ require 'sham/lazy'
2
3
 
3
4
  module Sham
4
5
  class Config
@@ -20,14 +21,12 @@ module Sham
20
21
  private
21
22
 
22
23
  def parse! value
23
- if value.is_a?(Array)
24
- value.map{ |k| parse!(k) }
25
- elsif value.is_a?(Hash)
26
- Hash.new value.map{ |k,v| [k, parse!(v)] }
27
- elsif value.is_a?(Sham::Nested)
28
- value.sham!
29
- else
30
- value
24
+ case value
25
+ when Array then value.map{ |k| parse!(k) }
26
+ when Hash then value.map{ |k,v| [k, parse!(v)] }.to_h
27
+ when Sham::Nested then value.sham!
28
+ when Sham::Lazy then value.sham!
29
+ else value
31
30
  end
32
31
  end
33
32
  end
@@ -0,0 +1,17 @@
1
+ require 'sham/util'
2
+
3
+ module Sham
4
+ class Config
5
+ module HashOptions
6
+ def options(*args)
7
+ @options = ::Sham::Util.extract_options!(args)
8
+
9
+ @config.call.each do |key, value|
10
+ @options[key] = parse!(value) unless @options.has_key?(key)
11
+ end
12
+
13
+ self
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,11 @@
1
+ module Sham
2
+ class Lazy
3
+ def initialize(&block)
4
+ @block = block
5
+ end
6
+
7
+ def sham!
8
+ @block.call
9
+ end
10
+ end
11
+ end
@@ -1,3 +1,3 @@
1
1
  module Sham
2
- VERSION = "1.1.0"
2
+ VERSION = "1.2.0"
3
3
  end
@@ -22,4 +22,5 @@ Gem::Specification.new do |s|
22
22
  s.require_paths = ["lib"]
23
23
 
24
24
  s.add_development_dependency('rspec')
25
+ s.add_development_dependency('rake')
25
26
  end
@@ -1,7 +1,7 @@
1
1
  require 'sham/base'
2
2
 
3
3
  describe Sham::Base do
4
- let(:klass){ stub }
4
+ let(:klass){ double }
5
5
 
6
6
  it 'should call sham! on the class' do
7
7
  klass.should_receive(:sham!)
@@ -9,7 +9,7 @@ describe Sham::Base do
9
9
  end
10
10
 
11
11
  it 'should pass sham options' do
12
- options = stub
12
+ options = double
13
13
  klass.should_receive(:sham!).with(options)
14
14
  described_class.new(klass, options).sham!
15
15
  end
@@ -6,11 +6,11 @@ describe Sham::Config::Assign do
6
6
  class AssignTester; end
7
7
  end
8
8
 
9
- let(:id){ stub }
9
+ let(:id){ double }
10
10
  let(:options){ { :id => id } }
11
11
  let(:subject){ described_class.new(lambda{ options }) }
12
12
  let(:config){ subject.object(AssignTester) }
13
- let(:instance){ stub.as_null_object }
13
+ let(:instance){ double.as_null_object }
14
14
 
15
15
  before{ AssignTester.stub(:new){ instance } }
16
16
 
@@ -12,7 +12,7 @@ describe Sham::Config::Attributes do
12
12
  end
13
13
  end
14
14
 
15
- let(:id){ stub }
15
+ let(:id){ double }
16
16
  let(:options){ { :id => id } }
17
17
  let(:subject){ described_class.new(lambda{ options }) }
18
18
  let(:config){ subject.object(AttributesTester) }
@@ -15,7 +15,7 @@ describe Sham::Config::NoArgs do
15
15
  let(:config){ subject.object(NoArgsTester) }
16
16
 
17
17
  it 'does not pass parameters by default' do
18
- NoArgsTester.should_receive(:new).with()
18
+ NoArgsTester.should_receive(:new).with(no_args)
19
19
  config.options.sham
20
20
  end
21
21
 
@@ -13,8 +13,8 @@ describe Sham::Config::Parameters do
13
13
  end
14
14
  end
15
15
 
16
- let(:first){ stub }
17
- let(:last){ stub }
16
+ let(:first){ double }
17
+ let(:last){ double }
18
18
  let(:params){ [first, last] }
19
19
  let(:subject){ described_class.new(lambda{ params }) }
20
20
  let(:config){ subject.object(ParamTester) }
@@ -144,7 +144,30 @@ describe Sham::Config do
144
144
  end
145
145
 
146
146
  it 'prefers passed options' do
147
- other_child = stub
147
+ other_child = double
148
+ parent.should_receive(:create).with({ :child => other_child })
149
+ parent.sham!(:child => other_child)
150
+ end
151
+ end
152
+
153
+ context 'lazy shams' do
154
+ before do
155
+ parent.stub(:create)
156
+
157
+ Sham.config(parent) do |c|
158
+ c.attributes do
159
+ { :child => Sham::Lazy.new { child } }
160
+ end
161
+ end
162
+ end
163
+
164
+ it 'evaluates the block' do
165
+ parent.should_receive(:create).with({ :child => child })
166
+ parent.sham!
167
+ end
168
+
169
+ it 'prefers passed options' do
170
+ other_child = double
148
171
  parent.should_receive(:create).with({ :child => other_child })
149
172
  parent.sham!(:child => other_child)
150
173
  end
@@ -156,7 +179,7 @@ describe Sham::Config do
156
179
  c.assign{ { :first => 'first' } }
157
180
  end
158
181
 
159
- instance = stub
182
+ instance = double
160
183
  parent.stub(:new){ instance }
161
184
  instance.should_receive(:public_send).with('first=', 'first')
162
185
  parent.sham!.should == instance
@@ -180,7 +203,7 @@ describe Sham::Config do
180
203
 
181
204
  it 'configures no arg shams' do
182
205
  Sham.config(parent){ |c| c.no_args }
183
- parent.should_receive(:new).with()
206
+ parent.should_receive(:new).with(no_args)
184
207
  parent.sham!
185
208
  end
186
209
 
@@ -0,0 +1,7 @@
1
+ require 'sham/lazy'
2
+
3
+ describe Sham::Lazy do
4
+ it 'makes a lazy sham' do
5
+ expect(Sham::Lazy.new.is_a?(Sham::Lazy)).to be(true)
6
+ end
7
+ end
@@ -2,10 +2,10 @@ require 'sham/nested'
2
2
 
3
3
  describe Sham::Nested do
4
4
  it 'is a sham base' do
5
- Sham::Nested.new(stub).is_a?(Sham::Base).should be_true
5
+ expect(Sham::Nested.new(double).is_a?(Sham::Base)).to be(true)
6
6
  end
7
7
 
8
8
  it 'makes a sham base a sham nested' do
9
- Sham::Base.new(stub).is_a?(Sham::Nested).should be_true
9
+ expect(Sham::Base.new(double).is_a?(Sham::Nested)).to be(true)
10
10
  end
11
11
  end
metadata CHANGED
@@ -1,30 +1,41 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sham
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
5
- prerelease:
4
+ version: 1.2.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Pan Thomakos
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-06-13 00:00:00.000000000 Z
11
+ date: 2017-08-10 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: rspec
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - ">="
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :development
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
28
39
  - !ruby/object:Gem::Version
29
40
  version: '0'
30
41
  description: Lightweight flexible factories for Ruby and Rails testing.
@@ -36,9 +47,9 @@ extra_rdoc_files:
36
47
  - README.markdown
37
48
  - License.txt
38
49
  files:
39
- - .document
40
- - .gitignore
41
- - .travis.yml
50
+ - ".document"
51
+ - ".gitignore"
52
+ - ".travis.yml"
42
53
  - CHANGES.markdown
43
54
  - Gemfile
44
55
  - License.txt
@@ -51,9 +62,11 @@ files:
51
62
  - lib/sham/config/attributes.rb
52
63
  - lib/sham/config/base.rb
53
64
  - lib/sham/config/empty.rb
65
+ - lib/sham/config/hash_options.rb
54
66
  - lib/sham/config/no_args.rb
55
67
  - lib/sham/config/parameters.rb
56
68
  - lib/sham/data.rb
69
+ - lib/sham/lazy.rb
57
70
  - lib/sham/nested.rb
58
71
  - lib/sham/shammable.rb
59
72
  - lib/sham/util.rb
@@ -67,34 +80,34 @@ files:
67
80
  - spec/lib/sham/config/parameters_spec.rb
68
81
  - spec/lib/sham/config_spec.rb
69
82
  - spec/lib/sham/data_spec.rb
83
+ - spec/lib/sham/lazy_spec.rb
70
84
  - spec/lib/sham/nested_spec.rb
71
85
  - spec/lib/sham/util_spec.rb
72
86
  - spec/root/sham/employee.rb
73
87
  homepage: http://github.com/panthomakos/sham
74
88
  licenses: []
89
+ metadata: {}
75
90
  post_install_message:
76
91
  rdoc_options:
77
- - --charset=UTF-8
92
+ - "--charset=UTF-8"
78
93
  require_paths:
79
94
  - lib
80
95
  required_ruby_version: !ruby/object:Gem::Requirement
81
- none: false
82
96
  requirements:
83
- - - ! '>='
97
+ - - ">="
84
98
  - !ruby/object:Gem::Version
85
99
  version: '0'
86
100
  required_rubygems_version: !ruby/object:Gem::Requirement
87
- none: false
88
101
  requirements:
89
- - - ! '>='
102
+ - - ">="
90
103
  - !ruby/object:Gem::Version
91
104
  version: '0'
92
105
  requirements: []
93
106
  rubyforge_project: sham
94
- rubygems_version: 1.8.23
107
+ rubygems_version: 2.5.1
95
108
  signing_key:
96
- specification_version: 3
97
- summary: sham-1.1.0
109
+ specification_version: 4
110
+ summary: sham-1.2.0
98
111
  test_files:
99
112
  - spec/lib/sham/base_spec.rb
100
113
  - spec/lib/sham/config/assign_spec.rb
@@ -104,7 +117,7 @@ test_files:
104
117
  - spec/lib/sham/config/parameters_spec.rb
105
118
  - spec/lib/sham/config_spec.rb
106
119
  - spec/lib/sham/data_spec.rb
120
+ - spec/lib/sham/lazy_spec.rb
107
121
  - spec/lib/sham/nested_spec.rb
108
122
  - spec/lib/sham/util_spec.rb
109
123
  - spec/root/sham/employee.rb
110
- has_rdoc: