lib/syncano/schema/attribute_definition.rb in syncano-4.0.0.alpha4 vs lib/syncano/schema/attribute_definition.rb in syncano-4.0.0.pre
- old
+ new
@@ -1,83 +1,8 @@
module Syncano
class Schema
class AttributeDefinition
- attr_accessor :name, :type, :default
-
- TYPES_MAPPING = { 'string' => ::String,
- 'email' => ::String,
- 'choice' => ::String,
- 'slug' => ::String,
- 'integer' => ::Integer,
- 'float' => ::Float,
- 'date' => ::Date,
- 'datetime' => ::DateTime,
- 'field' => ::Object }
-
def initialize(name, raw_definition)
- # TODO implement #original_name to send request with correct parameters
- self.name = name == 'class' ? 'associated_class' : name
- self.raw_definition = raw_definition
-
- set_type
- set_default
- end
-
- def validate?
- writable? && required?
- end
-
- def writable?
- raw_definition['read_only'] == false
- end
-
- def required?
- raw_definition['required'] == true
- end
-
- def required_length
- begin
- { maximum: Integer(raw_definition['max_length']) }
- rescue TypeError, ArgumentError
- end
- end
-
- def required_values_inclusion
- return unless choices = raw_definition['choices']
-
- { in: choices.map { |choice| choice['value'] } }
- end
-
- alias :updatable? :writable?
-
- def [](key)
- raw_definition[key]
- end
-
- private
-
- attr_accessor :raw_definition
-
- def set_type
- self.type = if %w[owner group].include?(name)
- ::Integer
- elsif raw_definition['type'].blank?
- ::Object
- else
- TYPES_MAPPING[raw_definition['type']]
- end
- end
-
- def set_default
- self.default = if name == 'channel'
- nil
- elsif raw_definition['type'].present? && raw_definition['type'].to_sym == :field
- {}
- elsif raw_definition['type'].present? && raw_definition['type'].to_sym == :choice
- raw_definition['choices'].try(:first).try :[], 'value'
- else
- nil
- end
end
end
end
end