Class: RegApi2::RequestContract
- Inherits:
-
Object
- Object
- RegApi2::RequestContract
- Defined in:
- lib/reg_api2/request_contract.rb
Overview
Contract for API requests.
Checks for specified required
fields.
Also checks for optional
fields.
Take in care :re option.
Instance Attribute Summary collapse
-
#opts ⇒ Hash
readonly
Options of contract.
Instance Method Summary collapse
-
#fields_to_validate ⇒ Hash
Gets fields to validate.
-
#initialize(opts = {}) ⇒ RequestContract
constructor
A new instance of RequestContract.
-
#to_hash(arr) ⇒ Object
Normalizes
required
andoptional
fields to the form of Hash with options. -
#validate(form) ⇒ Hash
Validates specified
form
withrequired
andoptional
fields. -
#validate_ipaddr(key, value, opts) ⇒ String
Validates specified
value
withipaddr
field. -
#validate_iso_date(key, value, opts) ⇒ Object
Validates specified
value
withre
field. -
#validate_presence_of_required_fields(form, fields) ⇒ Object
Validates specified
form
for presence of all required fields. -
#validate_re(key, value, opts) ⇒ Object
Validates specified
value
withre
field.
Constructor Details
#initialize(opts = {}) ⇒ RequestContract
Returns a new instance of RequestContract.
15 16 17 |
# File 'lib/reg_api2/request_contract.rb', line 15 def initialize(opts = {}) @opts = opts end |
Instance Attribute Details
#opts ⇒ Hash (readonly)
Options of contract.
13 14 15 |
# File 'lib/reg_api2/request_contract.rb', line 13 def opts @opts end |
Instance Method Details
#fields_to_validate ⇒ Hash
Gets fields to validate
32 33 34 35 36 37 |
# File 'lib/reg_api2/request_contract.rb', line 32 def fields_to_validate required_fields = to_hash opts[:required] optional_fields = to_hash opts[:optional] required_fields.keys.each { |key| required_fields[key][:required] = true } optional_fields.merge(required_fields) end |
#to_hash(arr) ⇒ Object
Normalizes required
and optional
fields to the form of Hash with options.
21 22 23 24 25 26 27 28 |
# File 'lib/reg_api2/request_contract.rb', line 21 def to_hash arr return {} if arr.nil? return arr if arr.kind_of?(Hash) arr = [ arr.to_sym ] unless arr.kind_of?(Array) ret = {} arr.each { |key| ret[key.to_sym] = {} } ret end |
#validate(form) ⇒ Hash
Validates specified form
with required
and optional
fields.
106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
# File 'lib/reg_api2/request_contract.rb', line 106 def validate(form) fields = fields_to_validate return form if fields.empty? validate_presence_of_required_fields form, fields fields.each_pair do |key, opts| next if !form.has_key?(key) || form[key].nil? form[key] = validate_re key, form[key], opts form[key] = validate_iso_date key, form[key], opts form[key] = validate_ipaddr key, form[key], opts end form end |
#validate_ipaddr(key, value, opts) ⇒ String
Validates specified value
with ipaddr
field.
73 74 75 76 77 78 |
# File 'lib/reg_api2/request_contract.rb', line 73 def validate_ipaddr key, value, opts if opts[:ipaddr] == true && value.kind_of?(String) value = IPAddr.new(value) end value.to_s end |
#validate_iso_date(key, value, opts) ⇒ Object
Validates specified value
with re
field.
61 62 63 64 65 66 |
# File 'lib/reg_api2/request_contract.rb', line 61 def validate_iso_date key, value, opts if opts[:iso_date] return value.strftime("%Y-%m-%d") if value.respond_to?(:strftime) end value end |
#validate_presence_of_required_fields(form, fields) ⇒ Object
Validates specified form
for presence of all required fields.
return void
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/reg_api2/request_contract.rb', line 85 def validate_presence_of_required_fields form, fields absent_fields = [] fields.each_pair do |key, opts| next unless opts[:required] if !form.has_key?(key) || form[key].nil? absent_fields << key end end unless absent_fields.empty? raise RegApi2::ContractError.new( "Required fields missed: #{absent_fields.join(', ')}", absent_fields ) end nil end |
#validate_re(key, value, opts) ⇒ Object
Validates specified value
with re
field.
44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/reg_api2/request_contract.rb', line 44 def validate_re key, value, opts if opts[:re] if value.to_s !~ opts[:re] raise RegApi2::ContractError.new( "Field #{key} mismatch regular expression: #{value}", key ) end end value end |