Class: Array
- Inherits:
-
Object
show all
- Defined in:
- lib/justools/core_ext/array/filters.rb,
lib/justools/core_ext/array/inquiry.rb,
lib/justools/core_ext/array/args_and_opts.rb,
lib/justools/core_ext/array/flatten_splat.rb,
lib/justools/core_ext/array/merge_options.rb
Instance Method Summary
collapse
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method_symbol, *args, &block) ⇒ Object
33
34
35
36
37
38
39
40
|
# File 'lib/justools/core_ext/array/args_and_opts.rb', line 33
def method_missing(method_symbol, *args, &block)
return super unless method_symbol =~ Justools::ARGS_AND_OPTS_REGEXP
[$1, $2].zip(args_and_opts).map do |m, obj|
next if m.respond_to?(:empty?) ? empty? : !m
obj.send(m.to_sym, *args.send(:constrained_by_method, obj.method(m.to_sym)))
end
end
|
Instance Method Details
#arguments_and_options(update_hash = {}) ⇒ Object
16
17
18
|
# File 'lib/justools/core_ext/array/args_and_opts.rb', line 16
def arguments_and_options(update_hash = {})
merge_options(update_hash).args_and_opts!
end
|
#arguments_and_options!(update_hash = {}) ⇒ Object
20
21
22
|
# File 'lib/justools/core_ext/array/args_and_opts.rb', line 20
def arguments_and_options!(update_hash = {})
[(update_hash), self].rotate
end
|
23
24
25
|
# File 'lib/justools/core_ext/array/merge_options.rb', line 23
def (update_hash = {})
.merge(update_hash || {})
end
|
28
29
30
|
# File 'lib/justools/core_ext/array/merge_options.rb', line 28
def (update_hash = {})
.merge(update_hash || {})
end
|
11
12
13
|
# File 'lib/justools/core_ext/array/merge_options.rb', line 11
def
? last : {}
end
|
15
16
17
|
# File 'lib/justools/core_ext/array/merge_options.rb', line 15
def
? pop : {}
end
|
#flatten_splat(with_bang = false) ⇒ Object
19
20
21
|
# File 'lib/justools/core_ext/array/flatten_splat.rb', line 19
def flatten_splat(with_bang=false)
flatten_splat_needed? ? with_bang ? flatten! : flatten : self
end
|
#flatten_splat! ⇒ Object
flatten_splat! is used for dealing conveniently with the common pattern where a method’s arguments has a splat (*) operator, but the developer wants to provide the option of the method accepting either a list or an array for the argument.
Examples
Before: Now:
def do_something(*args) def do_something(*args)
if args.one? && args[0].is_a?(Array) args.flatten_splat!
args = args.shift end
end
end
15
16
17
|
# File 'lib/justools/core_ext/array/flatten_splat.rb', line 15
def flatten_splat!
flatten_splat(true)
end
|
#in?(other_ary) ⇒ Boolean
18
19
20
|
# File 'lib/justools/core_ext/array/inquiry.rb', line 18
def in?(other_ary)
super || subset?(other_ary)
end
|
#merge_options(update_hash = {}) ⇒ Object
Also known as:
merge_opts
35
36
37
38
|
# File 'lib/justools/core_ext/array/merge_options.rb', line 35
def merge_options(update_hash = {})
endex, base_hash = ? [-2, last] : [-1, {}]
self[0..endex] + Array[base_hash.merge(update_hash || {})]
end
|
#merge_options!(update_hash = {}) ⇒ Object
Also known as:
merge_opts!
41
42
43
|
# File 'lib/justools/core_ext/array/merge_options.rb', line 41
def merge_options!(update_hash = {})
push((update_hash))
end
|
19
20
21
|
# File 'lib/justools/core_ext/array/merge_options.rb', line 19
def
last.is_a?(Hash) && last.
end
|
#rearranged?(*other_ary) ⇒ Boolean
Compares two arrays to see if the elements are same but simply rearranged.
Parameters
10
11
12
|
# File 'lib/justools/core_ext/array/inquiry.rb', line 10
def rearranged?(*other_ary)
Set.new(self) == Set.new(other_ary.flatten_splat)
end
|
#reject_kind_of(klass) ⇒ Object
4
|
# File 'lib/justools/core_ext/array/filters.rb', line 4
def reject_kind_of(klass); reject { |el| el.kind_of?(klass) }; end
|
#reject_kind_of!(klass) ⇒ Object
6
|
# File 'lib/justools/core_ext/array/filters.rb', line 6
def reject_kind_of!(klass); reject! { |el| el.kind_of?(klass) }; end
|
11
12
13
|
# File 'lib/justools/core_ext/array/args_and_opts.rb', line 11
def rotate
self[0..-2].unshift(self[-1])
end
|
#select_kind_of(klass) ⇒ Object
3
|
# File 'lib/justools/core_ext/array/filters.rb', line 3
def select_kind_of(klass); select { |el| el.kind_of?(klass) }; end
|
#select_kind_of!(klass) ⇒ Object
5
|
# File 'lib/justools/core_ext/array/filters.rb', line 5
def select_kind_of!(klass); select! { |el| el.kind_of?(klass) }; end
|
#subset?(other_ary) ⇒ Boolean
14
15
16
|
# File 'lib/justools/core_ext/array/inquiry.rb', line 14
def subset?(other_ary)
Set.new(self).subset?(Set.new(other_ary))
end
|