queue_classic 4.0.0.pre.alpha1 → 4.0.0.pre.beta1

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: '048980a61b1882135be9a0379bcd9e76c1353f361e1320c99478e0f4486dcab8'
4
- data.tar.gz: b54392096329149b1d11195be20cac1ca8213174602e265d0e392a9816dc2ddb
3
+ metadata.gz: 1e57fa8cff0c8e6772dda85c9e4a83c5b851f3dc4e5093d36d53b5607bdad99c
4
+ data.tar.gz: '06691d8784eaed7f920319e1e413d2ac0fde11797673726022ee4c99713e7687'
5
5
  SHA512:
6
- metadata.gz: 1c25ab7cc785b3715b3328e2214f2efd186a962dfcae86d31bfe75cecd6d4bcd0e2d68f7c9f38bc4727784f07b0fa48511fc04769ff13fc4d4056ceccd107272
7
- data.tar.gz: adb4e07cbb115645ec6e54db85437b3e10388329ffd1d3688516ef00f4e1a8112dafecad1921e1ee12232650cd6a22c468bbc5e719affaf452f56b12f068141c
6
+ metadata.gz: 58822f3b1458c8ee9f10c8e54784a357b48cfee4ee7bd8dae0b722a0ba2a21f2e994f20df58b7160627a0c210d03f616598c92d314afd763773fbb1b784472d2
7
+ data.tar.gz: 30c9691284a280ef1efd234a9a404f97421349b620b083aaefa0d2350f6f8a079b980610a1cd787cf05c04ffadc935bc16c9f3f199cdc685de585b84f18b9198
data/.circleci/config.yml CHANGED
@@ -3,7 +3,7 @@ jobs:
3
3
  test_fresh_install_rails_5_2_3:
4
4
  parallelism: 2
5
5
  docker:
6
- - image: circleci/ruby:2.6.3
6
+ - image: circleci/ruby:2.6
7
7
  environment:
8
8
  RAILS_ENV: test
9
9
  RACK_ENV: test
@@ -21,9 +21,9 @@ jobs:
21
21
  command: |
22
22
  cd test/rails-tests/
23
23
  sh rails523.sh
24
- test_ruby_2_4_6:
24
+ test_ruby_2_4:
25
25
  docker:
26
- - image: circleci/ruby:2.4.6
26
+ - image: circleci/ruby:2.4
27
27
  environment:
28
28
  RAILS_ENV: test
29
29
  RACK_ENV: test
@@ -61,9 +61,9 @@ jobs:
61
61
  path: test/reports/
62
62
  - store_test_results:
63
63
  path: test/reports/
64
- test_ruby_2_5_4:
64
+ test_ruby_2_5:
65
65
  docker:
66
- - image: circleci/ruby:2.5.4
66
+ - image: circleci/ruby:2.5
67
67
  environment:
68
68
  RAILS_ENV: test
69
69
  RACK_ENV: test
@@ -101,9 +101,49 @@ jobs:
101
101
  path: test/reports/
102
102
  - store_test_results:
103
103
  path: test/reports/
104
- test_ruby_2_6_3:
104
+ test_ruby_2_6:
105
105
  docker:
106
- - image: circleci/ruby:2.6.3
106
+ - image: circleci/ruby:2.6
107
+ environment:
108
+ RAILS_ENV: test
109
+ RACK_ENV: test
110
+ POSTGRES_USER: root
111
+ PGHOST: 127.0.0.1
112
+ DATABASE_URL: postgres://postgres@127.0.0.1/circle_test
113
+ QC_DATABASE_URL: postgres://postgres@127.0.0.1/circle_test
114
+ QC_BENCHMARK: true
115
+ QC_BENCHMARK_MAX_TIME_DEQUEUE: 60
116
+ - image: circleci/postgres:9.6.6-alpine
117
+ steps:
118
+ - checkout
119
+ - run:
120
+ name: Install env dependencies
121
+ command: |
122
+ sudo apt-get update
123
+ sudo apt-get install postgresql-client
124
+ - restore_cache:
125
+ key: v1-qc-bundler-{{ checksum "Gemfile" }}-{{ checksum "queue_classic.gemspec"
126
+ }}
127
+ - run:
128
+ name: Install Ruby gems
129
+ command: |
130
+ bundle check --path=vendor/bundle || bundle install --path=vendor/bundle --jobs=4 --retry=3
131
+ - save_cache:
132
+ key: v1-qc-bundler-{{ checksum "Gemfile" }}-{{ checksum "queue_classic.gemspec"
133
+ }}
134
+ paths:
135
+ - ~/project/vendor/bundle
136
+ - run:
137
+ name: Minitest
138
+ command: |
139
+ bundle exec rake
140
+ - store_artifacts:
141
+ path: test/reports/
142
+ - store_test_results:
143
+ path: test/reports/
144
+ test_ruby_2_7:
145
+ docker:
146
+ - image: circleci/ruby:2.7
107
147
  environment:
