delayed_rabbit 0.1.0 → 1.1.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: 1dacae11a213b6fb4a5e38990cd2667a447a5404c87996d4f3cc519b3d55e943
4
- data.tar.gz: b7372e3ab221c15fc15d759379d9fcc290931193c4bc18e5e3fcb49d3211da04
3
+ metadata.gz: 66189b91092000fe55f71ff901f90ffcd208deccc57d819fdc389010db465928
4
+ data.tar.gz: 8c845d00436f5a5f5d521aface9f97b5941a904937a473710f7f975a4d6562af
5
5
  SHA512:
6
- metadata.gz: dd439f723913b5c917711bd2e258eb7241cf6c7eb63f1f2b2f21ef8e8a981aaa1af1e98ae883c422b3975f22fa517a968c564af4e81f8d796f16801a4d739351
7
- data.tar.gz: 52342b65ff0a262378938d9a69eef7b40c643d3ef2b47b5369b4a897b0c372a3fdb7be3b511e4a6d31dddfc4a7ac63fa7da125b8554b28b169ba873152d873fa
6
+ metadata.gz: 4e06ed9cfb919d2bf9d7b08e36422c03f87275d599e51638211b5cd0f4f2c739ec1554b7f6ce7fe27ba1c9cb39c2d81e5f38f96552252c92ac50c63a9242dd68
7
+ data.tar.gz: 816d0d49023b58081a7e9ddf8c681ce6d0d742c962b5620c658ec8a48d9b87bc42d2ea900d3d41db3b3ba52c5bf412d76c2919cb1ccdeaba81b5bf7cbc360d51
data/README.md CHANGED
@@ -51,36 +51,122 @@ Or install it yourself as:
51
51
  gem install delayed_rabbit
52
52
  ```
53
53
 
54
- ## Usage
54
+ ## Rails Integration
55
55
 
56
- ### Basic Usage
56
+ ### 1. Install the Gem
57
+
58
+ Add to your Gemfile:
59
+
60
+ ```ruby
61
+ gem 'delayed_rabbit'
62
+ ```
63
+
64
+ ### 2. Run the Installer
65
+
66
+ Run the generator to set up configuration files:
67
+
68
+ ```bash
69
+ rails generate delayed_rabbit:install
70
+ ```
71
+
72
+ This will create:
73
+ - `config/initializers/delayed_rabbit.rb` - Main configuration file
74
+ - `config/rabbitmq.yml` - Environment-specific RabbitMQ settings
75
+
76
+ ### 3. Configure RabbitMQ
77
+
78
+ Edit `config/rabbitmq.yml` with your RabbitMQ settings:
79
+
80
+ ```yaml
81
+ development:
82
+ host: localhost
83
+ port: 5672
84
+ user: guest
85
+ password: guest
86
+ vhost: /
87
+
88
+ production:
89
+ host: <%= ENV['RABBITMQ_HOST'] %>
90
+ port: <%= ENV['RABBITMQ_PORT'] || 5672 %>
91
+ user: <%= ENV['RABBITMQ_USER'] %>
92
+ password: <%= ENV['RABBITMQ_PASSWORD'] %>
93
+ vhost: <%= ENV['RABBITMQ_VHOST'] || '/' %>
94
+ ```
95
+
96
+ ### 4. Use in Your Application
97
+
98
+ #### In Models/Services
99
+
100
+ ```ruby
101
+ class UserNotifier
102
+ def self.send_welcome_notification(user)
103
+ DelayedRabbit::JobPublisher.publish(
104
+ {
105
+ type: "welcome_email",
106
+ user_id: user.id,
107
+ email: user.email
108
+ },
109
+ delay_ms: 5000, # 5 seconds delay
110
+ routing_key: "notifications.welcome"
111
+ )
112
+ end
113
+ end
114
+ ```
115
+
116
+ #### In Controllers
117
+
118
+ ```ruby
119
+ class UsersController < ApplicationController
120
+ def create
121
+ user = User.create(user_params)
122
+ UserNotifier.send_welcome_notification(user)
123
+ redirect_to root_path, notice: 'User created successfully'
124
+ end
125
+ end
126
+ ```
127
+
128
+ #### Using Rake Tasks
129
+
130
+ The gem provides a rake task for testing:
131
+
132
+ ```bash
133
+ # Enqueue a test job with 5 second delay
134
+ bundle exec rake delayed_rabbit:enqueue_test_job[5000]
135
+
136
+ # Enqueue a notification job
137
+ bundle exec rake jobs:enqueue_notification[5000,123]
138
+ ```
139
+
140
+ ## Usage (Non-Rails)
141
+
142
+ If you're not using Rails:
57
143
 
58
144
  ```ruby
