Class: Engrel::Sentence

Inherits:
ActiveRecord::Base
  • Object
show all
Includes:
Mixin
Defined in:
lib/engrel/sentence.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.claim(subject, verb, direct_object) ⇒ Object

How we make a new sentence while ensuring an existing one doesn’t exist.



66
67
68
69
70
71
72
# File 'lib/engrel/sentence.rb', line 66

def self.claim(subject, verb, direct_object)
  params = {:subject_type => subject.class.to_s, :subject_id => subject[:id], :direct_object_type => direct_object.class.to_s, :direct_object_id => direct_object[:id], :verb => verb.to_s}.stringify_keys
  s = self.where(params).first
  s = create(params) if s.blank?
  s.reload
  block_given? ? yield(s) : s
end

Instance Method Details

#has_direct_object?Boolean

Returns:



89
90
91
# File 'lib/engrel/sentence.rb', line 89

def has_direct_object?
  (self.direct_object.present? && self.direct_object[:id].present?) rescue false
end

#has_subject?Boolean

Returns:



85
86
87
# File 'lib/engrel/sentence.rb', line 85

def has_subject?
  (self.subject.present? && self.subject[:id].present?) rescue false
end

#object_listObject



81
82
83
# File 'lib/engrel/sentence.rb', line 81

def object_list
  [ subject, direct_object ].concat(indirect_objects).compact
end

#only(*args) ⇒ Object



102
103
104
105
106
# File 'lib/engrel/sentence.rb', line 102

def only(*args)
  self.prepositional_phrases.clear
  prep(*args)
  self
end

#prep(prep, indirect_object) ⇒ Object



108
109
110
111
112
113
114
115
# File 'lib/engrel/sentence.rb', line 108

def prep(prep, indirect_object)
  if self.prepositional_phrases.include?(preposition: prep, indirect_object_id: indirect_object.id, indirect_object_type: indirect_object.class.to_s)
    warn "PREP ALREADY EXISTS!"
  else
    self.prepositional_phrases.create(preposition: prep, indirect_object: indirect_object)
  end
  self
end

#to_sentenceObject

TODO: Properly strip ANSI color chars



128
129
130
# File 'lib/engrel/sentence.rb', line 128

def to_sentence
  to_sentence_colored
end

#to_sentence_coloredObject



117
118
119
120
121
122
123
124
125
# File 'lib/engrel/sentence.rb', line 117

def to_sentence_colored
  sen = "#{subject_type.humanize}[#{subject.name rescue subject_id}\##{subject_id}]".green +
        " #{verb_label.downcase} " + "#{direct_object_type.humanize}[#{direct_object.name rescue direct_object_id}\##{direct_object_id}]".cyan
  sen += " " unless prepositional_phrases.blank? rescue true
  preps = prepositional_phrases.collect { |p| "#{p.preposition.to_s.humanize.downcase} " + "#{p.indirect_object_type.humanize}[#{p.object.name rescue p.indirect_object_id}\##{p.indirect_object_id}]".yellow }.join(" ") rescue nil
  sen << preps unless preps.blank?
  sen += '.'
  sen
end

#verb_enumsObject



93
94
95
# File 'lib/engrel/sentence.rb', line 93

def verb_enums
  self.enums(:verb)
end

#verb_label(element = nil) ⇒ Object



97
98
99
100
# File 'lib/engrel/sentence.rb', line 97

def verb_label(element = nil)
  element ||= self.verb
  verb_enums.label(element.to_sym)
end