Sha256: fcc44e2980c29b8a2b185565535fc4283b6c7a47906722b006b0bb8a5ac4f323

Contents?: true

Size: 1.17 KB

Versions: 9

Compression:

Stored size: 1.17 KB

Contents

require 'ixtlan/babel/hash_filter'
require 'ixtlan/babel/filter_config'

module Ixtlan
  module Babel
    class ParamsFilter

      def initialize( model_class )
        @model_class = model_class
      end

      private

      def self.config
        @config ||= FilterConfig.new
      end

      def filter
        @filter ||= HashFilter.new
      end

      protected

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

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

      def self.root( root )
        config.root = root
      end

      public

      def use(context_or_options)
        @context_or_options = context_or_options
        self
      end
      def filter_it( data )
        filter.options = self.class.config.single_options( @context_or_options )
        data = data[ self.class.config.root ] if self.class.config.root
        keeps = {}
        ( filter.options[ :keep ] || [] ).each do |k|
          keeps[ k.to_s ] = data[ k.to_s ]
        end
        [ filter.filter( data ), keeps ]
      end

      def new( data )
        @model_class.new( filter( data ) )
      end
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
ixtlan-babel-0.7.0 lib/ixtlan/babel/params_filter.rb~
ixtlan-babel-0.5.0 lib/ixtlan/babel/params_filter.rb~
ixtlan-babel-0.4.0 lib/ixtlan/babel/params_filter.rb~
ixtlan-babel-0.3.5 lib/ixtlan/babel/params_filter.rb~
ixtlan-babel-0.3.4 lib/ixtlan/babel/params_filter.rb~
ixtlan-babel-0.3.3 lib/ixtlan/babel/params_filter.rb~
ixtlan-babel-0.3.2 lib/ixtlan/babel/params_filter.rb~
ixtlan-babel-0.3.1 lib/ixtlan/babel/params_filter.rb~
ixtlan-babel-0.3.0 lib/ixtlan/babel/params_filter.rb~