subroutine 0.2.0 → 0.2.1
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/README.md +26 -0
- data/lib/subroutine/op.rb +21 -5
- data/lib/subroutine/version.rb +1 -1
- data/test/subroutine/base_test.rb +30 -4
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 4f44648d17e8af9de061d865e831e95811de6ff4
|
|
4
|
+
data.tar.gz: b5347035ebf89c8e17a45b49333fb9b1a0812555
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 9e8cb47942615ef6cee08df82ff32c026a1824aac18e3e07dacc74e71bb23c30f9959493491d3cb358ec6e4daccbe155c0562b4fa0794efd85b29a9ffa39a5cd
|
|
7
|
+
data.tar.gz: aedf7e3533db2a99570634e97a74cc82bb95673ed9f256153b7844a94638ce49436717c7912b7a552dbe13985c603078977270ff3f527128379b28cc03be5680
|
data/README.md
CHANGED
|
@@ -213,6 +213,32 @@ class MyOp < ::Subroutine::Op
|
|
|
213
213
|
end
|
|
214
214
|
```
|
|
215
215
|
|
|
216
|
+
All **provided** params are accessible via the `params` accessor. All default values are accessible via the `defaults` accessor. The combination of the two is available via `params_with_defaults`.
|
|
217
|
+
|
|
218
|
+
```ruby
|
|
219
|
+
class MyOp < ::Subroutine::Op
|
|
220
|
+
string :name
|
|
221
|
+
string :status, default: "browsing"
|
|
222
|
+
|
|
223
|
+
def perform
|
|
224
|
+
puts params.inspect
|
|
225
|
+
puts defaults.inspect
|
|
226
|
+
puts params_with_defaults.inspect
|
|
227
|
+
true
|
|
228
|
+
end
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
MyOp.submit(name: "foobar", status: nil)
|
|
232
|
+
# => { name: "foobar" }
|
|
233
|
+
# => { status: "browsing" }
|
|
234
|
+
# => { name: "foobar", status: nil }
|
|
235
|
+
|
|
236
|
+
MyOp.submit(name: "foobar")
|
|
237
|
+
# => { name: "foobar" }
|
|
238
|
+
# => { status: "browsing" }
|
|
239
|
+
# => { name: "foobar", status: "browsing" }
|
|
240
|
+
```
|
|
241
|
+
|
|
216
242
|
#### Execution
|
|
217
243
|
|
|
218
244
|
Every op must implement a `perform` instance method. This is the method which will be executed if all validations pass.
|
data/lib/subroutine/op.rb
CHANGED
|
@@ -101,7 +101,7 @@ module Subroutine
|
|
|
101
101
|
end
|
|
102
102
|
|
|
103
103
|
def #{field_name}
|
|
104
|
-
@params["#{field_name}"]
|
|
104
|
+
@params.has_key?("#{field_name}") ? @params["#{field_name}"] : @defaults["#{field_name}"]
|
|
105
105
|
end
|
|
106
106
|
|
|
107
107
|
def #{field_name}_config
|
|
@@ -129,12 +129,13 @@ module Subroutine
|
|
|
129
129
|
self._error_ignores = {}
|
|
130
130
|
|
|
131
131
|
attr_reader :original_params
|
|
132
|
-
attr_reader :params
|
|
132
|
+
attr_reader :params, :defaults
|
|
133
133
|
|
|
134
134
|
|
|
135
135
|
def initialize(inputs = {})
|
|
136
136
|
@original_params = inputs.with_indifferent_access
|
|
137
137
|
@params = sanitize_params(@original_params)
|
|
138
|
+
@defaults = sanitize_defaults
|
|
138
139
|
end
|
|
139
140
|
|
|
140
141
|
def errors
|
|
@@ -164,6 +165,10 @@ module Subroutine
|
|
|
164
165
|
end
|
|
165
166
|
end
|
|
166
167
|
|
|
168
|
+
def params_with_defaults
|
|
169
|
+
@defaults.merge(@params)
|
|
170
|
+
end
|
|
171
|
+
|
|
167
172
|
protected
|
|
168
173
|
|
|
169
174
|
def type_caster
|
|
@@ -236,16 +241,27 @@ module Subroutine
|
|
|
236
241
|
self._fields.each_pair do |field, config|
|
|
237
242
|
if inputs.has_key?(field)
|
|
238
243
|
out[field] = type_caster.cast(inputs[field], config[:type])
|
|
239
|
-
|
|
244
|
+
end
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
out
|
|
248
|
+
end
|
|
249
|
+
|
|
250
|
+
def sanitize_defaults
|
|
251
|
+
defaults = {}.with_indifferent_access
|
|
252
|
+
|
|
253
|
+
self._fields.each_pair do |field, config|
|
|
254
|
+
if config[:default]
|
|
240
255
|
deflt = config[:default]
|
|
241
256
|
deflt = deflt.call if deflt.respond_to?(:call)
|
|
242
|
-
|
|
257
|
+
defaults[field] = type_caster.cast(deflt, config[:type])
|
|
243
258
|
end
|
|
244
259
|
end
|
|
245
260
|
|
|
246
|
-
|
|
261
|
+
defaults
|
|
247
262
|
end
|
|
248
263
|
|
|
264
|
+
|
|
249
265
|
end
|
|
250
266
|
|
|
251
267
|
end
|
data/lib/subroutine/version.rb
CHANGED
|
@@ -144,12 +144,38 @@ module Subroutine
|
|
|
144
144
|
assert_equal [], op.errors[:whatever]
|
|
145
145
|
end
|
|
146
146
|
|
|
147
|
-
def
|
|
147
|
+
def test_it_sets_the_params_and_defaults_immediately
|
|
148
148
|
op = ::AdminSignupOp.new(email: "foo")
|
|
149
149
|
assert_equal({
|
|
150
|
-
"priveleges" => "min",
|
|
151
150
|
"email" => "foo"
|
|
152
151
|
}, op.params)
|
|
152
|
+
|
|
153
|
+
assert_equal({
|
|
154
|
+
"priveleges" => "min",
|
|
155
|
+
}, op.defaults)
|
|
156
|
+
|
|
157
|
+
assert_equal({
|
|
158
|
+
"email" => "foo",
|
|
159
|
+
"priveleges" => "min",
|
|
160
|
+
}, op.params_with_defaults)
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
def test_it_allows_defaults_to_be_overridden
|
|
164
|
+
op = ::AdminSignupOp.new(email: "foo", priveleges: nil)
|
|
165
|
+
|
|
166
|
+
assert_equal({
|
|
167
|
+
"email" => "foo",
|
|
168
|
+
"priveleges" => nil
|
|
169
|
+
}, op.params)
|
|
170
|
+
|
|
171
|
+
assert_equal({
|
|
172
|
+
"priveleges" => "min",
|
|
173
|
+
}, op.defaults)
|
|
174
|
+
|
|
175
|
+
assert_equal({
|
|
176
|
+
"email" => "foo",
|
|
177
|
+
"priveleges" => nil,
|
|
178
|
+
}, op.params_with_defaults)
|
|
153
179
|
end
|
|
154
180
|
|
|
155
181
|
def test_it_overrides_defaults_with_nils
|
|
@@ -162,10 +188,10 @@ module Subroutine
|
|
|
162
188
|
|
|
163
189
|
def test_it_casts_params_on_the_way_in
|
|
164
190
|
op = ::TypeCastOp.new(integer_input: "25")
|
|
165
|
-
assert_equal(25, op.
|
|
191
|
+
assert_equal(25, op.params_with_defaults["integer_input"])
|
|
166
192
|
|
|
167
193
|
op.decimal_input = "25.3"
|
|
168
|
-
assert_equal(BigDecimal("25.3"), op.
|
|
194
|
+
assert_equal(BigDecimal("25.3"), op.params_with_defaults["decimal_input"])
|
|
169
195
|
end
|
|
170
196
|
|
|
171
197
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: subroutine
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.2.
|
|
4
|
+
version: 0.2.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Mike Nelson
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2016-08-
|
|
11
|
+
date: 2016-08-22 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activemodel
|