activeinteractor 2.0.0.alpha.2.3.3 → 2.0.0.alpha.2.3.4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c7e53178ed391a9de1b1841a29f7655f66aa61e70d54e3a00df830550f71c70a
4
- data.tar.gz: 462c26605e5db213de957fa7d6afd076849b500e93e4dc45f2ea0cc57a927ba5
3
+ metadata.gz: d75851d221fb7d266849601c5eef65939edfb615419818393ca9ea9b165a4279
4
+ data.tar.gz: '08f62a487d21f34df03f63b0dc112010df68fbb0a6aa6f3931d972eb0dbaed36'
5
5
  SHA512:
6
- metadata.gz: 278fbc63da4056d07904f48547e4ac40942e380194294d1836dbe866c665e16799e12e2fbcd1f47efc65ccfaab80bb84ce2c91e40ca53395e1648cd7d0cdcf9c
7
- data.tar.gz: d35e2da1526d2b9f069227b72e048e2c55c38995dd539760b8338e8087afd487afe0257e45551b33921895781a16d04022d9c56cda2b8ef9294b0e95ec9d46de
6
+ metadata.gz: 533fa79817a6d0598c1dac316da54f19ac5e96067ede7f65869f26a2c84b5481a134fab044ed947061d6a19f9021c829dc428456e4cb25483ea276b44c5ba6a7
7
+ data.tar.gz: 9efe50f237b0bd204678158dd9ba27482b93e640193f8c3f3cbd71025d2b46fb1490bbb19bf25b31adeecdb02298947dbf41a1bd7cb03659c3bc1871faf1605e
@@ -1,11 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ActiveInteractor
4
+ # @private
4
5
  module ActiveModelErrorMethods
5
6
  extend ActiveSupport::Concern
6
7
 
7
8
  attr_reader :errors
8
9
 
10
+ # @private
9
11
  module ClassMethods
10
12
  def human_attribute_name(attribute, _options = {})
11
13
  attribute.respond_to?(:to_s) ? attribute.to_s.humanize : attribute
@@ -1,7 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ActiveInteractor
4
- class Base < ActiveInteractor::Interactor::Base
5
- include Type::DeclerationMethods
6
- end
4
+ # The Main interface for ActiveInteractor
5
+ #
6
+ # @deprecated will be removed in version 2.0.0-alpha.3.0.0
7
+ # use {ActiveInteractor::Interactor::Base} instead
8
+ class Base < ActiveInteractor::Interactor::Base; end
7
9
  end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ActiveInteractor
4
+ # The Context namespace
4
5
  module Context
5
6
  extend ActiveSupport::Autoload
6
7
 
@@ -1,9 +1,22 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ActiveInteractor
4
+ # Raised when an interactor fails
5
+ #
6
+ # @!attribute [r] result
7
+ # @return [ActiveInteractor::Result] An instance of {ActiveInteractor::Result} for the
8
+ # {ActiveInteractor::Interactor::Base interactor} that failed
4
9
  class Error < StandardError
5
10
  attr_reader :result
6
11
 
12
+ # Create a new instance of {ActiveInteractor::Error}
13
+ #
14
+ # @param result [ActiveInteractor::Result] An instance of {ActiveInteractor::Result} for the
15
+ # {ActiveInteractor::Interactor::Base interactor} that failed
16
+ # @param message [String] The error message
17
+ #
18
+ # @private
19
+ # @return [ActiveInteractor::Error]
7
20
  def initialize(result, message = nil)
8
21
  @result = result
9
22
  super(message)
@@ -5,6 +5,7 @@ module ActiveInteractor
5
5
  class Base
6
6
  include ContextMethods
7
7
  include InteractionMethods
8
+ include Type::DeclerationMethods
8
9
 
9
10
  def initialize(input = {})
10
11
  @raw_input = input.dup
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ActiveInteractor
4
+ # The Interactor namespace
4
5
  module Interactor
5
6
  extend ActiveSupport::Autoload
6
7
 
