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
Public Class Methods
@private
# File lib/family/singleton_class.rb, line 12 def __new__(pattern, values) new(pattern, values: values) end
@return [Family]
# File lib/family/singleton_class.rb, line 7 def define(values: [], &block) __new__(Eqq.build(&block), values) end
# File lib/family.rb, line 46 def initialize(pattern, values: []) @pattern, @values = pattern, values.to_ary raise MismatchedObject unless valid? end
Private Class Methods
# 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
# File lib/family/singleton_class.rb, line 25 def def_enums(*names) names.each { |name| def_enum(name) } end
# 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
@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
@return [self]
# File lib/family.rb, line 80 def <<(value) raise MismatchedObject unless family?(value) @values << value self end
@return [self]
# File lib/family.rb, line 165 def clear @values.clear self end
@return [Family]
# File lib/family.rb, line 171 def compact self.class.__new__(@pattern, @values.compact) end
@return [self, nil]
# File lib/family.rb, line 176 def compact! @values.compact! && self end
@param [#all?] list @return [self]
# File lib/family.rb, line 99 def concat(list) raise MismatchedObject unless similar?(list) @values.concat(list) self end
@return [self]
# File lib/family.rb, line 198 def delete_if(&block) return to_enum(__callee__) unless block reject!(&block) self end
# File lib/family.rb, line 185 def eql?(other) other.kind_of?(::Family) && (_comparison_values == other._comparison_values) end
# File lib/family.rb, line 106 def family?(value) @pattern === value end
@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
@return [self]
# File lib/family.rb, line 159 def freeze @values.freeze super end
@return [Number]
# File lib/family.rb, line 181 def hash _comparison_values.hash end
@return [String]
# File lib/family.rb, line 75 def inspect "Family<#{@pattern.inspect}>: #{@values.inspect}" end
# File lib/family.rb, line 213 def keep_if(&block) return to_enum(__callee__) unless block select!(&block) self end
@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
@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
@return [self, nil]
# File lib/family.rb, line 191 def reject!(&block) return to_enum(__callee__) unless block @values.reject!(&block) && self end
@param [#all?] list @return [self]
# File lib/family.rb, line 231 def replace(list) raise MismatchedObject unless similar?(list) @values = list.dup self end
@return [Family]
# File lib/family.rb, line 239 def reverse self.class.__new__(@pattern, @values.reverse) end
@return [self]
# File lib/family.rb, line 244 def reverse! @values.reverse! self end
@param [Integer] pos @return [Family]
# File lib/family.rb, line 251 def rotate(pos=1) self.class.__new__(@pattern, @values.rotate(pos)) end
@param [Integer] pos @return [self]
# File lib/family.rb, line 257 def rotate!(pos=1) @values.rotate!(pos) self end
@return [self, nil]
# File lib/family.rb, line 206 def select!(&block) return to_enum(__callee__) unless block @values.select!(&block) && self end
@return [Family]
# File lib/family.rb, line 263 def shuffle(...) self.class.__new__(@pattern, @values.shuffle(...)) end
@return [self]
# File lib/family.rb, line 268 def shuffle!(...) @values.shuffle!(...) self end
@param [#all?] list
# File lib/family.rb, line 111 def similar?(list) list.all? { |v| family?(v) } end
@return [Family]
# File lib/family.rb, line 274 def sort(&block) self.class.__new__(@pattern, @values.sort(&block)) end
@return [self, nil]
# File lib/family.rb, line 279 def sort!(&block) @values.sort!(&block) && self end
@return [Family]
# File lib/family.rb, line 284 def sort_by(&block) self.class.__new__(@pattern, @values.sort_by(&block)) end
@return [self, nil]
# File lib/family.rb, line 289 def sort_by!(&block) @values.sort_by!(&block) && self end
@return [self]
# File lib/family.rb, line 154 def to_family self end
@return [Family]
# File lib/family.rb, line 294 def uniq(&block) self.class.__new__(@pattern, @values.uniq(&block)) end
@return [self, nil]
# File lib/family.rb, line 299 def uniq!(&block) @values.uniq!(&block) && self end
@return [self]
# File lib/family.rb, line 90 def unshift(value) raise MismatchedObject unless family?(value) @values.unshift(value) self end
# File lib/family.rb, line 115 def valid? similar?(@values) end
@return [Array]
# File lib/family.rb, line 67 def values @values.dup end
@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
# File lib/family.rb, line 315 def _comparison_values [@pattern, @values] end
# File lib/family.rb, line 311 def _values @values end
Private Instance Methods
# File lib/family.rb, line 321 def initialize_copy(original) @values = @values.dup end