Module: Inform::Linkable

Included in:
Object
Defined in:
lib/story_teller/inform/ephemeral/link.rb

Overview

The Linkable module

Instance Method Summary collapse

Instance Method Details

#_set_object(link_name, obj = nil) ⇒ Object



133
134
135
# File 'lib/story_teller/inform/ephemeral/link.rb', line 133

def _set_object(link_name, obj = nil)
  link(link_name, obj).to
end

rubocop: disable Metrics/AbcSize rubocop: disable Metrics/MethodLength



84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/story_teller/inform/ephemeral/link.rb', line 84

def link(link_name, obj = nil)
  link = Inform::Link.first(name: link_name.to_s, from_id: self.id)
  link&.to&.refresh
  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.find_or_create(**clauses) do |l|
      l.from = self
      l.to = obj
    end
  else
    link.to = obj
    link.save
  end
  link
end

#linked?(link_name) ⇒ Boolean Also known as: _key?

rubocop: enable Metrics/AbcSize rubocop: enable Metrics/MethodLength

Returns:

  • (Boolean)


103
104
105
106
107
108
109
# File 'lib/story_teller/inform/ephemeral/link.rb', line 103

def linked?(link_name)
  if Inform::Link.respond_to?(:filter)
    Inform::Link.filter(name: link_name.to_s, from_id: self.id).count > 0
  else
    !self.links.find(&:link_name).nil?
  end
end


76
77
78
79
80
# File 'lib/story_teller/inform/ephemeral/link.rb', line 76

def links
  super
rescue StandardError => _e
  Array::Empty
end

#linksfrom(link_name = nil) ⇒ Object



123
124
125
126
127
128
129
# File 'lib/story_teller/inform/ephemeral/link.rb', line 123

def linksfrom(link_name = nil)
  if link_name.nil?
    Inform::Link.filter(to_id: self.id).map(&:from)
  else
    Inform::Link.filter(name: link_name.to_s, to_id: self.id).map(&:from)
  end
end

#linkto(link_name) ⇒ Object Also known as: _get_object



119
120
121
# File 'lib/story_teller/inform/ephemeral/link.rb', line 119

def linkto(link_name)
  Inform::Link.first(name: link_name.to_s, from_id: self.id)&.to&.refresh
end


111
112
113
114
115
116
117
# File 'lib/story_teller/inform/ephemeral/link.rb', line 111

def unlink(link_name)
  Inform::Link.first(name: link_name.to_s, from_id: self.id).destroy&.to
rescue Sequel::NoExistingObject => e
  log.warn 'Error: ' + e.message
  log.warn 'No such link: ' + link_name
  nil
end