deferred_request 0.0.1 → 1.0.2

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: 8a9e96cf574be720de97ae91ae7f06d09b082d56ffc2aef3eae449653dbce7b9
4
- data.tar.gz: f604991997404bf38fad4cae5fd40b5b00088d952f0f3d15bd1a64b4f9d4a078
3
+ metadata.gz: 4a12d759682c3ca5d2e1171cc6da944e80ce6a9b0f3ccfb65dcaca5d10b2a0c9
4
+ data.tar.gz: 6ef803175b32093e08d330caebb28d06fbd31e0c3db33f34304ec3163b31e63a
5
5
  SHA512:
6
- metadata.gz: ffa3d29e8e24b1c6dc48200cb6463f4facef2ded394cd820b0a5083dee8948f779b2f0e439779a8276a786dffbfc6790b20679a98d1481861a2b8bd9410677a3
7
- data.tar.gz: 5bffe0fe31acd967710261f6a23925ccf48db5b9e1b573df520eec7d6d42c97df13cf92ac1d7853007d945fd3ac4ae2fb2ecee0cff8bef62eaf70dc380d08673
6
+ metadata.gz: d2efcff67bba0f0d7fcd75ae8e08e8cb120412753cc1a1e5439ea37b13bae5323095a866e9d7671be31c13701e8c85aeeb060592537d9b1e087a658884a08cb7
7
+ data.tar.gz: 5004f590c976b08777e42753b19bb53588dfe54386e6470818ab366f60b363748f0c87728c963a499eba0cd6fafcbba0b422430c35353f784ff3d10921ff5399
data/README.md CHANGED
@@ -45,10 +45,7 @@ def status_callback
45
45
  head :ok
46
46
 
47
47
  # Then queue the request to run later
48
- deferred_request = DeferredRequest::DeferredRequest.from_request(request, params)
49
- deferred_request.save!
50
-
51
- deferred_request.peform_later
48
+ deferred_request = DeferredRequest::DeferredRequest.perform_later_from_request!(request)
52
49
  end
53
50
 
54
51
  # Your deferred request method will be called later (via a job)
@@ -65,6 +62,27 @@ end
65
62
  # ...
66
63
  ```
67
64
 
65
+ ### Class Methods
66
+ - `DeferredRequest::DeferredRequest.from_request(request)` - returns a DeferredRequest::DeferredRequest object (unsaved). Returns the DeferredRequest::DeferredRequest instance.
67
+ - `DeferredRequest::DeferredRequest.perform_later_from_request!(request)` - creates a deferred request (saved) and enqueues job to process the request. Returns the DeferredRequest::DeferredRequest instance.
68
+
69
+ ### Instance Methods
70
+ - `deferred_request.perform_later` - Enqueues a job to `perform!` the deferred request later. Returns the job id.
71
+ - `deferred_request.perform!` - Calls the `#{controller}_deferred(deferred_request)` method to be processed. Returns the deferred_request instance or raises an exception.
72
+
73
+ ## Configuration
74
+
75
+ - `DeferredRequest.model_parent_class` - Set the parent class
76
+ - `DeferredRequest.deferred_request_instance_class` - Set the instance class that is created (in-case you sub-class)
77
+ - `DeferredRequest.job_queue` - Set the job queue for the deferred request job
78
+
79
+ ```ruby
80
+ # config/initializers/deferred_request.rb
81
+ DeferredRequest.model_parent_class = "MyParentClass"
82
+ DeferredRequest.job_queue = "low"
83
+ ```
84
+
85
+
68
86
  ## 🙏 Contributing
69
87
 
70
88
  If you have an issue you'd like to submit, please do so using the issue tracker in GitHub. In order for us to help you in the best way possible, please be as detailed as you can.
@@ -1,26 +1,19 @@
1
1
  module DeferredRequest
2
2
  class TestController < ApplicationController
3
- skip_before_action :verify_authenticity_token
4
-
5
3
  def status_callback
6
- # We can go ahead and give a :ok response (fast and snappy)
7
4
  head :ok
8
-
9
- # Then queue the request to run later
10
- deferred_request = DeferredRequest::DeferredRequest.from_request(request, params)
11
- deferred_request.save!
12
-
13
- deferred_request.peform_later
5
+ DeferredRequest.perform_later_from_request!(request)
14
6
  end
15
7
 
16
8
  def status_callback_deferred(deferred_request)
17
- # do some actual processing
18
- if deferred_request.params["SmsStatus"] == "delivered"
19
- # mark message as delivered
20
- end
21
-
22
- # return a status and it will be saved to the database
23
- true
9
+ # Do something with the deferred request
10
+ deferred_request.params.dig("answer")
11
+ end
12
+
13
+ def status_error
14
+ # don't add the "_deferred" method (used for testing)
15
+ head :ok
16
+ DeferredRequest.perform_later_from_request!(request)
24
17
  end
25
18
  end
26
19
  end
@@ -1,6 +1,6 @@
1
1
  module DeferredRequest
2
2
  class DeferredRequestJob < ApplicationJob
