veritas 0.0.5 → 0.0.6

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.
Files changed (75) hide show
  1. data/.travis.yml +5 -4
  2. data/Gemfile +16 -14
  3. data/Guardfile +0 -4
  4. data/README.md +188 -0
  5. data/Rakefile +2 -2
  6. data/TODO +0 -16
  7. data/config/flay.yml +1 -1
  8. data/config/flog.yml +1 -1
  9. data/config/roodi.yml +4 -4
  10. data/config/site.reek +7 -3
  11. data/lib/veritas/aggregate.rb +18 -0
  12. data/lib/veritas/algebra/extension.rb +2 -29
  13. data/lib/veritas/algebra/projection.rb +2 -29
  14. data/lib/veritas/algebra/rename/aliases.rb +4 -32
  15. data/lib/veritas/algebra/rename.rb +2 -29
  16. data/lib/veritas/algebra/restriction.rb +2 -29
  17. data/lib/veritas/algebra/summarization.rb +2 -31
  18. data/lib/veritas/attribute/time.rb +1 -1
  19. data/lib/veritas/attribute.rb +20 -40
  20. data/lib/veritas/function/binary.rb +2 -3
  21. data/lib/veritas/function/connective/negation.rb +1 -1
  22. data/lib/veritas/function/predicate/enumerable.rb +19 -0
  23. data/lib/veritas/function/predicate/exclusion.rb +1 -1
  24. data/lib/veritas/function/predicate/match.rb +1 -1
  25. data/lib/veritas/function/unary.rb +5 -3
  26. data/lib/veritas/function.rb +1 -41
  27. data/lib/veritas/relation/base.rb +2 -29
  28. data/lib/veritas/relation/empty.rb +30 -2
  29. data/lib/veritas/relation/header.rb +17 -31
  30. data/lib/veritas/relation/materialized.rb +0 -12
  31. data/lib/veritas/relation/operation/limit.rb +2 -29
  32. data/lib/veritas/relation/operation/offset.rb +2 -29
  33. data/lib/veritas/relation/operation/order/direction.rb +3 -29
  34. data/lib/veritas/relation/operation/order/direction_set.rb +18 -34
  35. data/lib/veritas/relation/operation/order.rb +4 -56
  36. data/lib/veritas/relation.rb +8 -36
  37. data/lib/veritas/support/aliasable.rb +20 -7
  38. data/lib/veritas/support/comparator.rb +81 -0
  39. data/lib/veritas/support/evaluator.rb +1 -1
  40. data/lib/veritas/support/immutable.rb +22 -49
  41. data/lib/veritas/support/operation/binary.rb +3 -30
  42. data/lib/veritas/support/operation/unary.rb +3 -29
  43. data/lib/veritas/tuple.rb +19 -29
  44. data/lib/veritas/version.rb +1 -1
  45. data/lib/veritas.rb +1 -0
  46. data/spec/integration/veritas/relation/efficient_enumerable_spec.rb +3 -3
  47. data/spec/shared/hash_method_behavior.rb +7 -2
  48. data/spec/unit/date/pred_spec.rb +1 -1
  49. data/spec/unit/veritas/aggregate/equal_value_spec.rb +52 -0
  50. data/spec/unit/veritas/aggregate/hash_spec.rb +15 -0
  51. data/spec/unit/veritas/aliasable/inheritable_alias_spec.rb +1 -1
  52. data/spec/unit/veritas/comparator/compare_spec.rb +40 -0
  53. data/spec/unit/veritas/comparator/methods/eql_spec.rb +48 -0
  54. data/spec/unit/veritas/evaluator/context/respond_to_spec.rb +1 -1
  55. data/spec/unit/veritas/function/predicate/enumerable/call_spec.rb +36 -0
  56. data/spec/unit/veritas/function/unary/hash_spec.rb +18 -0
  57. data/spec/unit/veritas/immutable/freeze_spec.rb +2 -2
  58. data/spec/unit/veritas/immutable/memoize_spec.rb +13 -0
  59. data/spec/unit/veritas/immutable/module_methods/memoize_spec.rb +1 -1
  60. data/spec/unit/veritas/relation/empty/class_methods/new_spec.rb +30 -0
  61. data/spec/unit/veritas/relation/empty/each_spec.rb +20 -5
  62. data/spec/unit/veritas/relation/empty/size_spec.rb +11 -0
  63. data/spec/unit/veritas/relation/header/hash_spec.rb +1 -1
  64. data/spec/unit/veritas/relation/materialized/empty_spec.rb +0 -10
  65. data/spec/unit/veritas/relation/operation/order/direction_set/class_methods/coerce_spec.rb +12 -3
  66. data/tasks/metrics/heckle.rake +2 -3
  67. data/veritas.gemspec +21 -18
  68. metadata +36 -33
  69. data/README.rdoc +0 -143
  70. data/spec/unit/veritas/function/eql_spec.rb +0 -14
  71. data/spec/unit/veritas/function/equal_value_spec.rb +0 -14
  72. data/spec/unit/veritas/function/hash_spec.rb +0 -13
  73. data/spec/unit/veritas/immutable/memory/element_reference_spec.rb +0 -26
  74. data/spec/unit/veritas/immutable/memory/element_set_spec.rb +0 -19
  75. data/spec/unit/veritas/relation/operation/order/methods/order_spec.rb +0 -54
