Class: LintFu::ActiveRecord::ModelModelBuilder

Inherits:
ModelElementBuilder show all
Defined in:
lib/lint_fu/active_record/model_model_builder.rb

Constant Summary collapse

SIGNATURE_SEXP =
s(:colon2, s(:const, :ActiveRecord), :Base)
SINGULAR_ASSOCS =
Set.new([:belongs_to, :has_one])
PLURAL_ASSOCS =
Set.new([:has_many, :has_and_belongs_to_many])
ASSOCS =
SINGULAR_ASSOCS + PLURAL_ASSOCS

Instance Attribute Summary

Attributes inherited from ModelElementBuilder

#model_elements, #namespace

Instance Method Summary collapse

Methods inherited from ModelElementBuilder

#initialize, #process_module

Constructor Details

This class inherits a constructor from LintFu::ModelElementBuilder

Instance Method Details

#process_call(sexp) ⇒ Object

s(:call, nil, :belongs_to, s(:arglist, s(:lit, :relation_name)))



30
31
32
33
34
35
36
37
38
39
# File 'lib/lint_fu/active_record/model_model_builder.rb', line 30

def process_call(sexp)
  return sexp unless @current_model_element

  callee, method, arglist = sexp[1], sexp[2], sexp[3]
  arglist = nil unless arglist[0] == :arglist
  discover_associations(callee, method, arglist)
  discover_named_scopes(callee, method, arglist)
  discover_paranoia(callee, method, arglist)
  return sexp
end

#process_class(sexp) ⇒ Object

sexp
:class, <classname>, <superclass|nil>, <CLASS DEFS>


11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/lint_fu/active_record/model_model_builder.rb', line 11

def process_class(sexp)
  return super(sexp) unless sexp[2] && sexp[2] == SIGNATURE_SEXP

  unless @current_model_element
    @current_model_element = ModelModel.new(sexp, self.namespace)
    did_element = true
  end

  ret = super(sexp)

  if did_element
    self.model_elements.push @current_model_element
    @current_model_element = nil
  end

  return ret
end