assertion 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: assertion
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kozin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-22 00:00:00.000000000 Z
11
+ date: 2015-06-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: transproc
@@ -107,10 +107,12 @@ files:
107
107
  - config/metrics/yardstick.yml
108
108
  - lib/assertion.rb
109
109
  - lib/assertion/base.rb
110
- - lib/assertion/base_dsl.rb
111
- - lib/assertion/dsl.rb
110
+ - lib/assertion/dsl/attribute.rb
111
+ - lib/assertion/dsl/attributes.rb
112
+ - lib/assertion/dsl/builder.rb
113
+ - lib/assertion/dsl/caller.rb
114
+ - lib/assertion/dsl/inversion.rb
112
115
  - lib/assertion/guard.rb
113
- - lib/assertion/guard_dsl.rb
114
116
  - lib/assertion/inflector.rb
115
117
  - lib/assertion/invalid_error.rb
116
118
  - lib/assertion/inversion.rb
@@ -124,6 +126,11 @@ files:
124
126
  - spec/shared/i18n.rb
125
127
  - spec/spec_helper.rb
126
128
  - spec/unit/assertion/base_spec.rb
129
+ - spec/unit/assertion/dsl/attribute_spec.rb
130
+ - spec/unit/assertion/dsl/attributes_spec.rb
131
+ - spec/unit/assertion/dsl/builder_spec.rb
132
+ - spec/unit/assertion/dsl/caller_spec.rb
133
+ - spec/unit/assertion/dsl/inversion_spec.rb
127
134
  - spec/unit/assertion/guard_spec.rb
128
135
  - spec/unit/assertion/inflector/to_path_spec.rb
129
136
  - spec/unit/assertion/inflector/to_snake_path_spec.rb
@@ -168,6 +175,11 @@ test_files:
168
175
  - spec/unit/assertion/inflector/to_snake_path_spec.rb
169
176
  - spec/unit/assertion/inflector/to_snake_spec.rb
170
177
  - spec/unit/assertion/inflector/to_path_spec.rb
178
+ - spec/unit/assertion/dsl/builder_spec.rb
179
+ - spec/unit/assertion/dsl/caller_spec.rb
180
+ - spec/unit/assertion/dsl/inversion_spec.rb
181
+ - spec/unit/assertion/dsl/attribute_spec.rb
182
+ - spec/unit/assertion/dsl/attributes_spec.rb
171
183
  - spec/unit/assertion/translator_spec.rb
172
184
  - spec/unit/assertion/inverter_spec.rb
173
185
  - spec/unit/assertion/inversion_spec.rb
