delivery_boy 0.1.5 → 0.2.0.beta1
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 +4 -4
- data/delivery_boy.gemspec +1 -0
- data/lib/delivery_boy.rb +2 -0
- data/lib/delivery_boy/config.rb +22 -96
- data/lib/delivery_boy/fake.rb +3 -3
- data/lib/delivery_boy/version.rb +1 -1
- metadata +18 -6
- data/lib/delivery_boy/config_file_loader.rb +0 -20
- data/lib/delivery_boy/env_config_loader.rb +0 -57
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cbb2e9c4ceb1a7b4cac859fa21f33eb69d43b1ba
|
4
|
+
data.tar.gz: a8c55dc6eb604a71dbdf83a8f80334693e6ec144
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6cd6a9bb4def19bcf1fe9bbba80bdc70e2a8f9df0211fb8f65b776fef784e1c914114159d3e13ecb837e61e25d51356edab0fdb62b7399fc2105c5f1c359b5a8
|
7
|
+
data.tar.gz: 06dc18208a20403c71d810a8b7488a15a4aae1ad7f14fd1ec18b2bffa3703d32fc6aef28c61b78a7f522d177795b38407eb6a26e47f70b3b1101ffced3369d23
|
data/delivery_boy.gemspec
CHANGED
@@ -21,6 +21,7 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.require_paths = ["lib"]
|
22
22
|
|
23
23
|
spec.add_runtime_dependency "ruby-kafka", "~> 0.4"
|
24
|
+
spec.add_runtime_dependency "king_konf", "~> 0.1.2"
|
24
25
|
|
25
26
|
spec.add_development_dependency "bundler", "~> 1.15"
|
26
27
|
spec.add_development_dependency "rake", "~> 10.0"
|
data/lib/delivery_boy.rb
CHANGED
data/lib/delivery_boy/config.rb
CHANGED
@@ -1,100 +1,26 @@
|
|
1
|
-
require "
|
2
|
-
require "yaml"
|
3
|
-
require "delivery_boy/env_config_loader"
|
4
|
-
require "delivery_boy/config_file_loader"
|
5
|
-
require "delivery_boy/config_error"
|
1
|
+
require "king_konf"
|
6
2
|
|
7
3
|
module DeliveryBoy
|
8
|
-
class Config
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
]
|
29
|
-
|
30
|
-
DEFAULTS = {
|
31
|
-
ack_timeout: 5,
|
32
|
-
brokers: ["localhost:9092"],
|
33
|
-
client_id: "delivery_boy",
|
34
|
-
compression_threshold: 1,
|
35
|
-
connect_timeout: 10,
|
36
|
-
max_buffer_bytesize: 10_000_000,
|
37
|
-
max_buffer_size: 1000,
|
38
|
-
max_retries: 2,
|
39
|
-
required_acks: :all,
|
40
|
-
retry_backoff: 1,
|
41
|
-
socket_timeout: 30,
|
42
|
-
delivery_interval: 10,
|
43
|
-
delivery_threshold: 100,
|
44
|
-
max_queue_size: 1000,
|
45
|
-
}
|
46
|
-
|
47
|
-
attr_accessor(*VARIABLES)
|
48
|
-
|
49
|
-
def initialize(env: {})
|
50
|
-
load_config(DEFAULTS)
|
51
|
-
load_env(env)
|
52
|
-
end
|
53
|
-
|
54
|
-
def load_file(path, environment)
|
55
|
-
loader = ConfigFileLoader.new(self)
|
56
|
-
loader.load_file(path, environment)
|
57
|
-
end
|
58
|
-
|
59
|
-
def set(variable, value)
|
60
|
-
unless VARIABLES.include?(variable.to_s)
|
61
|
-
raise ConfigError, "unknown configuration variable #{variable}"
|
62
|
-
end
|
63
|
-
|
64
|
-
instance_variable_set("@#{variable}", value)
|
65
|
-
end
|
66
|
-
|
67
|
-
private
|
68
|
-
|
69
|
-
def load_config(config)
|
70
|
-
config.each do |variable, value|
|
71
|
-
set(variable, value)
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
def load_env(env)
|
76
|
-
loader = EnvConfigLoader.new(env, self)
|
77
|
-
|
78
|
-
loader.string :client_id
|
79
|
-
loader.string_list :brokers
|
80
|
-
loader.integer :ack_timeout
|
81
|
-
loader.symbol :compression_codec
|
82
|
-
loader.integer :compression_threshold
|
83
|
-
loader.integer :connect_timeout
|
84
|
-
loader.integer :delivery_interval
|
85
|
-
loader.integer :delivery_threshold
|
86
|
-
loader.integer :max_buffer_bytesize
|
87
|
-
loader.integer :max_buffer_size
|
88
|
-
loader.integer :max_queue_size
|
89
|
-
loader.integer :max_retries
|
90
|
-
loader.integer :required_acks
|
91
|
-
loader.integer :retry_backoff
|
92
|
-
loader.integer :socket_timeout
|
93
|
-
loader.string :ssl_ca_cert
|
94
|
-
loader.string :ssl_client_cert
|
95
|
-
loader.string :ssl_client_cert_key
|
96
|
-
|
97
|
-
loader.validate!
|
98
|
-
end
|
4
|
+
class Config < KingKonf::Config
|
5
|
+
prefix :delivery_boy
|
6
|
+
|
7
|
+
integer :ack_timeout, default: 5
|
8
|
+
integer :compression_threshold, default: 1
|
9
|
+
integer :connect_timeout, default: 10
|
10
|
+
integer :delivery_interval, default: 10
|
11
|
+
integer :delivery_threshold, default: 100
|
12
|
+
integer :max_buffer_bytesize, default: 10_000_000
|
13
|
+
integer :max_buffer_size, default: 1000
|
14
|
+
integer :max_queue_size, default: 1000
|
15
|
+
integer :max_retries, default: 2
|
16
|
+
integer :required_acks, default: -1
|
17
|
+
integer :retry_backoff, default: 1
|
18
|
+
integer :socket_timeout, default: 30
|
19
|
+
string :client_id, default: "delivery_boy"
|
20
|
+
string :compression_codec, default: nil
|
21
|
+
string :ssl_ca_cert, default: nil
|
22
|
+
string :ssl_client_cert, default: nil
|
23
|
+
string :ssl_client_cert_key, default: nil
|
24
|
+
list :brokers, items: :string, sep: ",", default: ["localhost:9092"]
|
99
25
|
end
|
100
26
|
end
|
data/lib/delivery_boy/fake.rb
CHANGED
@@ -2,14 +2,14 @@ module DeliveryBoy
|
|
2
2
|
|
3
3
|
# A fake implementation that is useful for testing.
|
4
4
|
class Fake
|
5
|
-
FakeMessage = Struct.new(:value, :
|
5
|
+
FakeMessage = Struct.new(:value, :topic, :key, :partition, :partition_key)
|
6
6
|
|
7
7
|
def initialize
|
8
8
|
@messages = Hash.new {|h, k| h[k] = [] }
|
9
9
|
end
|
10
10
|
|
11
|
-
def deliver(value, topic:,
|
12
|
-
message = FakeMessage.new(value
|
11
|
+
def deliver(value, topic:, key: nil, partition: nil, partition_key: nil)
|
12
|
+
message = FakeMessage.new(value, topic, key, partition, partition_key)
|
13
13
|
@messages[topic] << message
|
14
14
|
|
15
15
|
nil
|
data/lib/delivery_boy/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: delivery_boy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0.beta1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Schierbeck
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-09-
|
11
|
+
date: 2017-09-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ruby-kafka
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0.4'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: king_konf
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.1.2
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.1.2
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: bundler
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -88,8 +102,6 @@ files:
|
|
88
102
|
- lib/delivery_boy.rb
|
89
103
|
- lib/delivery_boy/config.rb
|
90
104
|
- lib/delivery_boy/config_error.rb
|
91
|
-
- lib/delivery_boy/config_file_loader.rb
|
92
|
-
- lib/delivery_boy/env_config_loader.rb
|
93
105
|
- lib/delivery_boy/fake.rb
|
94
106
|
- lib/delivery_boy/instance.rb
|
95
107
|
- lib/delivery_boy/railtie.rb
|
@@ -111,9 +123,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
111
123
|
version: '0'
|
112
124
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
113
125
|
requirements:
|
114
|
-
- - "
|
126
|
+
- - ">"
|
115
127
|
- !ruby/object:Gem::Version
|
116
|
-
version:
|
128
|
+
version: 1.3.1
|
117
129
|
requirements: []
|
118
130
|
rubyforge_project:
|
119
131
|
rubygems_version: 2.4.5.1
|
@@ -1,20 +0,0 @@
|
|
1
|
-
module DeliveryBoy
|
2
|
-
class ConfigFileLoader
|
3
|
-
def initialize(config)
|
4
|
-
@config = config
|
5
|
-
end
|
6
|
-
|
7
|
-
def load_file(path, environment)
|
8
|
-
# First, load the ERB template from disk.
|
9
|
-
template = ERB.new(File.new(path).read)
|
10
|
-
|
11
|
-
# The last argument to `safe_load` allows us to use aliasing to share
|
12
|
-
# configuration between environments.
|
13
|
-
processed = YAML.safe_load(template.result(binding), [], [], true)
|
14
|
-
|
15
|
-
processed.fetch(environment).each do |variable, value|
|
16
|
-
@config.set(variable, value)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
@@ -1,57 +0,0 @@
|
|
1
|
-
require "delivery_boy/config_error"
|
2
|
-
|
3
|
-
module DeliveryBoy
|
4
|
-
class EnvConfigLoader
|
5
|
-
KEY_PREFIX = "DELIVERY_BOY"
|
6
|
-
|
7
|
-
def initialize(env, config)
|
8
|
-
@env = env
|
9
|
-
@config = config
|
10
|
-
@loaded_keys = []
|
11
|
-
end
|
12
|
-
|
13
|
-
def string(name)
|
14
|
-
set(name) {|value| value }
|
15
|
-
end
|
16
|
-
|
17
|
-
def symbol(name)
|
18
|
-
set(name) {|value| value.to_sym }
|
19
|
-
end
|
20
|
-
|
21
|
-
def integer(name)
|
22
|
-
set(name) do |value|
|
23
|
-
begin
|
24
|
-
Integer(value)
|
25
|
-
rescue ArgumentError
|
26
|
-
raise ConfigError, "#{value.inspect} is not an integer"
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
def string_list(name)
|
32
|
-
set(name) {|value| value.split(",") }
|
33
|
-
end
|
34
|
-
|
35
|
-
def validate!
|
36
|
-
# Make sure the user hasn't made a typo and added a key we don't know
|
37
|
-
# about.
|
38
|
-
@env.keys.grep(/^#{KEY_PREFIX}_/).each do |key|
|
39
|
-
unless @loaded_keys.include?(key)
|
40
|
-
raise ConfigError, "unknown config variable #{key}"
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
private
|
46
|
-
|
47
|
-
def set(name)
|
48
|
-
key = "#{KEY_PREFIX}_#{name.upcase}"
|
49
|
-
|
50
|
-
if @env.key?(key)
|
51
|
-
value = yield @env.fetch(key)
|
52
|
-
@config.set(name, value)
|
53
|
-
@loaded_keys << key
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|