Class: Schema::Associations::SchemaCreator
- Inherits:
-
Object
- Object
- Schema::Associations::SchemaCreator
- Defined in:
- lib/schema/associations/schema_creator.rb
Overview
Schema::Associations::SchemaCreator is used to create schema objects for associations
Instance Method Summary collapse
- #add_parsing_error(base_schema, error_name, error_msg) ⇒ Object
- #create_schema(base_schema, data, error_name = nil) ⇒ Object
- #create_schemas(base_schema, list) ⇒ Object
- #dynamic? ⇒ Boolean
- #get_dynamic_schema_class(base_schema, data) ⇒ Object
- #get_dynamic_type(base_schema, data) ⇒ Object
- #get_schema_class(base_schema, data) ⇒ Object
-
#initialize(base_schema, name) ⇒ SchemaCreator
constructor
A new instance of SchemaCreator.
- #type_fields ⇒ Object
Constructor Details
#initialize(base_schema, name) ⇒ SchemaCreator
Returns a new instance of SchemaCreator.
7 8 9 10 11 12 13 14 15 16 |
# File 'lib/schema/associations/schema_creator.rb', line 7 def initialize(base_schema, name) = base_schema.class.schema[name] @schema_name = name @schema_class = base_schema.class.const_get([:class_name]) @aliases = [:aliases] || [] @type_field = [:type_field] @external_type_field = [:external_type_field] @types = [:types] @ignorecase = ![:type_ignorecase].nil? end |
Instance Method Details
#add_parsing_error(base_schema, error_name, error_msg) ⇒ Object
83 84 85 |
# File 'lib/schema/associations/schema_creator.rb', line 83 def add_parsing_error(base_schema, error_name, error_msg) base_schema.parsing_errors.add(error_name || @schema_name, error_msg) end |
#create_schema(base_schema, data, error_name = nil) ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/schema/associations/schema_creator.rb', line 18 def create_schema(base_schema, data, error_name = nil) if data.is_a?(Hash) unless (schema_class = get_schema_class(base_schema, data)) add_parsing_error(base_schema, error_name, :unknown) return nil end schema = schema_class.from_hash(data) add_parsing_error(base_schema, error_name, :invalid) unless schema.parsing_errors.empty? schema elsif !data.nil? add_parsing_error(base_schema, error_name, :incompatable) nil end end |
#create_schemas(base_schema, list) ⇒ Object
33 34 35 36 37 38 39 40 |
# File 'lib/schema/associations/schema_creator.rb', line 33 def create_schemas(base_schema, list) if list.is_a?(Array) list.each_with_index.map { |data, idx| create_schema(base_schema, data, "#{@schema_name}:#{idx}") } elsif !list.nil? add_parsing_error(base_schema, @schema_name, :incompatable) nil end end |
#dynamic? ⇒ Boolean
50 51 52 |
# File 'lib/schema/associations/schema_creator.rb', line 50 def dynamic? !@type_field.nil? || !@external_type_field.nil? end |
#get_dynamic_schema_class(base_schema, data) ⇒ Object
54 55 56 57 58 59 60 61 62 |
# File 'lib/schema/associations/schema_creator.rb', line 54 def get_dynamic_schema_class(base_schema, data) type = get_dynamic_type(base_schema, data) type = type.to_s.downcase if @ignorecase @types.each do |name, class_name| name = name.downcase if @ignorecase return base_schema.class.const_get(class_name) if name == type end nil end |
#get_dynamic_type(base_schema, data) ⇒ Object
64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/schema/associations/schema_creator.rb', line 64 def get_dynamic_type(base_schema, data) if @type_field type_fields.each do |name| type = data[name] return type if type end nil elsif @external_type_field base_schema.public_send(@external_type_field) end end |
#get_schema_class(base_schema, data) ⇒ Object
42 43 44 45 46 47 48 |
# File 'lib/schema/associations/schema_creator.rb', line 42 def get_schema_class(base_schema, data) if dynamic? get_dynamic_schema_class(base_schema, data) else @schema_class end end |
#type_fields ⇒ Object
76 77 78 79 80 81 |
# File 'lib/schema/associations/schema_creator.rb', line 76 def type_fields @type_fields ||= [ @type_field, @type_field.to_s ] + @aliases end |