Class: Whoosh::Serialization::Json
- Inherits:
-
Object
- Object
- Whoosh::Serialization::Json
- Defined in:
- lib/whoosh/serialization/json.rb
Class Attribute Summary collapse
-
.engine ⇒ Object
readonly
Returns the value of attribute engine.
Class Method Summary collapse
- .content_type ⇒ Object
- .decode(raw) ⇒ Object
- .detect_engine! ⇒ Object
- .encode(data) ⇒ Object
- .prepare(obj) ⇒ Object
- .use_engine(name) ⇒ Object
Class Attribute Details
.engine ⇒ Object (readonly)
Returns the value of attribute engine.
14 15 16 |
# File 'lib/whoosh/serialization/json.rb', line 14 def engine @engine end |
Class Method Details
.content_type ⇒ Object
52 53 54 |
# File 'lib/whoosh/serialization/json.rb', line 52 def content_type "application/json" end |
.decode(raw) ⇒ Object
41 42 43 44 45 46 47 48 49 50 |
# File 'lib/whoosh/serialization/json.rb', line 41 def decode(raw) return nil if raw.nil? || raw.empty? detect_engine! unless @engine if @engine == :oj Oj.load(raw, mode: :compat) else JSON.parse(raw) end end |
.detect_engine! ⇒ Object
16 17 18 19 20 21 22 23 24 |
# File 'lib/whoosh/serialization/json.rb', line 16 def detect_engine! @oj_available = begin require "oj" true rescue LoadError false end @engine = @oj_available ? :oj : :json end |
.encode(data) ⇒ Object
30 31 32 33 34 35 36 37 38 39 |
# File 'lib/whoosh/serialization/json.rb', line 30 def encode(data) detect_engine! unless @engine prepared = prepare(data) if @engine == :oj Oj.dump(prepared, mode: :compat) else JSON.generate(prepared) end end |
.prepare(obj) ⇒ Object
56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/whoosh/serialization/json.rb', line 56 def prepare(obj) case obj when Hash obj.transform_values { |v| prepare(v) } when Array obj.map { |v| prepare(v) } when Time, DateTime obj.iso8601 when BigDecimal obj.to_s("F") else obj end end |
.use_engine(name) ⇒ Object
26 27 28 |
# File 'lib/whoosh/serialization/json.rb', line 26 def use_engine(name) @engine = name.to_sym end |