queue-bus 0.6.0 → 0.7.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: f18ed6e21b956ce928e0c3ede7e1493eb7806413706e92e1f4c991667e9e06b8
4
- data.tar.gz: 4043918b7705741e3719d6460b9823367b9e271e6344193c2b616aab063a4d9a
3
+ metadata.gz: 89735322de0ab91d94ca27b4f58598ef5049f829adfdc4788aa84eccd4d4597e
4
+ data.tar.gz: b6955c5ac09371018feddf9236f756de49c024ae1ac199b1498c00137761ab6d
5
5
  SHA512:
6
- metadata.gz: 6894d383941edf09df6d245eaffc57ecd2ef3185bb3196d89a29c7714cc7b3f849639e285764ee57832158a566538bc2c1b8b6691af2d73ab5a3760d8893ef5e
7
- data.tar.gz: 9b08d34ff3309f039640a1c154b5f33cfc186f69f18511a09201e4eeb5553ef8f5b8ad053405fc6f9bf3658d5750543d7fa92d431d88ba72af5c3ab8f0d50e45
6
+ metadata.gz: f4c49c5180981e584fa91e0ba8a185c82b82f9c82533b36a75e2dc57cab75ff327d3585ac109940f234c9414c64ebae33aaa1f54ccbf5ab4b0e16cd1965128bd
7
+ data.tar.gz: 7486eb2fbd2cb8ede93beb3af7b2046b224e74983986045577997f227d9df4e056aac8f8054bb42f09c1194354b4c0306c45a30c059c6cab099710365ee58a9e
@@ -0,0 +1,35 @@
1
+ AllCops:
2
+ TargetRubyVersion: 2.4
3
+ ExtraDetails: true
4
+
5
+ # http://rubocop.readthedocs.io/en/latest/cops_style/#stylefrozenstringliteralcomment
6
+ Style/FrozenStringLiteralComment:
7
+ Enabled: true
8
+
9
+ # https://rubocop.readthedocs.io/en/latest/cops_style/#styledatetime
10
+ Style/DateTime:
11
+ Enabled: true
12
+
13
+ # http://rubocop.readthedocs.io/en/latest/cops_metrics/#metricslinelength
14
+ Metrics/LineLength:
15
+ Max: 100
16
+
17
+ Metrics/MethodLength:
18
+ Max: 15
19
+
20
+ Metrics/BlockLength:
21
+ Exclude:
22
+ - spec/**/*
23
+
24
+ # https://rubocop.readthedocs.io/en/latest/cops_layout/#layoutdotposition
25
+ Layout/DotPosition:
26
+ Enabled: true
27
+ EnforcedStyle: leading
28
+
29
+ # https://rubocop.readthedocs.io/en/latest/cops_style/#stylehashsyntax
30
+ Style/HashSyntax:
31
+ Enabled: true
32
+
33
+ # https://rubocop-rspec.readthedocs.io/en/latest/cops_rspec/#rspecfocus
34
+ RSpec/Focus:
35
+ Enabled: true
@@ -6,6 +6,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.7.0]
10
+
11
+ ### Added
12
+ - Adds `QueueBus.has_adapter?` to check whether the adapter is set.
13
+
14
+ ### Changed
15
+ - Now uses `Process.hostname` to determine hostname versus relying on unix shell.
16
+ - Rubocop is now a dev dependency.
17
+ - Accessors to config are now done with actual attrs.
18
+ - Logging with the adapter will use the logger if present.
19
+
20
+ ### Fixed
21
+ - Passing a class to `adapter=` would error on a `NameError`.
22
+
9
23
  ## [0.6.0]
10
24
 
11
25
  ### Added
@@ -38,7 +38,7 @@ module QueueBus
38
38
  :before_publish=, :before_publish_callback,
39
39
  :logger=, :logger, :log_application, :log_worker,
40
40
  :hostname=, :hostname,
41
- :adapter=, :adapter,
41
+ :adapter=, :adapter, :has_adapter?,
42
42
  :incoming_queue=, :incoming_queue,
43
43
  :redis, :worker_middleware_stack
44
44
 
@@ -60,5 +60,4 @@ module QueueBus
60
60
  @_dispatchers ||= ::QueueBus::Dispatchers.new
61
61
  end
62
62
  end
63
-
64
63
  end
