Class: Engrel::Sentence
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- Engrel::Sentence
- Includes:
- Mixin
- Defined in:
- lib/engrel/sentence.rb
Class Method Summary collapse
-
.claim(subject, verb, direct_object) ⇒ Object
How we make a new sentence while ensuring an existing one doesn’t exist.
Instance Method Summary collapse
- #has_direct_object? ⇒ Boolean
- #has_subject? ⇒ Boolean
- #object_list ⇒ Object
- #only(*args) ⇒ Object
- #prep(prep, indirect_object) ⇒ Object
-
#to_sentence ⇒ Object
TODO: Properly strip ANSI color chars.
- #to_sentence_colored ⇒ Object
- #verb_enums ⇒ Object
- #verb_label(element = nil) ⇒ Object
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
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
85 86 87 |
# File 'lib/engrel/sentence.rb', line 85 def has_subject? (self.subject.present? && self.subject[:id].present?) rescue false end |
#object_list ⇒ Object
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_sentence ⇒ Object
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_colored ⇒ Object
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_enums ⇒ Object
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 |