Skip to content

Commit

Permalink
Cleaned Oj and JsonCommon adapter using new Adapter.defaults API
Browse files Browse the repository at this point in the history
  • Loading branch information
rwz committed Mar 16, 2013
1 parent a153956 commit 2e23aaa
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 30 deletions.
8 changes: 8 additions & 0 deletions lib/multi_json/adapter.rb
Expand Up @@ -7,6 +7,14 @@ class Adapter
include Singleton
class << self

def defaults(action, value)
metaclass = class << self; self; end

metaclass.instance_eval do
define_method("default_#{action}_options"){ value }
end
end

def load(string, options={})
instance.load(string, collect_load_options(string, options))
end
Expand Down
31 changes: 7 additions & 24 deletions lib/multi_json/adapters/json_common.rb
Expand Up @@ -3,35 +3,18 @@
module MultiJson
module Adapters
class JsonCommon < Adapter
defaults :load, :create_additions => false

def load(string, options={})
string = string.read if string.respond_to?(:read)
::JSON.parse("[#{string}]", process_load_options!(options)).first
options[:symbolize_names] = true if options.delete(:symbolize_keys)
::JSON.parse("[#{string}]", options).first
end

def dump(object, options={})
object.to_json(process_dump_options!(options))
options.merge!(::JSON::PRETTY_STATE_PROTOTYPE.to_h) if options.delete(:pretty)
object.to_json(options)
end

protected

def process_load_options!(options={})
process_options!({:create_additions => false}, options) do |opts|
opts.merge!(:symbolize_names => true) if options.delete(:symbolize_keys)
end
end

def process_dump_options!(options={})
process_options!({}, options) do |opts|
opts.merge!(::JSON::PRETTY_STATE_PROTOTYPE.to_h) if options.delete(:pretty)
end
end

def process_options!(default_options, options)
return default_options if options.empty?
yield default_options
default_options.merge!(options)
end

end
end
end
end
12 changes: 6 additions & 6 deletions lib/multi_json/adapters/oj.rb
Expand Up @@ -5,7 +5,8 @@ module MultiJson
module Adapters
# Use the Oj library to dump/load.
class Oj < Adapter
DEFAULT_OPTIONS = {:mode => :compat, :time_format => :ruby}.freeze
defaults :load, :mode => :strict
defaults :dump, :mode => :compat, :time_format => :ruby

ParseError = if defined?(::Oj::ParseError)
::Oj::ParseError
Expand All @@ -14,15 +15,14 @@ class Oj < Adapter
end

def load(string, options={}) #:nodoc:
options.merge!(:symbol_keys => options[:symbolize_keys])
options[:mode] = :strict
::Oj.load(string, DEFAULT_OPTIONS.merge(options))
options[:symbol_keys] = true if options.delete(:symbolize_keys)
::Oj.load(string, options)
end

def dump(object, options={}) #:nodoc:
options.merge!(:indent => 2) if options[:pretty]
::Oj.dump(object, DEFAULT_OPTIONS.merge(options))
::Oj.dump(object, options)
end
end
end
end
end

0 comments on commit 2e23aaa

Please sign in to comment.