@@ -7,9 +7,11 @@ module Veritas
7
7
 
8
8
  # A class that represents a tuple sort order for a set of attributes
9
9
  class DirectionSet
10
- extend Aliasable
10
+ extend Aliasable, Comparator
11
11
  include Enumerable, Immutable
12
12
 
13
+ compare :to_ary
14
+
13
15
  inheritable_alias(:| => :union)
14
16
 
15
17
  # Instantiate a DirectionSet
@@ -24,7 +26,7 @@ module Veritas
24
26
  #
25
27
  # @api public
26
28
  def self.new(directions)
27
- directions = coerce_directions(directions.to_ary)
29
+ directions = coerce_directions(directions)
28
30
  assert_unique_attributes(directions.map { |direction| direction.attribute })
29
31
  super
30
32
  end
@@ -37,7 +39,7 @@ module Veritas
37
39
  #
38
40
  # @api private
39
41
  def self.coerce_directions(directions)
40
- directions.map { |direction| Ascending.coerce(direction) }
42
+ Array(directions).map { |direction| Ascending.coerce(direction) }
41
43
  end
42
44
 
43
45
  # Assert the attributes are unique
@@ -212,36 +214,7 @@ module Veritas
212
214
  #
213
215
  # @api public
214
216
  def ==(other)
215
- other = self.class.coerce(other)
216
- to_ary == other.to_ary
217
- end
218
-
219
- # Compare the directions with other directions for equality
220
- #
221
- # @example
222
- # directions.eql?(other) # => true or false
223
- #
224
- # @param [DirectionSet] other
225
- # the other directions to compare with
226
- #
227
- # @return [Boolean]
228
- #
229
- # @api public
230
- def eql?(other)
231
- instance_of?(other.class) &&
232
- to_ary.eql?(other.to_ary)
233
- end
234
-
235
- # Return the hash of the aliases
236
- #
237
- # @example
238
- # hash = directions.hash
239
- #
240
- # @return [Fixnum]
241
- #
242
- # @api public
243
- def hash
244
- self.class.hash ^ to_ary.hash
217
+ cmp?(__method__, coerce(other))
245
218
  end
246
219
 
247
220
  # Test if there are no directions
@@ -291,6 +264,17 @@ module Veritas
291
264
  end
292
265
  end
293
266
 
267
+ # Coerce directions into a DirectionSet
268
+ #
269
+ # @param [DirectionSet, Array<Direction, Attribute>]
270
+ #
271
+ # @return [DirectionSet]
272
+ #
273
+ # @api private
274
+ def coerce(object)
275
+ self.class.coerce(object)
276
+ end
277
+
294
278
  # Coerce directions into a DirectionSet
295
279
  #
296
280
  # @param [DirectionSet, Array<Direction, Attribute>]
@@ -302,7 +286,7 @@ module Veritas
302
286
  object.kind_of?(DirectionSet) ? object : new(object)
303
287
  end
304
288
 
305
- memoize :hash, :reverse
289
+ memoize :reverse
306
290
 
307
291
  end # class DirectionSet
308
292
  end # class Order
@@ -8,6 +8,8 @@ module Veritas
8
8
  class Order < Relation
9
9
  include Unary
10
10
 
11
+ compare :operand, :directions
12
+
11
13
  # The relation sort order
12
14
  #
13
15
  # @return [Operation::Order::DirectionSet]
@@ -91,33 +93,6 @@ module Veritas
91
93
  self
