command_model 1.2.0 → 1.3.0

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
- SHA1:
3
- metadata.gz: 9c234ff1d2187845e8ddfb8519dea6b8720ba3f1
4
- data.tar.gz: f4cedf7d82ad147e6fbb03c78dd726adad00e60a
2
+ SHA256:
3
+ metadata.gz: 8af8e3bf9074e89aafc9b7e880eb7c99780a9189f822a6a030c8867a3429b0c7
4
+ data.tar.gz: 225ab899fa949b25dcbda27e9dac739227f8992d68ea0109afa99e36726f08bd
5
5
  SHA512:
6
- metadata.gz: 290dee4afb160dedcc680b854089fb9ffc287a78253716c28b748e643f32a672fc88efa2e4a5e368e72eb5e6c30e10dd9ed28c3871f06671fd64e7906760d630
7
- data.tar.gz: 71a368f028369951e5df902ee599dd5df37f17c14bcbc412496040a043b8a47c9073dd0f8b38cf71024f9e41dbd384f5af624f06ae762ad256dc4edd8f0ef2f7
6
+ metadata.gz: 1d01d13237af6fda7df4e9002a71fb029558bd1bc114dc7bdfa1f54f288f80fdf76e744550f0a49292f2bd94fd9f13cf9c65870ab0be75af23f041ff148ae8a3
7
+ data.tar.gz: 43a0c62d7d985aff56a7875c84eafb862e9b92e40e0728ae67e468021590e5e4cdb3f6454d05cd27647432312e5bb197ed259d7b0c640f602715b1d0d7ff801b
data/.travis.yml CHANGED
@@ -1,8 +1,8 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.0.0
4
- - 1.9.3
3
+ - 2.5.0
4
+ - 2.4.3
5
5
  gemfile:
