Sha256: 5584491baf4370d8c7c4eab97350c98e2d9940eac98e014e91df92845dcb16d6

Contents?: true

Size: 1.29 KB

Versions: 3

Compression:

Stored size: 1.29 KB

Contents

module Babel
  class Deserializer

    def initialize(model_class)
      @model_class = model_class
    end

    private

    def self.filter
      @filter ||= HashFilter.new
    end

    def filter
      @filter ||= self.class.filter.dup
    end

    protected

    def self.default_context_key(default)
      filter.default_context_key(default)
    end

    def self.add_context(key, options = {})
      filter[key] = options
    end

    public

    def use(context_or_options)
      filter.use(context_or_options)
      self
    end

    def from_hash(data, options = nil)
      filter.use(options) if options
      if root = filter.options[:root]
        if data.is_a? Array
          root = root.to_s
          data.collect{ |d| @model_class.new(filter.filter(d[root])) }
        else
          @model_class.new(filter.filter(data[root.to_s]))
        end
      else
        if data.is_a? Array
          data.collect{ |d| @model_class.new(filter.filter(d)) }
        else
          @model_class.new(filter.filter(data))
        end
      end
    end

    def from_json(json, options = nil)
      data = JSON.parse(json)
      from_hash(data, options)
    end
    
    def from_yaml(yaml, options = nil)
      data = YAML.load_stream(StringIO.new(yaml)).documents
      from_hash(data, options)
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
vellam-0.1.2 lib/babel/deserializer.rb
vellam-0.1.1 lib/babel/deserializer.rb
vellam-0.1 lib/babel/deserializer.rb