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

+ (Object) claim(subject, verb, direct_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

- (Boolean) has_direct_object?

Returns:

  • (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

- (Boolean) has_subject?

Returns:

  • (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) object_list



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

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

- (Object) only(*args)



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

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

- (Object) prep(prep, indirect_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

- (Object) to_sentence

TODO: Properly strip ANSI color chars



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

def to_sentence
  to_sentence_colored
end

- (Object) to_sentence_colored



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

- (Object) verb_enums



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

def verb_enums
  self.enums(:verb)
end

- (Object) verb_label(element = nil)



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