Sha256: b8b6b1468b094b31d83c982e751e8b78d44f8514b8e2e47fbdb5f9fa9fae3134
Contents?: true
Size: 1.23 KB
Versions: 1
Compression:
Stored size: 1.23 KB
Contents
class Joshua module Params class Define def initialize @opts = { } end def method_missing name, *args name = name.to_s raise ArgumentError.new('! is not allowed in params') if name.include?('!') type, opts = args if type.is_a?(Hash) opts = args.first type = :string end type = :string if type.nil? opts ||= {} opts[:type] = type.to_s.dasherize.downcase.to_sym opts[:required] = true if opts[:required].nil? opts[:required] = false if name.sub! /\?$/, '' opts[:required] = false if opts.delete(:optional) opts.merge!(type: :boolean, default: false) if opts[:type] == :false opts.merge!(type: :boolean, default: true) if opts[:type] == :true opts[:required] = false if opts[:type] == :boolean @opts[:params] ||= {} @opts[:params][name.to_sym] = opts end def fetch_and_clear_opts @opts .dup .tap { @opts = {} } end def __add name, value=true @opts[name] = value end def __add_annotation name, data @opts[:annotations] ||= {} @opts[:annotations][name] = data end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
joshua-0.1.0 | ./lib/joshua/params/define.rb |