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.



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

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.



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



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/schematic/generator/column.rb', line 20

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



59
60
61
# File 'lib/schematic/generator/column.rb', line 59

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

#minimum_occurrences_for_columnObject



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/schematic/generator/column.rb', line 43

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)


63
64
65
# File 'lib/schematic/generator/column.rb', line 63

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