array_extend 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -18,30 +18,39 @@ Or install it yourself as:
18
18
 
19
19
  ## Usage
20
20
 
21
- * after(val)
21
+ ### after
22
22
 
23
23
  Return the value after the one pass in argument
24
24
 
25
25
  Demo
26
26
 
27
+ ```ruby
27
28
  ["hello", "world"].after("hello") #=> "world"
28
29
  ["hello", "world"].after("world") #=> nil
29
30
  ["hello", "world"].after("none") #=> nil
31
+ ```
30
32
 
31
33
  Code
32
34
 
35
+ ```ruby
33
36
  def after val
34
37
  self[index(val) + 1] if self.include? val
35
38
  end
39
+ ```
36
40
 
37
41
 
38
- * stealth_delete! *vals
39
- * stealth_delete *vals
42
+ ### stealth_delete
40
43
 
41
44
  Delete value(s) passed by, but return the array instead of the deleted value
42
45
 
46
+ ```ruby
47
+ stealth_delete! *vals
48
+ stealth_delete *vals
49
+ ```
50
+
43
51
  Demo
44
52
 
53
+ ```ruby
45
54
  ["ruby", "the", "programmer", "best", "friend"].stealth_delete! "ruby"
46
55
  #=> ["the", "programmer", "best", "friend"]
47
56
 
@@ -50,15 +59,99 @@ Demo
50
59
 
51
60
  ["ruby", "the", "programmer", "best", "friend"].stealth_delete! "hello"
52
61
  #=> ["ruby", "the", "programmer", "best", "friend"]
62
+ ```
53
63
 
54
64
  Code
55
65
 
66
+ ```ruby
56
67
  def stealth_delete! *vals
57
68
  vals.each do |val|
58
69
  delete val
59
70
  end
60
71
  return self
61
72
  end
73
+ ```
74
+
75
+
76
+
77
+ ### tautology?
78
+
79
+ Return true if all elements in array are presents. Usefull to check if all passed_by args are -really- presents for example.
80
+
81
+ Demo
82
+
83
+ ```ruby
84
+ [true, true, true].tautology? #=> true
85
+ [true, false, true].tautology? #=> false
86
+ [1, 2, "hello", "world", {:one => 1}].tautology? #=> true
87
+ [1, 2, nil, "hello"].tautology? #=> false
88
+ [1, 2, [], {}].tautology? #=> false
89
+ ```
90
+
91
+ Code
92
+
93
+ ```ruby
94
+ def tautology?
95
+ self.inject(true){ |res, elt| res && elt.present? }
96
+ end
97
+ ```
98
+
99
+
100
+ ### compact_by
101
+
102
+ Allow to compact, only by one side (right or left). Usefull to delete nil values to the end of an array
103
+ BTW : I use here the rails "blank?" method, instead of the ruby "nil?" that is used in array#compact!
104
+
105
+ ```ruby
106
+ compact_by! side
107
+ compact_by side
108
+ ```
109
+
110
+ Arguments : 'side' must be in %w{right left}
111
+
112
+ Demo
113
+
114
+ ```ruby
115
+
116
+ [nil, nil, "hello", "world", nil].compact_by :right
117
+ #=> [nil, nil, "hello", "world"]
118
+
119
+ [nil, nil, "hello", "world", nil].compact_by :left
120
+ #=> ["hello", "world", nil]
121
+
122
+ [nil, nil, "hello", nil, "world"].compact_by :left
123
+ #=> ["hello", nil, "world"]
124
+
125
+ [nil, [], "hello", nil, "world"].compact_by :left
126
+ #=> #=> ["hello", "world"]
127
+
128
+ ["hello", "world"].compact_by :left
129
+ #=> ["hello", "world"]
130
+ ```
131
+
132
+ Code
133
+
134
+ ```ruby
135
+ def compact_by! side
136
+ case side
137
+ when :right, "right"
138
+ while self.last.blank?
139
+ self.pop
140
+ end
141
+
142
+ when :left, "left"
143
+ while self.first.blank?
144
+ self.shift
145
+ end
146
+
147
+ else
148
+ raise ArgumentError, "'side' argument must be in %w{right left}"
149
+ end
150
+
151
+ self
152
+ end
153
+ ```
154
+
62
155
 
63
156
  ## Contributing
64
157
 
data/array_extend.gemspec CHANGED
@@ -5,7 +5,7 @@ Gem::Specification.new do |gem|
5
5
  gem.authors = ["Thomas Petrachi"]
6
6
  gem.email = ["thomas.petrachi@vodeclic.com"]
7
7
  gem.description = %q{Extend ruby Array. No override.}
8
- gem.summary = %q{Adding methods [:after, :stealth_delete]}
8
+ gem.summary = %q{Adding methods %w{after stealth_delete tautology? compact_by}}
9
9
  gem.homepage = "https://github.com/petrachi/array_extend"
10
10
 
11
11
  gem.files = `git ls-files`.split($\)
data/lib/array_extend.rb CHANGED
@@ -11,11 +11,35 @@ class Array
11
11
  vals.each do |val|
12
12
  delete val
13
13
  end
14
- return self
15
14
  end
16
15
 
16
+ # maps an '&&' operation through all elements of array
17
+ def tautology?
18
+ self.inject(true){ |res, elt| res && elt.present? }
19
+ end
20
+
21
+ # allow to compact by left side, or right side. this only delete the "extreme positioned" nils values
22
+ def compact_by! side
23
+ case side
24
+ when :right, "right"
25
+ while self.last.blank?
26
+ self.pop
27
+ end
28
+
29
+ when :left, "left"
30
+ while self.first.blank?
31
+ self.shift
32
+ end
33
+
34
+ else
35
+ raise ArgumentError, "'side' argument must be in %w{right left}"
36
+ end
37
+
38
+ self
39
+ end
40
+
17
41
  # duplicate method without self modification
18
- [:stealth_delete].each do |method_name|
42
+ [:stealth_delete, :compact_by].each do |method_name|
19
43
  define_method method_name do |*args|
20
44
  array = self.dup
21
45
  eval "array.#{ method_name }! *args"
@@ -1,3 +1,3 @@
1
1
  module ArrayExtend
2
- VERSION = "1.0.0"
2
+ VERSION = "1.1.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: array_extend
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-09-29 00:00:00.000000000 Z
12
+ date: 2012-09-30 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Extend ruby Array. No override.
15
15
  email:
@@ -49,5 +49,5 @@ rubyforge_project:
49
49
  rubygems_version: 1.8.24
50
50
  signing_key:
51
51
  specification_version: 3
52
- summary: Adding methods [:after, :stealth_delete]
52
+ summary: Adding methods %w{after stealth_delete tautology? compact_by}
53
53
  test_files: []