deep_double 0.1.0 → 0.1.1

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: 10da248b3fdf8a64407a89a83c6f77e6df110f55c44bf3c5be5a2ae1c1924066
4
- data.tar.gz: 73bb4881d11356d2ec95f810b7446e51e6b0c516c1066258eee7b04e74a0c158
3
+ metadata.gz: f2d86400433bcf2186dbab75a25cc58151a8934d1c672d2d3d1692d895ddafd3
4
+ data.tar.gz: 8493e72d2bc1444d2eb3b4185b9068ae8ad33373738f0333e52b41e4963187e3
5
5
  SHA512:
6
- metadata.gz: 95ec83eeaec878133e679e327bc16f7c18623a5822df6eaf48a99634a30df7e6f9f643c372ca006502be02002ad733191d3b8ce6fb59ab95f5a9ffceeb07d9ca
7
- data.tar.gz: dc383f873d38b97b9be99c107efb7ea0331f2021c5795d3b3a89b1b17f92c745349613b6895f4f7afd5e9ec628104d5124a854f12ccb28f29b2b9f2fa164812f
6
+ metadata.gz: cb4a27a46a3520bf82b1efb7e120ecd0dc7d416beef4be394539a3e0ceeba0ab6360e97986f59ce5b0732ee8d45f9ad4e1c770183309447c8847b0379585140b
7
+ data.tar.gz: 3b4f0744335a8a49045a2f7cb8d92a019079dad84a8e73519a12b8b384474020fd0b37c12035651771b52d8a0872f1717bb4a69ba30522a3cbf6fbdf9b84218c
data/lib/deep_double.rb CHANGED
@@ -4,9 +4,9 @@
4
4
  # It drastically reduces the amount of boilerplate compared with rspec.
5
5
  #
6
6
 
7
- require 'deep_double/function'
7
+ require 'deep_double/fake_method'
8
8
  require 'deep_double/literal'
9
- require 'deep_double/recursive_function'
9
+ require 'deep_double/recursive_fake_method'
10
10
  require "deep_double/version"
11
11
 
12
12
  module DeepDouble
@@ -45,12 +45,12 @@ module DeepDouble
45
45
  end
46
46
 
47
47
  def create_method(meth)
48
- define_singleton_method(meth.to_sym, &function(meth))
48
+ define_singleton_method(meth.to_sym, &fake_method(meth))
49
49
  end
50
50
 
51
- def function(meth)
52
- raw_fn = Function.new(@definition[meth])
53
- RecursiveFunction.new(raw_fn)
51
+ def fake_method(meth)
52
+ raw_fn = FakeMethod.new(@definition[meth])
53
+ RecursiveFakeMethod.new(raw_fn)
54
54
  end
55
55
  end
56
56
  end
@@ -0,0 +1,40 @@
1
+ require 'deep_double/fake_method/validate_stubbed_values'
2
+
3
+ # Takes a Hash of stubbed values to create a fake method. The stubbed values map
4
+ # lists of arguments (represented as arrays, with the empty array representing a
5
+ # method that takes no args) to return values.
6
+ #
7
+
8
+ module DeepDouble
9
+ class FakeMethod
10
+
11
+ def initialize(stubbed_values)
12
+ @stubbed_values = stubbed_values
13
+ validate_stubbed_values
14
+ end
15
+
16
+ def call(*args)
17
+ result(args)
18
+ end
19
+
20
+ private
21
+
22
+ def validate_stubbed_values
23
+ ValidateStubbedValues.new(@stubbed_values).call
24
+ end
25
+
26
+ def result(args)
27
+ validate_result_exists(args)
28
+ @stubbed_values.key?(args) ? @stubbed_values[args] : @stubbed_values[:default]
29
+ end
30
+
31
+ def validate_result_exists(args)
32
+ return if result_exists?(args)
33
+ raise ArgumentError, "FakeMethod not defined for args: #{args}"
34
+ end
35
+
36
+ def result_exists?(args)
37
+ @stubbed_values.key?(args) || @stubbed_values.key?(:default)
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,44 @@
1
+ # Validates that the structure of a stubbed values Hash is valid:
2
+ # - It must be a Hash
3
+ # - It's keys must be Arrays or the special value ":default"
4
+ #
5
+ module DeepDouble
6
+ class FakeMethod
7
+
8
+ class ValidateStubbedValues
9
+ def initialize(stubbed_values)
10
+ @stubbed_values = stubbed_values
11
+ end
12
+
13
+ def call
14
+ validate_type
15
+ validate_keys
16
+ end
17
+
18
+ private
19
+
20
+ def validate_type
21
+ return if @stubbed_values.is_a?(Hash)
22
+ raise ArgumentError,
23
+ "The stubbed values defining a FakeMethod must be a Hash"
24
+ end
25
+
26
+ def validate_keys
27
+ @stubbed_values.keys.each { |key| validate_key(key) }
28
+ end
29
+
30
+ def validate_key(key)
31
+ return if valid_key?(key)
32
+ raise ArgumentError,
33
+ "Keys in a stubbed values Hash must by Arrays representing " +
34
+ "argument lists (the empty array represents 0 arguments). The " +
35
+ "following key was invalid: #{key.inspect}"
36
+ end
37
+
38
+ def valid_key?(key)
39
+ key.is_a?(Array) || key == :default
40
+ end
41
+ end
42
+
43
+ end
44
+ end
@@ -1,15 +1,15 @@
1
- # Makes a `DeepDouble::Function` recursive, so that `Hash` results are
1
+ # Makes a `DeepDouble::FakeMethod` recursive, so that `Hash` results are
2
2
  # automatically converted to `DeepDouble` instances in their own right.