@@ -1,102 +1,70 @@
1
- module QueueBus
2
- class Config
3
- def adapter=val
4
- raise "Adapter already set to #{@adapter_instance.class.name}" if @adapter_instance
5
- if val.is_a?(Class)
6
- @adapter_instance = name_or_klass.new
7
- elsif val.is_a?(::QueueBus::Adapters::Base)
8
- @adapter_instance = val
9
- else
10
- class_name = ::QueueBus::Util.classify(val)
11
- @adapter_instance = ::QueueBus::Util.constantize("::QueueBus::Adapters::#{class_name}").new
12
- end
13
- @adapter_instance
14
- end
15
-
16
- def adapter
17
- return @adapter_instance if @adapter_instance
18
- raise "no adapter has been set"
19
- end
20
-
21
- def redis(&block)
22
- # TODO: could allow setting for non-redis adapters
23
- adapter.redis(&block)
24
- end
1
+ # frozen_string_literal: true
25
2
 
26
- def default_app_key=val
27
- @default_app_key = Application.normalize(val)
28
- end
3
+ require 'socket'
4
+ require 'logger'
29
5
 
30
- def default_app_key
31
- @default_app_key
32
- end
6
+ module QueueBus
7
+ # This class contains all the configuration for a running queue bus application.
8
+ class Config
9
+ attr_accessor :default_queue, :local_mode, :hostname, :incoming_queue, :logger
33
10
 
34
- def default_queue=val
35
- @default_queue = val
36
- end
11
+ attr_reader :worker_middleware_stack
37
12
 
38
- def default_queue
39
- @default_queue
13
+ def initialize
14
+ @worker_middleware_stack = QueueBus::Middleware::Stack.new
15
+ @incoming_queue = 'bus_incoming'
16
+ @hostname = Socket.gethostname
40
17
  end
41
18
 
42
- def local_mode=value
43
- @local_mode = value
44
- end
19
+ def adapter=(val)
20
+ raise "Adapter already set to #{@adapter_instance.class.name}" if has_adapter?
45
21
 
46
- def local_mode
47
- @local_mode
22
+ @adapter_instance =
23
+ if val.is_a?(Class)
24
+ val.new
25
+ elsif val.is_a?(::QueueBus::Adapters::Base)
26
+ val
27
+ else
28
+ class_name = ::QueueBus::Util.classify(val)
29
+ ::QueueBus::Util.constantize("::QueueBus::Adapters::#{class_name}").new
30
+ end
48
31
  end
49
32
 
50
- def incoming_queue=val
51
- @incoming_queue = val
52
- end
33
+ def adapter
34
+ return @adapter_instance if has_adapter?
53
35
 
54
- def incoming_queue
55
- @incoming_queue ||= "bus_incoming"
36
+ raise 'no adapter has been set'
56
37
  end
57
38
 
58
- def worker_middleware_stack
59
- @worker_middleware_stack ||= QueueBus::Middleware::Stack.new
39
+ # Checks whether an adapter is set and returns true if it is.
40
+ def has_adapter? # rubocop:disable Naming/PredicateName
41
+ !@adapter_instance.nil?
60
42
  end
61
43
 
62
- def hostname
63
- @hostname ||= `hostname 2>&1`.strip.sub(/.local/,'')
44
+ def redis(&block)
45
+ # TODO: could allow setting for non-redis adapters
46
+ adapter.redis(&block)
64
47
  end
65
48
 
66
- def hostname=val
67
- @hostname = val
49
+ attr_reader :default_app_key
50
+ def default_app_key=(val)
51
+ @default_app_key = Application.normalize(val)
68
52
  end
69
53
 
70
- def before_publish=(proc)
71
- @before_publish_callback = proc
54
+ def before_publish=(callback)
55
+ @before_publish_callback = callback
72
56
  end
73
57
 
74
58
  def before_publish_callback(attributes)
75
- if @before_publish_callback
76
- @before_publish_callback.call(attributes)
77
- end
78
- end
79
-
80
- def logger
81
- @logger
82
- end
83
-
84
- def logger=val
85
- @logger = val
59
+ @before_publish_callback&.call(attributes)
86
60
  end
87
61
 
88
62
  def log_application(message)
89
- if logger
90
- time = Time.now.strftime('%H:%M:%S %Y-%m-%d')
91
- logger.info("** [#{time}] #$$: QueueBus #{message}")
92
- end
63
+ logger&.info(message)
93
64
  end
94
65
 
95
66
  def log_worker(message)
96
- if ENV['LOGGING'] || ENV['VERBOSE'] || ENV['VVERBOSE']
97
- time = Time.now.strftime('%H:%M:%S %Y-%m-%d')
98
- puts "** [#{time}] #$$: #{message}"
99
- end
67
+ logger&.debug(message)
100
68
  end
