lib/render/attributes/array_attribute.rb in render-0.0.8 vs lib/render/attributes/array_attribute.rb in render-0.0.9
- old
+ new
@@ -1,50 +1,56 @@
require "render/attributes/attribute"
module Render
class ArrayAttribute < Attribute
FAUX_DATA_UPPER_LIMIT = 5.freeze
+ DEFAULT_NAME = :render_array_attribute_untitled
- attr_accessor :archetype
+ attr_accessor :simple,
+ :min_items,
+ :max_items,
+ :unique
def initialize(options = {})
super
- self.name = options.fetch(:title, :render_array_attribute_untitled).to_sym
- self.required = options.fetch(:required, nil)
+ self.name = options.fetch(:title, DEFAULT_NAME).to_sym
+ self.min_items = options[:minItems] || 0
+ self.max_items = options[:maxItems]
+ self.unique = !!options[:uniqueItems]
+
options = options.fetch(:items)
- process_type!(options)
+ process_options!(options)
if options.keys.include?(:properties)
self.schema = Schema.new(options)
else
- self.archetype = true
+ self.simple = true
end
end
def serialize(explicit_values = nil)
explicit_values = faux_array_data if (Render.live == false && explicit_values.nil?)
- if archetype
+ values = if simple
explicit_values.collect do |value|
- value || default_value
+ value = (value || default_value)
+ Type.to(types, value)
end
else
explicit_values.collect do |value|
schema.serialize!(value)
end
end
+
+ unique ? values.uniq : values
end
private
def faux_array_data
- rand(lower_limit..FAUX_DATA_UPPER_LIMIT).times.collect do
- archetype ? nil : {}
+ faux_max = max_items || FAUX_DATA_UPPER_LIMIT
+ rand(min_items..faux_max).times.collect do
+ simple ? nil : {}
end
end
-
- def lower_limit
- required ? 1 : 0
- end
-
end
end