Module: Inform::Modular

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

Overview

The Inform::Modular module

Instance Method Summary collapse

Instance Method Details

#after_initializeObject



95
96
97
98
# File 'lib/story_teller/inform/ephemeral/module.rb', line 95

def after_initialize
  self.apply_modules
  super
end

#apply_modules(exceptions = []) ⇒ Object



135
136
137
138
139
140
141
142
143
144
145
# File 'lib/story_teller/inform/ephemeral/module.rb', line 135

def apply_modules(exceptions = [])
  nil_safe_modules.each do |module_name|
    next if exceptions.include?(module_name.to_sym)
    mod = find_module(module_name)
    next if mod.nil?
    mod.ancestors.reverse.each do |ancestor|
      self.extend(ancestor)
    end
  end
  self
end

#mod(*args) ⇒ Object



106
107
108
109
110
111
112
113
114
# File 'lib/story_teller/inform/ephemeral/module.rb', line 106

def mod(*args)
  a = args.flatten.collect(&:to_s)
  (a - (nil_safe_modules & a)).each do |mod|
    add_module(Inform::Module.find_or_create(name: mod))
  end
  save
  apply_modules
  self
end

#modulesObject



100
101
102
103
104
# File 'lib/story_teller/inform/ephemeral/module.rb', line 100

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

#modules_semaphoreObject



127
128
129
# File 'lib/story_teller/inform/ephemeral/module.rb', line 127

def modules_semaphore
  @modules_semaphore ||= Mutex.new
end

#nil_safe_modulesObject



131
132
133
# File 'lib/story_teller/inform/ephemeral/module.rb', line 131

def nil_safe_modules
  modules.compact.map(&:to_s)
end

#reset_modulesObject

TODO: This is broken somehow FIXME



148
149
150
151
152
153
154
155
156
157
# File 'lib/story_teller/inform/ephemeral/module.rb', line 148

def reset_modules
  nil_safe_modules.each do |module_name|
    remove_module(module_name)
    mod = find_module(module_name)
    next if mod.nil?
    mod.instance_methods.each { |method_name| undef_method(method_name) }
  end
  save
  self
end

#unmod(*args) ⇒ Object



116
117
118
119
120
121
122
123
124
125
# File 'lib/story_teller/inform/ephemeral/module.rb', line 116

def unmod(*args)
  (nil_safe_modules & args.flatten.collect(&:to_s)).each do |mod|
    remove_module(Inform::Module.find(name: mod))
  end
  save
  i = parent(self)
  self.remove
  i << self
  self
end