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 = {}) ⇒ Column

Returns a new instance of Column.



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

def initialize(klass, column, additional_methods = {}, ignored_methods = {})
  @klass = klass
  @column = column
  @additional_methods = additional_methods
  @ignored_methods = ignored_methods
end

Instance Attribute Details

#restriction_classesObject

Returns the value of attribute restriction_classes.



4
5
6
# File 'lib/schematic/generator/column.rb', line 4

def restriction_classes
  @restriction_classes
end

Class Method Details

.restriction_classesObject



6
7
8
# File 'lib/schematic/generator/column.rb', line 6

def restriction_classes
  @restriction_classes ||= [Restrictions::Length, Restrictions::Enumeration, Restrictions::Numericality, Restrictions::Pattern, Restrictions::Custom]
end

Instance Method Details

#generate(builder) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/schematic/generator/column.rb', line 18

def generate(builder)
  return if skip_generation?

  builder.xs :element, "name" => @column.name.dasherize, "minOccurs" => minimum_occurrences_for_column, "maxOccurs" => "1" 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



43
44
45
# File 'lib/schematic/generator/column.rb', line 43

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

#minimum_occurrences_for_columnObject



34
35
36
37
38
39
40
# File 'lib/schematic/generator/column.rb', line 34

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

#skip_generation?Boolean

Returns:

  • (Boolean)


47
48
49
50
# File 'lib/schematic/generator/column.rb', line 47

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