Class: GoOnRails::Association

Inherits:
Object
  • Object
show all
Defined in:
lib/generators/gor/association.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(klass, models) ⇒ Association

Returns a new instance of Association.



3
4
5
6
# File 'lib/generators/gor/association.rb', line 3

def initialize(klass, models)
  @klass = klass
  @models = models
end

Instance Attribute Details

#klassObject (readonly)

Returns the value of attribute klass.



7
8
9
# File 'lib/generators/gor/association.rb', line 7

def klass
  @klass
end

#modelsObject (readonly)

Returns the value of attribute models.



7
8
9
# File 'lib/generators/gor/association.rb', line 7

def models
  @models
end

Instance Method Details

#get_schema_infoObject



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/generators/gor/association.rb', line 9

def get_schema_info
  info = {struct_body: "", has_assoc_dependent: false, assoc_info: {has_many: {}, has_one: {}, belongs_to: {}}}
  self.klass.reflect_on_all_associations.each do |assoc|
    tags = ["json:\"#{assoc.name.to_s},omitempty\" db:\"#{assoc.name.to_s}\" valid:\"-\""]
    case assoc.macro
    when :has_many
      col_name = assoc.name.to_s.camelize
      class_name = assoc.name.to_s.singularize.camelize
      unless assoc.options.empty?
        if assoc.options.key? :class_name
          class_name = assoc.options[:class_name]
        elsif assoc.options.key? :source
          class_name = assoc.options[:source].to_s.camelize
        end
      end
      type_name = "[]#{class_name}"
      if col_name && type_name && (self.models.include? class_name)
        info[:struct_body] << sprintf("%s %s `%s`\n", col_name, type_name, tags.join(" "))
        info[:assoc_info][:has_many][col_name] = {class_name: class_name}
        info[:assoc_info][:has_many][col_name].merge!(assoc.options) unless assoc.options.empty?
      end

    when :has_one, :belongs_to
      col_name = class_name = assoc.name.to_s.camelize
      unless assoc.options.empty?
        if assoc.options.key? :class_name
          class_name = assoc.options[:class_name]
        elsif assoc.options.key? :source
          class_name = assoc.options[:source].to_s.camelize
        end
      end
      type_name = class_name
      if col_name && type_name && (self.models.include? class_name)
        info[:struct_body] << sprintf("%s %s `%s`\n", col_name, type_name, tags.join(" "))
        info[:assoc_info][assoc.macro][col_name] = {class_name: class_name}
        info[:assoc_info][assoc.macro][col_name].merge!(assoc.options) unless assoc.options.empty?
      end
    end
    info[:has_assoc_dependent] = true if assoc.options.key? :dependent
  end
  info
end