haku 1.3.1 → 1.5.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5fcbccd5d1d9c9be3d0d66259a210f75e52392ba1d76a7eff4b0ef375caae684
4
- data.tar.gz: 93632c6b6124810c8d08a316a162b449f8680612dec73ffaa931f01490a65a9c
3
+ metadata.gz: 137f060c137bed529cdd82679e0880674ed6a6b5d62a9865bf5f52fb8c89c805
4
+ data.tar.gz: 8ca69778bad99f1cd7f2ea6a64fdc0784337741acbde926ff487f5bc2312ff67
5
5
  SHA512:
6
- metadata.gz: f9fe64de95c0c910d76f0309e746298f20aad3e64ce7222b7e7300645387a585b42a850cfdae520a7a12d5771dbc64c46660a935d9ac658e2b838dff0c7cf55b
7
- data.tar.gz: 5f0d174e5e0676e8fcee566bdb4d980b6a732cf028da40eb9fc1849585757e226add08f8f210bbdbb591ba31425ab9ee337ef57984d6044585bb26b1da069609
6
+ metadata.gz: 53a9a2ffdd2f719e2aad8878130a7a2359cd818947be00cedaf82477262cafab6431e357520fb14a738f9fbc80b790a42077d9a68f000c3fa769ffea45369c04
7
+ data.tar.gz: 56ec2ff6a811220f409ed65df974493ffb0adcb77b7eb50f9a114e63a3c79af4160728b66278126d78886892f6e35bb63d973a77d26895bca7f3612a1fbc4efc
data/.rubocop.yml CHANGED
@@ -15,11 +15,29 @@ AllCops:
15
15
  - "**/gemfiles/**/*"
16
16
  - "**/Appraisals"
17
17
  NewCops: enable
18
- TargetRubyVersion: 2.6
18
+ TargetRubyVersion: 2.7
19
19
 
20
20
  Layout/SpaceAroundEqualsInParameterDefault:
21
21
  EnforcedStyle: no_space
22
22
 
23
+ Metrics/ClassLength:
24
+ CountAsOne:
25
+ - array
26
+ - hash
27
+ - heredoc
28
+
29
+ Metrics/MethodLength:
30
+ CountAsOne:
31
+ - array
32
+ - hash
33
+ - heredoc
34
+
35
+ Metrics/ModuleLength:
36
+ CountAsOne:
37
+ - array
38
+ - hash
39
+ - heredoc
40
+
23
41
  Style/Documentation:
24
42
  Enabled: false
25
43
 
data/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [1.5.0] - 2023-01-25
4
+ * **Breaking**: Simplify Haku::Eventable module
5
+
6
+ ## [1.4.0] - 2022-09-19
7
+ - Improve `Haku::Eventable` module to support more data sources for event properties
8
+ - Add `Haku::Delayable` module to execute service object in background
9
+ - Improve README
10
+ - **Breaking**: Require `activesupport` >= 6.1
11
+ - **Breaking**: Require Ruby >= 2.7
12
+ - Fix CI test invocation
13
+
3
14
  ## [1.3.1] - 2022-04-27
4
15
  - Fix Haku::Controller
5
16
 
data/Gemfile CHANGED
@@ -4,7 +4,7 @@ source "https://rubygems.org"
4
4
 
5
5
  gemspec
6
6
 
7
- gem "appraisal", github: "excid3/appraisal", branch: "fix-bundle-env"
7
+ gem "activejob", ">= 6.1", "< 8.0"
8
8
  gem "minitest", "~> 5.0"
9
9
  gem "pry", "~> 0.14"
10
10
  gem "rake", "~> 13.0"
data/Gemfile.lock CHANGED
@@ -1,71 +1,67 @@
1
- GIT
2
- remote: https://github.com/excid3/appraisal.git
3
- revision: 14855fc54ce88b42def871ce8bfd4259fbf06043
4
- branch: fix-bundle-env
5
- specs:
6
- appraisal (2.4.1)
7
- bundler
8
- rake
9
- thor (>= 0.14.0)
10
-
11
1
  PATH
12
2
  remote: .
13
3
  specs:
14
- haku (1.3.1)
15
- activesupport (>= 6.0, < 8.0)
4
+ haku (1.5.0)
5
+ activesupport (>= 6.1, < 8.0)
16
6
 
17
7
  GEM
18
8
  remote: https://rubygems.org/