@@ -1,11 +1,64 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ActiveInteractor
4
+ # The object returned by an {ActiveInteractor::Interactor::Base interactor}
5
+ #
6
+ # @!attribute [r] data
7
+ #
8
+ # @example Given an {ActiveInteractor::Interactor::Base interactor} that creates an ActiveRecord User
9
+ # class CreateUser < ActiveInteractor::Interactor::Base
10
+ # argument :login, String, 'The login for the User', required: true
11
+ # argument :password, String, 'The password for the User', required: true
12
+ # argument :password_confirmation, String, 'The password confirmation for the user', required: true
13
+ #
14
+ # returns :user, User, 'The created User', required: true
15
+ #
16
+ # def interact
17
+ # context.user = User.new(context)
18
+ # fail!(context.user.errors) unless context.user.save
19
+ # end
20
+ # end
21
+ #
22
+ # result = CreateUser.perform(login: 'johndoe', password: 'password', password_confirmation: 'password')
23
+ # result.data.user
24
+ #
25
+ # #=> <# User @login='johndoe'>
26
+ #
27
+ # @return [ActiveInteractor::Context::Result] the data returned by the
28
+ # {ActiveInteractor::Interactor::Base interactor}
29
+ #
30
+ # @!attribute [r] errors
31
+ # @return [ActiveModel::Errors] the errors returned by the
32
+ # {ActiveInteractor::Interactor::Base interactor}
33
+ # @see https://github.com/rails/rails/blob/main/activemodel/lib/active_model/errors.rb ActiveModel::Errors
4
34
  class Result
5
35
  include ActiveModelErrorMethods
6
36
 
37
+ # @!method to_json
38
+ # The {ActiveInteractor::Interactor::Base result} as a Hash
39
+ #
40
+ # @example When an {ActiveInteractor::Interactor::Base interactor} succeeds
41
+ # result = CreateUser.perform(login: 'johndoe', password: 'password', password_confirmation: 'password')
42
+ # result.to_hash
43
+ #
44
+ # #=> { :success => true, :errors => {}, :data => { :login => 'johndoe' } }
45
+ #
46
+ # @example When an {ActiveInteractor::Interactor::Base interactor} fails
47
+ # result = CreateUser.perform(login: 'johndoe', password: 'password', password_confirmation: 'notpassword')
48
+ # result.to_hash
49
+ #
50
+ # #=> {
51
+ # #=> :success => false,
52
+ # #=> :errors => { :password_confirmation => ["doesn't match Password"] },
53
+ # #=> :data => { :login => 'johndoe' }
54
+ # #=> }
55
+ #
56
+ # @deprecated will be removed in version 2.0.0-alpha.3.0.0
57
+ # use {#to_hash} instead
58
+ # @return [Hash {Symbol => Boolean, Hash}]
7
59
  delegate :to_json, to: :to_hash
8
60
 
