diff --git a/Rakefile b/Rakefile index 049509b..2dd6b5b 100644 --- a/Rakefile +++ b/Rakefile @@ -11,7 +11,7 @@ end namespace :test do Rake::TestTask.new(:local) do |t| - t.pattern = "test/{components/,services/,helpers/,}*_test.rb" + t.pattern = "test/{components/,services/,utils/,}*_test.rb" end end diff --git a/lib/propono.rb b/lib/propono.rb index b89e93d..bbd0e74 100644 --- a/lib/propono.rb +++ b/lib/propono.rb @@ -5,8 +5,7 @@ require 'propono/propono_error' require 'propono/logger' require 'propono/configuration' - -require "propono/helpers/hash" +require "propono/utils" require 'propono/components/aws_config' require 'propono/components/sns' diff --git a/lib/propono/components/sqs_message.rb b/lib/propono/components/sqs_message.rb index e1e1229..3c3c37a 100644 --- a/lib/propono/components/sqs_message.rb +++ b/lib/propono/components/sqs_message.rb @@ -9,7 +9,7 @@ def initialize(raw_message) body = JSON.parse(@raw_body_json["Message"]) @raw_message = raw_message - @context = body.symbolize_keys + @context = Propono::Utils.symbolize_keys body @failure_count = context[:num_failures] || 0 @message = context.delete(:message) @receipt_handle = raw_message["receipt_handle"] diff --git a/lib/propono/helpers/hash.rb b/lib/propono/helpers/hash.rb deleted file mode 100644 index d0f160d..0000000 --- a/lib/propono/helpers/hash.rb +++ /dev/null @@ -1,10 +0,0 @@ -class Hash - def symbolize_keys - inject({}) do |result, (key, value)| - new_key = key.is_a?(String) ? key.to_sym : key - new_value = value.is_a?(Hash) ? value.symbolize_keys : value - result[new_key] = new_value - result - end - end -end diff --git a/lib/propono/services/publisher.rb b/lib/propono/services/publisher.rb index 43f86e5..5d38778 100644 --- a/lib/propono/services/publisher.rb +++ b/lib/propono/services/publisher.rb @@ -17,7 +17,7 @@ def initialize(topic_id, message, options = {}) raise PublisherError.new("Topic is nil") if topic_id.nil? raise PublisherError.new("Message is nil") if message.nil? - options = options.symbolize_keys + options = Propono::Utils.symbolize_keys options @topic_id = topic_id @message = message diff --git a/lib/propono/services/tcp_listener.rb b/lib/propono/services/tcp_listener.rb index 6ac1cfb..874803d 100644 --- a/lib/propono/services/tcp_listener.rb +++ b/lib/propono/services/tcp_listener.rb @@ -29,7 +29,7 @@ def receive_and_process end def process_tcp_data(tcp_data) - json = JSON.parse(tcp_data).symbolize_keys + json = Propono::Utils.symbolize_keys JSON.parse(tcp_data) # Legacy syntax is covered in the else statement # This conditional and the else block will be removed in v1. diff --git a/lib/propono/services/udp_listener.rb b/lib/propono/services/udp_listener.rb index 600a98b..6e96a99 100644 --- a/lib/propono/services/udp_listener.rb +++ b/lib/propono/services/udp_listener.rb @@ -27,7 +27,7 @@ def receive_and_process end def process_udp_data(udp_data) - json = JSON.parse(udp_data).symbolize_keys + json = Propono::Utils.symbolize_keys JSON.parse(udp_data) # Legacy syntax is covered in the else statement # This conditional and the else block will be removed in v1. diff --git a/lib/propono/utils.rb b/lib/propono/utils.rb new file mode 100644 index 0000000..5460415 --- /dev/null +++ b/lib/propono/utils.rb @@ -0,0 +1,17 @@ +module Propono + module Utils + + # Returns +hash+ with all primary and nested keys to string values symbolised + # To avoid conflicts with ActiveSupport and other libraries that provide Hash symbolisation, + # this method is kept within the Propono namespace and not mixed into Hash + def self.symbolize_keys(hash) + hash.inject({}) do |result, (key, value)| + new_key = key.is_a?(String) ? key.to_sym : key + new_value = value.is_a?(Hash) ? symbolize_keys(value) : value + result[new_key] = new_value + result + end + end + + end +end diff --git a/test/helpers/hash_test.rb b/test/utils/hash_test.rb similarity index 87% rename from test/helpers/hash_test.rb rename to test/utils/hash_test.rb index 3c26e09..362d317 100644 --- a/test/helpers/hash_test.rb +++ b/test/utils/hash_test.rb @@ -22,7 +22,7 @@ def test_symbolize_keys_works } } - assert_equal expected, input.symbolize_keys + assert_equal expected, Propono::Utils.symbolize_keys(input) end end end