Module: Inform::Modular

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

Overview

The Inform::Modular module

Instance Method Summary collapse

Instance Method Details

#after_initializeObject



137
138
139
140
# File 'lib/story_teller/inform/relational/module.rb', line 137

def after_initialize
  self.apply_modules
  super
end

#apply_modules(exceptions = []) ⇒ Object



177
178
179
180
181
182
183
184
185
186
187
# File 'lib/story_teller/inform/relational/module.rb', line 177

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



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

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



142
143
144
145
146
# File 'lib/story_teller/inform/relational/module.rb', line 142

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

#modules_semaphoreObject



169
170
171
# File 'lib/story_teller/inform/relational/module.rb', line 169

def modules_semaphore
  @modules_semaphore ||= Mutex.new
end

#nil_safe_modulesObject



173
174
175
# File 'lib/story_teller/inform/relational/module.rb', line 173

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

#reset_modulesObject

TODO: This is broken somehow FIXME



190
191
192
193
194
195
196
197
198
199
# File 'lib/story_teller/inform/relational/module.rb', line 190

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



158
159
160
161
162
163
164
165
166
167
# File 'lib/story_teller/inform/relational/module.rb', line 158

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