Class: Family

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Includes:
Enumerable
Defined in:
lib/family.rb,
lib/family/version.rb,
lib/family/singleton_class.rb

Overview

Note:

return self -> Array

  • #flatten is different

  • #flatten! is none

  • #product

Note:

removed from Array

  • #flatten! is none

Examples:

Simplify

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

Not bound by "Type"

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

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]

Defined Under Namespace

Classes: MismatchedObject

Constant Summary collapse

VERSION =
'0.1.0'

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(pattern, values: []) ⇒ Family

Returns a new instance of Family.

Raises:



46
47
48
49
50
# File 'lib/family.rb', line 46

def initialize(pattern, values: [])
  @pattern, @values = pattern, values.to_ary

  raise MismatchedObject unless valid?
end

Instance Attribute Details

#patternObject (readonly)

Returns the value of attribute pattern.



44
45
46
# File 'lib/family.rb', line 44

def pattern
  @pattern
end

Class Method Details

.__new__(pattern, values) ⇒ Object



12
13
14
# File 'lib/family/singleton_class.rb', line 12

def __new__(pattern, values)
  new(pattern, values: values)
end

.define(values: [], &block) ⇒ Family

Returns:



7
8
9
# File 'lib/family/singleton_class.rb', line 7

def define(values: [], &block)
  __new__(Eqq.build(&block), values)
end

Instance Method Details

#*(times_or_delimiter) ⇒ Family

Returns:



142
143
144
145
146
147
148
149
150
151
# 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) ⇒ self Also known as: push

Returns:

  • (self)

Raises:



80
81
82
83
84
85
# File 'lib/family.rb', line 80

def <<(value)
  raise MismatchedObject unless family?(value)

  @values << value
  self
end

#clearself

Returns:

  • (self)


165
166
167
168
# File 'lib/family.rb', line 165

def clear
  @values.clear
  self
end

#compactFamily

Returns:



171
172
173
# File 'lib/family.rb', line 171

def compact
  self.class.__new__(@pattern, @values.compact)
end

#compact!self?

Returns:

  • (self, nil)


176
177
178
# File 'lib/family.rb', line 176

def compact!
  @values.compact! && self
end

#concat(list) ⇒ self

