Sha256: 2b208af7919988992328ac6b7ffc2d84d14ad9070c4e4b8c4c9133fcd2223e19

Contents?: true

Size: 1.84 KB

Versions: 7

Compression:

Stored size: 1.84 KB

Contents

# frozen-string-literal: true

require 'uri'
require 'phony'

module PUNK
  module Plugins
    module Validation
      module InstanceMethods
        def validates_url(atts, opts={})
          default = { message: "is not a URL" }
          validatable_attributes(atts, default.merge(opts)) do |_name, value, message|
            message unless URI::DEFAULT_PARSER.make_regexp.match(value).to_a.compact.length > 2
          end
        end

        def validates_email(atts, opts={})
          default = { message: "is not an email address" }
          validatable_attributes(atts, default.merge(opts)) do |_name, value, message|
            message unless URI::MailTo::EMAIL_REGEXP.match(value)
          end
        end

        def validates_phone(atts, opts={})
          default = { message: "is not a phone number" }
          validatable_attributes(atts, default.merge(opts)) do |_name, value, message|
            message unless Phony.plausible?(value)
          end
        end

        def validates_parse_id(atts, opts={})
          default = { message: "is not a Parse ID" }
          validatable_attributes(atts, default.merge(opts)) do |_name, value, message|
            message unless /^[[:alnum:]]{10}$/.match(value)
          end
        end

        def validates_subdomain(atts, opts={})
          default = { message: "is not a subdomain" }
          validatable_attributes(atts, default.merge(opts)) do |_name, value, message|
            message unless /^[A-Za-z0-9](?:[A-Za-z0-9\-]{0,61}[A-Za-z0-9])?$/.match(value)
          end
        end

        def validates_state(name, state)
          errors.add(name, "is not in #{state} state") unless self[name].send("#{state}?")
        end

        def validates_event(name, event)
          errors.add(name, "may not #{event}") unless self[name].send("may_#{event}?")
        end
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
punk-0.1.4 lib/punk/framework/plugins/validation.rb
punk-0.1.3 lib/punk/framework/plugins/validation.rb
punk-0.1.2 lib/punk/framework/plugins/validation.rb
punk-0.1.0 lib/punk/framework/plugins/validation.rb
punk-0.0.3 lib/punk/framework/plugins/validation.rb
punk-0.0.2 lib/punk/framework/plugins/validation.rb
punk-0.0.1 lib/punk/framework/plugins/validation.rb