Module: Inform::Linkable
- Included in:
- Object
- Defined in:
- lib/story_teller/inform/relational/link.rb
Overview
module Linkable
Instance Method Summary collapse
- #_set_object(link_name, obj = nil) ⇒ Object
- #find_link(link_name) ⇒ Object
-
#link(link_name, obj = nil) ⇒ Object
rubocop: disable Metrics/MethodLength.
-
#linked?(link_name) ⇒ Boolean
(also: #_key?)
rubocop: enable Metrics/MethodLength.
- #links ⇒ Object
- #linksfrom(link_name = nil) ⇒ Object
- #linkto(link_name) ⇒ Object (also: #_get_object)
- #unlink(link_name) ⇒ Object (also: #_unset_object)
Instance Method Details
#_set_object(link_name, obj = nil) ⇒ Object
199 200 201 202 203 204 |
# File 'lib/story_teller/inform/relational/link.rb', line 199 def _set_object(link_name, obj = nil) return nil if obj.nil? link(link_name, obj) obj end |
#find_link(link_name) ⇒ Object
145 146 147 148 149 150 |
# File 'lib/story_teller/inform/relational/link.rb', line 145 def find_link(link_name) return nil unless self.respond_to?(:id) return nil if self.id.nil? Inform.link_klass.first(name: link_name.to_s, from_id: self.id) end |
#link(link_name, obj = nil) ⇒ Object
rubocop: disable Metrics/MethodLength
153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 |
# File 'lib/story_teller/inform/relational/link.rb', line 153 def link(link_name, obj = nil) save_link_endpoint(self) save_link_endpoint(obj) link = find_link(link_name) return link if obj.nil? if link.nil? clauses = { name: link_name.to_s, from_id: self.id, to_id: obj.id } link = Inform.link_klass.find_or_create(**clauses) else link.to_id = obj.id link.save end link end |
#linked?(link_name) ⇒ Boolean Also known as: _key?
rubocop: enable Metrics/MethodLength
171 172 173 174 175 176 |
# File 'lib/story_teller/inform/relational/link.rb', line 171 def linked?(link_name) return false unless self.respond_to?(:id) return false if self.id.nil? Inform.link_klass.filter(name: link_name.to_s, from_id: self.id).count > 0 end |
#links ⇒ Object
136 137 138 139 140 141 142 143 |
# File 'lib/story_teller/inform/relational/link.rb', line 136 def links return Array::Empty unless self.respond_to?(:id) return Array::Empty if self.id.nil? Inform.link_klass.filter(from_id: self.id).all rescue StandardError => _e Array::Empty end |
#linksfrom(link_name = nil) ⇒ Object
206 207 208 209 210 211 212 213 |
# File 'lib/story_teller/inform/relational/link.rb', line 206 def linksfrom(link_name = nil) return Array::Empty unless self.respond_to?(:id) return Array::Empty if self.id.nil? dataset = Inform.link_klass.filter(to_id: self.id) dataset = dataset.filter(name: link_name.to_s) unless link_name.nil? dataset.all.map { |link| linked_object(link.from_id) }.compact end |
#linkto(link_name) ⇒ Object Also known as: _get_object
193 194 195 196 |
# File 'lib/story_teller/inform/relational/link.rb', line 193 def linkto(link_name) link = find_link(link_name) link.nil? ? nil : linked_object(link.to_id) end |
#unlink(link_name) ⇒ Object Also known as: _unset_object
179 180 181 182 183 184 185 186 187 188 189 190 |
# File 'lib/story_teller/inform/relational/link.rb', line 179 def unlink(link_name) link = find_link(link_name) return nil if link.nil? object = linked_object(link.to_id) link.destroy object rescue Sequel::NoExistingObject => e log.warn 'Error: ' + e. log.warn 'No such link: ' + link_name.to_s nil end |