calificador 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +35 -16
  3. data/TODO.md +16 -0
  4. data/calificador.gemspec +54 -0
  5. data/lib/calificador.rb +8 -4
  6. data/lib/calificador/assert.rb +15 -0
  7. data/lib/calificador/assertor.rb +79 -35
  8. data/lib/calificador/build/attribute_evaluator.rb +34 -30
  9. data/lib/calificador/build/basic_factory.rb +195 -0
  10. data/lib/calificador/build/mock_factory.rb +151 -0
  11. data/lib/calificador/build/object_factory.rb +85 -0
  12. data/lib/calificador/build/trait.rb +0 -20
  13. data/lib/calificador/context/basic_context.rb +406 -0
  14. data/lib/calificador/context/class_method_context.rb +0 -0
  15. data/lib/calificador/{spec → context}/condition_context.rb +1 -3
  16. data/lib/calificador/{spec/type_context.rb → context/instance_context.rb} +5 -10
  17. data/lib/calificador/context/operation_context.rb +27 -0
  18. data/lib/calificador/context/override/argument_override.rb +73 -0
  19. data/lib/calificador/context/override/basic_override.rb +14 -0
  20. data/lib/calificador/context/override/factory_override.rb +31 -0
  21. data/lib/calificador/context/override/property_override.rb +61 -0
  22. data/lib/calificador/context/test_environment.rb +283 -0
  23. data/lib/calificador/{spec → context}/test_method.rb +2 -31
  24. data/lib/calificador/{spec → context}/test_root.rb +3 -15
  25. data/lib/calificador/{spec/examine_context.rb → context/type_context.rb} +7 -10
  26. data/lib/calificador/key.rb +27 -15
  27. data/lib/calificador/minitest/minitest_patches.rb +0 -2
  28. data/lib/calificador/test.rb +1 -3
  29. data/lib/calificador/test_mixin.rb +143 -139
  30. data/lib/calificador/util/call_formatter.rb +5 -5
  31. data/lib/calificador/util/core_extensions.rb +104 -79
  32. data/lib/calificador/util/proxy_object.rb +63 -0
  33. data/lib/calificador/version.rb +1 -1
  34. metadata +22 -42
  35. data/lib/calificador/build/attribute_container.rb +0 -103
  36. data/lib/calificador/build/factory.rb +0 -132
  37. data/lib/calificador/spec/basic_context.rb +0 -353
  38. data/lib/calificador/spec/class_method_context.rb +0 -42
  39. data/lib/calificador/spec/instance_method_context.rb +0 -38
  40. data/lib/calificador/spec/test_environment.rb +0 -141
  41. data/lib/calificador/spec/value_override.rb +0 -37
