readymade 0.2.8 → 0.3.5

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: 8b21e8901b1feeed09d060f31d886d21041a3c13c000e4c6a90c11a0cd50de12
4
- data.tar.gz: 2909b312ed7110ff519b67a203023389c45db97e00be314e599df9d1b8f60337
3
+ metadata.gz: f6af81b9c83a1dad8f64ead23ebe956ffe8341308c3acef6211a9c76fa5df5fb
4
+ data.tar.gz: d6cda3a6863ce1330df753de6e6fd51c8f0005e05b0aa8d10534b59eb5b6104f
5
5
  SHA512:
6
- metadata.gz: 359f4a10a9afbcadfff88b655d27dc8f5d4e971cf812f5ab7bc74e27b48b81b273fb79678e0de057ddc3d70c44077420e7fd13da7b11e0a2225fed1c35432213
7
- data.tar.gz: '08a127d29a24149dab9e1ac7d8eac89eb008c36f90c1fb569e83cc5ee7920f9ed3503bf2fac43b92e90c47a0fb4861a76bc308922fe61a6fd5098860bca24740'
6
+ metadata.gz: 7f05bc204146596fd641f742d6ee2738dfc8db887ddb35c1588f1a1aa1639f80fc334920333206e2392999ea7c01f9db42c585b356ec33cfa9ec528cec0249f2
7
+ data.tar.gz: 1d7196a1c79a79169bcf865406dca0aa8bdfcfb07d7e659616fe2563260b3dbfcc95ed8f19c3f43eca7242e7acd573648629a90cce803495474b2289cc408d19
data/.gitignore CHANGED
@@ -9,3 +9,4 @@
9
9
 
10
10
  # rspec failure tracking
11
11
  .rspec_status
12
+ spec/.DS_Store
data/CHANGELOG.md CHANGED
@@ -1,6 +1,15 @@
1
1
  Changelog
2
2
  All notable changes to this project will be documented in this file.
3
3
 
4
+ ## [0.4.0] - 2023-06-22
5
+
6
+ * Add `.call!` method to `Readymade::Action` to raise an error if not success
7
+ * Add `.call_async!` method to `Readymade::Action` to raise an error in background if not success
8
+
9
+ ## [0.3.0] - 2023-03-14
10
+
11
+ * Add `.call_async` method to `Readymade::Action` to run service in background
12
+
4
13
  ## [0.2.8] - 2022-11-10
5
14
 
6
15
  ### Fixes
data/Gemfile CHANGED
@@ -2,7 +2,8 @@
2
2
 
3
3
  source 'https://rubygems.org'
4
4
 
5
- # Specify your gem's dependencies in lead.gemspec
5
+ # Specify your gem's dependencies in readymade.gemspec
6
6
  gemspec
7
-
8
- gem 'activemodel'
7
+ #
8
+ # gem 'activemodel'
9
+ # gem 'activejob'
data/Gemfile.lock CHANGED
@@ -1,25 +1,31 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- readymade (0.2.8)
4
+ readymade (0.3.5)
5
+ activejob
6
+ activemodel
5
7
 
6
8
  GEM
7
9
  remote: https://rubygems.org/
8
10
  specs:
9
- activemodel (6.1.4.1)
10
- activesupport (= 6.1.4.1)
11
- activesupport (6.1.4.1)
11
+ activejob (7.0.5)
12
+ activesupport (= 7.0.5)
13
+ globalid (>= 0.3.6)
14
+ activemodel (7.0.5)
15
+ activesupport (= 7.0.5)
16
+ activesupport (7.0.5)
12
17
  concurrent-ruby (~> 1.0, >= 1.0.2)
13
18
  i18n (>= 1.6, < 2)
14
19
  minitest (>= 5.1)
15
20
  tzinfo (~> 2.0)
16
- zeitwerk (~> 2.3)
17
21
  byebug (11.1.3)
18
- concurrent-ruby (1.1.9)
22
+ concurrent-ruby (1.2.2)
19
23
  diff-lcs (1.4.4)
20
- i18n (1.8.11)
24
+ globalid (1.1.0)
25
+ activesupport (>= 5.0)
26
+ i18n (1.14.1)
21
27
  concurrent-ruby (~> 1.0)
22
- minitest (5.14.4)
28
+ minitest (5.18.1)
23
29
  rake (13.0.6)
24
30
  rspec (3.10.0)
25
31
  rspec-core (~> 3.10.0)
@@ -34,15 +40,13 @@ GEM
34
40
  diff-lcs (>= 1.2.0, < 2.0)
35
41
  rspec-support (~> 3.10.0)
36
42
  rspec-support (3.10.3)
37
- tzinfo (2.0.4)
43
+ tzinfo (2.0.6)
38
44
  concurrent-ruby (~> 1.0)
39
- zeitwerk (2.5.1)
40
45
 
41
46
  PLATFORMS
42
47
  ruby
43
48
 
44
49
  DEPENDENCIES
45
- activemodel
46
50
  byebug
47
51
  rake
48
52
  readymade!
data/README.md CHANGED
@@ -131,6 +131,61 @@ response.data[:record]
131
131
  response.data[:any_other_data]