101
69
  end
102
70
  end
@@ -1,3 +1,3 @@
1
1
  module QueueBus
2
- VERSION = "0.6.0"
2
+ VERSION = "0.7.0"
3
3
  end
@@ -29,4 +29,5 @@ Gem::Specification.new do |s|
29
29
  s.add_development_dependency("rspec")
30
30
  s.add_development_dependency("timecop")
31
31
  s.add_development_dependency("json_pure")
32
+ s.add_development_dependency("rubocop")
32
33
  end
@@ -1,83 +1,124 @@
1
- require 'spec_helper'
2
-
3
- module QueueBus
4
- module Adapters
5
- class TestOne
1
+ # frozen_string_literal: true
6
2
 
7
- end
8
- end
9
- end
3
+ require 'spec_helper'
10
4
 
11
- describe "QueueBus config" do
12
- it "should set the default app key" do
5
+ describe 'QueueBus config' do
6
+ it 'sets the default app key' do
13
7
  expect(QueueBus.default_app_key).to eq(nil)
14
8
 
15
- QueueBus.default_app_key = "my_app"
16
- expect(QueueBus.default_app_key).to eq("my_app")
9
+ QueueBus.default_app_key = 'my_app'
10
+ expect(QueueBus.default_app_key).to eq('my_app')
17
11
 
18
- QueueBus.default_app_key = "something here"
19
- expect(QueueBus.default_app_key).to eq("something_here")
12
+ QueueBus.default_app_key = 'something here'
13
+ expect(QueueBus.default_app_key).to eq('something_here')
20
14
  end
21
15
 
22
- it "should set the default queue" do
16
+ it 'sets the default queue' do
23
17
  expect(QueueBus.default_queue).to eq(nil)
24
18
 
25
- QueueBus.default_queue = "my_queue"
26
- expect(QueueBus.default_queue).to eq("my_queue")
19
+ QueueBus.default_queue = 'my_queue'
20
+ expect(QueueBus.default_queue).to eq('my_queue')
27
21
  end
28
22
 
29
- it "should set the local mode" do
23
+ it 'sets the local mode' do
30
24
  expect(QueueBus.local_mode).to eq(nil)
31
25
  QueueBus.local_mode = :standalone
32
26
  expect(QueueBus.local_mode).to eq(:standalone)
33
27
  end
34
28
 
35
- it "should set the hostname" do
29
+ it 'sets the hostname' do
36
30
  expect(QueueBus.hostname).not_to eq(nil)
37
- QueueBus.hostname = "whatever"
38
- expect(QueueBus.hostname).to eq("whatever")
31
+ QueueBus.hostname = 'whatever'
32
+ expect(QueueBus.hostname).to eq('whatever')
39
33
  end
40
34
 
41
- it "should set before_publish callback" do
42
- QueueBus.before_publish = lambda {|attributes| 42 }
35
+ it 'sets before_publish callback' do
36
+ QueueBus.before_publish = ->(_attr) { 42 }
43
37
  expect(QueueBus.before_publish_callback({})).to eq(42)
44
38
  end
45
39
 
46
-
47
- it "should use the default Redis connection" do
40
+ it 'uses the default Redis connection' do
48
41
  expect(QueueBus.redis { |redis| redis }).not_to eq(nil)
49
42
  end
50
43
 
51
- it "should default to given adapter" do
44
+ it 'defaults to given adapter' do
52
45
  expect(QueueBus.adapter.is_a?(adapter_under_test_class)).to eq(true)
53
46
 
54
47
  # and should raise if already set
55
- expect {
56
- QueueBus.adapter = :data
57
- }.to raise_error(RuntimeError, "Adapter already set to QueueBus::Adapters::Data")
48
+ expect { QueueBus.adapter = :data }
49
+ .to raise_error(RuntimeError, 'Adapter already set to QueueBus::Adapters::Data')
58
50
  end
59
51
 
60
- context "with a fresh load" do
52
+ context 'with a fresh load' do
61
53
  before(:each) do
62
54
  QueueBus.send(:reset)
63
55
  end
64
56
 