92
94
  end
93
95
 
94
- # Compare the Order with other relation for equality
95
- #
96
- # @example
97
- # order.eql?(other) # => true or false
98
- #
99
- # @param [Relation] other
100
- # the other relation to compare with
101
- #
102
- # @return [Boolean]
103
- #
104
- # @api public
105
- def eql?(other)
106
- super && directions.eql?(other.directions)
107
- end
108
-
109
- # Return the hash of the order
110
- #
111
- # @example
112
- # hash = order.hash
113
- #
114
- # @return [Fixnum]
115
- #
116
- # @api public
117
- def hash
118
- super ^ directions.hash
119
- end
120
-
121
96
  module Methods
122
97
 
123
98
  # Return an ordered relation
@@ -130,47 +105,20 @@ module Veritas
130
105
  #
131
106
  # @yieldparam [Relation] relation
132
107
  #
133
- # @yieldreturn [Array<Direction>, Header]
108
+ # @yieldreturn [DirectionSet, Array<Direction>, Header]
134
109
  #
135
110
  # @return [Order]
136
111
  #
137
112
  # @api public
138
113
  def sort_by
139
114
  context = Evaluator::Context.new(header) { |context| yield context }
140
- Order.new(self, Array(context.yield))
141
- end
142
-
143
- # Return an ordered relation (Deprecated)
144
- #
145
- # @deprecated Use #sort_by instead
146
- #
147
- # @example with no directions
148
- # order = relation.order # sort by the header
149
- #
150
- # @example with a block
151
- # order = relation.order { |r| [ r.a.desc, r.b ] }
152
- #
153
- # @yield [relation]
154
- # optional block to evaluate for directions
155
- #
156
- # @yieldparam [Relation] relation
157
- #
158
- # @yieldreturn [Array<Direction>, Header]
159
- #
160
- # @return [Order]
161
- #
162
- # @api public
163
- def order
164
- warn "#{self.class}#order is deprecated and will be removed from Veritas 0.0.6"
165
- sort_by { |context| block_given? ? yield(context) : header }
115
+ Order.new(self, context.yield)
166
116
  end
167
117
 
168
118
  end # module Methods
169
119
 
170
120
  Relation.class_eval { include Methods }
171
121
 
172
- memoize :hash
173
-
174
122
  end # class Order
175
123
  end # module Operation
176
124
  end # class Relation
@@ -4,8 +4,11 @@ module Veritas
4
4
 
5
5
  # Abstract base class for Relation operations
6
6
  class Relation
7
+ extend Comparator
7
8
  include Immutable, Enumerable, Visitable
8
9
 
10
+ compare :header, :to_set
11
+
9
12
  # The relation header
10
13
  #
11
14
  # @return [Header]
@@ -152,36 +155,7 @@ module Veritas
152
155
  def ==(other)
153
156
  other = coerce(other)
154
157
  header == other.header &&
155
- to_set == project_relation(other).to_set
156
- end
157
-
158
- # Compare the relation with other relation for equality
159
- #
160
- # @example
161
- # relation.eql?(other) # => true or false
162
- #
163
- # @param [Relation] other
164
- # the other relation to compare with
165
- #
166
- # @return [Boolean]
167
- #
168
- # @api public
169
- def eql?(other)
170
- instance_of?(other.class) &&
171
- header.eql?(other.header) &&
172
- to_set.eql?(project_relation(other).to_set)
173
- end
174
-
175
- # Return the hash of the relation
176
- #
177
- # @example
178
- # hash = relation.hash
179
- #
180
- # @return [Fixnum]
181
- #
182
- # @api public
183
- def hash
184
- self.class.hash ^ header.hash ^ to_set.hash
158
+ to_set == other.to_set
185
159
  end
186
160
 
187
161
  # Test if there are no tuples
@@ -200,17 +174,15 @@ module Veritas
200
174
 
201
175
  # Coerce an Enumerable into a Relation
202
176
  #
203
- # @param [Enumerable] tuples
204
- # the tuples to coerce
177
+ # @param [Enumerable] object
178
+ # the object to coerce
205
179
  #
206
180
  # @return [Relation]
207
181
  #
208
182
  # @api private
209
- def coerce(tuples)
210
- Relation.new(header, tuples)
183
+ def coerce(object)
184
+ project_relation(Relation.new(header, object))
211
185
  end
212
186
 
