ruby_rabbitmq_janus 0.3.0 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +64 -7
- data/.reek +7 -0
- data/.rubocop.yml +0 -3
- data/README.md +40 -2
- data/config/default.md +22 -6
- data/config/default.yml +24 -6
- data/config/requests/{test.json → admin/handle_info.json} +2 -4
- data/config/requests/admin/handles.json +6 -0
- data/config/requests/admin/log_level.json +6 -0
- data/config/requests/admin/sessions.json +5 -0
- data/config/requests/{attach.json → base/attach.json} +0 -0
- data/config/requests/{create.json → base/create.json} +0 -0
- data/config/requests/{destroy.json → base/destroy.json} +0 -0
- data/config/requests/{detach.json → base/detach.json} +0 -0
- data/config/requests/{info.json → base/info.json} +0 -0
- data/config/requests/base/keepalive.json +5 -0
- data/lib/generators/ruby_rabbitmq_janus/configuration_generator.rb +23 -0
- data/lib/generators/ruby_rabbitmq_janus/create_request_generator.rb +90 -0
- data/lib/generators/ruby_rabbitmq_janus/default_request_generator.rb +21 -0
- data/lib/generators/ruby_rabbitmq_janus/initializer_generator.rb +17 -0
- data/lib/rrj/errors/config.rb +21 -0
- data/lib/rrj/errors/error.rb +56 -0
- data/lib/rrj/errors/janus.rb +14 -0
- data/lib/rrj/errors/janus_message.rb +45 -0
- data/lib/rrj/errors/janus_response.rb +78 -0
- data/lib/rrj/errors/janus_transaction.rb +31 -0
- data/lib/rrj/errors/rabbit.rb +21 -0
- data/lib/rrj/errors/request.rb +21 -0
- data/lib/rrj/info.rb +40 -0
- data/lib/rrj/init.rb +113 -44
- data/lib/rrj/janus/admin.rb +27 -0
- data/lib/rrj/janus/janus.rb +10 -33
- data/lib/rrj/janus/keepalive.rb +69 -0
- data/lib/rrj/janus/message.rb +77 -22
- data/lib/rrj/janus/response.rb +79 -41
- data/lib/rrj/janus/transaction.rb +53 -0
- data/lib/rrj/janus/transaction_admin.rb +43 -0
- data/lib/rrj/janus/transaction_handle.rb +40 -0
- data/lib/rrj/janus/transaction_session.rb +17 -0
- data/lib/rrj/rabbit/connect.rb +75 -0
- data/lib/rrj/rabbit/propertie.rb +37 -0
- data/lib/rrj/rabbit/publish.rb +100 -0
- data/lib/rrj/rabbit/rabbit.rb +11 -0
- data/lib/rrj/tools/config.rb +63 -0
- data/lib/rrj/tools/env.rb +21 -0
- data/lib/rrj/tools/log.rb +106 -0
- data/lib/rrj/tools/replaces.rb +115 -0
- data/lib/rrj/tools/replaces_admin.rb +44 -0
- data/lib/rrj/tools/requests.rb +57 -0
- data/lib/rrj/tools/tools.rb +14 -0
- data/lib/ruby_rabbitmq_janus.rb +8 -13
- data/rrj.gemspec +7 -3
- metadata +108 -28
- data/config.reek +0 -3
- data/lib/rrj/config.rb +0 -57
- data/lib/rrj/janus/error.rb +0 -8
- data/lib/rrj/janus/message_async.rb +0 -54
- data/lib/rrj/janus/message_sync.rb +0 -34
- data/lib/rrj/log.rb +0 -63
- data/lib/rrj/rabbitmq/rabbitmq.rb +0 -82
- data/lib/rrj/request/path.rb +0 -21
- data/lib/rrj/request/replaces.rb +0 -109
- data/lib/rrj/request/requests.rb +0 -55
- data/lib/rrj/request/type_data.rb +0 -30
- data/lib/rrj/version.rb +0 -17
data/lib/rrj/janus/response.rb
CHANGED
@@ -1,55 +1,93 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'json'
|
4
|
-
|
5
3
|
module RubyRabbitmqJanus
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
4
|
+
module Janus
|
5
|
+
# @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
|
6
|
+
# Read and decryt a response to janus
|
7
|
+
class Response
|
8
|
+
# Instanciate a response
|
9
|
+
def initialize(response_janus)
|
10
|
+
@request = response_janus
|
11
|
+
rescue => error
|
12
|
+
Tools::Log.instance.debug "Request error : #{@request}"
|
13
|
+
raise Errors::JanusResponseInit, error
|
14
|
+
else
|
15
|
+
Tools::Log.instance.debug "Response return : #{to_json}"
|
16
|
+
end
|
16
17
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
18
|
+
# Return request to json format
|
19
|
+
def to_json
|
20
|
+
analysis
|
21
|
+
@request.to_json
|
22
|
+
rescue => error
|
23
|
+
Tools::Log.instance.debug "Request error : #{@request}"
|
24
|
+
raise Errors::JanusResponseJson, error
|
25
|
+
end
|
26
|
+
|
27
|
+
# Return request to json format with nice format
|
28
|
+
def to_nice_json
|
29
|
+
JSON.pretty_generate to_hash
|
30
|
+
rescue => error
|
31
|
+
Tools::Log.instance.debug "Request error : #{@request}"
|
32
|
+
raise Errors::JanusResponsePrettyJson, error
|
24
33
|
end
|
25
|
-
return_response_json
|
26
|
-
end
|
27
34
|
|
28
|
-
|
35
|
+
# Return request to hash format
|
36
|
+
def to_hash
|
37
|
+
analysis
|
38
|
+
@request
|
39
|
+
rescue => error
|
40
|
+
Tools::Log.instance.debug "Request error : #{@request}"
|
41
|
+
raise Errors::JanusResponseHash, error
|
42
|
+
end
|
29
43
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
44
|
+
# Return a response simple for client
|
45
|
+
def for_plugin
|
46
|
+
case @request['janus']
|
47
|
+
when 'success' then @request['plugindata']['data']
|
48
|
+
when 'ack' then {}
|
49
|
+
end
|
50
|
+
rescue => error
|
51
|
+
Tools::Log.instance.debug "Request error : #{@request}"
|
52
|
+
raise Errors::JanusResponsePluginData, error
|
35
53
|
end
|
36
|
-
end
|
37
54
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
case @opts['janus']
|
42
|
-
when 'create'
|
43
|
-
merge('session_id')
|
44
|
-
when 'attach'
|
45
|
-
merge('handle_id')
|
55
|
+
# Return a integer to session
|
56
|
+
def session
|
57
|
+
data_id
|
46
58
|
end
|
47
|
-
@response
|
48
|
-
end
|
49
59
|
|
50
|
-
|
51
|
-
|
52
|
-
|
60
|
+
# Return a integer to handle
|
61
|
+
def sender
|
62
|
+
data_id
|
63
|
+
end
|
64
|
+
|
65
|
+
private
|
66
|
+
|
67
|
+
# Read a hash and return an identifier
|
68
|
+
def data_id
|
69
|
+
analysis
|
70
|
+
@request['data']['id'].to_i
|
71
|
+
rescue => error
|
72
|
+
raise Errors::JanusResponseDataId, error
|
73
|
+
end
|
74
|
+
|
75
|
+
# Analysis response and send exception if janus return an error
|
76
|
+
# :reek:DuplicateMethodCall
|
77
|
+
def analysis
|
78
|
+
raise Errors::JanusResponseSimple, @request['error'] if error_simple?
|
79
|
+
raise Errors::JanusResponsePlugin, @request['plugindata']['data'] if error_plugin?
|
80
|
+
end
|
81
|
+
|
82
|
+
# Test if message response contains an simple error
|
83
|
+
def error_simple?
|
84
|
+
@request['janus'].equal? 'error'
|
85
|
+
end
|
86
|
+
|
87
|
+
# Test if message response contains an error in plugin
|
88
|
+
def error_plugin?
|
89
|
+
@request.key?('plugindata') && @request['plugindata']['data'].key?('error_code')
|
90
|
+
end
|
53
91
|
end
|
54
92
|
end
|
55
93
|
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RubyRabbitmqJanus
|
4
|
+
module Janus
|
5
|
+
# @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
|
6
|
+
# This class work with janus and send a series of message
|
7
|
+
# :reek:TooManyInstanceVariables
|
8
|
+
class Transaction
|
9
|
+
# Initialize an transaction
|
10
|
+
def initialize(session)
|
11
|
+
@rabbit = Rabbit::Connect.new
|
12
|
+
@session = session
|
13
|
+
@response = @handle = @publish = nil
|
14
|
+
rescue => error
|
15
|
+
raise Errors::JanusTransaction, error
|
16
|
+
end
|
17
|
+
|
18
|
+
# Opening a short transaction with rabbitmq and close when is ending
|
19
|
+
def connect(exclusive)
|
20
|
+
@rabbit.transaction_short do
|
21
|
+
choose_queue(exclusive)
|
22
|
+
send_a_message { yield }
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
attr_reader :rabbit, :session, :response, :handle, :publish
|
29
|
+
|
30
|
+
# determine queue used
|
31
|
+
# :reek:ControlParameter and :reek:BooleanParameter
|
32
|
+
def choose_queue(exclusive = false)
|
33
|
+
chan = @rabbit.channel
|
34
|
+
@publish = if exclusive
|
35
|
+
Rabbit::PublishNonExclusive.new(chan)
|
36
|
+
else
|
37
|
+
Rabbit::PublishExclusive.new(chan, '')
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
# Send a message to queue
|
42
|
+
def send_a_message
|
43
|
+
Janus::Response.new(@publish.send_a_message(yield))
|
44
|
+
end
|
45
|
+
|
46
|
+
# Associate handle to transaction
|
47
|
+
def create_handle
|
48
|
+
msg = Janus::Message.new('base::attach', 'session_id' => @session)
|
49
|
+
@handle = send_a_message { msg }.sender
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RubyRabbitmqJanus
|
4
|
+
module Janus
|
5
|
+
# @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
|
6
|
+
# This class work with janus and send a series of message
|
7
|
+
class TransactionAdmin < TransactionHandle
|
8
|
+
# Initialize conncetion to Rabbit and Janus
|
9
|
+
def connect
|
10
|
+
rabbit.transaction_short do
|
11
|
+
choose_queue
|
12
|
+
send_a_message { yield }
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def handle_connect
|
17
|
+
rabbit.transaction_long do
|
18
|
+
choose_queue
|
19
|
+
create_handle
|
20
|
+
yield
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
# Publish an message in handle
|
25
|
+
def publish_message_handle(type, options = {})
|
26
|
+
opts = { 'session_id' => session, 'handle_id' => handle }
|
27
|
+
msg = Janus::MessageAdmin.new(type, opts.merge!(options))
|
28
|
+
Janus::Response.new(publish.send_a_message(msg))
|
29
|
+
end
|
30
|
+
|
31
|
+
# Stop an handle running
|
32
|
+
def handle_running_stop
|
33
|
+
secret = Tools::Config.instance.options['rabbit']['admin_pass']
|
34
|
+
publish_message_handle('base::detach', admin_secret: secret)
|
35
|
+
end
|
36
|
+
|
37
|
+
# Define queue used for admin message
|
38
|
+
def choose_queue
|
39
|
+
@publish = Rabbit::PublishAdmin.new(rabbit.channel)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RubyRabbitmqJanus
|
4
|
+
module Janus
|
5
|
+
# @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
|
6
|
+
# This class work with janus and send a series of message
|
7
|
+
class TransactionHandle < TransactionSession
|
8
|
+
# Initialize connection to Rabbit and Janus
|
9
|
+
def handle_connect(exclusive)
|
10
|
+
rabbit.transaction_long do
|
11
|
+
choose_queue(exclusive)
|
12
|
+
create_handle
|
13
|
+
yield
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
# Initialize connection to Rabbit and Janus and close after sending an received
|
18
|
+
# a response
|
19
|
+
def handle_connect_and_stop(exclusive)
|
20
|
+
rabbit.transaction_short do
|
21
|
+
choose_queue(exclusive)
|
22
|
+
create_handle
|
23
|
+
yield
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
# Stop an handle running
|
28
|
+
def handle_running_stop
|
29
|
+
publish_message_handle('base::detach')
|
30
|
+
end
|
31
|
+
|
32
|
+
# Publish an message in handle
|
33
|
+
def publish_message_handle(type, options = {})
|
34
|
+
opts = { 'session_id' => session, 'handle_id' => handle }
|
35
|
+
msg = Janus::Message.new(type, opts.merge!(options))
|
36
|
+
Janus::Response.new(publish.send_a_message(msg))
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RubyRabbitmqJanus
|
4
|
+
module Janus
|
5
|
+
# @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
|
6
|
+
# This class work with janus and send a series of message for session level
|
7
|
+
class TransactionSession < Transaction
|
8
|
+
# Connect to session and post an message
|
9
|
+
def session_connect(exclusive)
|
10
|
+
rabbit.transaction_short do
|
11
|
+
choose_queue(exclusive)
|
12
|
+
send_a_message { yield }
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RubyRabbitmqJanus
|
4
|
+
module Rabbit
|
5
|
+
# @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
|
6
|
+
# Class for manage connection with rabbitmq
|
7
|
+
class Connect
|
8
|
+
# Initialize connection to server RabbitMQ
|
9
|
+
def initialize
|
10
|
+
Tools::Log.instance.debug 'Initialize connection with RabbitMQ'
|
11
|
+
@rabbit = Bunny.new(read_options_server)
|
12
|
+
end
|
13
|
+
|
14
|
+
# Create an transaction with rabbitmq and close after response is received
|
15
|
+
def transaction_short
|
16
|
+
response = transaction_long { yield }
|
17
|
+
close
|
18
|
+
response
|
19
|
+
end
|
20
|
+
|
21
|
+
# Create an transaction with rabbitmq and not close
|
22
|
+
def transaction_long
|
23
|
+
start
|
24
|
+
yield
|
25
|
+
end
|
26
|
+
|
27
|
+
# Openning a connection with Rabbitmq
|
28
|
+
def start
|
29
|
+
Tools::Log.instance.debug 'Connection to rabbitmq START'
|
30
|
+
@rabbit.start
|
31
|
+
rescue => message
|
32
|
+
raise Errors::ConnectionRabbitmqFailed, message
|
33
|
+
end
|
34
|
+
|
35
|
+
# Close connection to server RabbitMQ
|
36
|
+
def close
|
37
|
+
Tools::Log.instance.debug 'Connection to rabbitmq STOP'
|
38
|
+
@rabbit.close
|
39
|
+
rescue
|
40
|
+
raise Bunny::ConnectionClosedError
|
41
|
+
end
|
42
|
+
|
43
|
+
# Create an channel
|
44
|
+
def channel
|
45
|
+
Tools::Log.instance.debug 'Create an channel'
|
46
|
+
@rabbit.create_channel
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
# Read option for bunny instance (connection with rabbitmq)
|
52
|
+
# :reek:FeatureEnvy
|
53
|
+
def read_options_server
|
54
|
+
cfg = Tools::Config.instance.options['rabbit']
|
55
|
+
opts = {}
|
56
|
+
%w(host port pass user vhost).each do |val|
|
57
|
+
opts.merge!(val.to_sym => Tools::Env.instance.test_env_var(cfg, val))
|
58
|
+
end
|
59
|
+
opts.merge!(option_log_rabbit)
|
60
|
+
end
|
61
|
+
|
62
|
+
# Define option logs for bunny
|
63
|
+
def option_log_rabbit
|
64
|
+
if Tools::Log.instance.level.zero?
|
65
|
+
{
|
66
|
+
log_level: Tools::Log.instance.level,
|
67
|
+
log_file: Tools::Log.instance.logdev
|
68
|
+
}
|
69
|
+
else
|
70
|
+
{}
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RubyRabbitmqJanus
|
4
|
+
module Rabbit
|
5
|
+
# @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
|
6
|
+
# Manage properties to message sending in rabbitmq queue
|
7
|
+
class Propertie
|
8
|
+
attr_reader :correlation
|
9
|
+
|
10
|
+
# Initialize a message sending to rabbitmq
|
11
|
+
def initialize
|
12
|
+
Tools::Log.instance.debug 'initalize a propertie to message'
|
13
|
+
@correlation = SecureRandom.uuid
|
14
|
+
end
|
15
|
+
|
16
|
+
# Define options sending to rabbitmq
|
17
|
+
def options
|
18
|
+
Tools::Log.instance.debug 'Add options to propertie to message'
|
19
|
+
{
|
20
|
+
routing_key: Tools::Config.instance.options['queues']['queue_to'],
|
21
|
+
correlation_id: @correlation,
|
22
|
+
content_type: 'application/json'
|
23
|
+
}
|
24
|
+
end
|
25
|
+
|
26
|
+
# Define option sending to rabbitmq for janus admin message
|
27
|
+
def options_admin
|
28
|
+
Tools::Log.instance.debug 'Add options to propertie to message'
|
29
|
+
{
|
30
|
+
routing_key: Tools::Config.instance.options['queues']['admin']['queue_to'],
|
31
|
+
correlation_id: @correlation,
|
32
|
+
content_type: 'application/json'
|
33
|
+
}
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# :reek:FeatureEnvy and :reek:InstanceVariableAssumption
|
4
|
+
module RubyRabbitmqJanus
|
5
|
+
module Rabbit
|
6
|
+
# @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
|
7
|
+
# @abstract Publish message in RabbitMQ
|
8
|
+
class Publish
|
9
|
+
# Define Exchange operation
|
10
|
+
def initialize(exchange)
|
11
|
+
Tools::Log.instance.debug 'Create/Connect to queue'
|
12
|
+
@exchange = exchange.default_exchange
|
13
|
+
@message = nil
|
14
|
+
end
|
15
|
+
|
16
|
+
# Send a message in queue
|
17
|
+
def send_a_message(request)
|
18
|
+
Tools::Log.instance.info "Send request type : #{request.type}"
|
19
|
+
@message = request
|
20
|
+
@exchange.publish(@message.to_json, request.options)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
# @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
|
25
|
+
# @abstract Publish an message in RabbitMQ and waiting a response
|
26
|
+
class PublishReply < Publish
|
27
|
+
# Initialize a queue
|
28
|
+
def initialize(exchange)
|
29
|
+
@condition = ConditionVariable.new
|
30
|
+
@lock = Mutex.new
|
31
|
+
@response = nil
|
32
|
+
subscribe_to_queue
|
33
|
+
super
|
34
|
+
end
|
35
|
+
|
36
|
+
# Publish an message in rabbitmq
|
37
|
+
def send_a_message(request)
|
38
|
+
Tools::Log.instance.info "Send request type : #{request.type}"
|
39
|
+
@exchange.publish(read_message(request),
|
40
|
+
request.options.merge!(reply_to: @reply.name))
|
41
|
+
@lock.synchronize { @condition.wait(@lock) }
|
42
|
+
@response
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
# Read message and return to JSON format
|
48
|
+
def read_message(request)
|
49
|
+
@message = request
|
50
|
+
@message.to_json
|
51
|
+
end
|
52
|
+
|
53
|
+
# Subscribe to queue in Rabbitmq
|
54
|
+
def subscribe_to_queue
|
55
|
+
@reply.subscribe do |_delivery_info, properties, payload|
|
56
|
+
if @message.correlation.eql?(properties.correlation_id)
|
57
|
+
@response = JSON.parse payload
|
58
|
+
@lock.synchronize { @condition.signal }
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
# @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
|
65
|
+
# Publish message in non exclusive queue
|
66
|
+
class PublishNonExclusive < PublishReply
|
67
|
+
# Initialize an queue non exclusive
|
68
|
+
def initialize(exchange)
|
69
|
+
@reply = exchange.queue(Tools::Config.instance.options['queues']['queue_from'])
|
70
|
+
super(exchange)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
# Publish for admin Janus
|
75
|
+
class PublishAdmin < PublishReply
|
76
|
+
# Initialize an queue non exclusive
|
77
|
+
def initialize(exchange)
|
78
|
+
name = Tools::Config.instance.options['queues']['admin']['queue_from']
|
79
|
+
@reply = exchange.queue(name)
|
80
|
+
super(exchange)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
# @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
|
85
|
+
# Publish message in exclusive queue
|
86
|
+
class PublishExclusive < PublishReply
|
87
|
+
# Initialize an queue exclusive
|
88
|
+
def initialize(exchange, name_queue = '')
|
89
|
+
@reply = exchange.queue(name_queue, exclusive: true)
|
90
|
+
super(exchange)
|
91
|
+
end
|
92
|
+
|
93
|
+
# Name to queue
|
94
|
+
# @return [String] Name to queue used
|
95
|
+
def queue_name
|
96
|
+
@reply.name
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RubyRabbitmqJanus
|
4
|
+
module Tools
|
5
|
+
# @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
|
6
|
+
# Loading a yaml file for apply a configuration to gem.
|
7
|
+
class Config
|
8
|
+
include Singleton
|
9
|
+
|
10
|
+
attr_reader :options
|
11
|
+
|
12
|
+
# Define a default path to file configuration
|
13
|
+
DEFAULT_PATH = File.realpath(File.join(File.dirname(__FILE__), '..', '..'))
|
14
|
+
|
15
|
+
# Define a default name to file configuration
|
16
|
+
DEFAULT_CONF = 'config/default.yml'
|
17
|
+
|
18
|
+
# Define a default override file configuration
|
19
|
+
CUSTOMIZE_CONF = 'config/ruby-rabbitmq-janus.yml'
|
20
|
+
|
21
|
+
# Initialize configuration file default or customize if exist
|
22
|
+
def initialize
|
23
|
+
@options = nil
|
24
|
+
conf_customize
|
25
|
+
conf_default
|
26
|
+
define_log_level_used
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
# Load configuration file yaml
|
32
|
+
# @return [Yaml] Configuration file
|
33
|
+
# @param file [String] Path to configuration file (with name)
|
34
|
+
# :reek:UtilityFunction { public_methods_only: true }
|
35
|
+
def load_configuration(file)
|
36
|
+
Tools::Log.instance.info("Loading configuration file : #{file}")
|
37
|
+
YAML.load(File.read(file))
|
38
|
+
rescue
|
39
|
+
raise Errors::ConfigFileNotFound, file
|
40
|
+
end
|
41
|
+
|
42
|
+
# Load customize configuration file if exist
|
43
|
+
def conf_customize
|
44
|
+
file = File.join(Dir.pwd, CUSTOMIZE_CONF)
|
45
|
+
@options = load_configuration(file) if File.exist?(file)
|
46
|
+
end
|
47
|
+
|
48
|
+
# Load default configuration if customize configuration doesn't exist
|
49
|
+
def conf_default
|
50
|
+
file = File.join(DEFAULT_PATH, DEFAULT_CONF)
|
51
|
+
@options ||= load_configuration(file)
|
52
|
+
end
|
53
|
+
|
54
|
+
# Define log lvel used in this gem
|
55
|
+
def define_log_level_used
|
56
|
+
Tools::Log.instance.level = \
|
57
|
+
Tools::Log::LEVELS[@options['gem']['log']['level'].to_sym]
|
58
|
+
rescue
|
59
|
+
raise Errors::LevelNotDefine
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RubyRabbitmqJanus
|
4
|
+
# Contains all tools necessary in this gem
|
5
|
+
module Tools
|
6
|
+
# Class for tools used in gem
|
7
|
+
# :reek:UtilityFunction
|
8
|
+
class Env
|
9
|
+
include Singleton
|
10
|
+
|
11
|
+
def test_env_var(configuration, key)
|
12
|
+
test = configuration[key.to_s]
|
13
|
+
if test.is_a?(String)
|
14
|
+
test.include?('ENV') ? ENV[test.gsub("ENV['", '').gsub("']", '')] : test
|
15
|
+
else
|
16
|
+
test
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|