3
- queue_as :default
3
+ queue_as ::DeferredRequest.job_queue
4
4
 
5
5
  def perform(*args)
6
6
  id = args[0]
@@ -1,7 +1,8 @@
1
1
  module DeferredRequest
2
- class DeferredRequest < ApplicationRecord
3
- serialize :routing, JSON, default: {}
4
- serialize :request, JSON, default: {}
2
+ class DeferredRequest < DeferredRequest.model_parent_class.constantize
3
+ serialize :routing
4
+ serialize :request
5
+ serialize :result
5
6
 
6
7
  store_accessor :routing, "controller", "action"
7
8
  store_accessor :request, "url", "method", "headers", "params", "remote_ip"
@@ -11,12 +12,11 @@ module DeferredRequest
11
12
  # request: ActionDispatch::Request
12
13
  # create a deferred request from a ActionDispatch::Request
13
14
  def self.from_request(request)
14
- deferred_request = DeferredRequest.new
15
+ deferred_request = ::DeferredRequest.deferred_request_instance_class.constantize.new
15
16
 
16
- debugger
17
- deferred_request.controller = request.controller_class
17
+ deferred_request.controller = request.controller_class.name
18
18
  deferred_request.action = request.params["action"]
19
-
19
+
20
20
  deferred_request.url = request.url
21
21
  deferred_request.method = request.method
22
22
  deferred_request.headers = get_headers(request)
@@ -26,37 +26,44 @@ module DeferredRequest
26
26
  deferred_request
27
27
  end
28
28
 
29
+ def self.perform_later_from_request!(request)
30
+ deferred_request = DeferredRequest.from_request(request)
31
+ deferred_request.save!
32
+
33
+ deferred_request.perform_later
34
+
35
+ deferred_request
36
+ end
37
+
29
38
  def perform_later
30
- DeferredRequestJob.perform_later(self.id)
39
+ DeferredRequestJob.perform_later(id)
31
40
  end
32
41
 
33
42
  def perform!
34
43
  begin
35
44
  self.status = :processing
36
- self.save!
45
+ save!
37
46
 
38
- klass = self.controller.constantize.new
47
+ klass = controller.constantize.new
39
48
 
40
- self.result = klass.try("#{self.action}_deferred".to_sym, self)
49
+ self.result = klass.send("#{action}_deferred".to_sym, self)
41
50
  self.status = :complete
42
51
  rescue => e
43
52
  Rails.logger.error("DeferredRequest::DeferredRequestJob: #{e.message}")
44
53
  self.result = e.message
45
54
  self.status = :error
46
55
  end
47
-
48
- self.save!
49
- end
50
56
 
51
- private
57
+ save!
58
+ end
52
59
 
53
- def self.get_headers(request)
54
- # Get the request headers from the request
55
- {}.tap do |t|
56
- request.headers.each do |key, value|
57
- t[key] = value if key.downcase.starts_with?("http")
58
- end
60
+ def self.get_headers(request)
61
+ # Get the request headers from the request
62
+ {}.tap do |t|
63
+ request.headers.each do |key, value|
64
+ t[key] = value if key.downcase.starts_with?("http")
59
65
  end
60
66
  end
67
+ end
61
68
  end
62
69
  end
data/config/routes.rb CHANGED
@@ -1,3 +1,4 @@
1
1
  DeferredRequest::Engine.routes.draw do
2
- post 'status_callback' => 'deferred_request/test#status_callback'
2
+ post "status_callback" => "test#status_callback"
3
+ post "status_error" => "test#status_error"
3
4
  end
@@ -1,3 +1,3 @@
1
1
  module DeferredRequest
2
- VERSION = "0.0.1"
2
+ VERSION = "1.0.2"
3
3
  end
@@ -3,4 +3,12 @@ require "deferred_request/engine"
3
3
 
4
4
  module DeferredRequest
5
5
  # Your code goes here...
6
+ mattr_accessor :model_parent_class
7
+ @@model_parent_class = "ApplicationRecord"
8
+
9
+ mattr_accessor :deferred_request_instance_class
10
+ @@deferred_request_instance_class = "DeferredRequest::DeferredRequest"
11
+
12
+ mattr_accessor :job_queue
13
+ @@job_queue = "default"
6
14
  end
metadata CHANGED
@@ -1,29 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: deferred_request
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Austin Miller
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-02-06 00:00:00.000000000 Z
11
+ date: 2022-02-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '6.1'
19
+ version: 6.0.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '6.1'
26
+ version: 6.0.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: standardrb
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  description: A simple library to defer http requests until you can actually process
28
42
  them. (Think webhooks. Stripe webhooks, Twilio status callbacks, ect.)
29
43
  email:
@@ -75,7 +89,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
75
89
  - !ruby/object:Gem::Version
76
90
  version: '0'
77
91
  requirements: []
78
- rubygems_version: 3.2.15
92
+ rubygems_version: 3.2.3
79
93
  signing_key:
80
94
  specification_version: 4
81
95
  summary: Deferred Request