module ActiveFacts::Generators::RubyTraits::ValueType

Public Instance Methods

ruby_definition() click to toggle source
# File lib/activefacts/generators/traits/ruby.rb, line 150
def ruby_definition
  return if name == "_ImplicitBooleanValueType"

  ruby_length = length && length > 0 ? ":length => #{length}" : nil
  ruby_scale = scale && scale > 0 ? ":scale => #{scale}" : nil
  params = [ruby_length,ruby_scale].compact * ", "

  base_type = supertype || self
  base_type_name = base_type.ruby_type_name
  ruby_name = ruby_type_name
  if base_type_name == ruby_name
    base_type_name = '::'+base_type_name
  end

  "  class #{ruby_name} < #{base_type_name}\n" +
  "    value_type #{params}\n" +
  #emit_mapping self if is_table
  (value_constraint ?
    "    restrict #{value_constraint.all_allowed_range_sorted.map{|ar| ar.to_s}*", "}\n" :
    ""
  ) +
  (unit ?
    "    \# REVISIT: #{ruby_name} is in units of #{unit.name}\n" :
    ""
  ) +
  absorbed_roles.map do |role|
    role.ruby_role_definition
  end.
  compact*"" +
  "  end\n\n"
end