riveter 0.0.4 → 0.0.5
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 +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: []
|