Sha256: 394dcb7e4a6d6f8a9d7bace07175347c803aceaddcf28db70d7d7b4f4c64e837

Contents?: true

Size: 1.5 KB

Versions: 3

Compression:

Stored size: 1.5 KB

Contents

module Wisepdf
  class Parser
    include Singleton
    
    ESCAPED_OPTIONS = [
      :pdf, :layout, :template, :action, :partial,
      :object, :collection, :as, :spacer_template,
      :disposition, :locals, :status, :file, :text,
      :xml, :json, :callback, :inline, :location, :save_to_file
    ]
       
    class << self
      def parse(options)
        options = self.escape(options)
        options = self.flatten(options)
        parsed_options = {}

        options.each do |key, value|
          unless( value == false || value.nil? )
            normalized_key = "--#{self.normalize_arg(key)}"
            parsed_options[normalized_key] = self.normalize_value(value)
          end
        end
        parsed_options
      end
            
    protected  
      def escape(options)
        options.delete_if{ |k,v| ESCAPED_OPTIONS.include?(k.to_sym) }    
      end
    
      def flatten(options, prefix = nil)
        hash = {}
        options.each do |k,v|
          key = prefix.nil? ? k : "#{prefix.to_s}-#{k}"

          if v.is_a?(Hash)
            hash.delete(k)              
            hash.merge!(self.flatten(v, key))
          else              
            hash[key.to_s] = v  
          end            
        end
        return hash
      end    
      
      def normalize_arg(arg)
        arg.to_s.downcase.gsub(/[^a-z0-9]/,'-')
      end

      def normalize_value(value)
        case value
        when TrueClass
          nil
        else
          value.to_s
        end
      end
    end  
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
wisepdf-1.2.6 lib/wisepdf/parser.rb
wisepdf-1.2.5 lib/wisepdf/parser.rb
wisepdf-1.2.4 lib/wisepdf/parser.rb