otoroshi 0.0.8 → 0.0.9

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: fba1623080c055e87c2055001a7f2370e459b5fe1a28774375cef3dd9e7da802
4
- data.tar.gz: 4c01c52a123157e572b4fdcef7c2e7eb6f0cc6ef2162e49237b5a49785708b70
3
+ metadata.gz: e8733049cbcd069bfdb9ba26863300e6b5547f67dae40ead37c757536f60d3e2
4
+ data.tar.gz: 1e92ac383197980ba7e7579236525989a627dc9517ca3112e062a5fd5e09fc5e
5
5
  SHA512:
6
- metadata.gz: 8b89127bff4d54b14be27fe723db61e6f0786b7f0f9f6d4df612ed49b3d86d59f1a1df55038178662e5ce247c4b2f6af16b35e05650730d8b9889debd354ed48
7
- data.tar.gz: 177fbc07e846a1cb9cbc7b3e595ce5c0878ff153d6293d9e0ccf986745a0b898e3b2a9be144218b97425ad87b78b4170848b20496ca39bf232ee898f5b1fcb19
6
+ metadata.gz: 54fd97b58be1a21e910d03fafa2c55bced96d549030c5014254674fbaec98f69633b9a0d9a698624f3d09259275920ee2f23bccc7a2425427547da20592b25a7
7
+ data.tar.gz: d9116888ba124a752fddbc1b31e1f11733931d4bd946beb7c9c159e43a60847da0337da32cb4172d4cbf25e44881e599478d97ef5405bd79c1507d08a2dbcc85
@@ -1,8 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'otoroshi/sanctuary'
4
- require_relative 'otoroshi/exceptions'
5
-
6
3
  # Otoroshi entry-point
7
- #
8
- module Otoroshi; end
4
+ module Otoroshi
5
+ require_relative 'otoroshi/sanctuary'
6
+ require_relative 'otoroshi/exceptions'
7
+ end
@@ -1,73 +1,89 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative './initializer'
4
+
3
5
  module Otoroshi
4
6
  class Error < StandardError; end
5
7
 
6
- # Manages errors raised when value type is not as expected
7
- class WrongTypeError < Error
8
- # Initialize an error
9
- #
8
+ # Manages errors raised when value is not an instance of the expected class
9
+ class TypeError < Error
10
10
  # @param property [Symbol] name of the property
11
11
  # @param type [Class] class to match
12
- # @param collection [true, false] define if it is a collection
13
- def initialize(property, type, collection: false)
14
- expected_type = type.is_a?(Array) ? type.first || Object : type
15
- msg =
16
- if collection
17
- ":#{property} contains elements that are not instances of #{expected_type}"
18
- else
19
- ":#{property} is not an instance of #{expected_type}"
20
- end
21
- super(msg)
22
- end
23
- end
24
-
25
- # Manages errors raised when value should be an collection
26
- class NotAnArray < Error
27
- # Initialize an error
28
- #
29
- # @param property [Symbol] name of the property
30
- def initialize(property)
31
- msg = ":#{property} is not an array"
32
- super(msg)
12
+ # @example
13
+ # ":number is not an instance of Integer"
14
+ def initialize(property, type)
15
+ super ":#{property} is not an instance of #{type}"
33
16
  end
34
17
  end
35
18
 
36
- # Manages errors raised when value is not accepted (not included in the "one_of")
37
- class NotAcceptedError < Error
38
- # Initialize an error
39
- #
19
+ # Manages errors raised when value is not accepted (not in the "one_of")
20
+ class OneOfError < Error
40
21
  # @param property [Symbol] name of the property
41
- # @param accepted_values [Array] accepted values
42
- # @param collection [true, false] define if it is an collection
43
- def initialize(property, accepted_values, collection: false)
22
+ # @param values [Array] accepted values
23
+ # @example
24
+ # ":fruit is not in [:apple, :pear]"
25
+ def initialize(property, values)
44
26
  # reintegrate the colon for symbols which is lost during interpolation
45
27
  to_s = ->(v) { v.is_a?(Symbol) ? ":#{v}" : v }
46
- accepted_values_list = accepted_values.map { |v| to_s.call(v) }.join(', ')
47
- msg =
48
- if collection
49
- ":#{property} contains elements that are not included in [#{accepted_values_list}]"
50
- else
51
- ":#{property} is not included in [#{accepted_values_list}]"
52
- end
53
- super(msg)
28
+ list = values.map { |v| to_s.call(v) }.join(', ')
29
+ super ":#{property} is not in [#{list}]"
54
30
  end