@@ -1,42 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- using Calificador::Util::CoreExtensions
4
-
5
- module Calificador
6
- module Spec
7
- # Context that describes an instance method
8
- class ClassMethodContext < BasicContext
9
- class Dsl < BasicContext::Dsl
10
- end
11
-
12
- attr_reader :method
13
-
14
- def initialize(parent:, method:, description: nil)
15
- super(
16
- parent: parent,
17
- subject_key: parent.subject_key,
18
- description: description,
19
- overrides: {}
20
- )
21
-
22
- @method = method
23
- end
24
-
25
- def separate_description_by_space?
26
- @parent && !@parent.is_a?(ExamineContext)
27
- end
28
-
29
- def create_subject(environment:, subject_key:)
30
- subject_key.type
31
- end
32
-
33
- def create_result(subject:, arguments:, options:, block:)
34
- if options.empty?
35
- subject.send(@method, *arguments, &block)
36
- else
37
- subject.send(@method, *arguments, **options, &block)
38
- end
39
- end
40
- end
41
- end
42
- end
@@ -1,38 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- using Calificador::Util::CoreExtensions
4
-
5
- module Calificador
6
- module Spec
7
- # Context that describes an instance method
8
- class InstanceMethodContext < BasicContext
9
- class Dsl < BasicContext::Dsl
10
- end
11
-
12
- attr_reader :method
13
-
14
- def initialize(parent:, method:, description: nil)
15
- super(
16
- parent: parent,
17
- subject_key: parent.subject_key,
18
- description: description,
19
- overrides: {}
20
- )
21
-
22
- @method = method
23
- end
24
-
25
- def create_result(subject:, arguments:, options:, block:)
26
- if options.empty?
27
- subject.send(@method, *arguments, &block)
28
- else
29
- subject.send(@method, *arguments, **options, &block)
30
- end
31
- end
32
-
33
- def separate_description_by_space?
34
- @parent && !@parent.is_a?(ExamineContext)
35
- end
36
- end
37
- end
38
- end
@@ -1,141 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- using Calificador::Util::CoreExtensions
4
-
5
- module Calificador
6
- module Spec
7
- # Environment to run test method
8
- class TestEnvironment
9
- def initialize(test:, context:)
10
- @test = test
11
- @context = context
12
- @subject = MISSING
13
- @call_arguments = []
14
- @call_options = {}
15
- @call_block = nil
16
- @call_result = MISSING
17
- @created_objects = {}
18
- @current_assertor = nil
19
- end
20
-
21
- def subject(value = MISSING)
22
- if value.equal?(MISSING)
23
- if @subject.equal?(MISSING)
24
- @call_result = MISSING
25
- @subject = @context.create_subject(environment: self, subject_key: @context.subject_key)
26
- end
27
- else
28
- @call_result = MISSING
29
- @subject = value
30
- end
31
-
32
- @subject
33
- end
34
-
35
- def arguments(*arguments, **options, &block)
36
- @call_arguments = arguments.nil? ? [] : arguments
37
- @call_options = options.nil? ? {} : options
38
- @call_block = block
39
- @call_result = MISSING
40
- nil
41
- end
42
-
43
- def call(*arguments, **options, &block)
44
- options.empty? ? arguments(*arguments, &block) : arguments(*arguments, **options, &block)
45
- result
46
- end
47
-
48
- def result
49
- if @call_result == MISSING
50
- @call_result = @context.create_result(
51
- subject: subject,
52
- arguments: @call_arguments,
53
- options: @call_options,
54
- block: @call_block
55
- )
56
- end
57
-
58
- @call_result
59
- end
60
-
61
- def create(type, trait = nil)
62
- create_object(key: Key[type, trait])
63
- end
64
-
65
- def assert(&block)
66
- @current_assertor&.__check_triggered
67
-
68
- @current_assertor = Assertor.new(test: @test, block: block || __default_assert_block)
69
- end
70
-
71
- def refute(&block)
72
- @current_assertor&.__check_triggered
73
-
74
- @current_assertor = Assertor.new(test: @test, negated: true, block: block || __default_assert_block)
75
- end
76
-
77
- def respond_to_missing?(method, include_all)
78
- @context.lookup_named_factory(name: method) || super
79
- end
80
-
81
- def method_missing(method, *arguments, **options, &block)
82
- factory = @context.lookup_named_factory(name: method)
83
-
84
- if factory
85
- create_object(key: factory.key)
86
- else
87
- super
88
- end
89
- end
90
-
91
- def create_object(key:)
92
- @created_objects.fetch(key) do
93
- factory = @context.lookup_factory(key: key)
94
-
95
- object = if factory.nil?
96
- raise(KeyError, "No factory found for #{key}") if key.trait != Key::DEFAULT_TRAIT
97
-
98
- constructor = key.type.method(:new)
99
- constructor.invoke
100
- else
101
- factory.create(context: self)
102
- end
103
-
104
- @created_objects[key] = object
105
- end
106
- end
107
-
108
- def __done
109
- @current_assertor&.__check_triggered
110
- end
111
-
112
- protected
113
-
114
- def __default_assert_block
115
- lambda do
116
- result
117
- end
118
- end
119
-
120
- # def __pass(message = nil)
121
- # @test.pass(message)
122
- # end
123
-
124
- # def __flunk(message = nil)
125
- # @test.flunk(message)
126
- # end
127
-
128
- # def __assert(condition, message = nil)
129
- # @test.assert(condition, message)
130
- # end
131
-
132
- # def __refute(condition, message = nil)
133
- # @test.refute(condition, message)
134
- # end
135
-
136
- # def __exception_details(exception, message)
137
- # @test.exception_details(exception, message)
138
- # end
139
- end
140
- end
141
- end
@@ -1,37 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- using Calificador::Util::CoreExtensions
4
-
5
- module Calificador
6
- module Spec
7
- # Factory calss
8
- class ValueOverride
9
- attr_reader :key, :values
10
-
11
- def initialize(key:, values: {})
12
- @key = key
13
- @values = values.dup.freeze
14
- end
15
-
16
- def merge(other)
17
- raise(ArgumentError, "Overrides must have same key") if @key != other.key
18
-
19
- if other.values.empty? || equal?(other)
20
- self
21
- elsif @values.empty?
22
- other
23
- else
24
- ValueOverride.new(key: @key, values: @values.merge(other.values))
25
- end
26
- end
27
-
28
- def merge_values(values)
29
- if values.empty?
30
- self
31
- else
32
- ValueOverride.new(key: @key, values: @values.merge(values))
33
- end
34
- end
35
- end
36
- end
37
- end