Parameters:

  • list (#all?)

Returns:

  • (self)

Raises:



99
100
101
102
103
104
# File 'lib/family.rb', line 99

def concat(list)
  raise MismatchedObject unless similar?(list)

  @values.concat(list)
  self
end

#delete_if(&block) ⇒ self

Returns:

  • (self)


198
199
200
201
202
203
# File 'lib/family.rb', line 198

def delete_if(&block)
  return to_enum(__callee__) unless block

  reject!(&block)
  self
end

#eql?(other) ⇒ Boolean

Returns:

  • (Boolean)


185
186
187
188
# File 'lib/family.rb', line 185

def eql?(other)
  other.kind_of?(::Family) &&
    (_comparison_values == other._comparison_values)
end

#family?(value) ⇒ Boolean

Returns:

  • (Boolean)


106
107
108
# File 'lib/family.rb', line 106

def family?(value)
  @pattern === value
end

#fill(*args, &block) ⇒ self

Returns:

  • (self)

Raises:



221
222
223
224
225
226
227
# 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

#freezeself

Returns:

  • (self)


159
160
161
162
# File 'lib/family.rb', line 159

def freeze
  @values.freeze
  super
end

#hashNumber

Returns:

  • (Number)


181
182
183
# File 'lib/family.rb', line 181

def hash
  _comparison_values.hash
end

#inspectString

Returns:

  • (String)


75
76
77
# File 'lib/family.rb', line 75

def inspect
  "Family<#{@pattern.inspect}>: #{@values.inspect}"
end

#keep_if(&block) ⇒ Object



213
214
215
216
217
218
# File 'lib/family.rb', line 213

def keep_if(&block)
  return to_enum(__callee__) unless block

  select!(&block)
  self
end

#map(&block) ⇒ Family Also known as: collect

Returns:



120
121
122
123
124
# File 'lib/family.rb', line 120

def map(&block)
  return to_enum(__callee__) { size } unless block

  self.class.__new__(@pattern, @values.map(&block))
end

#map!(&block) ⇒ self Also known as: collect!

Returns:

  • (self)

Raises:

  • (InvalidOperation)


129
130
131
132
133
134
135
136
137
# 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

#reject!(&block) ⇒ self?

Returns:

  • (self, nil)


191
192
193
194
195
# File 'lib/family.rb', line 191

def reject!(&block)
  return to_enum(__callee__) unless block

  @values.reject!(&block) && self
end

#replace(list) ⇒ self

Parameters:

  • list (#all?)

Returns:

  • (self)

Raises:



231
232
233
234
235
236
# File 'lib/family.rb', line 231

def replace(list)
  raise MismatchedObject unless similar?(list)

  @values = list.dup
  self
end

#reverseFamily

Returns:



239
240
241
# File 'lib/family.rb', line 239

def reverse
  self.class.__new__(@pattern, @values.reverse)
end

#reverse!self

Returns:

  • (self)


244
245
246
247
# File 'lib/family.rb', line 244

def reverse!
  @values.reverse!
  self
end

#rotate(pos = 1) ⇒ Family

Parameters:

  • pos (Integer) (defaults to: 1)

Returns:



251
252
253
# File 'lib/family.rb', line 251

def rotate(pos=1)
  self.class.__new__(@pattern, @values.rotate(pos))
end

#rotate!(pos = 1) ⇒ self

Parameters:

  • pos (Integer) (defaults to: 1)

Returns:

  • (self)


257
258
259
260
# File 'lib/family.rb', line 257

def rotate!(pos=1)
  @values.rotate!(pos)
  self
end

#select!(&block) ⇒ self? Also known as: filter!

Returns:

  • (self, nil)


206
207
208
209
210
# File 'lib/family.rb', line 206

def select!(&block)
  return to_enum(__callee__) unless block

  @values.select!(&block) && self
end

#shuffleFamily

Returns:



263
264
265
# File 'lib/family.rb', line 263

def shuffle(...)
  self.class.__new__(@pattern, @values.shuffle(...))
end

#shuffle!self

Returns:

  • (self)


268
269
270
271
# File 'lib/family.rb', line 268

def shuffle!(...)
  @values.shuffle!(...)
  self
end

#similar?(list) ⇒ Boolean

Parameters:

  • list (#all?)

Returns:

  • (Boolean)


111
112
113
# File 'lib/family.rb', line 111

def similar?(list)
  list.all? { |v| family?(v) }
end

#sort(&block) ⇒ Family

Returns:



274
275
276
# File 'lib/family.rb', line 274

def sort(&block)
  self.class.__new__(@pattern, @values.sort(&block))
end

#sort!(&block) ⇒ self?

Returns:

  • (self, nil)


279
280
281
# File 'lib/family.rb', line 279

def sort!(&block)
  @values.sort!(&block) && self
end

#sort_by(&block) ⇒ Family

Returns:



284
285
286
# File 'lib/family.rb', line 284

def sort_by(&block)
  self.class.__new__(@pattern, @values.sort_by(&block))
end

#sort_by!(&block) ⇒ self?

Returns:

  • (self, nil)


289
290
291
# File 'lib/family.rb', line 289

def sort_by!(&block)
  @values.sort_by!(&block) && self
end

#to_familyself

Returns:

  • (self)


154
155
156
# File 'lib/family.rb', line 154

def to_family
  self
end

#uniq(&block) ⇒ Family

Returns:



294
295
296
# File 'lib/family.rb', line 294

def uniq(&block)
  self.class.__new__(@pattern, @values.uniq(&block))
end

#uniq!(&block) ⇒ self?

Returns:

  • (self, nil)


299
300
301
# File 'lib/family.rb', line 299

def uniq!(&block)
  @values.uniq!(&block) && self
end

#unshift(value) ⇒ self

Returns:

  • (self)

Raises:



90
91
92
93
94
95
# File 'lib/family.rb', line 90

def unshift(value)
  raise MismatchedObject unless family?(value)

  @values.unshift(value)
  self
end

#valid?Boolean

Returns:

  • (Boolean)


115
116
117
# File 'lib/family.rb', line 115

def valid?
  similar?(@values)
end

#valuesArray Also known as: to_ary, to_a

Returns:

  • (Array)


67
68
69
# File 'lib/family.rb', line 67

def values
  @values.dup
end

#values_at(*selectors) ⇒ Family

Parameters:

  • selectors (Integer, Range<Integer>)

Returns:



305
306
307
# File 'lib/family.rb', line 305

def values_at(*selectors)
  self.class.__new__(@pattern, @values.values_at(*selectors))
end