108
148
  RAILS_ENV: test
109
149
  RACK_ENV: test
@@ -145,7 +185,8 @@ workflows:
145
185
  version: 2
146
186
  test:
147
187
  jobs:
148
- - test_ruby_2_4_6
149
- - test_ruby_2_5_4
150
- - test_ruby_2_6_3
188
+ - test_ruby_2_4
189
+ - test_ruby_2_5
190
+ - test_ruby_2_6
191
+ - test_ruby_2_7
151
192
  - test_fresh_install_rails_5_2_3
data/README.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # queue_classic
2
- A simple, efficient worker queue for Ruby & PostgreSQL
2
+ A simple, efficient worker queue for Ruby & PostgreSQL.
3
+
4
+ Why this over something like Resque. Two reasons:
5
+
6
+ 1. Your jobs can be equeued in the same transaction as other modifications to the database, and will only be processed when everything is commited. This is a hard pattern to develop around for queues done outside your database
7
+ 2. Less things to run, if you don't already have Redis or a dedicated queue in your stack.
3
8
 
4
9
  [![CircleCI](https://circleci.com/gh/QueueClassic/queue_classic/tree/master.svg?style=svg)](https://circleci.com/gh/QueueClassic/queue_classic/tree/master)
5
10
 
@@ -11,6 +16,16 @@ You can always find the latest and previous releases here:
11
16
 
12
17
  https://github.com/QueueClassic/queue_classic/releases
13
18
 
19
+ ## Other related projects
20
+
21
+ If you're interested in this project, you might also want to checkout:
22
+
23
+ * [Que](https://github.com/que-rb/que)
24
+ * [GoodJob](https://github.com/bensheldon/good_job)
25
+ * [Delayed Job](https://github.com/collectiveidea/delayed_job)
26
+
27
+ For a list of other queues (which may or may not be Postgres backed), checkout - https://edgeapi.rubyonrails.org/classes/ActiveJob/QueueAdapters.html
28
+
14
29
  ## What is queue_classic?
15
30
 
16
31
  queue_classic provides a simple interface to a PostgreSQL-backed message queue. queue_classic specializes in concurrent locking and minimizing database load while providing a simple, intuitive developer experience. queue_classic assumes that you are already using PostgreSQL in your production environment and that adding another dependency (e.g. redis, beanstalkd, 0mq) is undesirable.
@@ -34,7 +49,7 @@ A major benefit is the ability to enqueue inside transactions, ensuring things a
34
49
  ### Requirements
35
50
 
36
51
  For this version, the requirements are as follows:
37
- * Ruby 2.4, 2.5 or 2.6
52
+ * Ruby 2.4, 2.5, 2.6 or 2.7
38
53
  * Postgres ~> 9.6
39
54
  * Rubygem: pg ~> 0.17
40
55
 
@@ -107,7 +107,7 @@ module QC
107
107
  [
108
108
  host, # host or percent-encoded socket path
109
109
  url.port || 5432,
110
- nil, '', #opts, tty
110
+ nil, nil, #opts, tty
111
111
  url.path.gsub("/",""), # database name
112
112
  url.user,
113
113
  url.password
@@ -117,7 +117,7 @@ module QC
117
117
  job[:method] = r["method"]
118
118
  job[:args] = JSON.parse(r["args"])
119
119
  if r["scheduled_at"]
120
- job[:scheduled_at] = Time.parse(r["scheduled_at"])
120
+ job[:scheduled_at] = r["scheduled_at"].kind_of?(Time) ? r["scheduled_at"] : Time.parse(r["scheduled_at"])
121
121
  ttl = Integer((Time.now - job[:scheduled_at]) * 1000)
122
122
  QC.measure("time-to-lock=#{ttl}ms source=#{name}")
123
123
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module QC
4
- VERSION = "4.0.0-alpha1"
4
+ VERSION = "4.0.0-beta1"
5
5
  end
@@ -21,4 +21,5 @@ Gem::Specification.new do |spec|
21
21
  spec.require_paths = %w[lib]
22
22
 
23
23
  spec.add_dependency "pg", ">= 0.17", "< 2.0"
24
+ spec.add_development_dependency "activerecord", ">= 5.0.0", "< 6.1"
24
25
  end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require File.expand_path("../../helper.rb", __FILE__)
4
+
5
+ class QueueClassicTest < QCTest
6
+ def before_teardown
7
+ ActiveRecord.send :remove_const, :Base
8
+ Object.send :remove_const, :ActiveRecord
9
+
10
+ QC.default_conn_adapter = @original_conn_adapter
11
+ end
12
+
13
+ def test_lock_with_active_record_timestamp_type_cast
14
+ # Insert an unlocked job
15
+ p_queue = QC::Queue.new("priority_queue")
16
+ conn_adapter = Minitest::Mock.new
17
+ conn_adapter.expect(:execute, {"id" => '1', "q_name" => 'test', "method" => "Kernel.puts", "args" => "[]", "scheduled_at" => Time.now}, [String, String])
18
+ QC.default_conn_adapter = conn_adapter
19
+ assert_equal(p_queue.lock, {})
20
+ end
21
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: queue_classic
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.0.pre.alpha1
4
+ version: 4.0.0.pre.beta1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Smith (♠ ace hacker)
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-10-24 00:00:00.000000000 Z
11
+ date: 2021-10-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pg
@@ -30,6 +30,26 @@ dependencies:
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
32
  version: '2.0'
33
+ - !ruby/object:Gem::Dependency
34
+ name: activerecord
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: 5.0.0
40
+ - - "<"
41
+ - !ruby/object:Gem::Version
42
+ version: '6.1'
43
+ type: :development
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: 5.0.0
50
+ - - "<"
51
+ - !ruby/object:Gem::Version
52
+ version: '6.1'
33
53
  description: queue_classic is a queueing library for Ruby apps. (Rails, Sinatra, Etc...)
34
54
  queue_classic features asynchronous job polling, database maintained locks and no
35
55
  ridiculous dependencies. As a matter of fact, queue_classic only requires pg.
@@ -78,6 +98,7 @@ files:
78
98
  - test/helper.sql
79
99
  - test/lib/queue_classic_rails_connection_test.rb
80
100
  - test/lib/queue_classic_test.rb
101
+ - test/lib/queue_classic_test_with_activerecord_typecast.rb
81
102
  - test/queue_test.rb
82
103
  - test/rails-tests/.gitignore
83
104
  - test/rails-tests/rails523.sh
@@ -101,8 +122,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
101
122
  - !ruby/object:Gem::Version
102
123
  version: 1.3.1
103
124
  requirements: []
104
- rubyforge_project:
105
- rubygems_version: 2.7.6
125
+ rubygems_version: 3.1.2
106
126
  signing_key:
107
127
  specification_version: 4
108
128
  summary: Simple, efficient worker queue for Ruby & PostgreSQL.
@@ -113,6 +133,7 @@ test_files:
113
133
  - test/helper.sql
114
134
  - test/lib/queue_classic_rails_connection_test.rb
115
135
  - test/lib/queue_classic_test.rb
136
+ - test/lib/queue_classic_test_with_activerecord_typecast.rb
116
137
  - test/queue_test.rb
117
138
  - test/rails-tests/.gitignore
118
139
  - test/rails-tests/rails523.sh