Class: Array

Inherits:
Object show all
Defined in:
lib/tagen/core/array.rb,
lib/tagen/core/array/extract_options.rb

Overview

Additional method list


  • ‘#append` _alias from push_

Instance Method Summary collapse

Instance Method Details

#delete(*values, &blk) ⇒ Array

support delete more than one values.

original: delete(v) currrent: delete(*v)

Returns:



20
21
22
23
24
25
# File 'lib/tagen/core/array.rb', line 20

def delete *values, &blk
  indexs = values.each.with_object [] do |v,m|
    m << original_delete(v, &blk)
  end
  values.length==1 ? indexs[0] : indexs
end

#delete_at(*indexs, &blk) ⇒ Array

support delate_at more than one index.

original: delete_at(i) current: delte_at(*i)

Returns:



35
36
37
38
39
40
# File 'lib/tagen/core/array.rb', line 35

def delete_at *indexs, &blk
  values = indexs.each.with_object [] do |i,m|
    m << original_delete_at(i, &blk)
  end
  indexs.length==1 ? values[0] : values
end

#extract_extend_options(*defaults) ⇒ Array<Object>, Hash

extend options are symbols and hash, symbol as a boolean option.

:a #=> { a: true }
:_a #=> { a: false}

Examples:

def foo(*args)
  paths, o = args.extract_extend_options
end

foo(1, :a, :_b, :c => 2) 
  #=> paths is [1]
  #=> o is {a: true, b: false, c: 2}

Parameters:

Returns:



19
20
21
22
23
# File 'lib/tagen/core/array/extract_options.rb', line 19

def extract_extend_options *defaults
  args, o = _parse_o(defaults)
  args1, o1 = _parse_o(self)
  [args+args1, o.merge(o1)]
end

#extract_extend_options!(*defaults) ⇒ Hash

modify args IN PLACE. @ see extract_extend_options

Examples:

def foo(*args)
  options = args.extract_extend_options!
end

foo(1, :a, :_b, c: 2)
  #=> args is [1]
  #=> o is {a: true, b: false, c:2}

Parameters:

Returns:

  • (Hash)

    options



39
40
41
42
43
# File 'lib/tagen/core/array/extract_options.rb', line 39

def extract_extend_options! *defaults
  args, o = extract_extend_options *defaults
  self.replace args
  o
end

#extract_options(default = {}) ⇒ Array<Array,Hash>

extract options

Examples:

def mkdir(*args)
  paths, o = args.extract_options
end

Returns:

See Also:



96
97
98
99
100
101
102
# File 'lib/tagen/core/array/extract_options.rb', line 96

def extract_options default={}
  if self.last.is_a?(Hash) && self.last.instance_of?(Hash)
    [self[0...-1], self[-1].merge(default)]
  else
    [self, default]
  end
end

#extract_options!(default = {}) ⇒ Hash

Extracts options from a set of arguments. Removes and returns the last element in the array if it’s a hash, otherwise returns a blank hash. you can also pass a default option.

Examples:

def options(*args)
  o = args.extract_options!(:a=>1)
end

options(1, 2)           # => {:a=>1}
options(1, 2, :a => :b) # => {:a=>:b}

Parameters:

  • default (Hash) (defaults to: {})

    default options

Returns:



80
81
82
83
84
85
86
# File 'lib/tagen/core/array/extract_options.rb', line 80

def extract_options! default={}
  if self.last.is_a?(Hash) && self.last.instance_of?(Hash)
    self.pop.merge default
  else
    default
  end
end

#find!(&blk) ⇒ Object

same as find, but delete the finded value



74
75
76
77
78
79
80
81
# File 'lib/tagen/core/array.rb', line 74

def find! &blk
  idx = self.find_index(&blk)
  if idx
    self.delete_at(idx)
  else
    nil
  end
end

#find_all!(&blk) ⇒ Object

same as find_all, but delete all finded values



84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/tagen/core/array.rb', line 84

def find_all! &blk
  ret, rest = [], []
  self.each do |k|
    if blk.call(k)
      ret << k
    else
      rest << k
    end
  end
  self.replace rest
  ret
end

#first!(n = 1) ⇒ Object

Note:

modify IN PLACE

first n values, not works at Range, Range don’t have #replace method

Examples:

a = %w(1 2 3)
a.first!(2)  #=> [1, 2]
a            #=> [3]
@return Array


51
52
53
54
55
56
57
58
59
# File 'lib/tagen/core/array.rb', line 51

def first! n=1
  i = 0 
  j = i + n
  k = -1

  ret = self[i...j]
  self.replace self[j..k]
  ret
end

#last!(n = 1) ⇒ Object

last n values

See Also:



63
64
65
66
67
68
69
70
71
# File 'lib/tagen/core/array.rb', line 63

def last! n=1
  i = -1 
  j = -1 - n + 1
  k = 0

  ret = self[j..i]
  self.replace self[k...j]
  ret
end

#original_deleteObject



12
# File 'lib/tagen/core/array.rb', line 12

alias original_delete delete

#original_delete_atObject



27
# File 'lib/tagen/core/array.rb', line 27

alias original_delete_at delete_at