class Family

@example Simplify

list = Family.new Integer
list << 7    #=> 7
list << 1.0  #=> Exception
list << 1    #=> 1
list.inspect #=> "Integer ===: [7, 1]"

@example Not bound by “Type”

list = Family.new /\A\S+\z/
list << 'a b c' #=> Exception
list << 'abc'   #=> "abc"
list.inspect    #=> "/\A\S+\z/ ===: ["abc"]"

@example HighLayer definition

list = Family.define { AND(Float, 3..6) }
list << 4       #=> Exception
list << 2.0     #=> Exception
list << 4.0     #=> 4.0
list.inspect    #=> a Proc ===: [4.0]

@note return self -> Array

* #flatten is different
* #flatten! is none
* #product

@note removed from Array

* #flatten! is none

Constants

VERSION

Attributes

pattern[R]

Public Class Methods

__new__(pattern, values) click to toggle source

@private

# File lib/family/singleton_class.rb, line 12
def __new__(pattern, values)
  new(pattern, values: values)
end
define(values: [], &block) click to toggle source

@return [Family]

# File lib/family/singleton_class.rb, line 7
def define(values: [], &block)
  __new__(Eqq.build(&block), values)
end
new(pattern, values: []) click to toggle source
# File lib/family.rb, line 46
def initialize(pattern, values: [])
  @pattern, @values = pattern, values.to_ary

  raise MismatchedObject unless valid?
end

Private Class Methods

def_enum(name) click to toggle source
# File lib/family/singleton_class.rb, line 18
def def_enum(name)
  define_method(name) do |*args, &block|
    @values.__send__(name, *args, &block)
    self
  end
end
def_enums(*names) click to toggle source
# File lib/family/singleton_class.rb, line 25
def def_enums(*names)
  names.each { |name| def_enum(name) }
end
def_set_operator(operator) click to toggle source
# File lib/family/singleton_class.rb, line 29
def def_set_operator(operator)
  define_method(operator) do |other|
    other = other.kind_of?(::Family) ? other._values : other.to_ary
    self.class.__new__(@pattern, @values.__send__(operator, other))
  end
end

Public Instance Methods

*(times_or_delimiter) click to toggle source

@return [Family]

# File lib/family.rb, line 142
def *(times_or_delimiter)
  case times_or_delimiter
  when Integer
    self.class.__new__(@pattern, @values * times_or_delimiter)
  when String
    join(times_or_delimiter)
  else
    raise ArgumentError
  end
end
<<(value) click to toggle source

@return [self]

# File lib/family.rb, line 80
def <<(value)
  raise MismatchedObject unless family?(value)

  @values << value
  self
end
Also aliased as: push
clear() click to toggle source

@return [self]

# File lib/family.rb, line 165
def clear
  @values.clear
  self
end
collect(&block)
Alias for: map
collect!(&block)
Alias for: map!
compact() click to toggle source

@return [Family]

# File lib/family.rb, line 171
def compact
  self.class.__new__(@pattern, @values.compact)
end
compact!() click to toggle source

@return [self, nil]

# File lib/family.rb, line 176
def compact!
  @values.compact! && self
end
concat(list) click to toggle source