213
- memoize :hash
214
-
215
187
  end # class Relation
216
188
  end # module Veritas
@@ -17,15 +17,28 @@ module Veritas
17
17
  #
18
18
  # @api public
19
19
  def inheritable_alias(aliases)
20
- aliases.each do |new_method, original_method|
21
- class_eval <<-RUBY, __FILE__, __LINE__ + 1
22
- def #{new_method}(*args, &block) # def |(*args, &block)
23
- self.#{original_method}(*args, &block) # self.union(*args, &block)
24
- end # end
25
- RUBY
26
- end
20
+ aliases.each { |methods| define_inheritable_alias_method(*methods) }
27
21
  self
28
22
  end
29
23
 
24
+ private
25
+
26
+ # Create a new method alias for the original method
27
+ #
28
+ # @param [Symbol] new_method
29
+ #
30
+ # @param [Symbol] original_method
31
+ #
32
+ # @return [undefined]
33
+ #
34
+ # @api private
35
+ def define_inheritable_alias_method(new_method, original_method)
36
+ class_eval <<-RUBY, __FILE__, __LINE__ + 1
37
+ def #{new_method}(*args, &block) # def |(*args, &block)
38
+ self.#{original_method}(*args, &block) # self.union(*args, &block)
39
+ end # end
40
+ RUBY
41
+ end
42
+
30
43
  end # module Aliasable
31
44
  end # module Veritas
@@ -0,0 +1,81 @@
1
+ # encoding: utf-8
2
+
3
+ module Veritas
4
+
5
+ # Allows objects to be compared
6
+ module Comparator
7
+
8
+ # Setup default comparison methods for the object
9
+ #
10
+ # @example
11
+ # compare :left, :right
12
+ #
13
+ # @param [Array<Symbol>] *methods
14
+ #
15
+ # @return [self]
16
+ #
17
+ # @api public
18
+ def compare(*methods)
19
+ include Methods
20
+ define_hash_method(methods)
21
+ define_comparison_method(methods)
22
+ memoize :hash
23
+ private :cmp?
24
+ self
25
+ end
26
+
27
+ private
28
+
29
+ # Define a #hash method on the object
30
+ #
31
+ # The list of methods specify which methods' return values should be hashed
32
+ # and XOR'd together with the class's hash.
33
+ #
34
+ # @param [Array<#to_s>] methods
35
+ #
36
+ # @return [undefined]
37
+ #
38
+ # @api private
39
+ def define_hash_method(methods)
40
+ define_method(:hash) do
41
+ self.class.hash ^ methods.map { |method| send(method).hash }.inject(:^)
42
+ end
43
+ end
44
+
45
+ # Define a private comparison method on the object
46
+ #
47
+ # The list of methods specify which methods' return values should be
48
+ # compared together using #== or #eql?
49
+ #
50
+ # @param [Array<#to_s>] methods
51
+ #
52
+ # @return [undefined]
53
+ #
54
+ # @api private
55
+ def define_comparison_method(methods)
56
+ define_method(:cmp?) do |comparator, other|
57
+ methods.all? { |method| send(method).send(comparator, other.send(method)) }
58
+ end
59
+ end
60
+
61
+ # The comparison methods
62
+ module Methods
63
+
64
+ # Compare the object with other object for equality
65
+ #
66
+ # @example
67
+ # object.eql?(other) # => true or false
68
+ #
69
+ # @param [Object] other
70
+ # the other object to compare with
71
+ #
72
+ # @return [Boolean]
73
+ #
74
+ # @api public
75
+ def eql?(other)
76
+ instance_of?(other.class) && cmp?(__method__, other)
77
+ end
78
+
79
+ end # module Methods
80
+ end # module Comparator
81
+ end # module Veritas
@@ -82,7 +82,7 @@ module Veritas
82
82
  #
83
83
  # @api private
84
84
  def respond_to?(name, *)
85
- !!self[name]
85
+ self[name] ? true : false
86
86
  end
87
87
 
88
88
  # Forward a message to the object
@@ -29,7 +29,7 @@ module Veritas
29
29
  #
30
30
  # @api public
31
31
  def freeze
32
- @__memory = Memory.new unless frozen?
32
+ @__memory = {} unless frozen?
33
33
  super
34
34
  end
35
35
 
@@ -38,14 +38,14 @@ module Veritas
38
38
  # @example
39
39
  # hash = object.memoized(:hash)
