Class: ModelScope::Analyzers::CallbackAnalyzer

Inherits:
Object
  • Object
show all
Defined in:
lib/modelscope/analyzers/callback_analyzer.rb

Constant Summary collapse

RAILS_GEMS =
%w[
  actioncable actionmailbox actionmailer actionpack actiontext
  actionview activejob activemodel activerecord activestorage
  activesupport railties
].freeze
RAILS_ATTRIBUTE_OWNERS =
[
  defined?(ActiveRecord::Normalization) ? ActiveRecord::Normalization : ActiveModel::Attributes::Normalization,
  ActiveRecord::Encryption::EncryptableRecord
].freeze

Instance Method Summary collapse

Constructor Details

#initialize(callback, model, defining_class) ⇒ CallbackAnalyzer

Returns a new instance of CallbackAnalyzer.



17
18
19
20
21
22
# File 'lib/modelscope/analyzers/callback_analyzer.rb', line 17

def initialize(callback, model, defining_class)
  @callback = callback
  @model = model
  @defining_class = defining_class
  @filter = callback.filter
end

Instance Method Details

#association_generated?Boolean

Returns:

  • (Boolean)


57
58
59
60
61
# File 'lib/modelscope/analyzers/callback_analyzer.rb', line 57

def association_generated?
  generated_by_module?("GeneratedAssociationMethods") ||
    from_rails_path?(%r{/active_record/(autosave_association\.rb|associations/builder)}) ||
    ValidationAnalyzer.belongs_to_validator?(@filter, @model)
end

#attribute_generated?Boolean

Returns:

  • (Boolean)


63
64
65
66
67
# File 'lib/modelscope/analyzers/callback_analyzer.rb', line 63

def attribute_generated?
  generated_by_module?("GeneratedAttributeMethods") ||
    generated_by_rails_attributes? ||
    from_rails_path?("active_record/attribute_methods/")
end

#conditional?Boolean

Returns:

  • (Boolean)


49
50
51
52
53
54
55
# File 'lib/modelscope/analyzers/callback_analyzer.rb', line 49

def conditional?
  [@callback.instance_variable_get(:@if),
    @callback.instance_variable_get(:@unless)].any? do |condition|
    next false if condition.nil?
    [*condition].any? { |c| c.is_a?(Symbol) || c.is_a?(Proc) }
  end
end

#inherited?Boolean

Returns:

  • (Boolean)


36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/modelscope/analyzers/callback_analyzer.rb', line 36

def inherited?
  owner = callback_owner
  return false unless owner

  if validator?(@filter)
    @model != @defining_class
  else
    owner != @model &&
      !rails_module?(owner) &&
      owner != @defining_class
  end
end

#originObject



24
25
26
27
28
29
30
31
32
33
34
# File 'lib/modelscope/analyzers/callback_analyzer.rb', line 24

def origin
  if rails_callback?
    :rails
  elsif external_class?
    :gems
  elsif !@filter.is_a?(Symbol)
    :own
  else
    external_method?(callback_method) ? :gems : :own
  end
end