Class: Plumb::ArrayClass
Defined Under Namespace
Classes: ConcurrentArrayClass
Instance Attribute Summary collapse
Attributes included from Steppable
#name
Instance Method Summary
collapse
Methods included from Steppable
#===, #>>, #as_node, #build, #check, #defer, #freeze, included, #inspect, #invalid, #invoke, #match, #meta, #node_name, #not, #pipeline, #policy, #to_s, #transform, #value, wrap, #|
Methods included from Callable
#metadata, #parse, #resolve
Constructor Details
#initialize(element_type: Types::Any) ⇒ ArrayClass
Returns a new instance of ArrayClass.
14
15
16
17
18
|
# File 'lib/plumb/array_class.rb', line 14
def initialize(element_type: Types::Any)
@element_type = Steppable.wrap(element_type)
freeze
end
|
Instance Attribute Details
#element_type ⇒ Object
Returns the value of attribute element_type.
12
13
14
|
# File 'lib/plumb/array_class.rb', line 12
def element_type
@element_type
end
|
Instance Method Details
#call(result) ⇒ Object
44
45
46
47
48
49
50
51
|
# File 'lib/plumb/array_class.rb', line 44
def call(result)
return result.invalid(errors: 'is not an Array') unless ::Array === result.value
values, errors = map_array_elements(result.value)
return result.valid(values) unless errors.any?
result.invalid(errors:)
end
|
#filtered ⇒ Object
34
35
36
37
38
39
40
41
42
|
# File 'lib/plumb/array_class.rb', line 34
def filtered
MatchClass.new(::Array) >> Step.new(nil, "Array[#{element_type}].filtered") do |result|
arr = result.value.each.with_object([]) do |e, memo|
r = element_type.resolve(e)
memo << r.value if r.valid?
end
result.valid(arr)
end
end
|
#of(element_type) ⇒ Object
Also known as:
[]
20
21
22
|
# File 'lib/plumb/array_class.rb', line 20
def of(element_type)
self.class.new(element_type:)
end
|
#stream ⇒ Object
30
31
32
|
# File 'lib/plumb/array_class.rb', line 30
def stream
StreamClass.new(element_type:)
end
|