@@ -1,75 +0,0 @@
1
- # encoding: utf-8
2
-
3
- module Assertion
4
-
5
- # Provides methods to describe and apply assertions
6
- #
7
- module BaseDSL
8
-
9
- # Initializes an assertion with some attributes (data) and then calls it
10
- #
11
- # @param (see Assertion::Base.new)
12
- #
13
- # @return (see Assertion::Base#call)
14
- #
15
- def [](args = nil)
16
- new(args).call
17
- end
18
-
19
- # Initializes the intermediate inverter with `new` and `[]` methods
20
- #
21
- # The inverter can be used to initialize the assertion, that describes
22
- # just the opposite statement to the current one
23
- #
24
- # @example
25
- # IsAdult = Assertion.about :name, :age do
26
- # age >= 18
27
- # end
28
- #
29
- # joe = { name: 'Joe', age: 19 }
30
- #
31
- # IsAdult[joe].valid? # => true
32
- # IsAdult.not[joe].valid? # => false
33
- #
34
- # @return [Assertion::Inverter]
35
- #
36
- def not
37
- Inverter.new(self)
38
- end
39
-
40
- # List of attributes defined for the assertion
41
- #
42
- # @return [Array<Symbol>]
43
- #
44
- def attributes
45
- @attributes ||= []
46
- end
47
-
48
- # Declares new attribute(s) by name(s)
49
- #
50
- # @param [#to_sym, Array<#to_sym>] names
51
- #
52
- # @return [undefined]
53
- #
54
- # @raise [NameError]
55
- # When an instance method with one of given names is already exist.
56
- #
57
- def attribute(*names)
58
- names.flatten.map(&:to_sym).each(&method(:__add_attribute__))
59
- end
60
-
61
- private
62
-
63
- def __add_attribute__(name)
64
- __check_attribute__(name)
65
- attributes << define_method(name) { attributes[name] }
66
- end
67
-
68
- def __check_attribute__(name)
69
- return unless (instance_methods << :check).include? name
70
- fail NameError.new "#{self}##{name} is already defined"
71
- end
72
-
73
- end # module BaseDSL
74
-
75
- end # module Assertion
@@ -1,77 +0,0 @@
1
- # encoding: utf-8
2
-
3
- module Assertion
4
-
5
- # Provides methods to build assertions and guards
6
- #
7
- module DSL
8
-
9
- # Builds the subclass of `Assertion::Base` with predefined `attributes`
10
- # and implementation of the `#check` method.
11
- #
12
- # @example
13
- # IsMan = Assertion.about :age, :gender do
14
- # (age >= 18) && (gender == :male)
15
- # end
16
- #
17
- # # This is the same as:
18
- # class IsMan < Assertion::Base
19
- # attribute :age, :gender
20
- #
21
- # def check
22
- # (age >= 18) && (gender == :male)
23
- # end
24
- # end
25
- #
26
- # @param [Symbol, Array<Symbol>] attributes
27
- # The list of attributes for the new assertion
28
- # @param [Proc] block
29
- # The content for the `check` method
30
- #
31
- # @return [Class] The specific assertion class
32
- #
33
- def about(*attributes, &block)
34
- __build__(Base, attributes, :check, &block)
35
- end
36
-
37
- # Builds the subclass of `Assertion::Guard` with given attribute
38
- # (alias for the `object`) and implementation of the `#state` method.
39
- #
40
- # @example
41
- # VoterOnly = Assertion.guards :user do
42
- # IsAdult[user.attributes] & IsCitizen[user.attributes]
43
- # end
44
- #
45
- # # This is the same as:
46
- # class VoterOnly < Assertion::Guard
47
- # alias_method :user, :object
48
- #
49
- # def state
50
- # IsAdult[user.attributes] & IsCitizen[user.attributes]
51
- # end
52
- # end
53
- #
54
- # @param [Symbol] attribute
55
- # The alias for the `object` attribute
56
- # @param [Proc] block
57
- # The content for the `state` method
58
- #
59
- # @return [Class] The specific guard class
60
- #
61
- def guards(attribute = nil, &block)
62
- __build__(Guard, attribute, :state, &block)
63
- end
64
-
65
- private
66
-
67
- def __build__(type, attributes, name, &block)
68
- klass = Class.new(type)
69
- klass.public_send(:attribute, attributes) if attributes
70
- klass.__send__(:define_method, name, &block) if block_given?
71
-
72
- klass
73
- end
74
-
75
- end # module DSL
76
-
77
- end # module Assertion
@@ -1,39 +0,0 @@
1
- module Assertion
2
-
3
- # Provides methods to describe and apply guards
4
- #
5
- module GuardDSL
6
-
7
- # Initializes and guard for the provided object and calls it immediately
8
- #
9
- # @param [Object] object The object whose state should be tested
10
- #
11
- # @return (see Assertion::Guard#call)
12
- #
13
- # @raise (see Assertion::Guard#call)
14
- #
15
- def [](object)
16
- new(object).call
17
- end
18
-
19
- # Adds alias to the [#object] method
20
- #
21
- # @param [#to_sym] name
22
- #
23
- # @return [undefined]
24
- #
25
- def attribute(name)
26
- __check_attribute__(name)
27
- alias_method name, :object
28
- end
29
-
30
- private
31
-
32
- def __check_attribute__(key)
33
- return unless (instance_methods << :state).include? key.to_sym
34
- fail NameError.new "#{self}##{key} is already defined"
35
- end
36
-
37
- end # module GuardDSL
38
-
39
- end # module Assertion