40
40
  #
41
- # @param [#to_s] name
41
+ # @param [Symbol] name
42
42
  # the method name
43
43
  #
44
44
  # @return [Object]
45
45
  #
46
46
  # @api public
47
47
  def memoized(name)
48
- @__memory["@#{name}"]
48
+ @__memory[name]
49
49
  end
50
50
 
51
51
  # Sets a memoized value for a method
@@ -53,7 +53,7 @@ module Veritas
53
53
  # @example
54
54
  # object.memoize(:hash, 12345)
55
55
  #
56
- # @param [#to_s] name
56
+ # @param [Symbol] name
57
57
  # the method name
58
58
  # @param [Object] value
59
59
  # the value to memoize
@@ -62,7 +62,9 @@ module Veritas
62
62
  #
63
63
  # @api public
64
64
  def memoize(name, value)
65
- @__memory["@#{name}"] = Immutable.freeze_object(value)
65
+ unless @__memory.key?(name)
66
+ @__memory[name] = Immutable.freeze_object(value)
67
+ end
66
68
  self
67
69
  end
68
70
 
@@ -95,10 +97,10 @@ module Veritas
95
97
  # @api public
96
98
  def self.freeze_object(object)
97
99
  case object
98
- when Numeric, TrueClass, FalseClass, NilClass, Symbol
99
- object
100
- else
101
- freeze_value(object)
100
+ when Numeric, TrueClass, FalseClass, NilClass, Symbol
101
+ object
102
+ else
103
+ freeze_value(object)
102
104
  end
103
105
  end
104
106
 
@@ -161,23 +163,27 @@ module Veritas
161
163
  # @api private
162
164
  def memoize_method(method)
163
165
  visibility = method_visibility(method)
164
- create_memoize_method_for(method)
166
+ define_memoize_method(method)
165
167
  send(visibility, method)
166
168
  end
167
169
 
168
- # Create a memoized method that delegates to the original method
170
+ # Define a memoized method that delegates to the original method
169
171
  #
170
- # @param [String, Symbol] method
172
+ # @param [Symbol] method
171
173
  # the name of the method
172
174
  #
173
175
  # @return [undefined]
174
176
  #
175
177
  # @api private
176
- def create_memoize_method_for(method)
178
+ def define_memoize_method(method)
177
179
  original = instance_method(method)
178
- ivar = "@#{method}"
179
- send(:define_method, method) do |*args|
180
- @__memory[ivar] ||= Immutable.freeze_object(original.bind(self).call(*args))
180
+ undef_method(method)
181
+ define_method(method) do |*args|
182
+ if @__memory.key?(method)
183
+ @__memory.fetch(method)
184
+ else
185
+ @__memory[method] = Immutable.freeze_object(original.bind(self).call(*args))
186
+ end
181
187
  end
182
188
  end
183
189
 
@@ -214,38 +220,5 @@ module Veritas
214
220
  end
215
221
 
216
222
  end # module ClassMethods
217
-
218
- # Tracks the values for memoized methods
219
- class Memory
220
-
221
- # Get a frozen value from memory
222
- #
223
- # @example
224
- # value = memory[ivar]
225
- #
226
- # @param [#to_s] ivar
227
- # the name of the ivar to get the value for
228
- #
229
- # @return [Object]
230
- #
231
- # @api public
232
- alias [] instance_variable_get
233
-
234
- # Set a frozen value in memory
235
- #
236
- # @example
237
- # memory[ivar] = value
238
- #
239
- # @param [#to_s] ivar
240
- # the name of the ivar to set
241
- # @param [Object] value
242
- # the value to set
243
- #
244
- # @return [undefined]
245
- #
246
- # @api public
247
- alias []= instance_variable_set
248
-
249
- end # class Memory
250
223
  end # module Immutable
251
224
  end # module Veritas
@@ -3,8 +3,11 @@
3
3
  module Veritas
4
4
  module Operation
5
5
  module Binary
6
+ extend Comparator
6
7
  include Immutable
7
8
 
9
+ compare :left, :right
10
+
8
11
  # The left operand for the operation
9
12
  #
10
13
  # @example
@@ -40,36 +43,6 @@ module Veritas
40
43
  @right = Immutable.freeze_object(right)
41
44
  end
42
45
 
