Sha256: b7051f75c7ddb9298a06f1932f4a91db70e22edb4259b655d5653966f99349a2

Contents?: true

Size: 1.16 KB

Versions: 9

Compression:

Stored size: 1.16 KB

Contents

module Decanter
  module Parser
    module Core

      def self.included(base)
        base.extend(ClassMethods)
      end

      module ClassMethods

        # Check if allowed, parse if not
        def parse(name, values, options={})
          case
          when empty_values?(values)
            { name => nil }
          when allowed?(values)
            { name => values }
          else
            _parse(name, values, options)
          end
        end

        # Define parser
        def parser(&block)
          @parser = block
        end

        # Set allowed classes
        def allow(*args)
          @allowed = args
        end

        # Set preparsers
        def pre(*parsers)
          @pre = parsers
        end

        # Get prepareer
        def preparsers
          @pre || []
        end

        # Check for allowed classes
        def allowed?(values)
          @allowed && Array.wrap(values).all? do |value|
            @allowed.any? { |allowed| value.is_a? allowed }
          end
        end

        def empty_values?(values)
          return true if Array.wrap(values).all? { |value| value.nil? || value == "" }
        end
      end
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
decanter-1.1.10 lib/decanter/parser/core.rb
decanter-1.1.8 lib/decanter/parser/core.rb
decanter-1.1.7 lib/decanter/parser/core.rb
decanter-1.1.6 lib/decanter/parser/core.rb
decanter-1.1.5 lib/decanter/parser/core.rb
decanter-1.1.4 lib/decanter/parser/core.rb
decanter-1.0.3 lib/decanter/parser/core.rb
decanter-1.0.2 lib/decanter/parser/core.rb
decanter-1.0.1 lib/decanter/parser/core.rb