55
31
  end
56
32
 
57
33
  # Manages errors raised when value does not pass the assertion
58
- class AssertionError < Error
59
- # Initialize an error
60
- #
34
+ class AssertError < Error
61
35
  # @param property [Symbol] name of the property
62
- # @param collection [true, false] define if it is an collection
63
- def initialize(property, collection: false)
64
- msg =
65
- if collection
66
- ":#{property} contains elements that do not respect the assertion"
67
- else
68
- ":#{property} does not respect the assertion"
69
- end
70
- super(msg)
36
+ # @example
37
+ # ":number does not respect the assertion"
38
+ def initialize(property)
39
+ super ":#{property} does not respect the assertion"
40
+ end
41
+ end
42
+
43
+ module Collection
44
+ # Manages errors raised when value should be an collection
45
+ class ArrayError < Error
46
+ # @param property [Symbol] name of the property
47
+ # @example
48
+ # ":numbers is not an array"
49
+ def initialize(property)
50
+ super ":#{property} is not an array"
51
+ end
52
+ end
53
+
54
+ # Manages errors raised when at least one element of the collection is not an instance of the expected class
55
+ class TypeError < Error
56
+ # @param property [Symbol] name of the property
57
+ # @param type [Class] class to match
58
+ # @example
59
+ # ":numbers contains elements that are not instances of Integer"
60
+ def initialize(property, type)
61
+ super ":#{property} contains elements that are not instances of #{type}"
62
+ end
63
+ end
64
+
65
+ # Manages errors raised when at least one element of the collection is not accepted (not in the "one_of")
66
+ class OneOfError < Error
67
+ # @param property [Symbol] name of the property
68
+ # @param values [Array] accepted values
69
+ # @example
70
+ # ":fruits contains elements that are not in [:apple, :pear]"
71
+ def initialize(property, values)
72
+ # reintegrate the colon for symbols which is lost during interpolation
73
+ to_s = ->(v) { v.is_a?(Symbol) ? ":#{v}" : v }
74
+ list = values.map { |v| to_s.call(v) }.join(', ')
75
+ super ":#{property} contains elements that are not in [#{list}]"
76
+ end
77
+ end
78
+
79
+ # Manages errors raised when value does not pass the assertion
80
+ class AssertError < Error
81
+ # @param property [Symbol] name of the property
82
+ # @example
83
+ # ":numbers contains elements that do not respect the assertion"
84
+ def initialize(property)
85
+ super ":#{property} contains elements that do not respect the assertion"
86
+ end
71
87
  end
72
88
  end
73
89
  end
@@ -13,9 +13,15 @@ module Otoroshi
13
13
  #
14
14
  # @example
15
15
  # <<-RUBY
16
- # def initialize(foo:, bar: 0)
17
- # self.foo = foo
18
- # self.bar = bar
16
+ # def initialize(number: 0, message:, fruits: [])
17
+ # self.number = number
18
+ # self.message = message
19
+ # self.fruits = fruits
20
+ # bind = self
21
+ # @fruits.singleton_class.send(:define_method, :<<) do |v|
22
+ # bind.send(:"validate_fruits!", [v])
23
+ # push(v)
24
+ # end
19
25
  # end
20
26
  # RUBY
21
27
  def draw(properties)
@@ -42,7 +48,7 @@ module Otoroshi
42
48
  # end
43
49
  # RUBY
44
50
  def draw
