Sha256: d13a28c5073ccf14314ebbf4bfc0d0a0596de3740965dc210092830196fffa4f

Contents?: true

Size: 1.32 KB

Versions: 8

Compression:

Stored size: 1.32 KB

Contents

module Jellyfish; end
module Jellyfish::Json
  module MultiJson
    def self.extended mod
      mod.const_set(:ParseError, ::MultiJson::DecodeError)
    end
    def encode hash
      ::MultiJson.dump(hash)
    end
    def decode json
      ::MultiJson.load(json)
    end
  end

  module YajlRuby
    def self.extended mod
      mod.const_set(:ParseError, Yajl::ParseError)
    end
    def encode hash
      Yajl::Encoder.encode(hash)
    end
    def decode json
      Yajl::Parser.parse(json)
    end
  end

  module Json
    def self.extended mod
      mod.const_set(:ParseError, JSON::ParserError)
    end
    def encode hash
      JSON.dump(hash)
    end
    def decode json
      JSON.parse(json)
    end
  end

  def self.select_json! mod, picked=false
    if    Object.const_defined?(:MultiJson)
      mod.send(:extend, MultiJson)
    elsif Object.const_defined?(:Yajl)
      mod.send(:extend, YajlRuby)
    elsif Object.const_defined?(:JSON)
      mod.send(:extend, Json)
    elsif picked
      raise LoadError.new(
        'No JSON library found. Tried: multi_json, yajl-ruby, json.')
    else
      # pick a json gem if available
      %w[multi_json yajl json].each{ |json|
        begin
          require json
          break
        rescue LoadError
        end
      }
      select_json!(mod, true)
    end
  end

  select_json!(self)
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
jellyfish-1.2.2 lib/jellyfish/json.rb
jellyfish-1.2.1 lib/jellyfish/json.rb
jellyfish-1.2.0 lib/jellyfish/json.rb
jellyfish-1.1.1 lib/jellyfish/json.rb
jellyfish-1.1.0 lib/jellyfish/json.rb
jellyfish-1.0.2 lib/jellyfish/json.rb
jellyfish-1.0.1 lib/jellyfish/json.rb
jellyfish-1.0.0 lib/jellyfish/json.rb