19
9
  specs:
20
- activesupport (7.0.2.4)
10
+ activejob (7.0.4.2)
11
+ activesupport (= 7.0.4.2)
12
+ globalid (>= 0.3.6)
13
+ activesupport (7.0.4.2)
21
14
  concurrent-ruby (~> 1.0, >= 1.0.2)
22
15
  i18n (>= 1.6, < 2)
23
16
  minitest (>= 5.1)
24
17
  tzinfo (~> 2.0)
25
18
  ast (2.4.2)
26
19
  coderay (1.1.3)
27
- concurrent-ruby (1.1.10)
28
- i18n (1.10.0)
20
+ concurrent-ruby (1.2.0)
21
+ globalid (1.0.1)
22
+ activesupport (>= 5.0)
23
+ i18n (1.12.0)
29
24
  concurrent-ruby (~> 1.0)
25
+ json (2.6.3)
30
26
  method_source (1.0.0)
31
- minitest (5.15.0)
27
+ minitest (5.17.0)
32
28
  parallel (1.22.1)
33
- parser (3.1.1.0)
29
+ parser (3.2.0.0)
34
30
  ast (~> 2.4.1)
35
- pry (0.14.1)
31
+ pry (0.14.2)
36
32
  coderay (~> 1.1)
37
33
  method_source (~> 1.0)
38
34
  rainbow (3.1.1)
39
35
  rake (13.0.6)
40
- regexp_parser (2.2.1)
36
+ regexp_parser (2.6.2)
41
37
  rexml (3.2.5)
42
- rubocop (1.26.1)
38
+ rubocop (1.44.1)
39
+ json (~> 2.3)
43
40
  parallel (~> 1.10)
44
- parser (>= 3.1.0.0)
41
+ parser (>= 3.2.0.0)
45
42
  rainbow (>= 2.2.2, < 4.0)
46
43
  regexp_parser (>= 1.8, < 3.0)
47
- rexml
48
- rubocop-ast (>= 1.16.0, < 2.0)
44
+ rexml (>= 3.2.5, < 4.0)
45
+ rubocop-ast (>= 1.24.1, < 2.0)
49
46
  ruby-progressbar (~> 1.7)
50
- unicode-display_width (>= 1.4.0, < 3.0)
51
- rubocop-ast (1.16.0)
47
+ unicode-display_width (>= 2.4.0, < 3.0)
48
+ rubocop-ast (1.24.1)
52
49
  parser (>= 3.1.1.0)
53
- rubocop-minitest (0.19.0)
50
+ rubocop-minitest (0.26.1)
54
51
  rubocop (>= 0.90, < 2.0)
55
52
  rubocop-rake (0.6.0)
56
53
  rubocop (~> 1.0)
57
54
  ruby-progressbar (1.11.0)
58
- thor (1.2.1)
59
- tzinfo (2.0.4)
55
+ tzinfo (2.0.5)
60
56
  concurrent-ruby (~> 1.0)
61
- unicode-display_width (2.1.0)
57
+ unicode-display_width (2.4.2)
62
58
 
63
59
  PLATFORMS
64
60
  arm64-darwin-21
65
61
  x86_64-linux
66
62
 
67
63
  DEPENDENCIES
68
- appraisal!
64
+ activejob (>= 6.1, < 8.0)
69
65
  haku!
70
66
  minitest (~> 5.0)
71
67
  pry (~> 0.14)
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2022 Javier Aranda
3
+ Copyright (c) 2022-2023 Javier Aranda
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -2,7 +2,13 @@
2
2
 