@param [#all?] list @return [self]

# File lib/family.rb, line 99
def concat(list)
  raise MismatchedObject unless similar?(list)

  @values.concat(list)
  self
end
delete_if(&block) click to toggle source

@return [self]

# File lib/family.rb, line 198
def delete_if(&block)
  return to_enum(__callee__) unless block

  reject!(&block)
  self
end
eql?(other) click to toggle source
# File lib/family.rb, line 185
def eql?(other)
  other.kind_of?(::Family) &&
    (_comparison_values == other._comparison_values)
end
family?(value) click to toggle source
# File lib/family.rb, line 106
def family?(value)
  @pattern === value
end
fill(*args, &block) click to toggle source

@return [self]

# File lib/family.rb, line 221
def fill(*args, &block)
  filled = @values.dup.fill(*args, &block)
  raise MismatchedObject unless similar?(filled)

  @values = filled
  self
end
filter!(&block)
Alias for: select!
freeze() click to toggle source

@return [self]

Calls superclass method
# File lib/family.rb, line 159
def freeze
  @values.freeze
  super
end
hash() click to toggle source

@return [Number]

# File lib/family.rb, line 181
def hash
  _comparison_values.hash
end
inspect() click to toggle source

@return [String]

# File lib/family.rb, line 75
def inspect
  "Family<#{@pattern.inspect}>: #{@values.inspect}"
end
keep_if(&block) click to toggle source
# File lib/family.rb, line 213
def keep_if(&block)
  return to_enum(__callee__) unless block

  select!(&block)
  self
end
map(&block) click to toggle source

@return [Family]

# File lib/family.rb, line 120
def map(&block)
  return to_enum(__callee__) { size } unless block

  self.class.__new__(@pattern, @values.map(&block))
end
Also aliased as: collect
map!(&block) click to toggle source

@return [self]

# File lib/family.rb, line 129
def map!(&block)
  return to_enum(__callee__) { size } unless block

  mapped = @values.map(&block)
  raise InvalidOperation unless similar?(mapped)

  @values = mapped
  self
end
Also aliased as: collect!
push(value)
Alias for: <<
reject!(&block) click to toggle source

@return [self, nil]

# File lib/family.rb, line 191
def reject!(&block)
  return to_enum(__callee__) unless block

  @values.reject!(&block) && self
end
replace(list) click to toggle source

@param [#all?] list @return [self]

# File lib/family.rb, line 231
def replace(list)
  raise MismatchedObject unless similar?(list)

  @values = list.dup
  self
end
reverse() click to toggle source

@return [Family]

# File lib/family.rb, line 239
def reverse
  self.class.__new__(@pattern, @values.reverse)
end
reverse!() click to toggle source

@return [self]

# File lib/family.rb, line 244
def reverse!
  @values.reverse!
  self
end
rotate(pos=1) click to toggle source

@param [Integer] pos @return [Family]

# File lib/family.rb, line 251
def rotate(pos=1)
  self.class.__new__(@pattern, @values.rotate(pos))
end
rotate!(pos=1) click to toggle source

@param [Integer] pos @return [self]

# File lib/family.rb, line 257
def rotate!(pos=1)
  @values.rotate!(pos)
  self
end
select!(&block) click to toggle source

@return [self, nil]

# File lib/family.rb, line 206
def select!(&block)
  return to_enum(__callee__) unless block

  @values.select!(&block) && self
end
Also aliased as: filter!
shuffle(...) click to toggle source

@return [Family]

# File lib/family.rb, line 263
def shuffle(...)
  self.class.__new__(@pattern, @values.shuffle(...))
end
shuffle!(...) click to toggle source

@return [self]

# File lib/family.rb, line 268
def shuffle!(...)
  @values.shuffle!(...)
  self
end
similar?(list) click to toggle source

@param [#all?] list

# File lib/family.rb, line 111
def similar?(list)
  list.all? { |v| family?(v) }
end
sort(&block) click to toggle source

@return [Family]

# File lib/family.rb, line 274
def sort(&block)
  self.class.__new__(@pattern, @values.sort(&block))
end
sort!(&block) click to toggle source

@return [self, nil]

# File lib/family.rb, line 279
def sort!(&block)
  @values.sort!(&block) && self
end
sort_by(&block) click to toggle source

@return [Family]

# File lib/family.rb, line 284
def sort_by(&block)
  self.class.__new__(@pattern, @values.sort_by(&block))
end
sort_by!(&block) click to toggle source

@return [self, nil]

# File lib/family.rb, line 289
def sort_by!(&block)
  @values.sort_by!(&block) && self
end
to_a()
Alias for: values
to_ary()
Alias for: values
to_family() click to toggle source

@return [self]

# File lib/family.rb, line 154
def to_family
  self
end
uniq(&block) click to toggle source

@return [Family]

# File lib/family.rb, line 294
def uniq(&block)
  self.class.__new__(@pattern, @values.uniq(&block))
end
uniq!(&block) click to toggle source

@return [self, nil]

# File lib/family.rb, line 299
def uniq!(&block)
  @values.uniq!(&block) && self
end
unshift(value) click to toggle source

@return [self]

# File lib/family.rb, line 90
def unshift(value)
  raise MismatchedObject unless family?(value)

  @values.unshift(value)
  self
end
valid?() click to toggle source
# File lib/family.rb, line 115
def valid?
  similar?(@values)
end
values() click to toggle source

@return [Array]

# File lib/family.rb, line 67
def values
  @values.dup
end
Also aliased as: to_ary, to_a
values_at(*selectors) click to toggle source

@param [Integer, Range<Integer>] selectors @return [Family]

# File lib/family.rb, line 305
def values_at(*selectors)
  self.class.__new__(@pattern, @values.values_at(*selectors))
end

Protected Instance Methods

_comparison_values() click to toggle source
# File lib/family.rb, line 315
def _comparison_values
  [@pattern, @values]
end
_values() click to toggle source
# File lib/family.rb, line 311
def _values
  @values
end

Private Instance Methods

initialize_copy(original) click to toggle source
# File lib/family.rb, line 321
def initialize_copy(original)
  @values = @values.dup
end