43
- # Compare the operation with the other operation for equality
44
- #
45
- # @example
46
- # binary.eql?(other) # => true or false
47
- #
48
- # @param [Object] other
49
- #
50
- # @return [Boolean]
51
- #
52
- # @api public
53
- def eql?(other)
54
- instance_of?(other.class) &&
55
- left.eql?(other.left) &&
56
- right.eql?(other.right)
57
- end
58
-
59
- # Return the hash of the left and right operands
60
- #
61
- # @example
62
- # hash = binary.hash
63
- #
64
- # @return [Fixnum]
65
- #
66
- # @api public
67
- def hash
68
- self.class.hash ^ left.hash ^ right.hash
69
- end
70
-
71
- memoize :hash
72
-
73
46
  end # module Binary
74
47
  end # module Operation
75
48
  end # module Veritas
@@ -3,8 +3,11 @@
3
3
  module Veritas
4
4
  module Operation
5
5
  module Unary
6
+ extend Comparator
6
7
  include Immutable
7
8
 
9
+ compare :operand
10
+
8
11
  # The operand to the operation
9
12
  #
10
13
  # @example
@@ -27,35 +30,6 @@ module Veritas
27
30
  @operand = Immutable.freeze_object(operand)
28
31
  end
29
32
 
30
- # Compare the operation with the other operation for equality
31
- #
32
- # @example
33
- # unary.eql?(other) # => true or false
34
- #
35
- # @param [Object] other
36
- #
37
- # @return [Boolean]
38
- #
39
- # @api public
40
- def eql?(other)
41
- instance_of?(other.class) &&
42
- operand.eql?(other.operand)
43
- end
44
-
45
- # Return the hash of the operand
46
- #
47
- # @example
48
- # hash = unary.hash
49
- #
50
- # @return [Fixnum]
51
- #
52
- # @api public
53
- def hash
54
- self.class.hash ^ operand.hash
55
- end
56
-
57
- memoize :hash
58
-
59
33
  end # module Unary
60
34
  end # module Operation
61
35
  end # module Veritas
data/lib/veritas/tuple.rb CHANGED
@@ -4,8 +4,11 @@ module Veritas
4
4
 
5
5
  # A set of objects representing a unique fact in a relation
6
6
  class Tuple
7
+ extend Comparator
7
8
  include Immutable
8
9
 
10
+ compare :data
11
+
9
12
  # The tuple header
10
13
  #
11
14
  # @return [Header]
@@ -136,48 +139,35 @@ module Veritas
136
139
  #
137
140
  # @api public
138
141
  def ==(other)
139
- other = self.class.coerce(header, other)
140
- data == other.data
142
+ cmp?(__method__, coerce(other))
141
143
  end
142
144
 
143
- # Compare the tuple with other tuple for equality
145
+ # Return a string representing the tuple data
144
146
  #
145
147
  # @example
146
- # tuple == other # => true or false
147
- #
148
- # @param [Tuple] other
149
- # the other tuple to compare with
148
+ # tuple.inspect # => "{<Attribute::Integer name: id>=>1}"
150
149
  #
151
- # @return [Boolean]
150
+ # @return [String]
152
151
  #
153
152
  # @api public
154
- def eql?(other)
155
- instance_of?(other.class) &&
156
- data.eql?(other.data)
153
+ def inspect
154
+ data.inspect
157
155
  end
158
156
 
159
- # Return the hash of the tuple
160
- #
161
- # @example
162
- # hash = tuple.hash
163
- #
164
- # @return [Fixnum]
165
- #
166
- # @api public
167
- def hash
168
- self.class.hash ^ data.hash
169
- end
157
+ private
170
158
 
171
- # Return a string representing the tuple data
159
+ # Coerce an Array-like object into a Tuple
172
160
  #
173
- # @example
174
- # tuple.inspect # => "{<Attribute::Integer name: id>=>1}"
161
+ # @param [Header] header
162
+ # the tuple header
163
+ # @param [Tuple, #to_ary]
164
+ # the tuple or tuple data
175
165
  #
176
- # @return [String]
166
+ # @return [Tuple]
177
167
  #
178
- # @api public
179
- def inspect
180
- data.inspect
168
+ # @api private
169
+ def coerce(object)
170
+ self.class.coerce(header, object)
181
171
  end
182
172
 
183
173
  # Coerce an Array-like object into a Tuple
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module Veritas
4
- VERSION = '0.0.5'
4
+ VERSION = '0.0.6'
5
5
  end # module Veritas