Sha256: 59b72188684fc12109d1a3ca9eeaa5dafadd586ec388a262a186732d2db129f4

Contents?: true

Size: 1.71 KB

Versions: 1

Compression:

Stored size: 1.71 KB

Contents

module Restapi

  # method parameter description
  # 
  # name - method name (show)
  # desc - description
  # required - boolean if required
  # validator - Validator::BaseValidator subclass
  class ParamDescription

    attr_reader :name, :desc, :required, :validator

    attr_accessor :parent
    
    def initialize(name, *args, &block)

      if args.size > 1 || !args.first.is_a?(Hash)
        validator_type = args.shift || nil
      else
        validator_type = nil
      end
      options = args.pop || {}
      
      @name = name
      @desc = Restapi.markup_to_html(options[:desc] || '')
      @required = options[:required] || false
      
      @validator = nil
      unless validator_type.nil?
        @validator = 
          Validator::BaseValidator.find(self, validator_type, options, block)
        raise "Validator not found." unless validator
      end
    end

    def validate(value)
      unless @validator.valid?(value)
        raise ArgumentError.new(@validator.error)
      end
    end

    def full_name
      name_parts = parents_and_self.map(&:name)
      return ([name_parts.first] + name_parts[1..-1].map { |n| "[#{n}]" }).join("")
    end

    # returns an array of all the parents: starting with the root parent
    # ending with itself
    def parents_and_self
      ret = []
      if self.parent
        ret.concat(self.parent.parents_and_self)
      end
      ret << self
      ret
    end

    def to_json
      if validator.is_a? Restapi::Validator::HashValidator
        validator.hash_params_ordered.map(&:to_json)
      else
        {
          :name => full_name,
          :description => desc,
          :required => required,
          :validator => validator.to_s
        }
      end
    end

  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
restapi-0.0.3 lib/restapi/param_description.rb