45
- <<-RUBY
51
+ <<~RUBY
46
52
  def initialize(#{initialize_parameters})
47
53
  #{initialize_assignments}
48
54
  #{initialize_push_singletons}
@@ -58,8 +64,8 @@ module Otoroshi
58
64
  #
59
65
  # @return [String]
60
66
  #
61
- # @example Given properties { foo: { allow_nil: false, default: nil }, { allow_nil: true, default: 0 } }
62
- # redefine_initialize #=> "foo:, bar: 0"
67
+ # @example
68
+ # "foo:, bar: 0"
63
69
  def initialize_parameters
64
70
  parameters =
65
71
  properties.map do |key, options|
@@ -68,23 +74,40 @@ module Otoroshi
68
74
  parameters.join(', ')
69
75
  end
70
76
 
71
- # Fixes the default value of a parameter depending on options
77
+ # Generates the default value of a parameter depending on options
72
78
  #
73
79
  # @return [String]
74
80
  #
75
81
  # @example when nil is allowed and default is set
76
- # default_parameter_for #=> " 0"
82
+ # " \"default\""
77
83
  # @example when nil is allowed and default is not set
78
- # default_parameter_for #=> " nil"
84
+ # " nil"
79
85
  # @example when nil is not allowed
80
- # default_parameter_for #=> ""
86
+ # ""
81
87
  def default_parameter_for(options)
82
88
  default, allow_nil = options.values_at(:default, :allow_nil)
83
- if default
84
- symbol_prefix = default.is_a?(Symbol) ? ':' : ''
85
- " #{symbol_prefix}#{default}"
86
- else
89
+ if default.nil?
87
90
  allow_nil ? ' nil' : ''
91
+ else
92
+ " #{prefix(default)}#{default}#{suffix(default)}"
93
+ end
94
+ end
95
+
96
+ # Generates the characters to put before the value
97
+ # @note it avoids symbol without colon or string without quotes
98
+ # which would be interpreted as methods
99
+ def prefix(default)
100
+ case default
101
+ when Symbol then ':'
102
+ when String then '"'
103
+ end
104
+ end
105
+
106
+ # Generates the characters to put after the value
107
+ # @note it avoids string without quotes which would be interpreted as method
108
+ def suffix(default)
109
+ case default
110
+ when String then '"'
88
111
  end
89
112
  end
90
113
 
@@ -93,44 +116,67 @@ module Otoroshi
93
116
  # @return [String]
94
117
  #
95
118
  # @example Given properties { foo: { allow_nil: false, default: nil }, { allow_nil: true, default: 0 } }
96
- # initialize_body #=> "self.foo = foo\nself.bar = bar"
119
+ # <<-RUBY
120
+ # self.foo = foo
121
+ # self.bar = bar
122
+ # RUBY
97
123
  def initialize_assignments
98
124
  assignments =
99
125
  properties.keys.map do |name|
100
126
  "self.#{name} = #{name}"
101
127
  end
102
- assignments.join("\n")
128
+ assignments.join("\n ")
103
129
  end
104
130
 
105
131
  # Generates push singleton for each array property
106
132
  #
107
133
  # @return [String]
134
+ #
135
+ # @example
136
+ # <<-RUBY
137
+ # bind = self
138
+ # @fruits.singleton_class.send(:define_method, :<<) do |v|
139
+ # bind.send(:"validate_fruits!", [v])
140
+ # push(v)
141
+ # end
142
+ # @numbers.singleton_class.send(:define_method, :<<) do |v|
143
+ # bind.send(:"validate_numbers!", [v])
144
+ # push(v)
145
+ # end
146
+ # RUBY
108
147
  def initialize_push_singletons
109
148
  collections =
110
149
  properties.select do |_, options|
111
150
  options[:type].is_a?(Array) || options[:type] == Array
112
151
  end
152
+ return if collections.empty?
153
+
113
154
  singletons =
114
155
  collections.keys.map do |name|
115
156
  initialize_push_singleton(name)
116
157
  end
117
- singletons.join("\n")
158
+ # assign self to a variable so the instance is accessible from the singleton scope
159
+ ['bind = self', singletons.join].join("\n")
118
160
  end
119
161
 
120
162
  # Generates singleton on collection instance variable to overide <<
121
163
  # so value is validated before being added to the collection
122
164
  #
123
165
  # @return [String]
166
+ #
167
+ # @example
168
+ # <<-RUBY
169
+ # @fruits.singleton_class.send(:define_method, :<<) do |v|
170
+ # bind.send(:"validate_fruits!", [v])
171
+ # push(v)
172
+ # end
173
+ # RUBY
124
174
  def initialize_push_singleton(name)
125
175
  <<-RUBY
126
- bind = self
127
- @#{name}.singleton_class.send(:define_method, :<<) do |v|
128
- bind.send(:"validate_#{name}_type!", [v])
129
- bind.send(:"validate_#{name}_inclusion!", [v])
130
- bind.send(:"validate_#{name}_assertion!", [v])
131
-
132
- push(v)
133
- end
176
+ @#{name}.singleton_class.send(:define_method, :<<) do |v|
177
+ bind.send(:"validate_#{name}!", [v])
178
+ push(v)
179
+ end
134
180
  RUBY
135
181
  end
136
182
  end
@@ -3,7 +3,7 @@
3
3
  require_relative 'initializer'
4
4
 
5
5
  module Otoroshi
6
- # This module is designed to be included in a class. This will provide
6
+ # This module is designed to be in a class. This will provide
7
7
  # the "property" ({Sanctuary::ClassMethods.property}) method for defining class properties.
8
8
  #
9
9
  # @example
@@ -45,29 +45,34 @@ module Otoroshi
45
45
  # property scores, type: [Integer], assert: ->(v) { v >= 0 }, default: []
46
46
  def property(name, type = Object, one_of: nil, assert: ->(_) { true }, allow_nil: false, default: nil)
47
47
  add_to_properties(name, type, allow_nil, default)
48
- collection = type == Array || type.is_a?(Array)
49
- define_validate_type!(name, type, collection, allow_nil)
50
- define_validate_inclusion!(name, collection, one_of, allow_nil)
48
+ expected_type = type.is_a?(Array) ? type.first || Object : type
49
+ collection = expected_type == Array || type.is_a?(Array)
50
+ define_validate_type!(name, expected_type, collection, allow_nil)
51
+ define_validate_one_of!(name, collection, one_of, allow_nil)
51
52
  define_validate_assertion!(name, collection, assert, allow_nil)
53
+ define_validate!(name)
52
54
  define_getter(name)
53
55
  define_setter(name)
56
+ puts Initializer.draw(properties)
54
57
  class_eval Initializer.draw(properties), __FILE__, __LINE__ + 1
55
58
  end
56
59
 
57
- # Returns the class properties
60
+ # Class properties
58
61
  #
59
62
  # @return [Hash]
60
63
  #
61
- # @note this method will be updated by {add_to_properties}
64
+ # @example
65
+ # {
66
+ # number: { type: Integer, allow_nil: false, default: 0 },
67
+ # message: { type: Integer, allow_nil: true, default: nil }
68
+ # }
62
69
  def properties
63
70
  {}
64
71
  end
65
72
 
66
73
  private
67
74
 
68
- # Updates {properties} to add new property to the returned ones
69
- #
70
- # @return [void]
75
+ # Adds a properties to the {properties}
71
76
  def add_to_properties(name, type, allow_nil, default)
72
77
  current_state = properties
73
78
  current_state[name] = {
@@ -78,155 +83,123 @@ module Otoroshi
78
83
  define_singleton_method(:properties) { current_state }
79
84
  end
80
85
 
81
- # Defines a private method that raises an error if type is not respected
86
+ # Defines a private method that validates type condition
82
87
  #
83
- # @return [void]
88
+ # Given name = :score, type = Integer, allow_nil = false
84
89
  #
85
- # @example
86
- # define_validate_type!(:score, Integer, false) => def validate_score_type!(value) ...
87
- # @example Generated method
88
- # # given name: :score, type: Integer, allow_nil: false
89
90
  # def validate_score_type!(value)
90
91
  # return if Integer.nil? || false && value.nil?
91
92
  # return if value.is_a? Integer
92
93
  #
93
- # raise ArgumentError, ":score does not match required type"
94
+ # raise Otoroshi::TypeError, :score, Integer
94
95
  # end
95
96
  def define_validate_type!(name, type, collection, allow_nil)
96
- lambda = type_validation(type)
97
- check_collection = ->(v) { v.is_a?(Array) || raise(Otoroshi::NotAnArray, name) }
97
+ validator = validate_type?(name, type, collection)
98
98
  define_method :"validate_#{name}_type!" do |value|
99
- return if allow_nil && value.nil?
100
-
101
- collection && check_collection.call(value)
102
- return if lambda.call(value)
103
-
104
- raise Otoroshi::WrongTypeError.new(name, type, collection: collection)
99
+ allow_nil && value.nil? || validator.call(value)
105
100
  end
106
101
  private :"validate_#{name}_type!"
107
102
  end
108
103
 
109
- # Defines a lambda to be called to validate that value matches the type
110
- #
111
- # @return [Proc] the lambda to use in order to test that the value matches the type
112
- #
113
- # @example
114
- # type_validation(Integer) #=> ->(v) { v.is_a? Integer }
115
- # @example
116
- # type_validation([String, Symbol]) #=> ->(v) { [String, Symbol].any? { |t| v.is_a? t } }
117
- #
118
- # @note params are used for binding in define_method scope
119
- def type_validation(type)
120
- if type == Array
121
- # no expected type for each element, return nil
122
- ->(_) {}
123
- elsif type.is_a?(Array)
124
- # get the real expected type
125
- # e.g. if type is [Integer] then element_type should be Integer
126
- # e.g. if type is [] then element_type should be Object
127
- element_type = type.first || Object
128
- # apply type_validation lambda on each element
129
- ->(v) { v.all? { |e| type_validation(element_type).call(e) } }
104
+ # Lambda that validates (value) respects the type condition
105
+ # @return [Proc]
106
+ def validate_type?(name, type, collection)
107
+ if collection
108
+ # validate each element of (v) is an instance of the type
109
+ lambda do |v|
110
+ v.is_a?(Array) || raise(Otoroshi::Collection::ArrayError, name)
111
+ v.all? { |elt| elt.is_a? type } || raise(Otoroshi::Collection::TypeError.new(name, type))
112
+ end
130
113
  else
131
- # check the value matches the type
132
- ->(v) { v.is_a? type }
114
+ # validate (v) is an instance of the type
115
+ ->(v) { v.is_a?(type) || raise(Otoroshi::TypeError.new(name, type)) }
133
116
  end
134
117
  end
135
118
 
136
- # Defines a private method that raises an error if value is not included in the accepted ones
119
+ # Defines a private method that validates one_of condition
137
120
  #
138
- # @return [void]
121
+ # Given name = :side, collection = false, one_of = [:left, :right], allow_nil = false
139
122
  #
140
- # @example
141
- # # given @name = :side
142
- # define_validate_inclusion!(:side, ...) => def validate_side_type!(value) ...
143
- # @example Generated method
144
- # # given name: :side, collection: false, one_of: [:left, :right], allow_nil: false
145
123
  # def validate_side_type!(value)
146
124
  # return if false && value.nil?
147
125
  # return if [:left, :right].include? value
148
126
  #
149
- # raise ArgumentError, ":side is not included in accepted values"
127
+ # raise Otoroshi::OneOfError, :side, [:left, :right]
150
128
  # end
151
- def define_validate_inclusion!(name, collection, one_of, allow_nil)
152
- validator = collection ? each_inside?(name, one_of) : inside?(name, one_of)
153
- if one_of
154
- define_method(:"validate_#{name}_inclusion!") do |value|
155
- allow_nil && value.nil? || validator.call(value)
156
- end
157
- else
158
- define_method(:"validate_#{name}_inclusion!") { |_| }
129
+ def define_validate_one_of!(name, collection, one_of, allow_nil)
130
+ validator = validate_one_of?(name, one_of, collection)
131
+ define_method(:"validate_#{name}_one_of!") do |value|
132
+ allow_nil && value.nil? || validator.call(value)
159
133
  end
160
- private :"validate_#{name}_inclusion!"
134
+ private :"validate_#{name}_one_of!"
161
135
  end
162
136
 
163
- # Defines a lambda to be called to validate that value is included in accepted ones
164
- #
165
- # @return [Proc] the lambda to use in order to test that value is included in accepted ones
166
- def inside?(name, one_of)
167
- lambda do |v|
168
- one_of.include?(v) || raise(Otoroshi::NotAcceptedError.new(name, one_of))
169
- end
170
- end
137
+ # Lambda that validates (value) respects the one_of condition
138
+ # @return [Proc]
139
+ def validate_one_of?(name, one_of, collection)
140
+ return ->(_) {} unless one_of
171
141
 
172
- # Defines a lambda to be called to validate that each value is included in accepted ones
173
- #
174
- # @return [Proc] the lambda to use in order to test that each value is included in accepted ones
175
- def each_inside?(name, one_of)
176
- lambda do |v|
177
- v.all? { |e| one_of.include? e } || raise(Otoroshi::NotAcceptedError.new(name, one_of, collection: true))
142
+ if collection
143
+ lambda do |v|
144
+ v.all? { |e| one_of.include? e } || raise(Otoroshi::Collection::OneOfError.new(name, one_of))
145
+ end
146
+ else
147
+ lambda do |v|
148
+ one_of.include?(v) || raise(Otoroshi::OneOfError.new(name, one_of))
149
+ end
178
150
  end
179
151
  end
180
152
 
181
- # Defines a private method that raises an error if assert lambda returns false
153
+ # Defines a private method that validates assert condition
182
154
  #
183
- # @return [void]
155
+ # Given name = :score, assert = ->(v) { v >= 0 }, allow_nil = false
184
156
  #
185
- # @example
186
- # define_validate_assertion!(:score, ...) #=> def validate_score_assertion!(value) ...
187
- # @example Generated instance method
188
- # # given name: :score, assert: >(v) { v >= 0 }, allow_nil: false
189
157
  # def validate_score_assertion!(value)
190
158
  # return if false && value.nil?
191
159
  # return if value >= 0
192
160
  #
193
- # raise ArgumentError, ":score does not match validation"
161
+ # raise Otoroshi::AssertError, :score
194
162
  # end
195
163
  def define_validate_assertion!(name, collection, assert, allow_nil)
196
- validator = collection ? each_assert?(name, assert) : assert?(name, assert)
164
+ validator = validate_assert?(name, assert, collection)
197
165
  define_method :"validate_#{name}_assertion!" do |value|
198
166
  allow_nil && value.nil? || validator.call(value)
199
167
  end
200
168
  private :"validate_#{name}_assertion!"
201
169
  end
202
170
 
203
- # Defines a lambda to be called to validate that value respects the specific
204
- #
205
- # @return [Proc] the lambda to use in order to test that value respects the specific
206
- def assert?(name, assert)
207
- lambda do |value|
208
- instance_exec(value, &assert) || raise(Otoroshi::AssertionError, name)
171
+ # Lambda that validates (value) respects the assert condition
172
+ # @return [Proc]
173
+ def validate_assert?(name, assert, collection)
174
+ if collection
175
+ ->(v) { v.all? { |e| instance_exec(e, &assert) } || raise(Otoroshi::Collection::AssertError, name) }
176
+ else
177
+ ->(v) { instance_exec(v, &assert) || raise(Otoroshi::AssertError, name) }
209
178
  end
210
179
  end
211
180
 
212
- # Defines a lambda to be called to validate that value respects the specific
181
+ # Defines a private method that calls all validations
182
+ #
183
+ # Given name = :score
213
184
  #
214
- # @return [Proc] the lambda to use in order to test that each value respects the specific
215
- def each_assert?(name, assert)
216
- lambda do |value|
217
- value.all? { |e| instance_exec(e, &assert) } ||
218
- raise(Otoroshi::AssertionError.new(name, collection: true))
185
+ # def validate_score!(value)
186
+ # validate_score_type!(value)
187
+ # validate_score_one_of!(value)
188
+ # validate_score_assert(value)
189
+ # end
190
+ def define_validate!(name)
191
+ define_method :"validate_#{name}!" do |value|
192
+ __send__(:"validate_#{name}_type!", value)
193
+ __send__(:"validate_#{name}_one_of!", value)
194
+ __send__(:"validate_#{name}_assertion!", value)
219
195
  end
196
+ private :"validate_#{name}!"
220
197
  end
221
198
 
222
- # Defines a getter method for the property
199
+ # Defines a getter
223
200
  #
224
- # @return [void]
201
+ # Given name = :score
225
202
  #
226
- # @example
227
- # define_getter(:score) #=> def score ...
228
- # @example Generated instance method
229
- # # given name: :score
230
203
  # def score
231
204
  # instance_variable_get(@score)
232
205
  # end
@@ -234,14 +207,10 @@ module Otoroshi
234
207
  define_method(name) { instance_variable_get("@#{name}") }
235
208
  end
236
209
 
237
- # Defines a setter method for the property
210
+ # Defines a setter
238
211
  #
239
- # @return [void]
212
+ # Given name = :score
240
213
  #
241
- # @example
242
- # define_setter(:score) #=> def score=(value) ...
243
- # @example Generated instance method
244
- # # given name: :score
245
214
  # def score=(value)
246
215
  # validate_score_type!(value)
247
216
  # validate_score!(value)
@@ -249,9 +218,7 @@ module Otoroshi
249
218
  # end
250
219
  def define_setter(name)
251
220
  define_method :"#{name}=" do |value|
252
- __send__(:"validate_#{name}_type!", value)
253
- __send__(:"validate_#{name}_inclusion!", value)
254
- __send__(:"validate_#{name}_assertion!", value)
221
+ __send__(:"validate_#{name}!", value)
255
222
  instance_variable_set("@#{name}", value)
256
223
  end
257
224
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: otoroshi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Edouard Piron