Add normal class enum support

This commit is contained in:
Newell Zhu 2016-05-23 20:46:32 +08:00
parent 9b9d5859ad
commit 942b015c8f

View File

@ -4,6 +4,30 @@
attr_accessor :{{{name}}} attr_accessor :{{{name}}}
{{/vars}} {{/vars}}
{{#hasEnums}}
class EnumAttributeValidator
attr_reader :datatype
attr_reader :allowable_values
def initialize(datatype, allowable_values)
@allowable_values = allowable_values.map do |value|
case datatype.to_s
when /Integer/i
value.to_i
when /Float/i
value.to_f
else
value
end
end
end
def valid?(value)
!value || allowable_values.include?(value)
end
end
{{/hasEnums}}
# Attribute mapping from ruby-style variable name to JSON key. # Attribute mapping from ruby-style variable name to JSON key.
def self.attribute_map def self.attribute_map
{ {
@ -53,13 +77,6 @@
# @return Array for valid properies with the reasons # @return Array for valid properies with the reasons
def list_invalid_properties def list_invalid_properties
invalid_properties = Array.new invalid_properties = Array.new
{{#isEnum}}
allowed_values = [{{#allowableValues}}{{#values}}"{{{this}}}"{{^-last}}, {{/-last}}{{/values}}{{/allowableValues}}]
if @{{{name}}} && !allowed_values.include?({{{name}}})
invalid_properties.push("invalid value for '{{{name}}}', must be one of #{allowed_values}.")
end
{{/isEnum}}
{{#hasValidation}} {{#hasValidation}}
if @{{{name}}}.nil? if @{{{name}}}.nil?
fail ArgumentError, "{{{name}}} cannot be nil" fail ArgumentError, "{{{name}}} cannot be nil"
@ -104,50 +121,31 @@
def valid? def valid?
{{#vars}} {{#vars}}
{{#required}} {{#required}}
if @{{{name}}}.nil? return false if @{{{name}}}.nil?
return false
end
{{/required}} {{/required}}
{{#isEnum}} {{#isEnum}}
allowed_values = [{{#allowableValues}}{{#values}}"{{{this}}}"{{^-last}}, {{/-last}}{{/values}}{{/allowableValues}}] {{{name}}}_validator = EnumAttributeValidator.new('{{{datatype}}}', [{{#allowableValues}}{{#values}}"{{{this}}}"{{^-last}}, {{/-last}}{{/values}}{{/allowableValues}}])
if @{{{name}}} && !allowed_values.include?(@{{{name}}}) return false unless {{{name}}}_validator.valid?(@{{{name}}})
return false
end
{{/isEnum}} {{/isEnum}}
{{#hasValidation}} {{#hasValidation}}
{{#minLength}} {{#minLength}}
if @{{{name}}}.to_s.length > {{{maxLength}}} return false if @{{{name}}}.to_s.length > {{{maxLength}}}
return false
end
{{/minLength}} {{/minLength}}
{{#maxLength}} {{#maxLength}}
if @{{{name}}}.to_s.length < {{{minLength}}} return false if @{{{name}}}.to_s.length < {{{minLength}}}
return false
end
{{/maxLength}} {{/maxLength}}
{{#maximum}} {{#maximum}}
if @{{{name}}} > {{{maximum}}} return false if @{{{name}}} > {{{maximum}}}
return false
end
{{/maximum}} {{/maximum}}
{{#minimum}} {{#minimum}}
if @{{{name}}} < {{{minimum}}} return false if @{{{name}}} < {{{minimum}}}
return false
end
{{/minimum}} {{/minimum}}
{{#pattern}} {{#pattern}}
if @{{{name}}} !~ Regexp.new({{{pattern}}}) return false if @{{{name}}} !~ Regexp.new({{{pattern}}})
return false
end
{{/pattern}} {{/pattern}}
{{/hasValidation}} {{/hasValidation}}
{{/vars}} {{/vars}}
return true
end end
{{#vars}} {{#vars}}
@ -155,9 +153,9 @@
# Custom attribute writer method checking allowed values (enum). # Custom attribute writer method checking allowed values (enum).
# @param [Object] {{{name}}} Object to be assigned # @param [Object] {{{name}}} Object to be assigned
def {{{name}}}=({{{name}}}) def {{{name}}}=({{{name}}})
allowed_values = [{{#allowableValues}}{{#values}}"{{{this}}}"{{^-last}}, {{/-last}}{{/values}}{{/allowableValues}}] validator = EnumAttributeValidator.new('{{{datatype}}}', [{{#allowableValues}}{{#values}}"{{{this}}}"{{^-last}}, {{/-last}}{{/values}}{{/allowableValues}}])
if {{{name}}} && !allowed_values.include?({{{name}}}) unless validator.valid?({{{name}}})
fail ArgumentError, "invalid value for '{{{name}}}', must be one of #{allowed_values}." fail ArgumentError, "invalid value for '{{{name}}}', must be one of #{validator.allowable_values}."
end end
@{{{name}}} = {{{name}}} @{{{name}}} = {{{name}}}
end end