subroutine 1.0.0.rc4 → 1.0.0
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 +1 -1
- data/README.md +16 -5
- data/gemfiles/am41.gemfile +3 -1
- data/gemfiles/am42.gemfile +2 -0
- data/gemfiles/am50.gemfile +2 -1
- data/gemfiles/am51.gemfile +2 -1
- data/gemfiles/am52.gemfile +2 -1
- data/gemfiles/am60.gemfile +2 -1
- data/lib/subroutine/auth.rb +12 -5
- data/lib/subroutine/fields.rb +15 -0
- data/lib/subroutine/version.rb +1 -1
- data/subroutine.gemspec +10 -7
- data/test/subroutine/auth_test.rb +12 -0
- data/test/subroutine/base_test.rb +12 -0
- data/test/support/ops.rb +2 -0
- data/test/test_helper.rb +7 -6
- metadata +34 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 25c11b61b2c6af19a7be888c2ba66284cb799cf72131e9f7a7893ccf188babd6
|
|
4
|
+
data.tar.gz: b22a8fec39573b99429fb27ad07340c1e0fa3133562a5190b8d6d088eeb9dbab
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 559745dc62dde51e43bde01b4b5fd2598a40edf6b02945abc2f7d71a0b948e5c76d259ac8239ba91fe8aadd4f23db4569feeaf01320287744b25dd9b168b4c29
|
|
7
|
+
data.tar.gz: b8bb15b169ddd8fe7a8e64bb4dcd8f6815b458fda0dc6f035310c2e2ea483a92196357f4893945f982ed661e1dd01ca4d51a43a9250e4b96fd5eeda1459ff22f
|
data/Gemfile
CHANGED
data/README.md
CHANGED
|
@@ -12,27 +12,38 @@ class SignupOp < ::Subroutine::Op
|
|
|
12
12
|
string :name
|
|
13
13
|
string :email
|
|
14
14
|
string :password
|
|
15
|
+
|
|
16
|
+
string :company_name
|
|
15
17
|
|
|
16
18
|
validates :name, presence: true
|
|
17
19
|
validates :email, presence: true
|
|
18
20
|
validates :password, presence: true
|
|
21
|
+
validates :company_name, presence: true
|
|
19
22
|
|
|
20
|
-
outputs :
|
|
23
|
+
outputs :user
|
|
24
|
+
outputs :business
|
|
21
25
|
|
|
22
26
|
protected
|
|
23
27
|
|
|
24
28
|
def perform
|
|
25
29
|
u = create_user!
|
|
26
|
-
|
|
30
|
+
b = create_business!(u)
|
|
31
|
+
|
|
32
|
+
deliver_welcome_email(u)
|
|
27
33
|
|
|
28
|
-
output :
|
|
34
|
+
output :user, u
|
|
35
|
+
output :business, b
|
|
29
36
|
end
|
|
30
37
|
|
|
31
38
|
def create_user!
|
|
32
|
-
User.create!(
|
|
39
|
+
User.create!(name: name, email: email, password: password)
|
|
33
40
|
end
|
|
41
|
+
|
|
42
|
+
def create_business!(owner)
|
|
43
|
+
Business.create!(company_name: company_name, owner: owner)
|
|
44
|
+
end
|
|
34
45
|
|
|
35
|
-
def deliver_welcome_email
|
|
46
|
+
def deliver_welcome_email(u)
|
|
36
47
|
UserMailer.welcome(u.id).deliver_later
|
|
37
48
|
end
|
|
38
49
|
end
|
data/gemfiles/am41.gemfile
CHANGED
data/gemfiles/am42.gemfile
CHANGED
data/gemfiles/am50.gemfile
CHANGED
data/gemfiles/am51.gemfile
CHANGED
data/gemfiles/am52.gemfile
CHANGED
data/gemfiles/am60.gemfile
CHANGED
data/lib/subroutine/auth.rb
CHANGED
|
@@ -85,17 +85,24 @@ module Subroutine
|
|
|
85
85
|
def initialize(*args, &block)
|
|
86
86
|
raise Subroutine::Auth::AuthorizationNotDeclaredError unless self.class.authorization_declared
|
|
87
87
|
|
|
88
|
-
super(args.extract_options!, &block)
|
|
89
|
-
|
|
90
88
|
@skip_auth_checks = false
|
|
91
89
|
|
|
90
|
+
inputs = case args.last
|
|
91
|
+
when *::Subroutine::Fields.allowed_input_classes
|
|
92
|
+
args.pop
|
|
93
|
+
else
|
|
94
|
+
{}
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
super(inputs, &block)
|
|
98
|
+
|
|
92
99
|
user = args.shift
|
|
93
100
|
|
|
94
|
-
|
|
95
|
-
@current_user = user
|
|
96
|
-
else
|
|
101
|
+
unless self.class.supported_user_class_names.include?(user.class.name)
|
|
97
102
|
raise ArgumentError, "current_user must be one of the following types {#{self.class.supported_user_class_names.join(",")}} but was #{user.class.name}"
|
|
98
103
|
end
|
|
104
|
+
|
|
105
|
+
@current_user = user
|
|
99
106
|
end
|
|
100
107
|
|
|
101
108
|
def skip_auth_checks!
|
data/lib/subroutine/fields.rb
CHANGED
|
@@ -14,6 +14,18 @@ module Subroutine
|
|
|
14
14
|
|
|
15
15
|
extend ActiveSupport::Concern
|
|
16
16
|
|
|
17
|
+
def self.allowed_input_classes
|
|
18
|
+
@allowed_input_classes ||= begin
|
|
19
|
+
out = [Hash]
|
|
20
|
+
out << ActionController::Parameters if action_controller_params_loaded?
|
|
21
|
+
out
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def self.action_controller_params_loaded?
|
|
26
|
+
defined?(::ActionController::Parameters)
|
|
27
|
+
end
|
|
28
|
+
|
|
17
29
|
included do
|
|
18
30
|
class_attribute :field_configurations
|
|
19
31
|
self.field_configurations = {}
|
|
@@ -141,6 +153,9 @@ module Subroutine
|
|
|
141
153
|
end
|
|
142
154
|
|
|
143
155
|
def setup_fields(inputs = {})
|
|
156
|
+
if ::Subroutine::Fields.action_controller_params_loaded? && inputs.is_a?(::ActionController::Parameters)
|
|
157
|
+
inputs = inputs.to_unsafe_h if inputs.respond_to?(:to_unsafe_h)
|
|
158
|
+
end
|
|
144
159
|
@provided_fields = {}.with_indifferent_access
|
|
145
160
|
param_groups[:original] = inputs.with_indifferent_access
|
|
146
161
|
mass_assign_initial_params
|
data/lib/subroutine/version.rb
CHANGED
data/subroutine.gemspec
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
lib = File.expand_path("lib", __dir__)
|
|
3
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
|
-
require
|
|
5
|
+
require "subroutine/version"
|
|
5
6
|
|
|
6
7
|
Gem::Specification.new do |spec|
|
|
7
8
|
spec.name = "subroutine"
|
|
8
9
|
spec.version = Subroutine::VERSION
|
|
9
10
|
spec.authors = ["Mike Nelson"]
|
|
10
11
|
spec.email = ["mike@mnelson.io"]
|
|
11
|
-
spec.summary =
|
|
12
|
-
spec.description =
|
|
12
|
+
spec.summary = "Feature-driven operation objects."
|
|
13
|
+
spec.description = "An interface for creating feature-driven operations."
|
|
13
14
|
spec.homepage = "https://github.com/mnelson/subroutine"
|
|
14
15
|
spec.license = "MIT"
|
|
15
16
|
|
|
@@ -19,12 +20,14 @@ Gem::Specification.new do |spec|
|
|
|
19
20
|
spec.require_paths = ["lib"]
|
|
20
21
|
|
|
21
22
|
spec.add_dependency "activemodel", ">= 4.0.0"
|
|
23
|
+
spec.add_dependency "activesupport", ">= 4.0.0"
|
|
22
24
|
|
|
25
|
+
spec.add_development_dependency "actionpack", ">= 4.0"
|
|
23
26
|
spec.add_development_dependency "bundler"
|
|
24
|
-
spec.add_development_dependency "
|
|
27
|
+
spec.add_development_dependency "byebug"
|
|
25
28
|
spec.add_development_dependency "m"
|
|
26
29
|
spec.add_development_dependency "minitest"
|
|
27
30
|
spec.add_development_dependency "minitest-reporters"
|
|
28
31
|
spec.add_development_dependency "mocha"
|
|
29
|
-
spec.add_development_dependency "
|
|
32
|
+
spec.add_development_dependency "rake"
|
|
30
33
|
end
|
|
@@ -118,5 +118,17 @@ module Subroutine
|
|
|
118
118
|
RequireUserOp.new(user.id)
|
|
119
119
|
end
|
|
120
120
|
|
|
121
|
+
def test_actioncontroller_parameters_can_be_provided
|
|
122
|
+
raw_params = { some_input: "foobarbaz" }.with_indifferent_access
|
|
123
|
+
params = ::ActionController::Parameters.new(raw_params)
|
|
124
|
+
op = RequireUserOp.new(user, params)
|
|
125
|
+
op.submit!
|
|
126
|
+
|
|
127
|
+
assert_equal "foobarbaz", op.some_input
|
|
128
|
+
|
|
129
|
+
assert_equal raw_params, op.params
|
|
130
|
+
assert_equal user, op.current_user
|
|
131
|
+
end
|
|
132
|
+
|
|
121
133
|
end
|
|
122
134
|
end
|
|
@@ -304,5 +304,17 @@ module Subroutine
|
|
|
304
304
|
end
|
|
305
305
|
end
|
|
306
306
|
|
|
307
|
+
def test_actioncontroller_parameters_can_be_provided
|
|
308
|
+
raw_params = { email: "foo@bar.com", password: "password123!" }.with_indifferent_access
|
|
309
|
+
params = ::ActionController::Parameters.new(raw_params)
|
|
310
|
+
op = SignupOp.new(params)
|
|
311
|
+
op.submit!
|
|
312
|
+
|
|
313
|
+
assert_equal "foo@bar.com", op.email
|
|
314
|
+
assert_equal "password123!", op.password
|
|
315
|
+
|
|
316
|
+
assert_equal raw_params, op.params
|
|
317
|
+
end
|
|
318
|
+
|
|
307
319
|
end
|
|
308
320
|
end
|
data/test/support/ops.rb
CHANGED
data/test/test_helper.rb
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
4
|
-
require
|
|
5
|
-
require
|
|
3
|
+
require "subroutine"
|
|
4
|
+
require "minitest/autorun"
|
|
5
|
+
require "minitest/unit"
|
|
6
6
|
|
|
7
|
-
require
|
|
8
|
-
require
|
|
7
|
+
require "minitest/reporters"
|
|
8
|
+
require "mocha/minitest"
|
|
9
9
|
|
|
10
10
|
require "byebug"
|
|
11
|
+
require "action_controller"
|
|
11
12
|
|
|
12
13
|
Minitest::Reporters.use!([Minitest::Reporters::DefaultReporter.new])
|
|
13
14
|
|
|
14
15
|
class TestCase < ::Minitest::Test; end
|
|
15
16
|
|
|
16
|
-
require_relative
|
|
17
|
+
require_relative "support/ops"
|
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: 1.0.0
|
|
4
|
+
version: 1.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Mike Nelson
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2020-
|
|
11
|
+
date: 2020-02-19 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activemodel
|
|
@@ -24,6 +24,34 @@ dependencies:
|
|
|
24
24
|
- - ">="
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
26
|
version: 4.0.0
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: activesupport
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - ">="
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: 4.0.0
|
|
34
|
+
type: :runtime
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - ">="
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: 4.0.0
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: actionpack
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - ">="
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: '4.0'
|
|
48
|
+
type: :development
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - ">="
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '4.0'
|
|
27
55
|
- !ruby/object:Gem::Dependency
|
|
28
56
|
name: bundler
|
|
29
57
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -39,7 +67,7 @@ dependencies:
|
|
|
39
67
|
- !ruby/object:Gem::Version
|
|
40
68
|
version: '0'
|
|
41
69
|
- !ruby/object:Gem::Dependency
|
|
42
|
-
name:
|
|
70
|
+
name: byebug
|
|
43
71
|
requirement: !ruby/object:Gem::Requirement
|
|
44
72
|
requirements:
|
|
45
73
|
- - ">="
|
|
@@ -109,7 +137,7 @@ dependencies:
|
|
|
109
137
|
- !ruby/object:Gem::Version
|
|
110
138
|
version: '0'
|
|
111
139
|
- !ruby/object:Gem::Dependency
|
|
112
|
-
name:
|
|
140
|
+
name: rake
|
|
113
141
|
requirement: !ruby/object:Gem::Requirement
|
|
114
142
|
requirements:
|
|
115
143
|
- - ">="
|
|
@@ -185,9 +213,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
185
213
|
version: '0'
|
|
186
214
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
187
215
|
requirements:
|
|
188
|
-
- - "
|
|
216
|
+
- - ">="
|
|
189
217
|
- !ruby/object:Gem::Version
|
|
190
|
-
version:
|
|
218
|
+
version: '0'
|
|
191
219
|
requirements: []
|
|
192
220
|
rubygems_version: 3.0.6
|
|
193
221
|
signing_key:
|