Sha256: 154d7baca1c25ea2f9cdb6855f00033ca2917d2a8ffd693d98ff6799f580aa1b

Contents?: true

Size: 1.14 KB

Versions: 5

Compression:

Stored size: 1.14 KB

Contents

class Usher
  class Route
    class Variable
      attr_reader :type, :name, :validator, :transformer
      
      def initialize(type, name, opts = {})
        @type = type
        @name = :"#{name}"
        @validator = opts[:validator]
        @transformer = opts[:transformer]
      end

      def to_s
        "#{type}#{name}"
      end
      
      def transform!(val)
        return val unless @transformer

        case @transformer
        when Proc
          @transformer.call(val)
        when Symbol
          val.send(@transformer)
        end
      rescue Exception => e
        raise ValidationException.new("#{val} could not be successfully transformed by #{@transformer}, root cause #{e.inspect}")
      end

      def valid!(val)
        case @validator
        when Proc
          @validator.call(val)
        else
          @validator === val or raise
        end if @validator
      rescue Exception => e
        raise ValidationException.new("#{val} does not conform to #{@validator}, root cause #{e.inspect}")
      end
  
      def ==(o)
        o && (o.type == @type && o.name == @name && o.validator == @validator)
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
joshbuddy-usher-0.2.2 lib/usher/route/variable.rb
joshbuddy-usher-0.3.0 lib/usher/route/variable.rb
joshbuddy-usher-0.3.2 lib/usher/route/variable.rb
joshbuddy-usher-0.3.3 lib/usher/route/variable.rb
joshbuddy-usher-0.3.4 lib/usher/route/variable.rb