132
132
  ```
133
133
 
134
+ ### `.call_async` - any action could we call async (using ActiveJob)
135
+
136
+ ```ruby
137
+ class Orders::Actions::SendNotifications < Readymade::Action
138
+ def call
139
+ send_email
140
+ send_push
141
+ send_slack
142
+
143
+ response(:success, record: record, any_other_data: data)
144
+ end
145
+ ...
146
+ end
147
+
148
+ Orders::Actions::SendNotifications.call_async(order: order)
149
+ ```
150
+
151
+
152
+ ### `.call!` - raise error unless response is success
153
+ (action must return Readymade::Response.new(:success))
154
+
155
+ ```ruby
156
+ class Orders::Actions::SendNotifications < Readymade::Action
157
+ def call!
158
+ send_email
159
+ return response(:fail, errors: errors) unless email_sent?
160
+ send_push
161
+ send_slack
162
+
163
+ response(:success, record: record, any_other_data: data)
164
+ end
165
+ ...
166
+ end
167
+
168
+ Orders::Actions::SendNotifications.call!(order: order) # raise error if response is fail
169
+ ```
170
+ ### `.call_async!` - runs in background and raise error unless response is success
171
+ (action must return Readymade::Response.new(:success))
172
+
173
+ ```ruby
174
+ class Orders::Actions::SendNotifications < Readymade::Action
175
+ def call!
176
+ send_email
177
+ return response(:fail, errors: errors) unless email_sent?
178
+ send_push
179
+ send_slack
180
+
181
+ response(:success, record: record, any_other_data: data)
182
+ end
183
+ ...
184
+ end
185
+
186
+ Orders::Actions::SendNotifications.call_async!(order: order) # job will be failed
187
+ ```
188
+
134
189
  ### Readymade::Operation
135
190
 
136
191
  Provides set of help methods like: `build_form`, `form_valid?`, `validation_fail`, `save_record`, etc.
@@ -1,15 +1,34 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'readymade/response'
4
+ require 'readymade/background_job'
5
+ require 'readymade/background_bang_job'
4
6
 
5
7
  module Readymade
6
8
  class Action
7
9
  class NonKeywordArgumentsError < StandardError; end
10
+ class UnSuccessError < StandardError; end
8
11
 
9
12
  def self.call(*args, &block)
10
13
  new(*args, &block).call
11
14
  end
12
15
 
16
+ def self.call!(*args, &block)
17
+ new(*args, &block).call!.then do |res|
18
+ raise UnSuccessError unless res.try(:success?)
19
+
20
+ res
21
+ end
22
+ end
23
+
24
+ def self.call_async(*args, &block)
25
+ new(*args, &block).call_async
26
+ end
27
+
28
+ def self.call_async!(*args, &block)
29
+ new(*args, &block).call_async!
30
+ end
31
+
13
32
  attr_reader :args, :data
14
33
 
15
34
  def initialize(args = {})
@@ -23,6 +42,16 @@ module Readymade
23
42
 
24
43
  def call; end
25
44
 
45
+ def call!; end
46
+
47
+ def call_async
48
+ ::Readymade::BackgroundJob.perform_later(class_name: self.class.name, **args)
49
+ end
50
+
51
+ def call_async!
52
+ ::Readymade::BackgroundBangJob.perform_later(class_name: self.class.name, **args)
53
+ end
54
+
26
55
  def response(status, *args)
27
56
  Response.new(status, *args)
28
57
  end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_job' unless defined?(::ActiveJob)
4
+
5
+ module Readymade
6
+ class BackgroundBangJob < ::ActiveJob::Base
7
+ # queue_as :default
8
+
9
+ def perform(**args)
10
+ args.delete(:class_name).to_s.constantize.send(:call!, **args)
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_job' unless defined?(::ActiveJob)
4
+
5
+ module Readymade
6
+ class BackgroundJob < ::ActiveJob::Base
7
+ # queue_as :default
8
+
9
+ def perform(**args)
10
+ args.delete(:class_name).to_s.constantize.send(:call, **args)
11
+ end
12
+ end
13
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Readymade
4
- VERSION = '0.2.8'
4
+ VERSION = '0.3.5'
5
5
  end
data/lib/readymade.rb CHANGED
@@ -3,6 +3,8 @@
3
3
  require 'readymade/model/api_attachable'
4
4
  require 'readymade/model/filterable'
5
5
  require 'readymade/controller/serialization'
6
+ require 'readymade/background_job'
7
+ require 'readymade/background_bang_job'
6
8
  require 'readymade/action'
7
9
  require 'readymade/form'
8
10
  require 'readymade/instant_form'
data/readymade.gemspec CHANGED
@@ -35,4 +35,7 @@ Gem::Specification.new do |spec|
35
35
  spec.add_development_dependency 'byebug'
36
36
  spec.add_development_dependency 'rake'
37
37
  spec.add_development_dependency 'rspec'
38
+
39
+ spec.add_dependency "activemodel"
40
+ spec.add_dependency "activejob"
38
41
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: readymade
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.8
4
+ version: 0.3.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - OrestF
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-12-07 00:00:00.000000000 Z
11
+ date: 2023-06-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: byebug
@@ -52,6 +52,34 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: activemodel
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: activejob
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
55
83
  description: Set of base classes for ABDI architecture
56
84
  email:
57
85
  - falchuko@gmail.com
@@ -73,6 +101,8 @@ files:
73
101
  - bin/setup
74
102
  - lib/readymade.rb
75
103
  - lib/readymade/action.rb
104
+ - lib/readymade/background_bang_job.rb
105
+ - lib/readymade/background_job.rb
76
106
  - lib/readymade/controller/serialization.rb
77
107
  - lib/readymade/form.rb
78
108
  - lib/readymade/instant_form.rb