module Captive::Base

Attributes

cues[RW]

Public Class Methods

included(base) click to toggle source
# File lib/captive/base.rb, line 28
def self.included(base)
  base.extend(ClassMethods)
  base.include(Util)
end
new(cue_list: nil) click to toggle source
# File lib/captive/base.rb, line 35
def initialize(cue_list: nil)
  @cues = cue_list || []
end

Public Instance Methods

as_json(**args) click to toggle source
# File lib/captive/base.rb, line 45
def as_json(**args)
  results = {
    'version' => VERSION,
    'cues' => cues.map(&:as_json),
  }
  if results.respond_to?(:as_json)
    results.as_json(**args)
  else
    results
  end
end
method_missing(method_name, *_args) click to toggle source
Calls superclass method
# File lib/captive/base.rb, line 57
def method_missing(method_name, *_args)
  super unless (match = /^as_([a-z]+)$/.match(method_name))

  if valid_format?(match.captures.first.upcase)
    define_format_conversion(method_name, match.captures.first.upcase)
    send(method_name)
  elsif valid_format?(match.captures.first.capitalize)
    define_format_conversion(method_name, match.captures.first.capitalize)
    send(method_name)
  else
    super
  end
end
respond_to_missing?(method_name, _) click to toggle source
Calls superclass method
# File lib/captive/base.rb, line 71
def respond_to_missing?(method_name, _)
  super unless (match = /^as_([a-z]+)$/.match(method_name))

  return true if valid_format?(match.captures.first.upcase) || valid_format?(match.captures.first.capitalize)

  super
end
save_as(filename:) click to toggle source
# File lib/captive/base.rb, line 39
def save_as(filename:)
  File.open(filename, 'w') do |file|
    file.write(to_s)
  end
end

Private Instance Methods

base_klass() click to toggle source
# File lib/captive/base.rb, line 81
def base_klass
  base = self.class.to_s.split('::')
  Kernel.const_get(base.first)
end
define_format_conversion(method_name, format) click to toggle source
# File lib/captive/base.rb, line 90
def define_format_conversion(method_name, format)
  self.class.define_method(method_name) do
    if self.class.to_s.split('::').last == format
      self
    else
      base_klass.const_get(format).new(cue_list: cues)
    end
  end
end
valid_format?(format) click to toggle source
# File lib/captive/base.rb, line 86
def valid_format?(format)
  base_klass.const_defined?(format) && base_klass.const_get(format).include?(Base)
end