3
3
  ![CI](https://github.com/javierav/haku/workflows/CI/badge.svg)
4
4
 
5
- A library for build simple service objects.
5
+ A simple library for build simple service objects.
6
+
7
+
8
+ ## Status
9
+
10
+ > :warning: **This project is still experimental, use with caution!**
11
+
6
12
 
7
13
  ## Installation
8
14
 
@@ -18,11 +24,22 @@ And then execute:
18
24
  bundle install
19
25
  ```
20
26
 
27
+
21
28
  ## Usage
22
29
 
23
- ### Basic example
30
+ **Haku** is made up of four modules that add functionality to our service objects:
31
+
32
+ * [Haku::Core](#hakucore)
33
+ * [Haku::Delayable](#hakudelayable)
34
+ * [Haku::Eventable](#hakueventable)
35
+ * [Haku::Resourceable](#hakuresourceable)
36
+
37
+ Additionally, it's available the [Haku::Controller](#hakucontroller) module for use in ours Rails controllers.
38
+
39
+
40
+ ### Haku::Core
24
41
 
25
- ````ruby
42
+ ```ruby
26
43
  class Users::Update
27
44
  include Haku::Core
28
45
 
@@ -49,95 +66,96 @@ response = Users::Update.call(user: User.first, attributes: { name: "Javier" })
49
66
  response.success? # => true
50
67
  response.result # => { resource: <User id="1" ...> }
51
68
  response.resource # => <User id="1" ...>
52
- ````
69
+ ```
53
70
 
54
- ### Using resourceable helpers
71
+ As you can see, if the payload passed to `success!` or `failure!` is a hash, each key of the hash can be accessed
72
+ directly in response object.
55
73
 
56
- ````ruby
57
- class Users::Update
74
+
75
+ ### Haku::Delayable
76
+
77
+ ```ruby
78
+ class Users::ComputeHours
58
79
  include Haku::Core
59
- include Haku::Resourceable
80
+ include Haku::Delayable
60
81
 
61
- input :user, :attributes
62
- on_success :send_email
82
+ input :user
63
83
 
64
84
  def call
65
- update_resource(user, attributes)
85
+ # compute expensive data for user
66
86
  end
87
+ end
67
88
 
68
- private
89
+ Users::ComputeHours.delayed.call(user: User.first)
90
+ ```
69
91
 
70
- def send_email
71
- UserMailer.with(user: user).update.deliver_later
72
- end
73
- end
74
- ````
92
+ Use `delayed.call` instead of `call` for execute service object in background using `ActiveJob` job.
75
93
 
76
- ### Controller helpers
94
+ #### Customize job
77
95
 
78
96
  ```ruby
79
- class UsersController < ApplicationController
80
- before_action :find_user
97
+ Users::ComputeHours.delayed(job: OtherJob).call(user: User.first)
98
+ ```
81
99
 
82
- def update
83
- execute Users::Update, user: @user, attributes: update_params
100
+ #### Customize job options
84
101
 
85
- if execution.success?
86
- redirect_to user_path(execution.resource)
87
- else
88
- render :edit, errors: execution.errors
89
- end
90
- end
102
+ ```ruby
103
+ Users::ComputeHours.delayed(job: OtherJob, queue: :low, priority: 2).call(user: User.first)
104
+ ```
91
105
 
92
- private
106
+ You can pass the same options allowed by ActiveJob
107
+ [set](https://api.rubyonrails.org/v7.0.4/classes/ActiveJob/Core/ClassMethods.html#method-i-set) method:
93
108
 
94
- def find_user
95
- @user = User.find(params[:id])
96
- end
109
+ #### Config options
97
110
 
98
- def update_params
99
- params.require(:user).permit(:first_name, :last_name)
100
- end
111
+ ```ruby
112
+ # config/initializers/haku.rb
113
+
114
+ Haku.configure do |config|
115
+ config.job_queue = "low_priority"
101
116
  end
102
117
  ```
103
118
 
104
- ### Using eventable
119
+ | Config | Description | Default value |
120
+ |:------------|:---------------------------------|:--------------|
121
+ | `job_queue` | String or Symbol with queue name | `default` |
122
+
105
123
 
106
- ````ruby
124
+ ### Haku::Eventable
125
+
126
+ ```ruby
107
127
  class Users::Update
108
128
  include Haku::Core
109
- include Haku::Resourceable
110
129
  include Haku::Eventable
111
130
 
112
131
  input :user, :attributes
113
132
  event resource: :user
114
133
 
115
134
  def call
116
- update_resource(user, attributes)
135
+ success! resource: user
117
136
  end
118
137
  end
119
138
 
120
139
  Users::Update.call(user: User.first, attributes: { name: "Javier" })
121
140
 
122
141
  # => call Event.create(name: "user:update", resource: User.first)
123
- ````
142
+ ```
124
143
 
125
- ### Using parent class
144
+ The `name` attribute are calculated using the custom proc from `event_name` config option. You can change it with
126
145
 
127
146
  ```ruby
128
- class ApplicationAction
129
- include Haku::Core
130
- include Haku::Resourceable
131
- include Haku::Eventable
132
- end
133
-
134
- class Users::Update < ApplicationAction
135
- end
147
+ event name: "custom:name", resource: :user
136
148
  ```
137
149
 
138
- ## Configure
150
+ #### Properties passed to event model
151
+
152
+ For each property passed as payload of `event` class method, it will try to:
139
153
 
140
- ### Example
154
+ 1. If is a block, it is called to get the value of property.
155
+ 2. If is a symbol, a method is used to get the value of property:
156
+ 3. In other case, uses the raw value.
157
+
158
+ #### Config options
141
159
 
142
160
  ```ruby
143
161
  # config/initializers/haku.rb
@@ -147,24 +165,39 @@ Haku.configure do |config|
147
165
  end
148
166
  ```
149
167
 
150
- ### Allowed options
151
-
152
- | Config | Description | Default value |
153
- |:-----------------------------------|:-------------------------------------------------------|:---------------------------------------------------------|
154
- | `enable_in_action_controller_base` | Include controller helpers in `ActionController::Base` | `true` |
155
- | `enable_in_action_controller_api` | Include controller helpers in `ActionController::API` | `true` |
156
- | `event_model` | Name of the model used for create events | `Event` |
157
- | `event_properties` | List of attributes passed from service to event model | `%i[actor resource target context]` |
158
- | `event_property_for_name` | Property used for name in event model | `:name` |
159
- | `event_name` | String or Proc to determine the event name | Custom Proc. Example: `user:created` for `Users::Create` |
168
+ | Config | Description | Default value |
169
+ |:--------------------------|:------------------------------------------------------|:-------------------------------------------------------|
170
+ | `event_model` | Name of the model used for create events | `Event` |
171
+ | `event_property_for_name` | Property used for name in event model | `:name` |
172
+ | `event_name` | String or Proc to determine the event name | Custom Proc. Returns `user:create` for `Users::Create` |
160
173
 
161
174
 
162
- ## Resourceable
175
+ ### Haku::Resourceable
163
176
 
164
177
  This module include helpers to works with *ActiveRecord* compatible model resources, invoking `success!` or `failure!`
165
178
  based in the result of the performed operation.
166
179
 
167
- ### create_resource
180
+ ```ruby
181
+ class Users::Update
182
+ include Haku::Core
183
+ include Haku::Resourceable
184
+
185
+ input :user, :attributes
186
+ on_success :send_email
187
+
188
+ def call
189
+ update_resource(user, attributes)
190
+ end
191
+
192
+ private
193
+
194
+ def send_email
195
+ UserMailer.with(user: user).update.deliver_later
196
+ end
197
+ end
198
+ ```
199
+
200
+ #### create_resource
168
201
 
169
202
  Call to `create` or `<singleton>_create` method of the `parent` object passing the `attributes` and storing
170
203
  the result object in the `ivar` instance variable. Invoke `success!` if the model is persisted or `failure!` in other
@@ -177,13 +210,13 @@ case.
177
210
  | `ivar` | `Symbol` | Name of the instance variable used to access to the new resource |
178
211
  | `options` | `Hash` | Options hash |
179
212
 
180
- #### options
213
+ ##### options
181
214
 
182
215
  | parameter | type | description |
183
216
  |-------------|----------|----------------------------------------------------------------------|
184
217
  | `singleton` | `Symbol` | If the resource should be created using `<singleton>_create` suffix. |
185
218
 
186
- ### update_resource
219
+ #### update_resource
187
220
 
188
221
  Call to `update` method of the `resource` object passing `attributes`to it. Invoke `success!` if the model is updated or
189
222
  `failure!` in other case.
@@ -193,7 +226,7 @@ Call to `update` method of the `resource` object passing `attributes`to it. Invo
193
226
  | `resource` | `Object` | Resource to be updated |
194
227
  | `attributes` | `Hash` | Attributes to update |
195
228
 
196
- ### destroy_resource
229
+ #### destroy_resource
197
230
 
198
231
  Call to `destroy` method of the `resource`. Invoke `success!` if the model is destroyed or `failure!` in other case.
199
232
 
@@ -201,7 +234,7 @@ Call to `destroy` method of the `resource`. Invoke `success!` if the model is de
201
234
  |--------------|----------|--------------------------|
202
235
  | `resource` | `Object` | Resource to be destroyed |
203
236
 
204
- ### persist_resource
237
+ #### persist_resource
205
238
 
206
239
  | parameter | type | description |
207
240
  |----------------|----------|---------------------------------------------|
@@ -210,6 +243,52 @@ Call to `destroy` method of the `resource`. Invoke `success!` if the model is de
210
243
 
211
244
  For more info please view the [source code](lib/haku/resourceable.rb) of the module.
212
245
 
246
+
247
+ ### Haku::Controller
248
+
249
+ ```ruby
250
+ class UsersController < ApplicationController
251
+ include Haku::Controller
252
+
253
+ before_action :find_user
254
+
255
+ def update
256
+ execute Users::Update, user: @user, attributes: update_params
257
+
258
+ if execution.success?
259
+ redirect_to user_path(execution.resource)
260
+ else
261
+ render :edit, errors: execution.errors
262
+ end
263
+ end
264
+
265
+ private
266
+
267
+ def find_user
268
+ @user = User.find(params[:id])
269
+ end
270
+
271
+ def update_params
272
+ params.require(:user).permit(:first_name, :last_name)
273
+ end
274
+ end
275
+ ```
276
+
277
+
278
+ ### Using parent class
279
+
280
+ ```ruby
281
+ class ApplicationAction
282
+ include Haku::Core
283
+ include Haku::Resourceable
284
+ include Haku::Eventable
285
+ end
286
+
287
+ class Users::Update < ApplicationAction
288
+ end
289
+ ```
290
+
291
+
213
292
  ## Development
214
293
 
215
294
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests.
@@ -221,16 +300,19 @@ To release a new version, update the version number in `version.rb`, and then ru
221
300
  which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to
222
301
  [rubygems.org](https://rubygems.org).
223
302
 
303
+
224
304
  ## Contributing
225
305
 
226
306
  Bug reports and pull requests are welcome, please follow
227
307
  [Github Flow](https://docs.github.com/en/get-started/quickstart/github-flow).
228
308
 
309
+
229
310
  ## Code of Conduct
230
311
 
231
312
  Everyone interacting in the Haku project's codebases, issue trackers, chat rooms and mailing lists is expected to
232
313
  follow the [code of conduct](https://github.com/javierav/haku/blob/development/CODE_OF_CONDUCT.md).
233
314
 
315
+
234
316
  ## License
235
317
 
236
- Copyright © 2022 Javier Aranda. Released under the terms of the [MIT license](LICENSE).
318
+ Copyright © 2022-2023 Javier Aranda. Released under the terms of the [MIT license](LICENSE).
data/lib/haku/core.rb CHANGED
@@ -14,6 +14,7 @@ module Haku
14
14
  attr_reader :params
15
15
 
16
16
  class_attribute :haku_inputs, default: []
17
+ class_attribute :haku_before_call_callbacks, default: []
17
18
  class_attribute :haku_success_callbacks, default: []
18
19
  class_attribute :haku_failure_callbacks, default: []
19
20
  end
@@ -35,6 +36,10 @@ module Haku
35
36
  self.haku_inputs += names
36
37
  end
37
38
 
39
+ def before_call(*methods)
40
+ self.haku_before_call_callbacks += methods
41
+ end
42
+
38
43
  def on_success(*methods)
39
44
  self.haku_success_callbacks += methods
40
45
  end
@@ -48,13 +53,16 @@ module Haku
48
53
 
49
54
  module Callable
50
55
  def call
51
- response = catch(:finish) { super }
56
+ response = catch(:finish) do
57
+ (self.class.send(:haku_before_call_callbacks) || []).each { |cb| send(cb) }
58
+ super
59
+ end
52
60
 
53
61
  status = response.is_a?(Finish) ? response.status : :success
54
62
  payload = response.is_a?(Finish) ? response.payload : response
55
63
 
56
64
  Result.new(status, payload).tap do
57
- _haku_run_callbacks(status)
65
+ haku_run_callbacks(status)
58
66
  end
59
67
  end
60
68
  end
@@ -77,7 +85,7 @@ module Haku
77
85
  throw :finish, Finish.new(:failure, data)
78
86
  end
79
87
 
80
- def _haku_run_callbacks(status)
88
+ def haku_run_callbacks(status)
81
89
  (self.class.send("haku_#{status}_callbacks") || []).each { |cb| send(cb) }
82
90
  end
83
91
  end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "active_support/concern"
4
+ require "active_support/core_ext/string/inflections"
5
+
6
+ module Haku
7
+ module Delayable
8
+ extend ActiveSupport::Concern
9
+
10
+ if defined?(ActiveJob::Base)
11
+ class Job < ActiveJob::Base
12
+ def perform(klass, params)
13
+ klass.call(params)
14
+ end
15
+ end
16
+ end
17
+
18
+ class Delayed
19
+ def initialize(service, options={})
20
+ @service = service
21
+ @options = options.reverse_merge(
22
+ job: "::Haku::Delayable::Job",
23
+ queue: Haku.job_queue
24
+ )
25
+ end
26
+
27
+ def call(params={})
28
+ if job.present? && defined?(job)
29
+ job.set(@options).perform_later(@service, params)
30
+ else
31
+ @service.call(params)
32
+ end
33
+ end
34
+
35
+ private
36
+
37
+ def job
38
+ @job ||= begin
39
+ job = @options.delete(:job)
40
+ job.is_a?(String) ? job.safe_constantize : job
41
+ end
42
+ end
43
+ end
44
+
45
+ module ClassMethods
46
+ def delayed(options={})
47
+ ::Haku::Delayable::Delayed.new(self, options)
48
+ end
49
+ end
50
+ end
51
+ end
@@ -39,15 +39,19 @@ module Haku
39
39
 
40
40
  def haku_prepare_event_data(evt, data={})
41
41
  data.tap do
42
- haku_event_data_base(data)
43
42
  haku_event_data_name(data, evt)
44
43
  haku_event_data_values(data, evt)
45
44
  end
46
45
  end
47
46
 
48
- def haku_event_data_base(data)
49
- Haku.event_properties.each do |property|
50
- data[property] = send(property) if respond_to?(property)
47
+ def haku_event_data_name(data, evt)
48
+ key = Haku.event_property_for_name.to_sym
49
+ data[key] = haku_process_value(evt[key] || Haku.event_name)
50
+ end
51
+
52
+ def haku_event_data_values(data, evt)
53
+ evt.except(Haku.event_property_for_name.to_sym).each_pair do |key, value|
54
+ data[key] = haku_process_value(value)
51
55
  end
52
56
  end
53
57
 
@@ -59,17 +63,6 @@ module Haku
59
63
  end
60
64
  end
61
65
 
62
- def haku_event_data_name(data, evt)
63
- key = Haku.event_property_for_name.to_sym
64
- data[key] = evt[key] || haku_process_value(Haku.event_name)
65
- end
66
-
67
- def haku_event_data_values(data, evt)
68
- evt.except(Haku.event_property_for_name.to_sym).each_pair do |key, value|
69
- data[key] = haku_process_value(value)
70
- end
71
- end
72
-
73
66
  def haku_create_event(data)
74
67
  Haku.event_model.safe_constantize&.create(data)
75
68
  end
data/lib/haku/version.rb CHANGED
@@ -3,8 +3,8 @@
3
3
  module Haku
4
4
  module VERSION
5
5
  MAJOR = 1
6
- MINOR = 3
7
- TINY = 1
6
+ MINOR = 5
7
+ TINY = 0
8
8
  PRE = nil
9
9
 
10
10
  STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
data/lib/haku.rb CHANGED
@@ -4,18 +4,19 @@ require "active_support/core_ext/module/attribute_accessors"
4
4
  require "active_support/core_ext/string/inflections"
5
5
  require_relative "haku/controller"
6
6
  require_relative "haku/core"
7
+ require_relative "haku/delayable"
7
8
  require_relative "haku/eventable"
8
9
  require_relative "haku/resourceable"
9
10
  require_relative "haku/version"
10
11
 
11
12
  module Haku
12
13
  mattr_accessor :event_model, default: "Event"
13
- mattr_accessor :event_properties, default: %i[actor resource target context]
14
14
  mattr_accessor :event_property_for_name, default: :name
15
15
  mattr_accessor :event_name, default: proc {
16
16
  chain = self.class.name.underscore.split("/")
17
17
  (chain[0...-1].map(&:singularize) + [chain.last]).join(":")
18
18
  }
19
+ mattr_accessor :job_queue, default: :default
19
20
 
20
21
  class << self
21
22
  def configure
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: haku
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.1
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Javier Aranda
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-04-27 00:00:00.000000000 Z
11
+ date: 2023-01-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -16,7 +16,7 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '6.0'
19
+ version: '6.1'
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
22
  version: '8.0'
@@ -26,7 +26,7 @@ dependencies:
26
26
  requirements:
27
27
  - - ">="
28
28
  - !ruby/object:Gem::Version
29
- version: '6.0'
29
+ version: '6.1'
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
32
  version: '8.0'
@@ -44,7 +44,6 @@ files:
44
44
  - ".pryrc"
45
45
  - ".rubocop.yml"
46
46
  - ".tool-versions"
47
- - Appraisals
48
47
  - CHANGELOG.md
49
48
  - CODE_OF_CONDUCT.md
50
49
  - Gemfile
@@ -52,12 +51,10 @@ files:
52
51
  - LICENSE
53
52
  - README.md
54
53
  - Rakefile
55
- - gemfiles/activesupport_6.0.gemfile
56
- - gemfiles/activesupport_6.1.gemfile
57
- - gemfiles/activesupport_7.0.gemfile
58
54
  - lib/haku.rb
59
55
  - lib/haku/controller.rb
60
56
  - lib/haku/core.rb
57
+ - lib/haku/delayable.rb
61
58
  - lib/haku/eventable.rb
62
59
  - lib/haku/resourceable.rb
63
60
  - lib/haku/result.rb
@@ -67,8 +64,8 @@ licenses:
67
64
  - MIT
68
65
  metadata:
69
66
  homepage_uri: https://github.com/javierav/haku
70
- source_code_uri: https://github.com/javierav/haku/tree/v1.3.1
71
- changelog_uri: https://github.com/javierav/haku/blob/v1.3.1/CHANGELOG.md
67
+ source_code_uri: https://github.com/javierav/haku/tree/v1.5.0
68
+ changelog_uri: https://github.com/javierav/haku/blob/v1.5.0/CHANGELOG.md
72
69
  rubygems_mfa_required: 'true'
73
70
  post_install_message:
74
71
  rdoc_options:
@@ -79,7 +76,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
79
76
  requirements:
80
77
  - - ">="
81
78
  - !ruby/object:Gem::Version
82
- version: 2.6.0
79
+ version: 2.7.0
83
80
  required_rubygems_version: !ruby/object:Gem::Requirement
84
81
  requirements:
85
82
  - - ">="
@@ -89,5 +86,5 @@ requirements: []
89
86
  rubygems_version: 3.3.7
90
87
  signing_key:
91
88
  specification_version: 4
92
- summary: A library for build simple service objects
89
+ summary: A simple library for build simple service objects
93
90
  test_files: []
data/Appraisals DELETED
@@ -1,11 +0,0 @@
1
- appraise "activesupport-6.0" do
2
- gem "activesupport", "6.0"
3
- end
4
-
5
- appraise "activesupport-6.1" do
6
- gem "activesupport", "6.1"
7
- end
8
-
9
- appraise "activesupport-7.0" do
10
- gem "activesupport", "7.0"
11
- end
@@ -1,14 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "appraisal", "~> 2.4"
6
- gem "minitest", "~> 5.0"
7
- gem "pry", "~> 0.14"
8
- gem "rake", "~> 13.0"
9
- gem "rubocop", "~> 1.21"
10
- gem "rubocop-minitest", "~> 0.19"
11
- gem "rubocop-rake", "~> 0.6"
12
- gem "activesupport", "6.0"
13
-
14
- gemspec path: "../"
@@ -1,14 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "appraisal", "~> 2.4"
6
- gem "minitest", "~> 5.0"
7
- gem "pry", "~> 0.14"
8
- gem "rake", "~> 13.0"
9
- gem "rubocop", "~> 1.21"
10
- gem "rubocop-minitest", "~> 0.19"
11
- gem "rubocop-rake", "~> 0.6"
12
- gem "activesupport", "6.1"
13
-
14
- gemspec path: "../"
@@ -1,14 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "appraisal", "~> 2.4"
6
- gem "minitest", "~> 5.0"
7
- gem "pry", "~> 0.14"
8
- gem "rake", "~> 13.0"
9
- gem "rubocop", "~> 1.21"
10
- gem "rubocop-minitest", "~> 0.19"
11
- gem "rubocop-rake", "~> 0.6"
12
- gem "activesupport", "7.0"
13
-
14
- gemspec path: "../"