fixturama 0.0.1 → 0.0.2

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
- SHA256:
3
- metadata.gz: 8373fb84e1acca73b060d54aab09588b6f196aa9420a6378361a9f5e011c2e71
4
- data.tar.gz: 286b6cf22fecdebe1f7fec48c30bbcc49879683726c1ad3da1282e9b2eb6cd66
2
+ SHA1:
3
+ metadata.gz: bba5ba59d906e247aaa4e798664b7ec30802e960
4
+ data.tar.gz: b2bfc9b12596884af5dc875a9caede9c343522bb
5
5
  SHA512:
6
- metadata.gz: 705ddbd4b4c6458d3fe7338748a9dcbb1166ca8dbedbb01a9c21e37036c5a71df70963af5e3d6ba6ae50baaf04435b23e69570c7360e9577175038ec238a7a41
7
- data.tar.gz: 26cbcea20fd78fe35d78edf6161f66f048d6b406e1246c55d88432e0149d11cde13c2d2577b6735f3e74dda21764cee73e077df3063765312b1de0bc22422599
6
+ metadata.gz: c94ee6bb71480fc429ee9074d48eda1b8cb09914a5184ae676e6cbe07495754fbcaad3dccb6c74812c56866b7c60d6cf148b4c7cd2e0ae3003c0d0d745db7953
7
+ data.tar.gz: e1ecad3d926147300425c474757ecd0d1e80d6427c37bc5ef1d29d122680104f8913cea4511dec84e64b779588c1247e0326508de0226e0bb5d521bb7c8f608f
data/.rubocop.yml CHANGED
@@ -12,32 +12,11 @@ Metrics/LineLength:
12
12
  - http
13
13
  - https
14
14
 
15
- Layout/SpaceInLambdaLiteral:
16
- Enabled: false
17
-
18
- Style/CaseEquality:
19
- Enabled: false
20
-
21
15
  Style/ClassAndModuleChildren:
22
16
  Enabled: false
23
17
 
24
18
  Style/Documentation:
25
19
  Enabled: false
26
20
 
27
- Style/DoubleNegation:
28
- Enabled: false # by intention
29
-
30
- Style/FrozenStringLiteralComment:
31
- Enabled: false
32
-
33
- Style/Lambda:
34
- Enabled: false
35
-
36
- Style/PercentLiteralDelimiters:
37
- Enabled: false
38
-
39
- Style/RaiseArgs:
40
- Enabled: false
41
-
42
21
  Style/StringLiterals:
43
22
  EnforcedStyle: double_quotes
data/.travis.yml CHANGED
@@ -11,9 +11,12 @@ script:
11
11
  rvm:
12
12
  - 2.3.0
13
13
  - 2.6.0
14
+ - jruby-9.2.0.0
14
15
  - ruby-head
15
- - jruby-9.1.0.0
16
16
  - jruby-head
17
+ env:
18
+ global:
19
+ - JRUBY_OPTS='--dev -J-Xmx1024M'
17
20
  matrix:
18
21
  allow_failures:
19
22
  - rvm: ruby-head
data/CHANGELOG.md CHANGED
@@ -1,11 +1,41 @@
1
1
  # Change Log
2
+
2
3
  All notable changes to this project will be documented in this file.
3
4
 
