Class: Schematic::Generator::Column

Inherits:
Object
  • Object
show all
Defined in:
lib/schematic/generator/column.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(klass, column, additional_methods = {}, ignored_methods = {}, required_methods = [], non_required_methods = []) ⇒ Column

Returns a new instance of Column.



17
18
19
20
21
22
23
24
# File 'lib/schematic/generator/column.rb', line 17

def initialize(klass, column, additional_methods = {}, ignored_methods = {}, required_methods = [], non_required_methods = [])
  @klass = klass
  @column = column
  @additional_methods = additional_methods
  @ignored_methods = ignored_methods
  @required_methods = required_methods
  @non_required_methods = non_required_methods
end

Instance Attribute Details

#restriction_classesObject

Returns the value of attribute restriction_classes.



11
12
13
# File 'lib/schematic/generator/column.rb', line 11

def restriction_classes
  @restriction_classes
end

Class Method Details

.restriction_classesObject



13
14
15
# File 'lib/schematic/generator/column.rb', line 13

def self.restriction_classes
  Restrictions::Base.descendants.freeze
end

Instance Method Details

#generate(builder) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/schematic/generator/column.rb', line 26

def generate(builder)
  return if skip_generation?

  options = {
    'name' => @column.name.dasherize,
    'minOccurs' => minimum_occurrences_for_column.to_s,
    'maxOccurs' => '1'
  }
  options.merge!({'nillable' => 'false'}) if minimum_occurrences_for_column > 0

  builder.xs :element, options do |field|
    field.xs :complexType do |complex_type|
      complex_type.xs :simpleContent do |simple_content|
        simple_content.xs :restriction, 'base' => map_type(@column) do |restriction|
          self.class.restriction_classes.each do |restriction_class|
            restriction_class.new(@klass, @column).generate(restriction)
          end
        end
      end
    end
  end
end

#map_type(column) ⇒ Object



65
66
67
# File 'lib/schematic/generator/column.rb', line 65

def map_type(column)
  Types::COMPLEX.fetch(column.type)[:complex_type]
end

#minimum_occurrences_for_columnObject



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/schematic/generator/column.rb', line 49

def minimum_occurrences_for_column
  return 0 if @non_required_methods.include?(@column.name.to_sym)
  return 1 if @required_methods.include?(@column.name.to_sym)
  return 0 unless @klass.respond_to?(:_validators)
  @klass._validators[@column.name.to_sym].each do |column_validation|
    next unless column_validation.is_a? ActiveModel::Validations::PresenceValidator
    if column_validation.options[:allow_blank] != true &&
      column_validation.options[:if].nil? &&
      column_validation.options[:unless].nil?

      return 1
    end
  end
  0
end

#skip_generation?Boolean

Returns:

  • (Boolean)


69
70
71
# File 'lib/schematic/generator/column.rb', line 69

def skip_generation?
  (@additional_methods.keys + @ignored_methods.keys).map(&:to_s).include?(@column.name)
end