3
3
  #
4
4
  module DeepDouble
5
- class RecursiveFunction
5
+ class RecursiveFakeMethod
6
6
 
7
- def initialize(function)
8
- @function = function
7
+ def initialize(fake_method)
8
+ @fake_method = fake_method
9
9
  end
10
10
 
11
11
  def call(*args)
12
- result = @function.call(*args)
12
+ result = @fake_method.call(*args)
13
13
  special_case_transforms(result)
14
14
  end
15
15
 
@@ -1,3 +1,3 @@
1
1
  module DeepDouble
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: deep_double
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonah
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-10-10 00:00:00.000000000 Z
11
+ date: 2018-10-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -73,10 +73,10 @@ files:
73
73
  - bin/setup
74
74
  - deep_double.gemspec
75
75
  - lib/deep_double.rb
76
- - lib/deep_double/function.rb
77
- - lib/deep_double/function/validate_result_table.rb
76
+ - lib/deep_double/fake_method.rb
77
+ - lib/deep_double/fake_method/validate_stubbed_values.rb
78
78
  - lib/deep_double/literal.rb
79
- - lib/deep_double/recursive_function.rb
79
+ - lib/deep_double/recursive_fake_method.rb
80
80
  - lib/deep_double/version.rb
81
81
  - spec/deep_double_spec.rb
82
82
  - spec/spec_helper.rb
@@ -1,46 +0,0 @@
1
- require 'deep_double/function/validate_result_table'
2
-
3
- # A "function" in the mathematical sense: a mapping of input values to output
4
- # values. This (argument -> value) mapping is specified by a "result_table" --
5
- # just an ordinary ruby hash -- passed to the constructor.
6
- #
7
- # If the return value is itself a hash, it's interpreted as the definition of
8
- # another double, and so another `DeepDouble` instance is returned.
9
- #
10
- module DeepDouble
11
- class Function
12
-
13
- def initialize(result_table)
14
- @result_table = result_table
15
- validate_result_table
16
- end
17
-
18
- def call(*args)
19
- validate_result_exists(args)
20
- result(args)
21
- end
22
-
23
- private
24
-
25
- def validate_result_table
26
- ValidateResultTable.new(@result_table).call
27
- end
28
-
29
- def validate_result_exists(args)
30
- return if value_defined_for?(args)
31
- raise ArgumentError, "Function not defined for args: #{args}"
32
- end
33
-
34
- def result(args)
35
- if @result_table.key?(args)
36
- @result_table[args]
37
- else
38
- @result_table[:default]
39
- end
40
- end
41
-
42
- def value_defined_for?(args)
43
- @result_table.key?(args) || @result_table.key?(:default)
44
- end
45
- end
46
- end
@@ -1,47 +0,0 @@
1
- # A "function" in the mathematical sense: a mapping of input values to output
2
- # values. This (argument -> value) mapping is specified by a "result_table" --
3
- # just an ordinary ruby hash -- passed to the constructor.
4
- #
5
- # If the return value is itself a hash, it's interpreted as the definition of
6
- # another double, and so another `DeepDouble` instance is returned.
7
- #
8
- module DeepDouble
9
- class Function
10
-
11
- class ValidateResultTable
12
- def initialize(result_table)
13
- @result_table = result_table
14
- end
15
-
16
- def call
17
- validate_result_table_type
18
- validate_result_table_keys
19
- end
20
-
21
- private
22
-
23
- def validate_result_table_type
24
- return if @result_table.is_a?(Hash)
25
- raise ArgumentError,
26
- "The result table defining a Function must be a Hash"
27
- end
28
-
29
- def validate_result_table_keys
30
- @result_table.keys.each { |key| validate_key(key) }
31
- end
32
-
33
- def validate_key(key)
34
- return if valid_key?(key)
35
- raise ArgumentError,
36
- "Keys in a result table must by Arrays representing argument " +
37
- "lists (the empty array represents 0 arguments). The following " +
38
- "key was invalid: #{key.inspect}"
39
- end
40
-
41
- def valid_key?(key)
42
- key.is_a?(Array) || key == :default
43
- end
44
- end
45
-
46
- end
47
- end