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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: acd39fff47f7a5cfa9e42f7b225fcfb3885e32a6
4
- data.tar.gz: e8bac14665796634ca45a768fb08df5bdd13e09c
3
+ metadata.gz: a52a04773b1e808eeebfdee8b29a954203dbc758
4
+ data.tar.gz: 0595aaa5773b218469790749d589af3173bb0b08
5
5
  SHA512:
6
- metadata.gz: b95fd9fdf90ac06d813d8b6bc5734fbe0708d0d912f5b213ed5b2167affc7459ec7ffd275739a600dba3607d8970577c643a3d11c016e03c2fdc6d7c4bc77c0b
7
- data.tar.gz: 117eef9c7a39a13ec49b0902512341fab0bb5825332b2954a9574b9c204d11bb323647aa36cab354c42bfd9d7dad93b8321228c3c8ebd0f801b15035ff31fe35
6
+ metadata.gz: 0d206c54bc7973546c6bf450ac831637364468f7a797f239dc16fe7f1e0ab8fb28dfdb2c8b8f5ea51646bc6998f50b1be13629a7b6cb311efaf39d423e0291a6
7
+ data.tar.gz: f08fc40af6d8888e4478cd99ae6691e900294c433f8a123a75bf71b5b13d7065e839b6c1176f3f15c76588c32e021e847a91d6c65928d7f12ccfa38786a47092
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- riveter (0.0.4)
4
+ riveter (0.0.5)
5
5
  actionpack
6
6
  activemodel
7
7
  activerecord
@@ -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
- define_method name do
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
- (instance_variable_get("@#{name}") || []).map {|item| converter.call(item) }
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
- converter = Converters.converter_for(:hash, options)
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
- # FIXME:
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
- attr_accessor name
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, model, options={})
148
+ def attr_model(name, model_or_scope, options={}, &block)
222
149
  options = {
223
- :model => 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
- # FIXME:
228
- # * need converter for values?
229
- # * define methods to get the actual model instance?
230
- # * assign model instance directly?
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
- model
166
+ model_or_scope
236
167
  end
237
168
 
238
- define_method name do
239
- converter.call instance_variable_get("@#{name}")
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, :object, converter, options)
226
+ add_attr(name, type, converter, options)
257
227
  end
258
228
 
259
- private
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
- if v.blank? || v.nil?
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
- # FIXME:
424
- lambda {|model, v|
425
- # assuming v is an ID
426
- # model.find(v)
427
- # FIXME
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
@@ -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.value] }
72
+ self.const_get(:All).collect {|m| [m.human, m.name] }
68
73
  end
69
74
  end
70
75
 
@@ -1,3 +1,3 @@
1
1
  module Riveter
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
data/lib/riveter.rb CHANGED
@@ -7,7 +7,6 @@ require 'validates_timeliness'
7
7
 
8
8
  require 'active_support/core_ext'
9
9
  require 'active_support/inflector'
10
- require 'active_support/inflector'
11
10
 
12
11
  module Riveter
13
12
  autoload :AttributeDefaultValues, 'riveter/attribute_default_values'
@@ -1,8 +1,12 @@
1
1
  require 'spec_helper'
2
2
 
3
- shared_examples_for "an attribute" do |type, default_value, another_value, *args, &block|
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 => another_value)
22
- a.send(name).should eq(another_value)
23
- a.attributes[name].should eq(another_value)
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}=", another_value)
29
- a.attributes[name].should eq(another_value)
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', 'B'
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", :text, 'B', 'C'
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), Date.new(2010, 1, 13) do
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), Time.new(2010, 1, 12, 8, 4, 12) do
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, false do
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::Member2, TestEnum do
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], [5, 6]
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", :hash, {:a => :b}, {:c => :d}
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(), 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
@@ -1,5 +1,4 @@
1
1
  require 'spec_helper'
2
- require 'riveter/spec_helper'
3
2
  require 'riveter/core_extensions'
4
3
 
5
4
  describe Riveter::CoreExtensions do
@@ -1,5 +1,4 @@
1
1
  require 'spec_helper'
2
- require 'riveter/spec_helper'
3
2
 
4
3
  describe Riveter::Query do
5
4
  describe "#initialize" do
@@ -1,5 +1,4 @@
1
1
  require 'spec_helper'
2
- require 'riveter/spec_helper'
3
2
 
4
3
  describe "Spec Helper" do
5
4
  describe Mock::Block do
data/spec/spec_helper.rb CHANGED
@@ -2,6 +2,7 @@ require 'bundler/setup'
2
2
  Bundler.setup
3
3
 
4
4
  require 'riveter'
5
+ require 'riveter/spec_helper'
5
6
 
6
7
  # NB: sync these requires from the Railtie
7
8
  require 'riveter/form_builder_extensions'
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
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-12 00:00:00.000000000 Z
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: []