4
5
  The format is based on [Keep a Changelog](http://keepachangelog.com/)
5
6
  and this project adheres to [Semantic Versioning](http://semver.org/).
6
7
 
8
+ ## [0.0.2] - [2018-04-27]
9
+
10
+ ### Added
11
+
12
+ - Restriction of stub by arguments (nepalez)
13
+
14
+ ```yaml
15
+ ---
16
+ - class: Balance
17
+ chain: debet
18
+ arguments: 0
19
+ actions:
20
+ - return: 1
21
+
22
+ - class: Balance
23
+ chain: debet
24
+ arguments: 1
25
+ actions:
26
+ - return: 0
27
+ - raise: UnsifficientFunds
28
+
29
+ - class: Balance
30
+ chain: debet
31
+ arguments: 2
32
+ actions:
33
+ - raise: UnsifficientFunds
34
+ ```
35
+
7
36
  ## [0.0.1] - [2018-03-01]
8
37
 
9
38
  This is a first public release with features extracted from production app.
10
39
 
11
40
  [0.0.1]: https://github.com/nepalez/fixturama/releases/tag/v0.0.1
41
+ [0.0.2]: https://github.com/nepalez/fixturama/compare/v0.0.1...v0.0.2
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Fixturama
2
2
 
3
- Collection of helpers for dealing with fixtures in RSpec
3
+ Collection of helpers for dealing with fixtures in [RSpec][rspec]
4
4
 
5
5
  <a href="https://evilmartians.com/">
6
6
  <img src="https://evilmartians.com/badges/sponsored-by-evil-martians.svg" alt="Sponsored by Evil Martians" width="236" height="54"></a>
@@ -24,7 +24,7 @@ require "fixturama/rspec"
24
24
  The gem defines 3 helpers (support ERB bindings):
25
25
 
26
26
  - `load_fixture(path, **opts)` to load data from a fixture, and deserialize YAML and JSON
27
- - `seed_fixture(path_to_yaml, **opts)` to prepare database
27
+ - `seed_fixture(path_to_yaml, **opts)` to prepare database using the [FactoryBot][factory-bot]
28
28
  - `stub_fixture(path_to_yaml, **opts)` to stub some classes
29
29
 
30
30
  ```ruby
@@ -79,6 +79,7 @@ Another opinionated format we use for stubs (`stub_fixture`):
79
79
 
80
80
  - `class` for stubbed class
81
81
  - `chain` for messages chain
82
+ - `arguments` (optional) for specific arguments
82
83
  - `actions` for an array of actions for consecutive invocations of the chain
83
84
 
84
85
  Every action either `return` some value, or `raise` some exception
@@ -87,14 +88,26 @@ Every action either `return` some value, or `raise` some exception
87
88
  # ./stubs.yml
88
89
  #
89
90
  # The first invocation acts like
90
- # allow(Events).to receive_message_chain(:create).and_return true
91
91
  #
92
- # Afterwards it will act like
93
- # allow(Events).to receive_message_chain(:create).and_raise AlreadyRegisteredError
92
+ # allow(Notifier)
93
+ # .to receive_message_chain(:create)
94
+ # .with(:profileDeleted, 42)
95
+ # .and_return true
96
+ #
97
+ # then it will act like
98
+ #
99
+ # allow(Notifier)
100
+ # .to receive_message_chain(:create)
101
+ # .with(:profileDeleted, 42)
102
+ # .and_raise AlreadyRegisteredError
103
+ #
94
104
  ---
95
- - class: Events
105
+ - class: Notifier
96
106
  chain:
97
107
  - create
108
+ arguments:
109
+ - :profileDeleted
110
+ - <%= profile_id %>
98
111
  actions:
99
112
  - return: true
100
113
  - raise: AlreadyRegisteredError
@@ -138,3 +151,5 @@ The gem is available as open source under the terms of the [MIT License][license
138
151
  [gem]: https://rubygems.org/gems/fixturama
139
152
  [travis]: https://travis-ci.org/nepalez/fixturama
140
153
  [license]: http://opensource.org/licenses/MIT
154
+ [factory-bot]: https://github.com/thoughtbot/factory_bot
155
+ [rspec]: https://rspec.info/
data/fixturama.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |gem|
2
2
  gem.name = "fixturama"
3
- gem.version = "0.0.1"
3
+ gem.version = "0.0.2"
4
4
  gem.author = "Andrew Kozin (nepalez)"
5
5
  gem.email = "andrew.kozin@gmail.com"
6
6
  gem.homepage = "https://github.com/nepalez/fixturama"
@@ -0,0 +1,21 @@
1
+ class Fixturama::Stubs::Actions::Raise
2
+ def call
3
+ raise @exception
4
+ end
5
+
6
+ #
7
+ # Human-readable representation of the expectation
8
+ # @return [String]
9
+ #
10
+ def to_s
11
+ "#{@stub} # raise #{@exception}"
12
+ end
13
+
14
+ private
15
+
16
+ def initialize(stub, name)
17
+ @stub = stub
18
+ name = name.to_s
19
+ @exception = name == "true" ? StandardError : Kernel.const_get(name)
20
+ end
21
+ end
@@ -0,0 +1,23 @@
1
+ class Fixturama::Stubs::Actions::Return
2
+ attr_reader :stub, :call
3
+
4
+ #
5
+ # Human-readable representation of the expectation
6
+ # @return [String]
7
+ #
8
+ def to_s
9
+ "#{@stub} # => #{call}"
10
+ end
11
+
12
+ private
13
+
14
+ def initialize(stub, output)
15
+ @stub = stub
16
+ @call = \
17
+ begin # in ruby 2.3.0 Fixnum#dup is defined, but raises TypeError
18
+ output.respond_to?(:dup) ? output.dup : output
19
+ rescue TypeError
20
+ output
21
+ end
22
+ end
23
+ end
@@ -1,27 +1,39 @@
1
1
  module Fixturama
2
- class Stubs
3
- class Actions
4
- def add(opts)
5
- queue.push build(opts)
6
- self
7
- end
2
+ #
3
+ # Factory to provide a specific action from options
4
+ #
5
+ module Stubs::Actions
6
+ extend self
8
7
 
9
- def call_next
10
- queue.pop.tap { |item| queue.push(item.dup) if queue.empty? }.call
11
- end
8
+ require_relative "actions/raise"
9
+ require_relative "actions/return"
12
10
 
13
- private
11
+ #
12
+ # Builds an action
13
+ # @option [#to_s] :raise
14
+ # @option [Object] :return
15
+ # @option [true] :call_original
16
+ # @return [#call] a callable action
17
+ #
18
+ def build(stub, **options)
19
+ check!(stub, options)
20
+ key, value = options.to_a.first
21
+ TYPES[key].new(stub, value)
22
+ end
14
23
 
15
- def build(opts)
16
- opts = Utils.symbolize_hash(opts)
17
- return Raise.new opts[:raise] if opts.key?(:raise)
24
+ private
18
25
 
19
- Return.new opts[:return]
20
- end
26
+ def check!(stub, options)
27
+ keys = options.keys & TYPES.keys
28
+ return if keys.count == 1
21
29
 
22
- def queue
23
- @queue ||= Queue.new
24
- end
30
+ raise SyntaxError, <<~MESSAGE.squish
31
+ Invalid settings for stubbing message chain #{stub}: #{options}.
32
+ The action MUST have one and only one of the keys:
33
+ `#{TYPES.keys.join('`, `')}`.
34
+ MESSAGE
25
35
  end
36
+
37
+ TYPES = { raise: Raise, return: Return }.freeze
26
38
  end
27
39
  end
@@ -0,0 +1,77 @@
1
+ module Fixturama
2
+ #
3
+ # Collection of arguments for a stub with a list of actions to be called
4
+ #
5
+ class Stubs::Arguments
6
+ attr_reader :chain, :arguments
7
+
8
+ #
9
+ # Register new action for these set of arguments
10
+ # @option [#to_i] :repeat (1)
11
+ # How much the action should be repeated during the consecutive calls
12
+ # @return [self] itself
13
+ #
14
+ def add!(*actions)
15
+ actions.each do |settings|
16
+ settings = Utils.symbolize_hash(settings)
17
+ repeat = [0, settings.fetch(:repeat, 1).to_i].max
18
+ repeat.times { list << Stubs::Actions.build(self, settings) }
19
+ end
20
+
21
+ self
22
+ end
23
+
24
+ #
25
+ # Whether the current stub is applicable to actual arguments
26
+ # @param [Array<Object>] actual_arguments
27
+ # @return [Boolean]
28
+ #
29
+ def applicable_to?(actual_arguments)
30
+ @arguments.zip(actual_arguments).map { |(x, y)| x == y }.reduce(true, :&)
31
+ end
32
+
33
+ #
34
+ # Reset the counter of calls
35
+ # @return [self] itself
36
+ #
37
+ def reset!
38
+ @counter = 0
39
+ self
40
+ end
41
+
42
+ #
43
+ # Calls the next action for these set of agruments
44
+ # @return [Object]
45
+ # @raise [StandardError]
46
+ #
47
+ def call_next!
48
+ list.fetch(counter) { list.last }.call.tap { @counter += 1 }
49
+ end
50
+
51
+ #
52
+ # Human-readable representation of arguments
53
+ # @return [String]
54
+ #
55
+ def to_s
56
+ args = [*arguments.map(&:to_s), "*"].join(", ")
57
+ "#{chain}(#{args})"
58
+ end
59
+
60
+ private
61
+
62
+ # @param [Fixturama::Stubs::Chain] chain Back reference
63
+ # @param [Array<Object>] list Definition of arguments
64
+ def initialize(chain, list)
65
+ @chain = chain
66
+ @arguments = Utils.array(list)
67
+ end
68
+
69
+ def counter
70
+ @counter ||= 0
71
+ end
72
+
73
+ def list
74
+ @list ||= []
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,78 @@
1
+ module Fixturama
2
+ #
3
+ # Stubbed chain of messages
4
+ #
5
+ class Stubs::Chain
6
+ attr_reader :receiver, :messages
7
+
8
+ #
9
+ # Register new action for some arguments
10
+ #
11
+ # @option [Array<#to_s>, #to_s] :arguments The specific arguments
12
+ # @option (see Fixturama::Stubs::Arguments#add_action)
13
+ # @return [self]
14
+ #
15
+ def add(actions:, arguments: nil, **)
16
+ Utils.array(arguments).tap do |args|
17
+ stub = find_by(args)
18
+ unless stub
19
+ stub = Stubs::Arguments.new(self, args)
20
+ stubs << stub
21
+ end
22
+ stub.add!(*actions)
23
+ stubs.sort_by! { |stub| -stub.arguments.count }
24
+ end
25
+
26
+ self
27
+ end
28
+
29
+ #
30
+ # Resets all counters
31
+ # @return [self] itself
32
+ #
33
+ def reset!
34
+ tap { stubs.each(&:reset!) }
35
+ end
36
+
37
+ #
38
+ # Executes the corresponding action
39
+ # @return [Object]
40
+ # @raise [StandardError]
41
+ #
42
+ def call!(actual_arguments)
43
+ stub = stubs.find { |item| item.applicable_to?(actual_arguments) }
44
+ raise "Unexpected arguments #{actual_arguments}" unless stub
45
+
46
+ stub.call_next!
47
+ end
48
+
49
+ #
50
+ # Human-readable representation of the chain
51
+ # @return [String]
52
+ #
53
+ def to_s
54
+ "#{receiver}.#{messages.join(".")}"
55
+ end
56
+
57
+ private
58
+
59
+ def initialize(**options)
60
+ @receiver = Utils.constantize options[:class]
61
+ @messages = Utils.symbolize_array options[:chain]
62
+ return if messages.any?
63
+
64
+ raise SyntaxError, <<~MESSAGE.squish
65
+ Indefined message chain for stubbing #{receiver}.
66
+ Use option `chain` to define it.
67
+ MESSAGE
68
+ end
69
+
70
+ def stubs
71
+ @stubs ||= []
72
+ end
73
+
74
+ def find_by(arguments)
75
+ stubs.find { |stub| stub.arguments == arguments }
76
+ end
77
+ end
78
+ end
@@ -1,37 +1,49 @@
1
1
  module Fixturama
2
+ #
3
+ # Collection of stubbed calls
4
+ #
2
5
  class Stubs
3
6
  require_relative "stubs/actions"
4
- require_relative "stubs/raise"
5
- require_relative "stubs/return"
7
+ require_relative "stubs/arguments"
8
+ require_relative "stubs/chain"
6
9
 
10
+ #
11
+ # Register new action and apply the corresponding stub
12
+ #
13
+ # @option [#to_s] :class Class to stub
14
+ # @option [Array<#to_s>] :chain Methods chain for stubbing
15
+ # @option (see Fixturama::Stubs::Method#add)
16
+ # @return [self] itself
17
+ #
7
18
  def add(options)
8
- options = Utils.symbolize_hash(options)
9
- klass, chain, actions = options.values_at(:class, :chain, :actions)
19
+ tap do
20
+ options = Utils.symbolize_hash(options)
10
21
 
11
- klass = Utils.constantize(klass)
12
- chain = Utils.symbolize_array(chain)
13
- actions ||= { return: nil }
14
-
15
- Array(actions).each do |action|
16
- collection[[klass, chain]] ||= Actions.new
17
- collection[[klass, chain]].add action
22
+ options.select { |key| %i[class chain].include?(key) }.tap do |anchors|
23
+ chains[anchors] ||= Chain.new(anchors)
24
+ chains[anchors].add(options)
25
+ end
18
26
  end
19
-
20
- self
21
27
  end
22
28
 
29
+ #
30
+ # Applies the stub to RSpec example
31
+ #
23
32
  def apply(example)
24
- collection.each do |(klass, chain), actions|
25
- example.send(:allow, klass).to example.receive_message_chain(chain) do
26
- actions.call_next
27
- end
33
+ chains.values.each do |chain|
34
+ chain.reset!
35
+ call_action = \
36
+ example.send(:receive_message_chain, *chain.messages) do |*args|
37
+ chain.call! args
38
+ end
39
+ example.send(:allow, chain.receiver).to call_action
28
40
  end
29
41
  end
30
42
 
31
43
  private
32
44
 
33
- def collection
34
- @collection ||= {}
45
+ def chains
46
+ @chains ||= {}
35
47
  end
36
48
  end
37
49
  end
@@ -2,20 +2,32 @@ module Fixturama
2
2
  module Utils
3
3
  module_function
4
4
 
5
+ def symbolize(item)
6
+ item.to_s.to_sym
7
+ end
8
+
5
9
  def symbolize_hash(data)
6
- Hash(data).transform_keys { |key| key.to_s.to_sym }
10
+ Hash(data).transform_keys { |key| symbolize(key)}
7
11
  end
8
12
 
9
13
  def symbolize_array(data)
10
- Array(data).map { |item| item.to_s.to_sym }
14
+ Array(data).map { |item| symbolize(item) }
11
15
  end
12
16
 
13
17
  def constantize(item)
14
- item.to_s.constantize
18
+ Kernel.const_get(item.to_s)
15
19
  end
16
20
 
17
21
  def clone(item)
18
22
  item.respond_to?(:dup) ? item.dup : item
19
23
  end
24
+
25
+ def array(list)
26
+ case list
27
+ when NilClass then []
28
+ when Array then list
29
+ else [list]
30
+ end
31
+ end
20
32
  end
21
33
  end
@@ -1,47 +1,69 @@
1
1
  RSpec.describe "stub_fixture" do
2
- subject { Foo.new.bar }
2
+ subject { arguments.map { |argument| Payment.new.pay(argument) } }
3
3
 
4
4
  before do
5
- class Foo
6
- def bar
7
- "bar"
5
+ class Payment
6
+ def pay(_)
7
+ 5
8
8
  end
9
9
  end
10
10
  end
11
11
 
12
12
  context "without stubbing" do
13
- it { is_expected.to eq "bar" }
13
+ let(:arguments) { [0] }
14
+
15
+ it { is_expected.to eq [5] }
14
16
  end
15
17
 
16
- context "with first invocation" do
18
+ context "with stubbing" do
17
19
  before { stub_fixture "#{__dir__}/stub.yml" }
18
20
 
19
- it { is_expected.to eq "baz" }
20
- end
21
+ context "with a :raise option" do
22
+ let(:arguments) { [0] }
21
23
 
22
- context "with next_day invocation" do
23
- before do
24
- stub_fixture "#{__dir__}/stub.yml"
25
- Foo.new.bar
24
+ it "raises an exception" do
25
+ expect { subject }.to raise_error ArgumentError
26
+ end
26
27
  end
27
28
 
28
- it "raises an exception" do
29
- expect { subject }.to raise_error StandardError
29
+ context "with a :return option" do
30
+ let(:arguments) { [1] }
31
+
32
+ it "returns stubbed value" do
33
+ expect(subject).to eq [8]
34
+ end
30
35
  end
31
- end
32
36
 
33
- context "with later invocations" do
34
- before do
35
- stub_fixture "#{__dir__}/stub.yml"
36
- 3.times do begin
37
- Foo.new.bar
38
- rescue
39
- nil
40
- end end
37
+ context "with several actions" do
38
+ let(:arguments) { [2] * 4 }
39
+
40
+ it "calls the consecutive actions and then repeates the last one" do
41
+ expect(subject).to eq [4, 2, 0, 0]
42
+ end
43
+ end
44
+
45
+ context "with multi-count actions" do
46
+ let(:arguments) { [3] * 4 }
47
+
48
+ it "repeats the action a specified number of times" do
49
+ expect(subject).to eq [6, 6, 0, 0]
50
+ end
41
51
  end
42
52
 
43
- it "raises an exception" do
44
- expect { subject }.to raise_error StandardError
53
+ context "with several arguments" do
54
+ let(:arguments) { [2, 3, 2, 3, 2, 3] }
55
+
56
+ it "counts actions for every stub in isolation from the others" do
57
+ expect(subject).to eq [4, 6, 2, 6, 0, 0]
58
+ end
59
+ end
60
+
61
+ context "with unspecified argument" do
62
+ let(:arguments) { [4] }
63
+
64
+ it "uses universal stub" do
65
+ expect(subject).to eq [-1]
66
+ end
45
67
  end
46
68
  end
47
69
  end
@@ -1,8 +1,47 @@
1
1
  ---
2
- - class: Foo
2
+ - class: Payment
3
3
  chain:
4
4
  - new
5
- - bar
5
+ - pay
6
6
  actions:
7
- - return: baz
8
- - raise: StandardError
7
+ - return: -1
8
+
9
+ - class: Payment
10
+ chain:
11
+ - new
12
+ - pay
13
+ arguments:
14
+ - 0
15
+ actions:
16
+ - raise: ArgumentError
17
+
18
+ - class: Payment
19
+ chain:
20
+ - new
21
+ - pay
22
+ arguments:
23
+ - 1
24
+ actions:
25
+ - return: 8
26
+
27
+ - class: Payment
28
+ chain:
29
+ - new
30
+ - pay
31
+ arguments:
32
+ - 2
33
+ actions:
34
+ - return: 4
35
+ - return: 2
36
+ - return: 0
37
+
38
+ - class: Payment
39
+ chain:
40
+ - new
41
+ - pay
42
+ arguments:
43
+ - 3
44
+ actions:
45
+ - return: 6
46
+ repeat: 2
47
+ - return: 0
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fixturama
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kozin (nepalez)
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-02-03 00:00:00.000000000 Z
11
+ date: 2019-04-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: factory_bot
@@ -117,8 +117,10 @@ files:
117
117
  - lib/fixturama/seed.rb
118
118
  - lib/fixturama/stubs.rb
119
119
  - lib/fixturama/stubs/actions.rb
120
- - lib/fixturama/stubs/raise.rb
121
- - lib/fixturama/stubs/return.rb
120
+ - lib/fixturama/stubs/actions/raise.rb
121
+ - lib/fixturama/stubs/actions/return.rb
122
+ - lib/fixturama/stubs/arguments.rb
123
+ - lib/fixturama/stubs/chain.rb
122
124
  - lib/fixturama/utils.rb
123
125
  - spec/fixturama/load_fixture/_spec.rb
124
126
  - spec/fixturama/load_fixture/data.json
@@ -148,7 +150,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
148
150
  - !ruby/object:Gem::Version
149
151
  version: '0'
150
152
  requirements: []
151
- rubygems_version: 3.0.1
153
+ rubyforge_project:
154
+ rubygems_version: 2.6.14
152
155
  signing_key:
153
156
  specification_version: 4
154
157
  summary: A set of helpers to prettify specs with fixtures
@@ -1,15 +0,0 @@
1
- module Fixturama
2
- class Stubs
3
- class Raise
4
- def call
5
- raise @exception
6
- end
7
-
8
- private
9
-
10
- def initialize(exception)
11
- @exception = Utils.constantize(exception || StandardError)
12
- end
13
- end
14
- end
15
- end
@@ -1,13 +0,0 @@
1
- module Fixturama
2
- class Stubs
3
- class Return
4
- attr_reader :call
5
-
6
- private
7
-
8
- def initialize(output)
9
- @call = Utils.clone(output)
10
- end
11
- end
12
- end
13
- end