Sha256: be39516ff97a30d78f027c73d74f6fc0087696e17198c6e7899514190a5406fa

Contents?: true

Size: 1.27 KB

Versions: 13

Compression:

Stored size: 1.27 KB

Contents

module Praxis

  class Route
    attr_accessor :verb, :path, :version, :prefixed_path, :options

    def initialize(verb, path, version='n/a', prefixed_path:nil, **options)
      @verb = verb
      @path = path
      @version = version
      @options = options
      @prefixed_path = prefixed_path
    end

    def example(example_hash:{}, params:)
      path_param_keys = self.path.named_captures.keys.collect(&:to_sym)

      param_attributes = params ? params.attributes : {}
      query_param_keys = param_attributes.keys - path_param_keys
      required_query_param_keys = query_param_keys.each_with_object([]) do |p, array|
        array << p if params.attributes[p].options[:required]
      end

      path_params = example_hash.select{|k,v| path_param_keys.include? k }
      # Let's generate the example only using required params, to avoid mixing incompatible parameters
      query_params = example_hash.select{|k,v| required_query_param_keys.include? k }
      example = { verb: self.verb, url: self.path.expand(path_params.transform_values(&:to_s)), query_params: query_params }

    end

    def describe
      result = {
        verb: verb,
        path: path.to_s,
        version: version
      }
      result[:options] = options if options.any?
      result
    end

  end

end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
praxis-2.0.pre.18 lib/praxis/route.rb
praxis-2.0.pre.17 lib/praxis/route.rb
praxis-2.0.pre.16 lib/praxis/route.rb
praxis-2.0.pre.15 lib/praxis/route.rb
praxis-2.0.pre.14 lib/praxis/route.rb
praxis-2.0.pre.13 lib/praxis/route.rb
praxis-2.0.pre.12 lib/praxis/route.rb
praxis-2.0.pre.11 lib/praxis/route.rb
praxis-2.0.pre.10 lib/praxis/route.rb
praxis-2.0.pre.9 lib/praxis/route.rb
praxis-2.0.pre.8 lib/praxis/route.rb
praxis-2.0.pre.7 lib/praxis/route.rb
praxis-2.0.pre.6 lib/praxis/route.rb