subroutine 1.0.0.rc4 → 1.0.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
2
  SHA256:
3
- metadata.gz: 6bd9cb93ba6c09a520b8db4d79b6aa2e5eefee2046b5b8d768976864dd4a7c89
4
- data.tar.gz: d5d0be02650acb97a25b3663f2722ace66f38ad2cb5457208da7ad1e3a2a9e0d
3
+ metadata.gz: 25c11b61b2c6af19a7be888c2ba66284cb799cf72131e9f7a7893ccf188babd6
4
+ data.tar.gz: b22a8fec39573b99429fb27ad07340c1e0fa3133562a5190b8d6d088eeb9dbab
5
5
  SHA512:
6
- metadata.gz: f4eaa685e8fff642d134ba9f97b0050c1eee01639b4429ebe2d4a522ff88de544f58a4080372af3f91f210f656efbf9c37c8a6fbdea1f36468067408e5615913
7
- data.tar.gz: e6b4c7fbadbaf6a1b8b8d765d962aed0acb7ba8c8f661b5b5c70da6b20d49458013d0f31ab34e0c4a7519452a568f8f9e51ee85f18be0a119ba62af1e24b1d94
6
+ metadata.gz: 559745dc62dde51e43bde01b4b5fd2598a40edf6b02945abc2f7d71a0b948e5c76d259ac8239ba91fe8aadd4f23db4569feeaf01320287744b25dd9b168b4c29
7
+ data.tar.gz: b8bb15b169ddd8fe7a8e64bb4dcd8f6815b458fda0dc6f035310c2e2ea483a92196357f4893945f982ed661e1dd01ca4d51a43a9250e4b96fd5eeda1459ff22f
data/Gemfile CHANGED
@@ -5,4 +5,4 @@ source "https://rubygems.org"
5
5
  # Specify your gem's dependencies in subroutine.gemspec
6
6
  gemspec
7
7
 
8
- gem "activemodel", "~> 4.2.11"
8
+ eval_gemfile "gemfiles/am60.gemfile"
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 :signed_up_user
23
+ outputs :user
24
+ outputs :business
21
25
 
22
26
  protected
23
27
 
24
28
  def perform
25
29
  u = create_user!
26
- deliver_welcome_email!(u)
30
+ b = create_business!(u)
31
+
32
+ deliver_welcome_email(u)
27
33
 
28
- output :signed_up_user, u
34
+ output :user, u
35
+ output :business, b
29
36
  end
30
37
 
31
38
  def create_user!
32
- User.create!(params)
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!(u)
46
+ def deliver_welcome_email(u)
36
47
  UserMailer.welcome(u.id).deliver_later
37
48
  end
38
49
  end
@@ -2,4 +2,6 @@ source 'https://rubygems.org'
2
2
 
3
3
  gemspec :path => '../'
4
4
 
5
- gem 'activemodel', '~> 4.1.9'
5
+ gem 'rack'
6
+ gem 'activemodel', '~> 4.1.0'
7
+ gem 'actionpack', '~> 4.1.0'
@@ -2,4 +2,6 @@ source 'https://rubygems.org'
2
2
 
3
3
  gemspec :path => '../'
4
4
 
5
+ gem 'rack'
5
6
  gem 'activemodel', '~> 4.2.0'
7
+ gem 'actionpack', '~> 4.2.0'
@@ -2,4 +2,5 @@ source 'https://rubygems.org'
2
2
 
3
3
  gemspec :path => '../'
4
4
 
5
- gem 'activemodel', '~> 5.0.7.2'
5
+ gem 'activemodel', '~> 5.0.0'
6
+ gem 'actionpack', '~> 5.0.0'
@@ -2,4 +2,5 @@ source 'https://rubygems.org'
2
2
 
3
3
  gemspec :path => '../'
4
4
 
5
- gem 'activemodel', '~> 5.1.7'
5
+ gem 'activemodel', '~> 5.1.0'
6
+ gem 'actionpack', '~> 5.1.0'
@@ -2,4 +2,5 @@ source 'https://rubygems.org'
2
2
 
3
3
  gemspec :path => '../'
4
4
 
5
- gem 'activemodel', '~> 5.2.3'
5
+ gem 'activemodel', '~> 5.2.0'
6
+ gem 'actionpack', '~> 5.2.0'
@@ -2,4 +2,5 @@ source 'https://rubygems.org'
2
2
 
3
3
  gemspec :path => '../'
4
4
 
5
- gem 'activemodel', '~> 6.0.0.rc1'
5
+ gem 'activemodel', '~> 6.0.0'
6
+ gem 'actionpack', '~> 6.0.0'
@@ -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
- if self.class.supported_user_class_names.include?(user.class.name)
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!
@@ -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
@@ -5,7 +5,7 @@ module Subroutine
5
5
  MAJOR = 1
6
6
  MINOR = 0
7
7
  PATCH = 0
8
- PRE = "rc4"
8
+ PRE = nil
9
9
 
10
10
  VERSION = [MAJOR, MINOR, PATCH, PRE].compact.join(".")
11
11
 
data/subroutine.gemspec CHANGED
@@ -1,15 +1,16 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
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 'subroutine/version'
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 = %q{Feature-driven operation objects.}
12
- spec.description = %q{An interface for creating feature-driven operations.}
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 "rake"
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 "byebug"
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
@@ -177,6 +177,8 @@ class RequireUserOp < OpWithAuth
177
177
 
178
178
  require_user!
179
179
 
180
+ string :some_input
181
+
180
182
  end
181
183
 
182
184
  class RequireNoUserOp < OpWithAuth
data/test/test_helper.rb CHANGED
@@ -1,16 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'subroutine'
4
- require 'minitest/autorun'
5
- require 'minitest/unit'
3
+ require "subroutine"
4
+ require "minitest/autorun"
5
+ require "minitest/unit"
6
6
 
7
- require 'minitest/reporters'
8
- require 'mocha/minitest'
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 'support/ops'
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.rc4
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-01-31 00:00:00.000000000 Z
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: rake
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: byebug
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: 1.3.1
218
+ version: '0'
191
219
  requirements: []
192
220
  rubygems_version: 3.0.6
193
221
  signing_key: