Module: Abstractor::Methods::Models::AbstractorSuggestion

Included in:
AbstractorSuggestion
Defined in:
lib/abstractor/methods/models/abstractor_suggestion.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/abstractor/methods/models/abstractor_suggestion.rb', line 5

def self.included(base)
  base.send :include, SoftDelete

  # Associations
  base.send :belongs_to, :abstractor_abstraction
  base.send :belongs_to, :abstractor_suggestion_status

  base.send :has_one, :abstractor_suggestion_object_value
  base.send :has_one, :abstractor_object_value, :through => :abstractor_suggestion_object_value

  base.send :has_many, :abstractor_suggestion_sources

  # base.send :attr_accessible, :abstractor_abstraction, :abstractor_abstraction_id, :abstractor_suggestion_sources, :abstractor_suggestion_source_id, :abstractor_suggestion_status, :abstractor_suggestion_status_id, :suggested_value, :deleted_at, :unknown, :not_applicable

  # Hooks
  base.send :after_save, :update_abstraction_value, :if => lambda {|abstractor_suggestion| abstractor_suggestion.abstractor_suggestion_status_id_changed?}
  base.send :after_save, :update_siblings_status, :if => lambda {|abstractor_suggestion| abstractor_suggestion.abstractor_suggestion_status_id_changed?}
end

Instance Method Details

#detect_abstractor_suggestion_source(abstractor_abstraction_source, sentence_match_value, source_id, source_type, source_method, section_name) ⇒ Object



77
78
79
80
81
82
83
84
85
86
# File 'lib/abstractor/methods/models/abstractor_suggestion.rb', line 77

def detect_abstractor_suggestion_source(abstractor_abstraction_source, sentence_match_value, source_id, source_type, source_method, section_name)
  abstractor_suggestion_source = abstractor_suggestion_sources.detect do |abstractor_suggestion_source|
    abstractor_suggestion_source.abstractor_abstraction_source == abstractor_abstraction_source &&
    abstractor_suggestion_source.sentence_match_value == sentence_match_value &&
    abstractor_suggestion_source.source_id == source_id &&
    abstractor_suggestion_source.source_type == source_type &&
    abstractor_suggestion_source.source_method == source_method &&
    abstractor_suggestion_source.section_name == section_name
  end
end

#display_valueObject



63
64
65
66
67
68
69
70
71
# File 'lib/abstractor/methods/models/abstractor_suggestion.rb', line 63

def display_value
  if unknown
    'unknown'
  elsif not_applicable
    'not applicable'
  else
    suggested_value
  end
end

#sibling_suggestionsObject



73
74
75
# File 'lib/abstractor/methods/models/abstractor_suggestion.rb', line 73

def sibling_suggestions
  abstractor_abstraction.abstractor_suggestions.where('id != ?', id)
end

#update_abstraction_valueObject

Instance Methods



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/abstractor/methods/models/abstractor_suggestion.rb', line 25

def update_abstraction_value
  if abstractor_suggestion_status.accepted?
    abstractor_abstraction.value                     = suggested_value
    abstractor_abstraction.unknown                   = unknown
    abstractor_abstraction.not_applicable            = not_applicable
    abstractor_abstraction.save!
  elsif abstractor_suggestion_status.needs_review?
    abstractor_abstraction.value          = nil
    abstractor_abstraction.unknown        = nil
    abstractor_abstraction.not_applicable = nil
    abstractor_abstraction.save!
  elsif abstractor_suggestion_status.rejected?
    abstractor_abstraction.value          = nil if abstractor_abstraction.value == suggested_value
    abstractor_abstraction.unknown        = nil if unknown && abstractor_abstraction.unknown == unknown
    abstractor_abstraction.not_applicable = nil if not_applicable && abstractor_abstraction.not_applicable == not_applicable
    abstractor_abstraction.save!
  end
end

#update_siblings_statusObject



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/abstractor/methods/models/abstractor_suggestion.rb', line 44

def update_siblings_status
  rejected_status = Abstractor::AbstractorSuggestionStatus.where(:name => 'Rejected').first
  needs_review_status = Abstractor::AbstractorSuggestionStatus.where(:name => 'Needs review').first

  if abstractor_suggestion_status.accepted?
    #reject sibling suggestions
    self.sibling_suggestions.each do |abstractor_suggestion|
      abstractor_suggestion.abstractor_suggestion_status = rejected_status
      abstractor_suggestion.save!
    end
  elsif abstractor_suggestion_status.needs_review?
    #reset status on sibling suggestions
    self.sibling_suggestions.each do |abstractor_suggestion|
      abstractor_suggestion.abstractor_suggestion_status = needs_review_status
      abstractor_suggestion.save!
    end
  end
end