Skip to content

Commit

Permalink
Remove dependency on hashie
Browse files Browse the repository at this point in the history
  • Loading branch information
snmgian committed May 2, 2017
1 parent b1e9b5e commit e0cdf57
Show file tree
Hide file tree
Showing 5 changed files with 212 additions and 5 deletions.
4 changes: 2 additions & 2 deletions lib/sidekiq-scheduler/rufus_utils.rb
@@ -1,4 +1,4 @@
require 'hashie'
require 'sidekiq-scheduler/utils'

module SidekiqScheduler
class RufusUtils
Expand All @@ -20,7 +20,7 @@ def self.normalize_schedule_options(options)
opts = {}
end

opts = Hashie.symbolize_keys(opts)
opts = SidekiqScheduler::Utils.symbolize_keys(opts)

return schedule, opts
end
Expand Down
5 changes: 3 additions & 2 deletions lib/sidekiq-scheduler/schedule.rb
@@ -1,6 +1,7 @@
require 'hashie'
require 'json'

require 'sidekiq-scheduler/utils'

module SidekiqScheduler
module Schedule

Expand Down Expand Up @@ -117,7 +118,7 @@ def remove_schedule(name)
private

def prepare_schedule(schedule_hash)
schedule_hash = Hashie.stringify_keys(schedule_hash)
schedule_hash = SidekiqScheduler::Utils.stringify_keys(schedule_hash)

prepared_hash = {}

Expand Down
44 changes: 44 additions & 0 deletions lib/sidekiq-scheduler/utils.rb
@@ -0,0 +1,44 @@
require 'set'

module SidekiqScheduler
module Utils

# Stringify keys belonging to a hash.
#
# Also stringifies nested keys and keys of hashes inside arrays, and sets
#
# @param [Object] object
#
# @return [Object]
def self.stringify_keys(object)
if object.is_a?(Hash)
Hash[[*object.map { |k, v| [k.to_s, stringify_keys(v) ]} ]]

elsif object.is_a?(Array) || object.is_a?(Set)
object.map { |v| stringify_keys(v) }

else
object
end
end

# Symbolize keys belonging to a hash.
#
# Also symbolizes nested keys and keys of hashes inside arrays, and sets
#
# @param [Object] object
#
# @return [Object]
def self.symbolize_keys(object)
if object.is_a?(Hash)
Hash[[*object.map { |k, v| [k.to_sym, symbolize_keys(v) ]} ]]

elsif object.is_a?(Array) || object.is_a?(Set)
object.map { |v| symbolize_keys(v) }

else
object
end
end
end
end
1 change: 0 additions & 1 deletion sidekiq-scheduler.gemspec
Expand Up @@ -14,7 +14,6 @@ Gem::Specification.new do |s|

s.files = Dir['{lib,web}/**/*'] + %w[MIT-LICENSE Rakefile README.md]

s.add_dependency 'hashie', '~> 3.4'
s.add_dependency 'sidekiq', '>= 3'
s.add_dependency 'redis', '~> 3'
s.add_dependency 'rufus-scheduler', '~> 3.2'
Expand Down
163 changes: 163 additions & 0 deletions spec/sidekiq-scheduler/utils_spec.rb
@@ -0,0 +1,163 @@
require 'sidekiq-scheduler/utils'

describe SidekiqScheduler::Utils do
subject(:utils) { described_class }

describe '.stringify_keys' do
subject(:result) { utils.stringify_keys(object) }

context 'with a Hash' do
let(:object) do
{
some_symbol_key: 'symbol',
'some_string_key' => 'string',
[1, 2] => 'object',
nesting: {
level_1: {
level_2: 2,
}
}
}
end

let(:expected) do
{
'some_symbol_key' => 'symbol',
'some_string_key' => 'string',
'[1, 2]' => 'object',
'nesting' => {
'level_1' => {
'level_2' => 2,
}
}
}
end

it { should eq(expected) }
end

context 'with an Array' do
let(:object) do
[
1,
2,
'a string',
:a_symbol,
{
'some_string_key' => 'string',
nesting: {
level_1: {
level_2: 2,
}
}
}
]
end

let(:expected) do
[
1,
2,
'a string',
:a_symbol,
{
'some_string_key' => 'string',
'nesting' => {
'level_1' => {
'level_2' => 2,
}
}
}
]
end

it { should eq(expected) }
end

context 'with some other object' do
let(:object) { Object.new }

let(:expected) { object }

it { should eq(expected) }
end
end

describe '.symbolize_keys' do
subject(:result) { utils.symbolize_keys(object) }

context 'with a Hash' do
let(:object) do
{
some_symbol_key: 'symbol',
'some_string_key' => 'string',
'nesting': {
'level_1': {
'level_2': 2,
}
}
}
end

let(:expected) do
{
some_symbol_key: 'symbol',
some_string_key: 'string',
nesting: {
level_1: {
level_2: 2,
}
}
}
end

it { should eq(expected) }
end

context 'with an Array' do
let(:object) do
[
1,
2,
'a string',
:a_symbol,
{
some_symbol_key: 'symbol',
'nesting' => {
'level_1' => {
'level_2' => 2,
}
}
}
]
end

let(:expected) do
[
1,
2,
'a string',
:a_symbol,
{
some_symbol_key: 'symbol',
nesting: {
level_1: {
level_2: 2,
}
}
}
]
end

it { should eq(expected) }
end

context 'with some other object' do
let(:object) { Object.new }

let(:expected) { object }

it { should eq(expected) }
end
end
end

0 comments on commit e0cdf57

Please sign in to comment.