6
- - gemfiles/3.2.gemfile
7
- - gemfiles/4.0.gemfile
8
- - gemfiles/4.1.gemfile
6
+ - gemfiles/4.2.gemfile
7
+ - gemfiles/5.0.gemfile
8
+ - gemfiles/5.1.gemfile
data/README.md CHANGED
@@ -1,3 +1,5 @@
1
+ [![Build Status](https://travis-ci.org/jackc/command_model.svg)](https://travis-ci.org/jackc/command_model)
2
+
1
3
  # CommandModel
2
4
 
3
5
  CommandModel is an ActiveModel based class that encapsulates the user
@@ -13,15 +15,15 @@ usually have richer behavior than can be represented with a typical
13
15
  ActiveRecord style update_attributes.
14
16
 
15
17
  # yuck!
16
- account.update_attributes balance: account.balance - 50
17
-
18
+ account.update_attributes balance: account.balance - 50
19
+
18
20
  # much better
19
21
  account.withdraw amount: 50
20
-
22
+
21
23
  But there are multiple complications with the OO approach. How do we integrate
22
24
  Rails style validations? How are user-supplied strings typecast? How do we
23
- know if the command succeeded? CommandModel solves these problems.
24
-
25
+ know if the command succeeded? CommandModel solves these problems.
26
+
25
27
  ## Installation
26
28
 
27
29
  Add this line to your application's Gemfile:
@@ -47,7 +49,7 @@ request.
47
49
  presence: true,
48
50
  numericality: { greater_than: 0, less_than_or_equal_to: 500 }
49
51
  end
50
-
52
+
51
53
  Create the method to run the command. This method should instantiate and call a new command object. It must pass call
52
54
  a block that actually does the work. The block will only be called if
53
55
  the validations in the command object pass. The block is free to do
@@ -57,7 +59,7 @@ failed. Finally, the call method will return self.
57
59
 
58
60
  class Account
59
61
  # ...
60
-
62
+
61
63
  def withdraw(args)
62
64
  WithdrawCommand.new(args).call do |command|
63
65
  if balance >= command.amount
@@ -67,14 +69,14 @@ failed. Finally, the call method will return self.
67
69
  end
68
70
  end
69
71
  end
70
-
72
+
71
73
  # ...
72
74
  end
73
-
75
+
74
76
  Use example:
75
77
 
76
78
  response = account.withdraw amount: 50
77
-
79
+
78
80
  if response.success?
79
81
  puts "Success!"
80
82
  else
@@ -128,6 +130,10 @@ integration of Rails form helpers and validations with CommandModel.
128
130
 
129
131
  ## Version History
130
132
 
133
+ * 1.3 - February 13, 2018
134
+ * Add decimal type cast
135
+ * 1.2 - October 24, 2014
136
+ * Suport Rails 4
131
137
  * 1.1 - November 13, 2012
132
138
  * Updated documentation and example application
133
139
  * Refactored Model to support internal domain logic easier with #call and #execute.
@@ -15,12 +15,12 @@ Gem::Specification.new do |gem|
15
15
  gem.require_paths = ["lib"]
16
16
  gem.version = CommandModel::VERSION
17
17
 
18
- gem.add_dependency 'activemodel', "> 3.2"
18
+ gem.add_dependency 'activemodel', "> 4.2"
19
19
 
20
- gem.add_development_dependency 'rake', "~> 10.1.0"
21
- gem.add_development_dependency 'rspec', "~> 2.11.0"
22
- gem.add_development_dependency 'guard', "~> 1.5.3"
23
- gem.add_development_dependency 'guard-rspec', "~> 2.1.1"
24
- gem.add_development_dependency 'rb-fsevent', '~> 0.9.1'
20
+ gem.add_development_dependency 'rake', "~> 11.3.0"
21
+ gem.add_development_dependency 'rspec', "~> 2.14.1"
22
+ gem.add_development_dependency 'guard', "~> 2.14.2"
23
+ gem.add_development_dependency 'guard-rspec', "~> 3.1.0"
24
+ gem.add_development_dependency 'rb-fsevent', '~> 0.10.2'
25
25
 
26
26
  end
@@ -1,5 +1,5 @@
1
1
  source "https://rubygems.org"
2
2
 
3
- gem "activemodel", "~> 4.0.0"
3
+ gem "activemodel", "~> 4.2.0"
4
4
 
5
5
  gemspec :path=>"../"
@@ -1,5 +1,5 @@
1
1
  source "https://rubygems.org"
2
2
 
3
- gem "activemodel", "~> 4.1.0"
3
+ gem "activemodel", "~> 5.0.0"
4
4
 
5
5
  gemspec :path=>"../"
@@ -1,5 +1,5 @@
1
1
  source "https://rubygems.org"
2
2
 
3
- gem "activemodel", "~> 3.2.13"
3
+ gem "activemodel", "~> 5.1.0"
4
4
 
5
5
  gemspec :path=>"../"
@@ -5,7 +5,7 @@ module CommandModel
5
5
  extend ActiveModel::Naming
6
6
 
7
7
  Parameter = Struct.new(:name, :typecast, :validations)
8
-
8
+
9
9
  # Parameter requires one or more attributes as its first parameter(s).
10
10
  # It accepts an options hash as its last parameter.
11
11
  #
@@ -32,7 +32,7 @@ module CommandModel
32
32
 
33
33
  args.each do |name|
34
34
  attr_reader name
35
-
35
+
36
36
  if typecast
37
37
  attr_typecasting_writer name, typecast
38
38
  else
@@ -47,10 +47,10 @@ module CommandModel
47
47
  def self.parameters
48
48
  @parameters ||= []
49
49
  end
50
-
50
+
51
51
  def self.attr_typecasting_writer(name, target_type) #:nodoc
52
52
  eval <<-END_EVAL
53
- def #{name}=(value)
53
+ public def #{name}=(value)
54
54
  typecast_value = typecast_#{target_type}(value)
55
55
  if typecast_value
56
56
  @typecast_errors.delete("#{name}")
@@ -59,12 +59,12 @@ module CommandModel
59
59
  @typecast_errors["#{name}"] = "#{target_type}"
60
60
  @#{name} = value
61
61
  end
62
-
62
+
63
63
  @#{name}
64
64
  end
65
65
  END_EVAL
66
66
  end
67
-
67
+
68
68
  # Executes a block of code if the command model is valid.
69
69
  #
70
70
  # Accepts either a command model or a hash of attributes with which to
@@ -85,10 +85,10 @@ module CommandModel
85
85
  else
86
86
  new(attributes_or_command)
87
87
  end
88
-
88
+
89
89
  command.call &block
90
90
  end
91
-
91
+
92
92
  # Quickly create a successful command object. This is used when the
93
93
  # command takes no parameters to want to take advantage of the success?
94
94
  # and errors properties of a command object.
@@ -97,7 +97,7 @@ module CommandModel
97
97
  instance.execution_attempted!
98
98
  end
99
99
  end
100
-
100
+
101
101
  # Quickly create a failed command object. Requires one parameter with
102
102
  # the description of what went wrong. This is used when the
103
103
  # command takes no parameters to want to take advantage of the success?
@@ -108,7 +108,7 @@ module CommandModel
108
108
  instance.errors.add(:base, error)
109
109
  end
110
110
  end
111
-
111
+
112
112
  # Accepts a parameters hash or another of the same class. If another
113
113
  # instance of the same class is passed in then the parameters are copied
114
114
  # to the new object.
@@ -139,12 +139,12 @@ module CommandModel
139
139
  def execution_attempted! #:nodoc:
140
140
  @execution_attempted = true
141
141
  end
142
-
142
+
143
143
  # True if execution has been attempted on this command
144
144
  def execution_attempted?
145
145
  @execution_attempted
146
146
  end
147
-
147
+
148
148
  # Command has been executed without errors
149
149
  def success?
150
150
  execution_attempted? && errors.empty?
@@ -164,15 +164,15 @@ module CommandModel
164
164
  send "#{k}=", v
165
165
  end
166
166
  end
167
-
167
+
168
168
  #:nodoc:
169
169
  def persisted?
170
170
  false
171
171
  end
172
-
172
+
173
173
  private
174
174
  def extract_parameters_from_hash_or_instance(hash_or_instance)
175
- if hash_or_instance.respond_to?(:parameters)
175
+ if hash_or_instance.respond_to?(:parameters)
176
176
  hash_or_instance.parameters
177
177
  else
178
178
  hash_or_instance
@@ -182,11 +182,15 @@ module CommandModel
182
182
  def typecast_integer(value)
183
183
  Integer(value) rescue nil
184
184
  end
185
-
185
+
186
+ def typecast_decimal(value)
187
+ BigDecimal(value, 16) rescue nil
188
+ end
189
+
186
190
  def typecast_float(value)
187
191
  Float(value) rescue nil
188
192
  end
189
-
193
+
190
194
  def typecast_date(value)
191
195
  return value if value.kind_of? Date
192
196
  value = value.to_s
@@ -196,7 +200,7 @@ module CommandModel
196
200
  Date.strptime(value, "%m/%d/%Y") rescue nil
197
201
  end
198
202
  end
199
-
203
+
200
204
  def include_typecasting_errors
201
205
  @typecast_errors.each do |attribute, target_type|
202
206
  unless errors[attribute].present?
@@ -204,7 +208,7 @@ module CommandModel
204
208
  end
205
209
  end
206
210
  end
207
-
211
+
208
212
  # overriding this to make typecasting errors run at the end so they will
209
213
  # not run if there is already an error on the column. Otherwise, when
210
214
  # typecasting to an integer and using validates_numericality_of two
@@ -1,3 +1,3 @@
1
1
  module CommandModel
2
- VERSION = "1.2.0"
2
+ VERSION = "1.3.0"
3
3
  end
data/spec/model_spec.rb CHANGED
@@ -8,27 +8,27 @@ end
8
8
  describe CommandModel::Model do
9
9
  let(:example_command) { ExampleCommand.new :name => "John" }
10
10
  let(:invalid_example_command) { ExampleCommand.new }
11
-
11
+
12
12
  describe "self.parameter" do
13
13
  let(:klass) { Class.new(CommandModel::Model) }
14
-
14
+
15
15
  it "creates an attribute reader" do
16
16
  klass.parameter :foo
17
17
  klass.new.methods.should include(:foo)
18
18
  end
19
-
19
+
20
20
  it "creates an attribute writer" do
21
21
  klass.parameter :foo
22
22
  klass.new.methods.should include(:foo=)
23
23
  end
24
-
24
+
25
25
  it "round trips values through writing and reading" do
26
26
  klass.parameter :foo
27
27
  instance = klass.new
28
28
  instance.foo = 42
29
29
  instance.foo.should eq(42)
30
30
  end
31
-
31
+
32
32
  it "accepts multiple attributes" do
33
33
  klass.parameter :foo, :bar
34
34
  klass.new.methods.should include(:foo)
@@ -36,7 +36,7 @@ describe CommandModel::Model do
36
36
  klass.new.methods.should include(:bar)
37
37
  klass.new.methods.should include(:bar=)
38
38
  end
39
-
39
+
40
40
  it "accepts multiple attributes with typecast" do
41
41
  klass.parameter :foo, :bar, :typecast => "integer"
42
42
  klass.new.methods.should include(:foo)
@@ -44,7 +44,7 @@ describe CommandModel::Model do
44
44
  klass.new.methods.should include(:bar)
45
45
  klass.new.methods.should include(:bar=)
46
46
  end
47
-
47
+
48
48
  it "accepts multiple attributes with validation" do
49
49
  klass.parameter :foo, :bar, :presence => true
50
50
  klass.new.methods.should include(:foo)
@@ -52,7 +52,7 @@ describe CommandModel::Model do
52
52
  klass.new.methods.should include(:bar)
53
53
  klass.new.methods.should include(:bar=)
54
54
  end
55
-
55
+
56
56
  it "creates typecasting writer" do
57
57
  klass.send(:define_method, :typecast_42) { |value| 42 }
58
58
  klass.parameter :answer, :typecast => "42"
@@ -60,12 +60,12 @@ describe CommandModel::Model do
60
60
  instance.answer = "foo"
61
61
  instance.answer.should eq(42)
62
62
  end
63
-
63
+
64
64
  it "creates validations" do
65
65
  instance = ExampleCommand.new
66
66
  instance.should_not be_valid
67
67
  instance.errors[:name].should be_present
68
- end
68
+ end
69
69
  end
70
70
 
71
71
  describe "self.parameters" do
@@ -87,44 +87,44 @@ describe CommandModel::Model do
87
87
  it "accepts object of same kind and returns it" do
88
88
  ExampleCommand.execute(example_command) {}.should eq(example_command)
89
89
  end
90
-
90
+
91
91
  it "accepts attributes, creates object, and returns it" do
92
92
  c = ExampleCommand.execute(:name => "John") {}
93
93
  c.should be_kind_of(ExampleCommand)
94
94
  c.name.should eq("John")
95
95
  end
96
-
96
+
97
97
  it "calls passed block when there are no validation errors on Model" do
98
98
  block_ran = false
99
99
  ExampleCommand.execute(example_command) { block_ran = true }
100
- block_ran.should eq(true)
100
+ block_ran.should eq(true)
101
101
  end
102
-
102
+
103
103
  it "does not call passed block when there are validation errors on Model" do
104
104
  block_ran = false
105
105
  ExampleCommand.execute(invalid_example_command) { block_ran = true }
106
106
  block_ran.should eq(false)
107
107
  end
108
-
108
+
109
109
  it "records execution attempt when there not no validation errors on Model" do
110
110
  ExampleCommand.execute(example_command) {}
111
111
  example_command.execution_attempted?.should eq(true)
112
112
  end
113
-
113
+
114
114
  it "records execution attempt when there are validation errors on Model" do
115
115
  ExampleCommand.execute(invalid_example_command) {}
116
116
  invalid_example_command.execution_attempted?.should eq(true)
117
117
  end
118
-
118
+
119
119
  it "is not successful if block adds error to Model" do
120
120
  ExampleCommand.execute(example_command) do |command|
121
121
  command.errors.add :base, "foo"
122
122
  end
123
-
123
+
124
124
  example_command.should_not be_success
125
125
  end
126
126
  end
127
-
127
+
128
128
  describe "self.success" do
129
129
  it "creates a successful command model" do
130
130
  response = ExampleCommand.success
@@ -132,7 +132,7 @@ describe CommandModel::Model do
132
132
  response.should be_success
133
133
  end
134
134
  end
135
-
135
+
136
136
  describe "self.failure" do
137
137
  it "creates a command model with an error" do
138
138
  response = ExampleCommand.failure "something broke"
@@ -141,7 +141,7 @@ describe CommandModel::Model do
141
141
  response.errors[:base].should eq(["something broke"])
142
142
  end
143
143
  end
144
-
144
+
145
145
 
146
146
  describe "initialize" do
147
147
  it "assigns parameters from hash" do
@@ -190,25 +190,25 @@ describe CommandModel::Model do
190
190
  expect(block_arg).to eq(example_command)
191
191
  end
192
192
  end
193
-
193
+
194
194
  describe "execution_attempted!" do
195
195
  it "sets execution_attempted? to true" do
196
196
  example_command.execution_attempted!
197
197
  example_command.execution_attempted?.should eq(true)
198
198
  end
199
199
  end
200
-
200
+
201
201
  describe "success?" do
202
202
  it "is false before execution" do
203
203
  example_command.should_not be_success
204
204
  end
205
-
205
+
206
206
  it "is false after execution with errors" do
207
207
  example_command.execution_attempted!
208
208
  example_command.errors.add :base, "foo"
209
209
  example_command.success?.should eq(false)
210
210
  end
211
-
211
+
212
212
  it "is true after execution without errors" do
213
213
  example_command.execution_attempted!
214
214
  example_command.success?.should eq(true)
@@ -240,12 +240,12 @@ describe CommandModel::Model do
240
240
  expect(example_command.title).to eq("Boss")
241
241
  end
242
242
  end
243
-
243
+
244
244
  describe "typecast_integer" do
245
245
  it "casts to integer when valid string" do
246
246
  example_command.send(:typecast_integer, "42").should eq(42)
247
247
  end
248
-
248
+
249
249
  it "returns nil when invalid string" do
250
250
  example_command.send(:typecast_integer, "asdf").should be_nil
251
251
  example_command.send(:typecast_integer, nil).should be_nil
@@ -253,32 +253,53 @@ describe CommandModel::Model do
253
253
  example_command.send(:typecast_integer, "0.1").should be_nil
254
254
  end
255
255
  end
256
-
256
+
257
257
  describe "typecast_float" do
258
258
  it "casts to float when valid string" do
259
259
  example_command.send(:typecast_float, "42").should eq(42.0)
260
260
  example_command.send(:typecast_float, "42.5").should eq(42.5)
261
261
  end
262
-
262
+
263
263
  it "returns nil when invalid string" do
264
264
  example_command.send(:typecast_float, "asdf").should be_nil
265
265
  example_command.send(:typecast_float, nil).should be_nil
266
266
  example_command.send(:typecast_float, "").should be_nil
267
267
  end
268
268
  end
269
-
269
+
270
+ describe "typecast_decimal" do
271
+ it "converts to BigDecimal when valid string" do
272
+ example_command.send(:typecast_decimal, "42").should eq(BigDecimal("42"))
273
+ example_command.send(:typecast_decimal, "42.5").should eq(BigDecimal("42.5"))
274
+ end
275
+
276
+ it "converts to BigDecimal when float" do
277
+ example_command.send(:typecast_decimal, 42.0).should eq(BigDecimal("42"))
278
+ end
279
+
280
+ it "converts to BigDecimal when int" do
281
+ example_command.send(:typecast_decimal, 42).should eq(BigDecimal("42"))
282
+ end
283
+
284
+ it "returns nil when invalid string" do
285
+ example_command.send(:typecast_decimal, "asdf").should be_nil
286
+ example_command.send(:typecast_decimal, nil).should be_nil
287
+ example_command.send(:typecast_decimal, "").should be_nil
288
+ end
289
+ end
290
+
270
291
  describe "typecast_date" do
271
292
  it "casts to date when valid string" do
272
293
  example_command.send(:typecast_date, "01/01/2000").should eq(Date.civil(2000,1,1))
273
294
  example_command.send(:typecast_date, "1/1/2000").should eq(Date.civil(2000,1,1))
274
295
  example_command.send(:typecast_date, "2000-01-01").should eq(Date.civil(2000,1,1))
275
296
  end
276
-
297
+
277
298
  it "returns existing date unchanged" do
278
299
  date = Date.civil(2000,1,1)
279
300
  example_command.send(:typecast_date, date).should eq(date)
280
301
  end
281
-
302
+
282
303
  it "returns nil when invalid string" do
283
304
  example_command.send(:typecast_date, "asdf").should be_nil
284
305
  example_command.send(:typecast_date, nil).should be_nil
@@ -286,19 +307,19 @@ describe CommandModel::Model do
286
307
  example_command.send(:typecast_date, "3/50/1290").should be_nil
287
308
  end
288
309
  end
289
-
310
+
290
311
  it "includes typecasting errors in validations" do
291
312
  example_command.instance_variable_get(:@typecast_errors)["name"] = "integer"
292
313
  example_command.should_not be_valid
293
314
  example_command.errors["name"].should be
294
315
  end
295
-
316
+
296
317
  it "does not include typecasting error in validations if the attribute already has an error" do
297
318
  invalid_example_command.instance_variable_get(:@typecast_errors)["name"] = "integer"
298
319
  invalid_example_command.should_not be_valid
299
320
  invalid_example_command.errors["name"].should be
300
321
  invalid_example_command.errors["name"].find { |e| e =~ /integer/ }.should_not be
301
322
  end
302
-
303
-
323
+
324
+
304
325
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: command_model
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jack Christensen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-24 00:00:00.000000000 Z
11
+ date: 2018-02-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -16,84 +16,84 @@ dependencies:
16
16
  requirements:
17
17
  - - ">"
18
18
  - !ruby/object:Gem::Version
19
- version: '3.2'
19
+ version: '4.2'
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
- version: '3.2'
26
+ version: '4.2'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 10.1.0
33
+ version: 11.3.0
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 10.1.0
40
+ version: 11.3.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 2.11.0
47
+ version: 2.14.1
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 2.11.0
54
+ version: 2.14.1
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: guard
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 1.5.3
61
+ version: 2.14.2
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 1.5.3
68
+ version: 2.14.2
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: guard-rspec
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 2.1.1
75
+ version: 3.1.0
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: 2.1.1
82
+ version: 3.1.0
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: rb-fsevent
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: 0.9.1
89
+ version: 0.10.2
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: 0.9.1
96
+ version: 0.10.2
97
97
  description: CommandModel - when update_attributes isn't enough.
98
98
  email:
99
99
  - jack@jackchristensen.com
@@ -170,9 +170,9 @@ files:
170
170
  - examples/bank/vendor/assets/javascripts/.gitkeep
171
171
  - examples/bank/vendor/assets/stylesheets/.gitkeep
172
172
  - examples/bank/vendor/plugins/.gitkeep
173
- - gemfiles/3.2.gemfile
174
- - gemfiles/4.0.gemfile
175
- - gemfiles/4.1.gemfile
173
+ - gemfiles/4.2.gemfile
174
+ - gemfiles/5.0.gemfile
175
+ - gemfiles/5.1.gemfile
176
176
  - lib/command_model.rb
177
177
  - lib/command_model/model.rb
178
178
  - lib/command_model/version.rb
@@ -197,7 +197,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
197
197
  version: '0'
198
198
  requirements: []
199
199
  rubyforge_project:
200
- rubygems_version: 2.2.2
200
+ rubygems_version: 2.7.3
201
201
  signing_key:
202
202
  specification_version: 4
203
203
  summary: CommandModel integrates Rails validations with command objects. This allows