class Eapi::ListMethodDefiner

Constants

DELEGATED_METHODS
DESTRUCTIVE_SELF_OR_NIL
DUP_METHODS

Public Class Methods

finalise(klass) click to toggle source
# File lib/eapi/list.rb, line 114
def self.finalise(klass)
  delegate_methods_to_list klass
  pose_as_array klass
  destructive_self_or_nil klass
  dup_methods klass
end

Private Class Methods

delegate_methods_to_list(klass) click to toggle source
# File lib/eapi/list.rb, line 122
def self.delegate_methods_to_list(klass)
  klass.send :delegate, *DELEGATED_METHODS, to: :_list
end
destructive_self_or_nil(klass) click to toggle source
# File lib/eapi/list.rb, line 127
def self.destructive_self_or_nil(klass)
  # Destructive methods that return self or nil
  DESTRUCTIVE_SELF_OR_NIL.each do |m|
    klass.send :define_method, m do |*args, &block|
      res = _list.send m, *args, &block
      res.nil? ? nil : self
    end
  end
end
dup_methods(klass) click to toggle source
# File lib/eapi/list.rb, line 141
def self.dup_methods(klass)
  # Non destructive methods that return a new object
  DUP_METHODS.each do |m|
    klass.send :define_method, m do |*args, &block|
      dup.tap { |n| n.initialize_copy(n._list.send m, *args, &block) }
    end
  end
end
pose_as_array(klass) click to toggle source
# File lib/eapi/list.rb, line 137
def self.pose_as_array(klass)
  klass.send :alias_method, :index, :find_index
end