filter 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/filter.gemspec +1 -0
- data/lib/filter.rb +12 -24
- data/lib/filter/version.rb +1 -1
- metadata +17 -4
data/filter.gemspec
CHANGED
data/lib/filter.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'deferred_enum'
|
2
|
+
|
1
3
|
# == Synpsys
|
2
4
|
# Extension for Ruby Enumerable module
|
3
5
|
#
|
@@ -23,52 +25,38 @@ module Enumerable
|
|
23
25
|
pattern, block = block, nil if block_given? && pattern.nil?
|
24
26
|
|
25
27
|
filtered = case pattern
|
26
|
-
when NilClass then
|
28
|
+
when NilClass then defer
|
27
29
|
|
28
30
|
when Class, Module then
|
29
|
-
|
31
|
+
defer.select do |e|
|
30
32
|
e.is_a?(Class) || e.is_a?(Module) ?
|
31
33
|
e <= pattern :
|
32
34
|
e.is_a?(pattern)
|
33
35
|
end
|
34
36
|
|
35
|
-
when Symbol, Proc, Method then
|
37
|
+
when Symbol, Proc, Method then defer.select(&pattern.to_proc)
|
36
38
|
|
37
39
|
when Array then # enum.filter [:even?, :positive?, :cool?, proc { |n| n < 10 }]
|
38
|
-
pattern.reduce(self) do |chain, local_pattern|
|
39
|
-
chain.
|
40
|
+
pattern.reduce(self.defer) do |chain, local_pattern|
|
41
|
+
chain.select(&local_pattern.to_proc)
|
40
42
|
end
|
41
43
|
|
42
44
|
when Hash then # enum.filter :to_i => :even?, :ceil => :odd?
|
43
|
-
pattern.reduce(self) do |chain, pair|
|
45
|
+
pattern.reduce(self.defer) do |chain, pair|
|
44
46
|
attr, local_pattern = pair.map(&:to_proc)
|
45
47
|
|
46
|
-
chain.
|
48
|
+
chain.select do |element|
|
47
49
|
local_pattern.call(attr.call(element))
|
48
50
|
end
|
49
51
|
end
|
50
52
|
|
51
|
-
when TrueClass, FalseClass then
|
53
|
+
when TrueClass, FalseClass then defer.select { |e| !!e == pattern }
|
52
54
|
|
53
|
-
else
|
55
|
+
else defer.select { |e| pattern === e } # otherwise - String, Regexp, Numeric etc.
|
54
56
|
end
|
55
57
|
|
56
58
|
# also transform elements if block given
|
57
|
-
block ? filtered.
|
58
|
-
end
|
59
|
-
|
60
|
-
protected
|
61
|
-
# Lazy version of built-in Enumerable#select
|
62
|
-
def lazy_select
|
63
|
-
Enumerator.new do |yielder|
|
64
|
-
each { |entry| yielder << entry if yield(entry) }
|
65
|
-
end
|
59
|
+
block ? filtered.map(&block) : filtered
|
66
60
|
end
|
67
61
|
|
68
|
-
# Lazy version of built-in Enumerable#collect
|
69
|
-
def lazy_map #:nodoc:
|
70
|
-
Enumerator.new do |yielder|
|
71
|
-
each { |entry| yielder << yield(entry) }
|
72
|
-
end
|
73
|
-
end
|
74
62
|
end
|
data/lib/filter/version.rb
CHANGED
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 0.0.
|
8
|
+
- 2
|
9
|
+
version: 0.0.2
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Alexey Mikhaylov
|
@@ -18,7 +18,7 @@ date: 2011-12-11 00:00:00 +06:00
|
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
|
-
name:
|
21
|
+
name: deferred_enum
|
22
22
|
prerelease: false
|
23
23
|
requirement: &id001 !ruby/object:Gem::Requirement
|
24
24
|
none: false
|
@@ -28,8 +28,21 @@ dependencies:
|
|
28
28
|
segments:
|
29
29
|
- 0
|
30
30
|
version: "0"
|
31
|
-
type: :
|
31
|
+
type: :runtime
|
32
32
|
version_requirements: *id001
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: rspec
|
35
|
+
prerelease: false
|
36
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
37
|
+
none: false
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
segments:
|
42
|
+
- 0
|
43
|
+
version: "0"
|
44
|
+
type: :development
|
45
|
+
version_requirements: *id002
|
33
46
|
description: "== Synopsys\n\
|
34
47
|
Enumerable#filter - extended Enumerable#select\n\n\
|
35
48
|
== Examples\n\
|