59
145
  require 'delayed_rabbit'
60
146
 
61
- # Create a publisher with custom connection options
62
- publisher = DelayedRabbit::JobPublisher.new(
63
- connection_options: {
147
+ # Configure manually
148
+ DelayedRabbit.configure do |config|
149
+ config.connection_options = {
64
150
  host: "localhost",
65
151
  port: 5672,
66
152
  user: "guest",
67
- password: "guest",
68
- vhost: "/"
153
+ password: "guest"
69
154
  }
70
- )
155
+ end
71
156
 
72
- # Publish a job with 5000ms (5 seconds) delay
73
- job_data = {
74
- type: "email_notification",
75
- recipient: "user@example.com",
76
- subject: "Delayed Email",
77
- body: "This email was sent after a delay"
78
- }
157
+ # Create a publisher
158
+ publisher = DelayedRabbit::JobPublisher.new
79
159
 
80
- # Publish with custom routing key
81
- publisher.publish(job_data, delay_ms: 5000, routing_key: "notifications.email")
160
+ # Publish a job
161
+ publisher.publish(
162
+ {
163
+ type: "email_notification",
164
+ recipient: "user@example.com"
165
+ },
166
+ delay_ms: 5000
167
+ )
82
168
 
83
- # Close the connection when done
169
+ # Close connection
84
170
  publisher.close
85
171
  ```
86
172
 
@@ -3,12 +3,12 @@ require_relative "lib/delayed_rabbit/version"
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = "delayed_rabbit"
5
5
  spec.version = DelayedRabbit::VERSION
6
- spec.authors = ["Your Name"]
7
- spec.email = ["your.email@example.com"]
6
+ spec.authors = ["ShekharBora"]
7
+ spec.email = ["chandu42011@gmail.com"]
8
8
 
9
9
  spec.summary = "A lightweight Ruby gem for scheduling delayed background jobs using RabbitMQ"
10
10
  spec.description = "delayed_rabbit provides a simple interface for scheduling background jobs with delays using RabbitMQ's delayed message exchange plugin"
11
- spec.homepage = "https://github.com/yourusername/delayed_rabbit"
11
+ spec.homepage = "https://github.com/shekharbora/delayed_rabbit"
12
12
  spec.license = "MIT"
13
13
  spec.required_ruby_version = "~> 3.2"
14
14
 
@@ -31,6 +31,8 @@ Gem::Specification.new do |spec|
31
31
  # Development dependencies
32
32
  spec.add_development_dependency "bundler", "~> 2.0"
33
33
  spec.add_development_dependency "rake", "~> 13.0"
34
- spec.add_development_dependency "rspec", "~> 3.0"
35
- spec.add_development_dependency "pry"
34
+ spec.add_development_dependency "minitest", "~> 5.0"
35
+ spec.add_development_dependency "mocha", "~> 1.14"
36
+ spec.add_development_dependency "byebug"
37
+ spec.add_development_dependency "rails", ">= 6.0.0"
36
38
  end
@@ -0,0 +1,35 @@
1
+ require "delayed_rabbit"
2
+
3
+ module DelayedRabbit
4
+ class Railtie < Rails::Railtie
5
+ config.after_initialize do
6
+ DelayedRabbit.configure do |config|
7
+ config.connection_options = {
8
+ host: Rails.application.config_for(:rabbitmq)&.dig(:host) || "localhost",
9
+ port: Rails.application.config_for(:rabbitmq)&.dig(:port) || 5672,
10
+ user: Rails.application.config_for(:rabbitmq)&.dig(:user) || "guest",
11
+ password: Rails.application.config_for(:rabbitmq)&.dig(:password) || "guest",
12
+ vhost: Rails.application.config_for(:rabbitmq)&.dig(:vhost) || "/"
13
+ }
14
+
15
+ config.exchange_options = {
16
+ type: Rails.application.config_for(:rabbitmq)&.dig(:exchange_type) || "x-delayed-message",
17
+ durable: true,
18
+ arguments: {"x-delayed-type" => "topic"}
19
+ }
20
+
21
+ config.queue_options = {
22
+ durable: true,
23
+ arguments: {
24
+ "x-dead-letter-exchange" => "delayed_jobs",
25
+ "x-dead-letter-routing-key" => "delayed_jobs"
26
+ }
27
+ }
28
+ end
29
+ end
30
+
31
+ rake_tasks do
32
+ load "tasks/delayed_rabbit.rake"
33
+ end
34
+ end
35
+ end
@@ -1,3 +1,3 @@
1
1
  module DelayedRabbit
2
- VERSION = "0.1.0"
2
+ VERSION = "1.1.0"
3
3
  end
@@ -1,6 +1,39 @@
1
1
  require "delayed_rabbit/version"
2
2
  require "delayed_rabbit/job_publisher"
3
+ require "delayed_rabbit/railtie" if defined?(Rails)
3
4
 
4
5
  module DelayedRabbit
5
- # Your code goes here...
6
+ class << self
7
+ attr_accessor :configuration
8
+
9
+ def configure
10
+ self.configuration ||= Configuration.new
11
+ yield(configuration) if block_given?
12
+ end
13
+ end
14
+
15
+ class Configuration
16
+ attr_accessor :connection_options, :exchange_options, :queue_options
17
+
18
+ def initialize
19
+ @connection_options = {
20
+ host: "localhost",
21
+ port: 5672,
22
+ user: "guest",
23
+ password: "guest"
24
+ }
25
+ @exchange_options = {
26
+ type: "x-delayed-message",
27
+ durable: true,
28
+ arguments: {"x-delayed-type" => "topic"}
29
+ }
30
+ @queue_options = {
31
+ durable: true,
32
+ arguments: {
33
+ "x-dead-letter-exchange" => "delayed_jobs",
34
+ "x-dead-letter-routing-key" => "delayed_jobs"
35
+ }
36
+ }
37
+ end
38
+ end
6
39
  end
@@ -0,0 +1,30 @@
1
+ # Configure Delayed Rabbit
2
+ DelayedRabbit.configure do |config|
3
+ # Connection settings
4
+ config.connection_options = {
5
+ host: ENV['RABBITMQ_HOST'] || "localhost",
6
+ port: ENV['RABBITMQ_PORT'] || 5672,
7
+ user: ENV['RABBITMQ_USER'] || "guest",
8
+ password: ENV['RABBITMQ_PASSWORD'] || "guest",
9
+ vhost: ENV['RABBITMQ_VHOST'] || "/",
10
+ automatic_recovery: true,
11
+ network_recovery_interval: 10
12
+ }
13
+
14
+ # Exchange settings
15
+ config.exchange_options = {
16
+ type: "x-delayed-message",
17
+ durable: true,
18
+ arguments: {"x-delayed-type" => "topic"}
19
+ }
20
+
21
+ # Queue settings
22
+ config.queue_options = {
23
+ durable: true,
24
+ arguments: {
25
+ "x-dead-letter-exchange" => "delayed_jobs",
26
+ "x-dead-letter-routing-key" => "delayed_jobs",
27
+ "x-message-ttl" => 3600000 # 1 hour TTL
28
+ }
29
+ }
30
+ end
@@ -0,0 +1,44 @@
1
+ development:
2
+ host: localhost
3
+ port: 5672
4
+ user: guest
5
+ password: guest
6
+ vhost: /
7
+ exchange_type: x-delayed-message
8
+
9
+ # Optional settings
10
+ automatic_recovery: true
11
+ network_recovery_interval: 10
12
+
13
+ # Queue settings
14
+ message_ttl: 3600000 # 1 hour TTL
15
+
16
+ test:
17
+ host: localhost
18
+ port: 5672
19
+ user: guest
20
+ password: guest
21
+ vhost: /
22
+ exchange_type: x-delayed-message
23
+
24
+ # Optional settings
25
+ automatic_recovery: false
26
+ network_recovery_interval: 10
27
+
28
+ # Queue settings
29
+ message_ttl: 3600000 # 1 hour TTL
30
+
31
+ production:
32
+ host: <%= ENV['RABBITMQ_HOST'] %>
33
+ port: <%= ENV['RABBITMQ_PORT'] || 5672 %>
34
+ user: <%= ENV['RABBITMQ_USER'] %>
35
+ password: <%= ENV['RABBITMQ_PASSWORD'] %>
36
+ vhost: <%= ENV['RABBITMQ_VHOST'] || '/' %>
37
+ exchange_type: x-delayed-message
38
+
39
+ # Optional settings
40
+ automatic_recovery: true
41
+ network_recovery_interval: 10
42
+
43
+ # Queue settings
44
+ message_ttl: 3600000 # 1 hour TTL
@@ -0,0 +1,17 @@
1
+ require "rails/generators"
2
+
3
+ module DelayedRabbit
4
+ module Generators
5
+ class InstallGenerator < Rails::Generators::Base
6
+ source_root File.expand_path("templates", __dir__)
7
+
8
+ def copy_initializer
9
+ template "initializer.rb", "config/initializers/delayed_rabbit.rb"
10
+ end
11
+
12
+ def create_rabbitmq_config
13
+ template "rabbitmq.yml", "config/rabbitmq.yml"
14
+ end
15
+ end
16
+ end
17
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: delayed_rabbit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
- - Your Name
7
+ - ShekharBora
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2025-06-14 00:00:00.000000000 Z
11
+ date: 2025-06-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bunny
@@ -53,21 +53,35 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '13.0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: rspec
56
+ name: minitest
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '3.0'
61
+ version: '5.0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '3.0'
68
+ version: '5.0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: pry
70
+ name: mocha
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.14'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.14'
83
+ - !ruby/object:Gem::Dependency
84
+ name: byebug
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
87
  - - ">="
@@ -80,10 +94,24 @@ dependencies:
80
94
  - - ">="
81
95
  - !ruby/object:Gem::Version
82
96
  version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rails
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: 6.0.0
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: 6.0.0
83
111
  description: delayed_rabbit provides a simple interface for scheduling background
84
112
  jobs with delays using RabbitMQ's delayed message exchange plugin
85
113
  email:
86
- - your.email@example.com
114
+ - chandu42011@gmail.com
87
115
  executables: []
88
116
  extensions: []
89
117
  extra_rdoc_files: []
@@ -93,16 +121,20 @@ files:
93
121
  - example.rb
94
122
  - lib/delayed_rabbit.rb
95
123
  - lib/delayed_rabbit/job_publisher.rb
124
+ - lib/delayed_rabbit/railtie.rb
96
125
  - lib/delayed_rabbit/version.rb
126
+ - lib/generators/delayed_rabbit/install/templates/initializer.rb
127
+ - lib/generators/delayed_rabbit/install/templates/rabbitmq.yml
128
+ - lib/generators/delayed_rabbit/install_generator.rb
97
129
  - tasks/delayed_rabbit.rake
98
- homepage: https://github.com/yourusername/delayed_rabbit
130
+ homepage: https://github.com/shekharbora/delayed_rabbit
99
131
  licenses:
100
132
  - MIT
101
133
  metadata:
102
134
  allowed_push_host: https://rubygems.org
103
- homepage_uri: https://github.com/yourusername/delayed_rabbit
104
- source_code_uri: https://github.com/yourusername/delayed_rabbit
105
- changelog_uri: https://github.com/yourusername/delayed_rabbit/blob/master/CHANGELOG.md
135
+ homepage_uri: https://github.com/shekharbora/delayed_rabbit
136
+ source_code_uri: https://github.com/shekharbora/delayed_rabbit
137
+ changelog_uri: https://github.com/shekharbora/delayed_rabbit/blob/master/CHANGELOG.md
106
138
  post_install_message:
107
139
  rdoc_options: []
108
140
  require_paths: