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