61
+ # @private
9
62
  STATUS = {
10
63
  success: 0,
11
64
  failed_at_input: 1,
@@ -16,10 +69,12 @@ module ActiveInteractor
16
69
  attr_reader :data
17
70
 
18
71
  class << self
72
+ # @private
19
73
  def success(data: {})
20
74
  new(status: STATUS[:success], data: data)
21
75
  end
22
76
 
77
+ # @private
23
78
  def failure(data: {}, errors: {}, status: STATUS[:failed_at_runtime])
24
79
  result = new(status: status, data: data)
25
80
  parse_errors(errors).each_pair do |attribute, messages|
@@ -43,27 +98,65 @@ module ActiveInteractor
43
98
  end
44
99
 
45
100
  private_class_method :new
46
-
101
+ # @private
47
102
  def initialize(status:, data: {})
48
103
  @status = status
49
104
  @data = data
50
105
  @errors = ActiveModel::Errors.new(self)
51
106
  end
52
107
 
108
+ # Whether or not the {ActiveInteractor::Interactor::Base result} is a failure
109
+ #
110
+ # @example When an {ActiveInteractor::Interactor::Base interactor} fails
111
+ # result = CreateUser.perform(login: 'johndoe', password: 'password', password_confirmation: 'notpassword')
112
+ # result.failure?
113
+ #
114
+ # #=> true
115
+ #
116
+ # @example When an {ActiveInteractor::Interactor::Base interactor} succeeds
117
+ # result = CreateUser.perform(login: 'johndoe', password: 'password', password_confirmation: 'password')
118
+ # result.failure?
119
+ #
120
+ # #=> false
121
+ #
122
+ # @return [Boolean]
53
123
  def failure?
54
124
  !success?
55
125
  end
56
126
  alias failed? failure?
57
127
 
128
+ # @private
58
129
  def read_attribute_for_validation(attribute_name)
59
130
  data.send(attribute_name.to_sym)
60
131
  end
61
132
 
133
+ # Whether or not the {ActiveInteractor::Interactor::Base result} is a success
134
+ #
135
+ # @return [Boolean]
62
136
  def success?
63
137
  @status == STATUS[:success]
64
138
  end
65
139
  alias successful? success?
66
140
 
141
+ # The {ActiveInteractor::Interactor::Base result} as a Hash
142
+ #
143
+ # @example When an {ActiveInteractor::Interactor::Base interactor} succeeds
144
+ # result = CreateUser.perform(login: 'johndoe', password: 'password', password_confirmation: 'password')
145
+ # result.to_hash
146
+ #
147
+ # #=> { :success => true, :errors => {}, :data => { :login => 'johndoe' } }
148
+ #
149
+ # @example When an {ActiveInteractor::Interactor::Base interactor} fails
150
+ # result = CreateUser.perform(login: 'johndoe', password: 'password', password_confirmation: 'notpassword')
151
+ # result.to_hash
152
+ #
153
+ # #=> {
154
+ # #=> :success => false,
155
+ # #=> :errors => { :password_confirmation => ["doesn't match Password"] },
156
+ # #=> :data => { :login => 'johndoe' }
157
+ # #=> }
158
+ #
159
+ # @return [Hash {Symbol => Boolean, Hash}]
67
160
  def to_hash
68
161
  {
69
162
  success: success?,
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ActiveInteractor
4
+ # @private
4
5
  module Type
5
6
  extend ActiveSupport::Autoload
6
7
 
@@ -6,6 +6,36 @@ require 'active_support/core_ext'
6
6
 
7
7
  require_relative 'active_interactor/errors'
8
8
 
9
+ # ## License
10
+ #
11
+ # Copyright (c) 2023 Aaron Allen
12
+ #
13
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
14
+ # of this software and associated documentation files (the "Software"), to deal
15
+ # in the Software without restriction, including without limitation the rights
16
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
17
+ # copies of the Software, and to permit persons to whom the Software is
18
+ # furnished to do so, subject to the following conditions:
19
+ #
20
+ # The above copyright notice and this permission notice shall be included in
21
+ # all copies or substantial portions of the Software.
22
+ #
23
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
24
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
26
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
28
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
29
+ # THE SOFTWARE.
30
+ #
31
+ # {file:CHANGELOG.md Changelog}
32
+ #
33
+ # {file:HUMANS.md Acknowledgements}
34
+ #
35
+ # {file:SECURITY.md Security Policy}
36
+ #
37
+ # @author {hello@aaronmallen.me Aaron Allen}
38
+
9
39
  module ActiveInteractor
10
40
  extend ActiveSupport::Autoload
11
41
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activeinteractor
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.alpha.2.3.3
4
+ version: 2.0.0.alpha.2.3.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aaron Allen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-10-16 00:00:00.000000000 Z
11
+ date: 2023-10-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -93,9 +93,10 @@ licenses:
93
93
  - MIT
94
94
  metadata:
95
95
  bug_tracker_uri: https://github.com/activeinteractor/activeinteractor/issues
96
- changelog_uri: https://github.com/activeinteractor/activeinteractor/blob/v2.0.0-alpha.2.3.3/CHANGELOG.md
96
+ changelog_uri: https://github.com/activeinteractor/activeinteractor/blob/v2.0.0-alpha.2.3.4/CHANGELOG.md
97
97
  homepage_uri: https://github.com/activeinteractor/activeinteractor
98
- source_code_uri: https://github.com/activeinteractor/activeinteractor/tree/v2.0.0-alpha.2.3.3
98
+ source_code_uri: https://github.com/activeinteractor/activeinteractor/tree/v2.0.0-alpha.2.3.4
99
+ documentation_uri: https://api.activeinteractor.io
99
100
  wiki_uri: https://github.com/activeinteractor/activeinteractor/wiki
100
101
  rubygems_mfa_required: 'true'
101
102
  post_install_message: