riveter 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/lib/riveter/attributes.rb +115 -146
- data/lib/riveter/enumerated.rb +10 -5
- data/lib/riveter/version.rb +1 -1
- data/lib/riveter.rb +0 -1
- data/spec/examples/attribute_examples.rb +23 -6
- data/spec/riveter/attributes_spec.rb +46 -12
- data/spec/riveter/core_extensions_spec.rb +0 -1
- data/spec/riveter/query_spec.rb +0 -1
- data/spec/riveter/spec_helper_spec.rb +0 -1
- data/spec/spec_helper.rb +1 -0
- metadata +41 -41
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a52a04773b1e808eeebfdee8b29a954203dbc758
|
4
|
+
data.tar.gz: 0595aaa5773b218469790749d589af3173bb0b08
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0d206c54bc7973546c6bf450ac831637364468f7a797f239dc16fe7f1e0ab8fb28dfdb2c8b8f5ea51646bc6998f50b1be13629a7b6cb311efaf39d423e0291a6
|
7
|
+
data.tar.gz: f08fc40af6d8888e4478cd99ae6691e900294c433f8a123a75bf71b5b13d7065e839b6c1176f3f15c76588c32e021e847a91d6c65928d7f12ccfa38786a47092
|
data/Gemfile.lock
CHANGED
data/lib/riveter/attributes.rb
CHANGED
@@ -25,13 +25,10 @@ module Riveter
|
|
25
25
|
end
|
26
26
|
|
27
27
|
module ClassMethods
|
28
|
-
def attr_string(name, options={})
|
29
|
-
converter = Converters.converter_for(:string)
|
30
|
-
|
31
|
-
define_method name do
|
32
|
-
converter.call instance_variable_get("@#{name}")
|
33
|
-
end
|
28
|
+
def attr_string(name, options={}, &block)
|
29
|
+
converter = block_given? ? block : Converters.converter_for(:string)
|
34
30
|
|
31
|
+
attr_reader_with_converter name, converter
|
35
32
|
attr_writer name
|
36
33
|
|
37
34
|
add_attr(name, :string, converter, options)
|
@@ -39,108 +36,33 @@ module Riveter
|
|
39
36
|
|
40
37
|
alias_method :attr_text, :attr_string
|
41
38
|
|
42
|
-
def attr_integer(name, options={})
|
43
|
-
options
|
44
|
-
:validate => true
|
45
|
-
}.merge(options)
|
46
|
-
|
47
|
-
required = options[:required] == true
|
48
|
-
converter = Converters.converter_for(:integer)
|
49
|
-
|
50
|
-
define_method name do
|
51
|
-
converter.call instance_variable_get("@#{name}")
|
52
|
-
end
|
53
|
-
|
54
|
-
validates name,
|
55
|
-
:allow_blank => !required,
|
56
|
-
:allow_nil => !required,
|
57
|
-
:numericality => { :only => :integer } if options[:validate]
|
58
|
-
|
59
|
-
attr_writer name
|
60
|
-
|
61
|
-
add_attr(name, :integer, converter, options)
|
39
|
+
def attr_integer(name, options={}, &block)
|
40
|
+
attr_numeric(:integer, name, options, &block)
|
62
41
|
end
|
63
42
|
|
64
|
-
def attr_decimal(name, options={})
|
65
|
-
options
|
66
|
-
:validate => true
|
67
|
-
}.merge(options)
|
68
|
-
|
69
|
-
required = options[:required] == true
|
70
|
-
converter = Converters.converter_for(:decimal)
|
71
|
-
|
72
|
-
define_method name do
|
73
|
-
converter.call instance_variable_get("@#{name}")
|
74
|
-
end
|
75
|
-
|
76
|
-
validates name,
|
77
|
-
:allow_blank => !required,
|
78
|
-
:allow_nil => !required,
|
79
|
-
:numericality => true if options[:validate]
|
80
|
-
|
81
|
-
attr_writer name
|
82
|
-
|
83
|
-
add_attr(name, :decimal, converter, options)
|
43
|
+
def attr_decimal(name, options={}, &block)
|
44
|
+
attr_numeric(:decimal, name, options, &block)
|
84
45
|
end
|
85
46
|
|
86
|
-
def attr_date(name, options={})
|
87
|
-
options
|
88
|
-
:validate => true
|
89
|
-
}.merge(options)
|
90
|
-
|
91
|
-
required = options[:required] == true
|
92
|
-
converter = Converters.converter_for(:date)
|
93
|
-
|
94
|
-
define_method name do
|
95
|
-
converter.call instance_variable_get("@#{name}")
|
96
|
-
end
|
97
|
-
|
98
|
-
validates name,
|
99
|
-
:allow_blank => !required,
|
100
|
-
:allow_nil => !required,
|
101
|
-
:timeliness => { :type => :date } if options[:validate]
|
102
|
-
|
103
|
-
attr_writer name
|
104
|
-
|
105
|
-
add_attr(name, :date, converter, options)
|
47
|
+
def attr_date(name, options={}, &block)
|
48
|
+
attr_date_or_time(:date, name, options, &block)
|
106
49
|
end
|
107
50
|
|
108
|
-
def attr_time(name, options={})
|
109
|
-
options
|
110
|
-
:validate => true
|
111
|
-
}.merge(options)
|
112
|
-
|
113
|
-
required = options[:required] == true
|
114
|
-
converter = Converters.converter_for(:time)
|
115
|
-
|
116
|
-
define_method name do
|
117
|
-
converter.call instance_variable_get("@#{name}")
|
118
|
-
end
|
119
|
-
|
120
|
-
validates name,
|
121
|
-
:allow_blank => !required,
|
122
|
-
:allow_nil => !required,
|
123
|
-
:timeliness => { :type => :time } if options[:validate]
|
124
|
-
|
125
|
-
attr_writer name
|
126
|
-
|
127
|
-
add_attr(name, :time, converter, options)
|
51
|
+
def attr_time(name, options={}, &block)
|
52
|
+
attr_date_or_time(:time, name, options, &block)
|
128
53
|
end
|
129
54
|
|
130
55
|
alias :attr_datetime :attr_time
|
131
56
|
|
132
|
-
def attr_boolean(name, options={})
|
57
|
+
def attr_boolean(name, options={}, &block)
|
133
58
|
options = {
|
134
59
|
:validate => true
|
135
60
|
}.merge(options)
|
136
61
|
|
137
62
|
required = options[:required] == true
|
138
|
-
converter = Converters.converter_for(:boolean)
|
139
|
-
|
140
|
-
define_method name do
|
141
|
-
converter.call instance_variable_get("@#{name}")
|
142
|
-
end
|
63
|
+
converter = block_given? ? block : Converters.converter_for(:boolean)
|
143
64
|
|
65
|
+
attr_reader_with_converter name, converter
|
144
66
|
alias_method "#{name}?", name
|
145
67
|
|
146
68
|
validates name,
|
@@ -153,18 +75,16 @@ module Riveter
|
|
153
75
|
add_attr(name, :boolean, converter, options)
|
154
76
|
end
|
155
77
|
|
156
|
-
def attr_enum(name, enum, options={})
|
78
|
+
def attr_enum(name, enum, options={}, &block)
|
157
79
|
options = {
|
158
80
|
:enum => enum,
|
159
81
|
:validate => true
|
160
82
|
}.merge(options)
|
161
83
|
|
162
84
|
required = options[:required] == true
|
163
|
-
converter = Converters.converter_for(:enum, options)
|
85
|
+
converter = block_given? ? block : Converters.converter_for(:enum, options)
|
164
86
|
|
165
|
-
|
166
|
-
converter.call instance_variable_get("@#{name}")
|
167
|
-
end
|
87
|
+
attr_reader_with_converter name, converter
|
168
88
|
|
169
89
|
# helpers
|
170
90
|
# TODO: would be nicer to emulate an association
|
@@ -197,7 +117,8 @@ module Riveter
|
|
197
117
|
converter = block_given? ? block : Converters.converter_for(data_type)
|
198
118
|
|
199
119
|
define_method name do
|
200
|
-
|
120
|
+
array = instance_variable_get("@#{name}") || []
|
121
|
+
array.map {|v| converter.call(v) }
|
201
122
|
end
|
202
123
|
|
203
124
|
attr_writer name
|
@@ -205,38 +126,61 @@ module Riveter
|
|
205
126
|
add_attr(name, :array, converter, options)
|
206
127
|
end
|
207
128
|
|
208
|
-
def attr_hash(name, options={})
|
209
|
-
|
129
|
+
def attr_hash(name, options={}, &block)
|
130
|
+
options = {
|
131
|
+
:data_type => :integer,
|
132
|
+
:validate => true
|
133
|
+
}.merge(options)
|
134
|
+
data_type = options.delete(:data_type)
|
210
135
|
|
211
|
-
|
212
|
-
# * need converter for values?
|
213
|
-
# * assumes the hash values are contiguous?
|
214
|
-
#
|
136
|
+
converter = block_given? ? block : Converters.converter_for(data_type)
|
215
137
|
|
216
|
-
|
138
|
+
define_method name do
|
139
|
+
hash = instance_variable_get("@#{name}") || {}
|
140
|
+
hash.merge(hash) {|k, v| converter.call(v) }
|
141
|
+
end
|
142
|
+
|
143
|
+
attr_writer name
|
217
144
|
|
218
145
|
add_attr(name, :hash, converter, options)
|
219
146
|
end
|
220
147
|
|
221
|
-
def attr_model(name,
|
148
|
+
def attr_model(name, model_or_scope, options={}, &block)
|
222
149
|
options = {
|
223
|
-
:model =>
|
150
|
+
:model => model_or_scope,
|
151
|
+
:validate => true,
|
152
|
+
:find_by => :id
|
224
153
|
}.merge(options)
|
225
|
-
converter = Converters.converter_for(:model, options)
|
226
154
|
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
155
|
+
required = options[:required] == true
|
156
|
+
converter = if block_given?
|
157
|
+
block
|
158
|
+
elsif model_or_scope.respond_to?(:find_by)
|
159
|
+
Converters.converter_for(:model, options)
|
160
|
+
else
|
161
|
+
Converters.converter_for(:object, options)
|
162
|
+
end
|
232
163
|
|
233
164
|
# helpers
|
234
165
|
define_singleton_method "#{name}_model" do
|
235
|
-
|
166
|
+
model_or_scope
|
236
167
|
end
|
237
168
|
|
238
|
-
|
239
|
-
|
169
|
+
attr_reader_with_converter name, converter
|
170
|
+
|
171
|
+
# only add validation of the model instance if supported
|
172
|
+
if model_or_scope.respond_to?(:valid?) && options[:validate]
|
173
|
+
|
174
|
+
validate :"validate_#{name}_model"
|
175
|
+
|
176
|
+
# need a "custom" associated validation since
|
177
|
+
# we don't reference active record...
|
178
|
+
define_method :"validate_#{name}_model" do
|
179
|
+
instance = self.send(name)
|
180
|
+
return unless required && instance.present?
|
181
|
+
self.errors.add(name, :invalid) unless instance.valid?
|
182
|
+
end
|
183
|
+
|
240
184
|
end
|
241
185
|
|
242
186
|
attr_writer name
|
@@ -244,19 +188,63 @@ module Riveter
|
|
244
188
|
add_attr(name, :model, converter, options)
|
245
189
|
end
|
246
190
|
|
247
|
-
def attr_object(name, options={})
|
248
|
-
converter = Converters.converter_for(:object, options)
|
191
|
+
def attr_object(name, options={}, &block)
|
192
|
+
converter = block_given? ? block : Converters.converter_for(:object, options)
|
193
|
+
|
194
|
+
attr_reader_with_converter name, converter
|
195
|
+
|
196
|
+
attr_writer name
|
197
|
+
|
198
|
+
add_attr(name, :object, converter, options)
|
199
|
+
end
|
200
|
+
|
201
|
+
private
|
249
202
|
|
203
|
+
def attr_reader_with_converter(name, converter)
|
250
204
|
define_method name do
|
251
205
|
converter.call instance_variable_get("@#{name}")
|
252
206
|
end
|
207
|
+
end
|
208
|
+
|
209
|
+
def attr_numeric(type, name, options={}, &block)
|
210
|
+
options = {
|
211
|
+
:validate => true
|
212
|
+
}.merge(options)
|
213
|
+
|
214
|
+
required = options[:required] == true
|
215
|
+
converter = block_given? ? block : Converters.converter_for(type)
|
216
|
+
|
217
|
+
attr_reader_with_converter name, converter
|
218
|
+
|
219
|
+
validates name,
|
220
|
+
:allow_blank => !required,
|
221
|
+
:allow_nil => !required,
|
222
|
+
:numericality => { :only => type } if options[:validate]
|
253
223
|
|
254
224
|
attr_writer name
|
255
225
|
|
256
|
-
add_attr(name,
|
226
|
+
add_attr(name, type, converter, options)
|
257
227
|
end
|
258
228
|
|
259
|
-
|
229
|
+
def attr_date_or_time(type, name, options={}, &block)
|
230
|
+
options = {
|
231
|
+
:validate => true
|
232
|
+
}.merge(options)
|
233
|
+
|
234
|
+
required = options[:required] == true
|
235
|
+
converter = block_given? ? block : Converters.converter_for(type)
|
236
|
+
|
237
|
+
attr_reader_with_converter name, converter
|
238
|
+
|
239
|
+
validates name,
|
240
|
+
:allow_blank => !required,
|
241
|
+
:allow_nil => !required,
|
242
|
+
:timeliness => { :type => type } if options[:validate]
|
243
|
+
|
244
|
+
attr_writer name
|
245
|
+
|
246
|
+
add_attr(name, type, converter, options)
|
247
|
+
end
|
260
248
|
|
261
249
|
def add_attr(name, type, converter, options={})
|
262
250
|
self._attributes[name] = attribute_info = AttributeInfo.new(name, type, converter, options)
|
@@ -266,7 +254,6 @@ module Riveter
|
|
266
254
|
end
|
267
255
|
|
268
256
|
class AttributeInfo < Struct.new(:name, :type, :converter, :options)
|
269
|
-
|
270
257
|
def required?
|
271
258
|
@required ||= (options[:required] == true)
|
272
259
|
end
|
@@ -278,7 +265,6 @@ module Riveter
|
|
278
265
|
def default?
|
279
266
|
!self.default.nil?
|
280
267
|
end
|
281
|
-
|
282
268
|
end
|
283
269
|
|
284
270
|
attr_reader :options
|
@@ -392,12 +378,9 @@ module Riveter
|
|
392
378
|
when :integer
|
393
379
|
lambda {|v| Integer(v) rescue v }
|
394
380
|
|
395
|
-
when :decimal
|
381
|
+
when :decimal, :float
|
396
382
|
lambda {|v| Float(v) rescue v }
|
397
383
|
|
398
|
-
when :hash
|
399
|
-
lambda {|v| v.to_hash rescue v }
|
400
|
-
|
401
384
|
when :date
|
402
385
|
lambda {|v| Date.parse(v) rescue v }
|
403
386
|
|
@@ -406,29 +389,15 @@ module Riveter
|
|
406
389
|
|
407
390
|
when :enum
|
408
391
|
lambda {|enum, v|
|
409
|
-
|
410
|
-
nil
|
411
|
-
else
|
412
|
-
# FIXME: assuming enum values are integers!
|
413
|
-
v = Integer(v) rescue v
|
414
|
-
(v.is_a?(String) || v.is_a?(Symbol)) ? enum.value_for(v) : v.to_i
|
415
|
-
end
|
392
|
+
enum.values.include?(v) ? v : enum.value_for(v)
|
416
393
|
}.curry[options[:enum]]
|
417
394
|
|
418
|
-
# FIXME:
|
419
|
-
# when :hash
|
420
|
-
# lambda {|v| v }
|
421
|
-
|
422
395
|
when :model
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
v
|
429
|
-
}.curry[options[:model]]
|
430
|
-
|
431
|
-
else
|
396
|
+
lambda {|model, attrib, v|
|
397
|
+
model.find_by(attrib => v)
|
398
|
+
}.curry[options[:model], options[:find_by]]
|
399
|
+
|
400
|
+
else # object etc...
|
432
401
|
lambda {|v| v }
|
433
402
|
end
|
434
403
|
end
|
data/lib/riveter/enumerated.rb
CHANGED
@@ -4,19 +4,19 @@ module Riveter
|
|
4
4
|
|
5
5
|
included do
|
6
6
|
|
7
|
-
const_names = self.constants(false)
|
8
|
-
const_values = const_names.collect {|name| self.const_get(name) }
|
7
|
+
const_names = self.constants(false).freeze
|
8
|
+
const_values = const_names.collect {|name| self.const_get(name) }.freeze
|
9
9
|
|
10
10
|
# create hashes for decoding names and values
|
11
11
|
const_value_lookup ||= const_names.inject({}) {|list, name|
|
12
12
|
list[name] = self.const_get(name)
|
13
13
|
list
|
14
|
-
}.with_indifferent_access
|
14
|
+
}.with_indifferent_access.freeze
|
15
15
|
|
16
16
|
const_name_lookup ||= const_names.inject({}) {|list, name|
|
17
17
|
list[self.const_get(name)] = name
|
18
18
|
list
|
19
|
-
}
|
19
|
+
}.freeze
|
20
20
|
|
21
21
|
# define helper methods
|
22
22
|
|
@@ -25,6 +25,11 @@ module Riveter
|
|
25
25
|
const_names
|
26
26
|
end
|
27
27
|
|
28
|
+
# returns an array of the constant names as symbols
|
29
|
+
define_singleton_method :values do
|
30
|
+
const_values
|
31
|
+
end
|
32
|
+
|
28
33
|
# returns an array of constant values
|
29
34
|
define_singleton_method :all do
|
30
35
|
const_values
|
@@ -64,7 +69,7 @@ module Riveter
|
|
64
69
|
|
65
70
|
# for use within form select inputs
|
66
71
|
define_singleton_method :collection do
|
67
|
-
self.const_get(:All).collect {|m| [m.human, m.
|
72
|
+
self.const_get(:All).collect {|m| [m.human, m.name] }
|
68
73
|
end
|
69
74
|
end
|
70
75
|
|
data/lib/riveter/version.rb
CHANGED
data/lib/riveter.rb
CHANGED
@@ -1,8 +1,12 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
shared_examples_for "an attribute" do |type, default_value,
|
3
|
+
shared_examples_for "an attribute" do |type, default_value, *args, &block|
|
4
4
|
options = args.extract_options!
|
5
5
|
|
6
|
+
# override these in "calling" specs
|
7
|
+
let(:assigned_value) { default_value }
|
8
|
+
let(:expected_value) { assigned_value }
|
9
|
+
|
6
10
|
describe type do
|
7
11
|
let(:name) { "a_#{type}" }
|
8
12
|
let(:instance) { subject.new() }
|
@@ -18,15 +22,15 @@ shared_examples_for "an attribute" do |type, default_value, another_value, *args
|
|
18
22
|
it { instance.should respond_to("#{name}=")}
|
19
23
|
|
20
24
|
it "assigns attribute in initializer" do
|
21
|
-
a = subject.new(name =>
|
22
|
-
a.send(name).should eq(
|
23
|
-
a.attributes[name].should eq(
|
25
|
+
a = subject.new(name => assigned_value)
|
26
|
+
a.send(name).should eq(expected_value)
|
27
|
+
a.attributes[name].should eq(expected_value)
|
24
28
|
end
|
25
29
|
|
26
30
|
it "assigns attribute" do
|
27
31
|
a = subject.new()
|
28
|
-
a.send("#{name}=",
|
29
|
-
a.attributes[name].should eq(
|
32
|
+
a.send("#{name}=", assigned_value)
|
33
|
+
a.attributes[name].should eq(expected_value)
|
30
34
|
end
|
31
35
|
end
|
32
36
|
|
@@ -45,6 +49,19 @@ shared_examples_for "an attribute" do |type, default_value, another_value, *args
|
|
45
49
|
|
46
50
|
it { instance.send(name).should eq(default_value)}
|
47
51
|
end
|
52
|
+
|
53
|
+
describe "with supplied converter block" do
|
54
|
+
let(:mock_block) { Mock::Block.new() }
|
55
|
+
|
56
|
+
before do
|
57
|
+
subject.send :"attr_#{type}", name, *args, options.merge(:default => default_value), &mock_block
|
58
|
+
end
|
59
|
+
|
60
|
+
it {
|
61
|
+
expect(mock_block).to receive(:call).at_least(:once)
|
62
|
+
instance.send(name)
|
63
|
+
}
|
64
|
+
end
|
48
65
|
end
|
49
66
|
end
|
50
67
|
|
@@ -24,11 +24,18 @@ describe Riveter::Attributes do
|
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
|
-
it_should_behave_like "an attribute", :string, 'A'
|
27
|
+
it_should_behave_like "an attribute", :string, 'A' do
|
28
|
+
let(:assigned_value) { 'B' }
|
29
|
+
end
|
30
|
+
|
31
|
+
it_should_behave_like "an attribute", :text, 'B' do
|
32
|
+
let(:assigned_value) { 'C' }
|
33
|
+
end
|
28
34
|
|
29
|
-
it_should_behave_like "an attribute", :
|
35
|
+
it_should_behave_like "an attribute", :integer, 1 do
|
36
|
+
let(:assigned_value) { '2' }
|
37
|
+
let(:expected_value) { 2 }
|
30
38
|
|
31
|
-
it_should_behave_like "an attribute", :integer, 1, 2 do
|
32
39
|
describe "additional" do
|
33
40
|
before do
|
34
41
|
subject.attr_integer :an_attribute
|
@@ -39,7 +46,10 @@ describe Riveter::Attributes do
|
|
39
46
|
end
|
40
47
|
end
|
41
48
|
|
42
|
-
it_should_behave_like "an attribute", :date, Date.new(2010, 1, 12)
|
49
|
+
it_should_behave_like "an attribute", :date, Date.new(2010, 1, 12) do
|
50
|
+
let(:assigned_value) { '2010-01-13' }
|
51
|
+
let(:expected_value) { Date.new(2010, 1, 13) }
|
52
|
+
|
43
53
|
describe "additional" do
|
44
54
|
before do
|
45
55
|
subject.attr_date :an_attribute
|
@@ -50,7 +60,10 @@ describe Riveter::Attributes do
|
|
50
60
|
end
|
51
61
|
end
|
52
62
|
|
53
|
-
it_should_behave_like "an attribute", :time, Time.new(2010, 1, 12, 8, 4, 45)
|
63
|
+
it_should_behave_like "an attribute", :time, Time.new(2010, 1, 12, 8, 4, 45) do
|
64
|
+
let(:assigned_value) { '2010-01-12 08:04:12' }
|
65
|
+
let(:expected_value) { Time.new(2010, 1, 12, 8, 4, 12) }
|
66
|
+
|
54
67
|
describe "additional" do
|
55
68
|
before do
|
56
69
|
subject.attr_time :an_attribute
|
@@ -61,7 +74,10 @@ describe Riveter::Attributes do
|
|
61
74
|
end
|
62
75
|
end
|
63
76
|
|
64
|
-
it_should_behave_like "an attribute", :boolean, true
|
77
|
+
it_should_behave_like "an attribute", :boolean, true do
|
78
|
+
let(:assigned_value) { '0' }
|
79
|
+
let(:expected_value) { false }
|
80
|
+
|
65
81
|
describe "additional" do
|
66
82
|
before do
|
67
83
|
subject.attr_boolean :an_attribute
|
@@ -72,10 +88,13 @@ describe Riveter::Attributes do
|
|
72
88
|
end
|
73
89
|
end
|
74
90
|
|
75
|
-
it_should_behave_like "an attribute", :enum, TestEnum::Member1, TestEnum
|
91
|
+
it_should_behave_like "an attribute", :enum, TestEnum::Member1, TestEnum do
|
92
|
+
let(:assigned_value) { 'Member2' }
|
93
|
+
let(:expected_value) { TestEnum::Member2 }
|
94
|
+
|
76
95
|
describe "additional" do
|
77
96
|
before do
|
78
|
-
subject.attr_enum :product_type, TestEnum
|
97
|
+
subject.attr_enum :product_type, TestEnum, :required => true
|
79
98
|
end
|
80
99
|
let(:instance) { subject.new() }
|
81
100
|
|
@@ -88,11 +107,24 @@ describe Riveter::Attributes do
|
|
88
107
|
end
|
89
108
|
end
|
90
109
|
|
91
|
-
it_should_behave_like "an attribute", :array, [1, 2, 3]
|
110
|
+
it_should_behave_like "an attribute", :array, [1, 2, 3] do
|
111
|
+
let(:assigned_value) { %w(5 6 7) }
|
112
|
+
let(:expected_value) { [5, 6, 7] }
|
113
|
+
end
|
114
|
+
|
115
|
+
it_should_behave_like "an attribute", :hash, {:a => :b} do
|
116
|
+
let(:assigned_value) { {:c => '1', :d => '2'} }
|
117
|
+
let(:expected_value) { {:c => 1, :d => 2} }
|
118
|
+
end
|
92
119
|
|
93
|
-
it_should_behave_like "an attribute", :
|
120
|
+
it_should_behave_like "an attribute", :model, 1, TestModel do
|
121
|
+
|
122
|
+
before do
|
123
|
+
allow_any_instance_of(TestModel).to receive(:find_by) { self }
|
124
|
+
end
|
125
|
+
|
126
|
+
let(:assigned_value) { TestModel.new() }
|
94
127
|
|
95
|
-
it_should_behave_like "an attribute", :model, TestModel.new(), TestModel.new(), TestModel do
|
96
128
|
describe "additional" do
|
97
129
|
before do
|
98
130
|
subject.attr_model :product, TestModel
|
@@ -103,7 +135,9 @@ describe Riveter::Attributes do
|
|
103
135
|
end
|
104
136
|
end
|
105
137
|
|
106
|
-
it_should_behave_like "an attribute", :object, Object.new()
|
138
|
+
it_should_behave_like "an attribute", :object, Object.new() do
|
139
|
+
let(:assigned_value) { Object.new() }
|
140
|
+
end
|
107
141
|
end
|
108
142
|
|
109
143
|
describe "instance" do
|
data/spec/riveter/query_spec.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,237 +1,237 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: riveter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Stefano
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-06-
|
11
|
+
date: 2014-06-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: railties
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 4.0.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 4.0.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: actionpack
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: activemodel
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: activerecord
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: activesupport
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '0'
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: validates_timeliness
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '0'
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: bundler
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- - ~>
|
101
|
+
- - "~>"
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: '1.5'
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- - ~>
|
108
|
+
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '1.5'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: rake
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
|
-
- -
|
115
|
+
- - ">="
|
116
116
|
- !ruby/object:Gem::Version
|
117
117
|
version: '0'
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
|
-
- -
|
122
|
+
- - ">="
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '0'
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: rails
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
|
-
- - ~>
|
129
|
+
- - "~>"
|
130
130
|
- !ruby/object:Gem::Version
|
131
131
|
version: 4.0.5
|
132
132
|
type: :development
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
|
-
- - ~>
|
136
|
+
- - "~>"
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: 4.0.5
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
140
|
name: haml-rails
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
142
142
|
requirements:
|
143
|
-
- -
|
143
|
+
- - ">="
|
144
144
|
- !ruby/object:Gem::Version
|
145
145
|
version: '0'
|
146
146
|
type: :development
|
147
147
|
prerelease: false
|
148
148
|
version_requirements: !ruby/object:Gem::Requirement
|
149
149
|
requirements:
|
150
|
-
- -
|
150
|
+
- - ">="
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: '0'
|
153
153
|
- !ruby/object:Gem::Dependency
|
154
154
|
name: rspec-rails
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|
156
156
|
requirements:
|
157
|
-
- -
|
157
|
+
- - ">="
|
158
158
|
- !ruby/object:Gem::Version
|
159
159
|
version: '0'
|
160
160
|
type: :development
|
161
161
|
prerelease: false
|
162
162
|
version_requirements: !ruby/object:Gem::Requirement
|
163
163
|
requirements:
|
164
|
-
- -
|
164
|
+
- - ">="
|
165
165
|
- !ruby/object:Gem::Version
|
166
166
|
version: '0'
|
167
167
|
- !ruby/object:Gem::Dependency
|
168
168
|
name: shoulda-matchers
|
169
169
|
requirement: !ruby/object:Gem::Requirement
|
170
170
|
requirements:
|
171
|
-
- - ~>
|
171
|
+
- - "~>"
|
172
172
|
- !ruby/object:Gem::Version
|
173
173
|
version: 2.6.1
|
174
174
|
type: :development
|
175
175
|
prerelease: false
|
176
176
|
version_requirements: !ruby/object:Gem::Requirement
|
177
177
|
requirements:
|
178
|
-
- - ~>
|
178
|
+
- - "~>"
|
179
179
|
- !ruby/object:Gem::Version
|
180
180
|
version: 2.6.1
|
181
181
|
- !ruby/object:Gem::Dependency
|
182
182
|
name: ammeter
|
183
183
|
requirement: !ruby/object:Gem::Requirement
|
184
184
|
requirements:
|
185
|
-
- -
|
185
|
+
- - ">="
|
186
186
|
- !ruby/object:Gem::Version
|
187
187
|
version: '0'
|
188
188
|
type: :development
|
189
189
|
prerelease: false
|
190
190
|
version_requirements: !ruby/object:Gem::Requirement
|
191
191
|
requirements:
|
192
|
-
- -
|
192
|
+
- - ">="
|
193
193
|
- !ruby/object:Gem::Version
|
194
194
|
version: '0'
|
195
195
|
- !ruby/object:Gem::Dependency
|
196
196
|
name: simplecov
|
197
197
|
requirement: !ruby/object:Gem::Requirement
|
198
198
|
requirements:
|
199
|
-
- - ~>
|
199
|
+
- - "~>"
|
200
200
|
- !ruby/object:Gem::Version
|
201
201
|
version: 0.7.1
|
202
202
|
type: :development
|
203
203
|
prerelease: false
|
204
204
|
version_requirements: !ruby/object:Gem::Requirement
|
205
205
|
requirements:
|
206
|
-
- - ~>
|
206
|
+
- - "~>"
|
207
207
|
- !ruby/object:Gem::Version
|
208
208
|
version: 0.7.1
|
209
209
|
- !ruby/object:Gem::Dependency
|
210
210
|
name: pry
|
211
211
|
requirement: !ruby/object:Gem::Requirement
|
212
212
|
requirements:
|
213
|
-
- -
|
213
|
+
- - ">="
|
214
214
|
- !ruby/object:Gem::Version
|
215
215
|
version: '0'
|
216
216
|
type: :development
|
217
217
|
prerelease: false
|
218
218
|
version_requirements: !ruby/object:Gem::Requirement
|
219
219
|
requirements:
|
220
|
-
- -
|
220
|
+
- - ">="
|
221
221
|
- !ruby/object:Gem::Version
|
222
222
|
version: '0'
|
223
223
|
- !ruby/object:Gem::Dependency
|
224
224
|
name: pry-byebug
|
225
225
|
requirement: !ruby/object:Gem::Requirement
|
226
226
|
requirements:
|
227
|
-
- -
|
227
|
+
- - ">="
|
228
228
|
- !ruby/object:Gem::Version
|
229
229
|
version: '0'
|
230
230
|
type: :development
|
231
231
|
prerelease: false
|
232
232
|
version_requirements: !ruby/object:Gem::Requirement
|
233
233
|
requirements:
|
234
|
-
- -
|
234
|
+
- - ">="
|
235
235
|
- !ruby/object:Gem::Version
|
236
236
|
version: '0'
|
237
237
|
description: Provides several useful patterns, such as Enumerated, Command, Enquiry,
|
@@ -243,11 +243,11 @@ executables: []
|
|
243
243
|
extensions: []
|
244
244
|
extra_rdoc_files: []
|
245
245
|
files:
|
246
|
-
- .gitignore
|
247
|
-
- .rspec
|
248
|
-
- .ruby-gemset
|
249
|
-
- .ruby-version
|
250
|
-
- .travis.yml
|
246
|
+
- ".gitignore"
|
247
|
+
- ".rspec"
|
248
|
+
- ".ruby-gemset"
|
249
|
+
- ".ruby-version"
|
250
|
+
- ".travis.yml"
|
251
251
|
- Gemfile
|
252
252
|
- Gemfile.lock
|
253
253
|
- LICENSE.txt
|
@@ -448,12 +448,12 @@ require_paths:
|
|
448
448
|
- lib
|
449
449
|
required_ruby_version: !ruby/object:Gem::Requirement
|
450
450
|
requirements:
|
451
|
-
- -
|
451
|
+
- - ">="
|
452
452
|
- !ruby/object:Gem::Version
|
453
453
|
version: 2.0.0
|
454
454
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
455
455
|
requirements:
|
456
|
-
- -
|
456
|
+
- - ">="
|
457
457
|
- !ruby/object:Gem::Version
|
458
458
|
version: '0'
|
459
459
|
requirements: []
|