Module: ViewMapper::BelongsToParentModels

Included in:
BelongsToAutoCompleteView, BelongsToView, HasManyExistingView
Defined in:
lib/view_mapper/belongs_to_parent_models.rb

Instance Method Summary collapse

Instance Method Details

#add_model_actions(m) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
# File 'lib/view_mapper/belongs_to_parent_models.rb', line 4

def add_model_actions(m)
  m.directory(File.join('test/fixtures', class_path))
  m.template   'model.erb',     File.join('app/models', class_path, "#{file_name}.rb")
  m.template   'unit_test.rb', File.join('test/unit', class_path, "#{file_name}_test.rb")
  unless options[:skip_fixture]
    m.template 'fixtures.yml', File.join('test/fixtures', "#{table_name}.yml")
  end
  unless options[:skip_migration]
    m.migration_template 'migration.rb',
                         'db/migrate',
                         :assigns => { :migration_name => "Create#{class_name.pluralize.gsub(/::/, '')}" },
                         :migration_file_name => "create_#{file_path.gsub(/\//, '_').pluralize}"
  end
end

#field_for(parent_model) ⇒ Object



91
92
93
94
# File 'lib/view_mapper/belongs_to_parent_models.rb', line 91

def field_for(parent_model)
  name = parent_fields[parent_model.name]
  name ? name : 'name'
end

#find_parent_modelsObject



27
28
29
30
31
32
33
34
35
36
37
# File 'lib/view_mapper/belongs_to_parent_models.rb', line 27

def find_parent_models
  if view_param
    view_param.split(',').collect do |param|
      model_info_from_param(param)
    end
  elsif view_only?
    model.parent_models
  else
    []
  end
end

#is_model_dependency_action(action) ⇒ Object



19
20
21
# File 'lib/view_mapper/belongs_to_parent_models.rb', line 19

def is_model_dependency_action(action)
  action[0] == :dependency && action[1].include?('model')
end

#model_info_from_param(param) ⇒ Object



39
40
41
42
43
44
45
46
47
# File 'lib/view_mapper/belongs_to_parent_models.rb', line 39

def model_info_from_param(param)
  if /(.*)\[(.*)\]/.match(param)
    parent_model = ModelInfo.new($1.singularize)
    select_parent_by parent_model, $2
  else
    parent_model = ModelInfo.new(param.singularize)
  end
  parent_model
end

#parent_modelsObject



23
24
25
# File 'lib/view_mapper/belongs_to_parent_models.rb', line 23

def parent_models
  @parent_models ||= find_parent_models
end

#validate_parent_model(parent_model, child_model_name, child_model, check_setter_method = false) ⇒ Object



64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/view_mapper/belongs_to_parent_models.rb', line 64

def validate_parent_model(parent_model, child_model_name, child_model, check_setter_method = false)
  parent_model_name = parent_model.name
  if !parent_model.valid?
    logger.error parent_model.error
    return false
  elsif child_model && !child_model.belongs_to?(parent_model_name)
    logger.warning "Model #{child_model.name} does not belong to model #{parent_model_name}."
    return false
  elsif child_model && !child_model.has_method?(virtual_attribute_for(parent_model))
    logger.warning "Model #{child_model.name} does not have a method #{virtual_attribute_for(parent_model)}."
    return false
  elsif child_model && check_setter_method && !child_model.has_method?(virtual_attribute_setter_for(parent_model))
    logger.warning "Model #{child_model.name} does not have a method #{virtual_attribute_setter_for(parent_model)}."
    return false
  elsif child_model && !child_model.has_foreign_key_for?(parent_model_name)
    logger.warning "Model #{child_model.name} does not contain a foreign key for #{parent_model_name}."
    return false
  elsif !parent_model.has_many?(child_model_name.pluralize)
    logger.warning "Model #{parent_model_name} does not contain a has_many association for #{child_model_name}."
    return false
  elsif !parent_model.has_method?(field_for(parent_model)) && !parent_model.has_column?(field_for(parent_model))
    logger.warning "Model #{parent_model_name} does not have a #{field_for(parent_model)} attribute."
    return false
  end
  true
end

#validate_parent_modelsObject



49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/view_mapper/belongs_to_parent_models.rb', line 49

def validate_parent_models
  parents = parent_models
  if parents.empty?
    if view_only?
      logger.error "No belongs_to associations exist in class #{model.name}."
    else
      logger.error "No belongs_to association specified."
    end
    return false
  end
  parents.reject! { |parent_model| !validate_parent_model(parent_model, class_name, view_only? ? model : nil) }
  @parent_models = parents
  !parents.empty?
end

#virtual_attribute_for(parent_model) ⇒ Object



96
97
98
# File 'lib/view_mapper/belongs_to_parent_models.rb', line 96

def virtual_attribute_for(parent_model)
  "#{parent_model.name.underscore}_#{field_for(parent_model)}"
end

#virtual_attribute_setter_for(parent_model) ⇒ Object



100
101
102
# File 'lib/view_mapper/belongs_to_parent_models.rb', line 100

def virtual_attribute_setter_for(parent_model)
  "#{virtual_attribute_for(parent_model)}="
end