65
- it "should be able to be set to resque" do
66
- QueueBus.adapter = adapter_under_test_symbol
67
- expect(QueueBus.adapter.is_a?(adapter_under_test_class)).to eq(true)
57
+ context 'when set to adapter under test' do
58
+ before do
59
+ QueueBus.adapter = adapter_under_test_symbol
60
+ end
61
+
62
+ it 'sets to that adapter' do
63
+ expect(QueueBus.adapter).to be_a adapter_under_test_class
64
+ end
65
+ end
68
66
 
69
- # and should raise if already set
70
- expect {
67
+ context 'when already set' do
68
+ before do
71
69
  QueueBus.adapter = :data
72
- }.to raise_error(RuntimeError, "Adapter already set to QueueBus::Adapters::Data")
70
+ end
71
+
72
+ it 'raises' do
73
+ expect { QueueBus.adapter = :data }
74
+ .to raise_error(RuntimeError, 'Adapter already set to QueueBus::Adapters::Data')
75
+ end
76
+
77
+ it 'knows the adapter is set' do
78
+ expect(QueueBus).to have_adapter
79
+ end
73
80
  end
74
81
 
75
- it "should be able to be set to something else" do
82
+ context 'with a symbol' do
83
+ before do
84
+ QueueBus.adapter = :data
85
+ end
76
86
 
77
- QueueBus.adapter = :test_one
78
- expect(QueueBus.adapter.is_a?(QueueBus::Adapters::TestOne)).to eq(true)
87
+ it 'looks up the known class' do
88
+ expect(QueueBus.adapter).to be_a QueueBus::Adapters::Data
89
+ end
79
90
  end
80
- end
81
91
 
92
+ context 'with a custom adapter' do
93
+ let(:klass) do
94
+ Class.new(QueueBus::Adapters::Base) do
95
+ def enabled!
96
+ # no op
97
+ end
98
+
99
+ def redis
100
+ # no op
101
+ end
102
+ end
103
+ end
104
+
105
+ before do
106
+ QueueBus.adapter = klass.new
107
+ end
108
+
109
+ it 'sets it to something else' do
110
+ expect(QueueBus.adapter).to be_a klass
111
+ end
112
+ end
113
+
114
+ context 'with a class' do
115
+ before do
116
+ QueueBus.adapter = QueueBus::Adapters::Data
117
+ end
82
118
 
119
+ it 'creates a new one' do
120
+ expect(QueueBus.adapter).to be_a QueueBus::Adapters::Data
121
+ end
122
+ end
123
+ end
83
124
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'timecop'
2
4
  require 'queue-bus'
3
5
  require 'adapter/support'
@@ -33,9 +35,9 @@ module QueueBus
33
35
  end
34
36
  end
35
37
 
36
- def test_sub(event_name, queue="default")
37
- matcher = {"bus_event_type" => event_name}
38
- QueueBus::Subscription.new(queue, event_name, "::QueueBus::Rider", matcher, nil)
38
+ def test_sub(event_name, queue = 'default')
39
+ matcher = { 'bus_event_type' => event_name }
40
+ QueueBus::Subscription.new(queue, event_name, '::QueueBus::Rider', matcher, nil)
39
41
  end
40
42
 
41
43
  def test_list(*args)
@@ -50,6 +52,7 @@ RSpec.configure do |config|
50
52
  config.mock_with :rspec do |c|
51
53
  c.syntax = :expect
52
54
  end
55
+
53
56
  config.expect_with :rspec do |c|
54
57
  c.syntax = :expect
55
58
  end
@@ -57,10 +60,12 @@ RSpec.configure do |config|
57
60
  config.before(:each) do
58
61
  reset_test_adapter
59
62
  end
63
+
60
64
  config.after(:each) do
61
65
  begin
62
- QueueBus.redis { |redis| redis.flushall }
63
- rescue
66
+ QueueBus.redis(&:flushall)
67
+ rescue RuntimeError # rubocop:disable Lint/HandleExceptions
68
+ # We raise if redis isn't there.
64
69
  end
65
70
  QueueBus.send(:reset)
66
71
  QueueBus::Runner1.reset
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: queue-bus
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Leonard
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-07-10 00:00:00.000000000 Z
11
+ date: 2019-07-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: multi_json
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rubocop
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
83
97
  description: A simple event bus on top of common background queues. Publish and subscribe
84
98
  to events as they occur using what you already have.
85
99
  email:
@@ -91,6 +105,7 @@ files:
91
105
  - ".gitignore"
92
106
  - ".rbenv-version"
93
107
  - ".rspec"
108
+ - ".rubocop.yml"
94
109
  - ".rvmrc"
95
110
  - CHANGELOG.md
96
111
  - Gemfile