filter 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -20,5 +20,6 @@ Gem::Specification.new do |s|
20
20
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
21
21
  s.require_paths = ["lib"]
22
22
 
23
+ s.add_runtime_dependency 'deferred_enum'
23
24
  s.add_development_dependency "rspec"
24
25
  end
@@ -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 lazy_select { true }
28
+ when NilClass then defer
27
29
 
28
30
  when Class, Module then
29
- lazy_select do |e|
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 lazy_select(&pattern.to_proc)
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.lazy_select(&local_pattern.to_proc)
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.lazy_select do |element|
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 lazy_select { |e| !!e == pattern }
53
+ when TrueClass, FalseClass then defer.select { |e| !!e == pattern }
52
54
 
53
- else lazy_select { |e| pattern === e } # otherwise - String, Regexp, Numeric etc.
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.lazy_map(&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
@@ -1,3 +1,3 @@
1
1
  module Filter
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 1
9
- version: 0.0.1
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: rspec
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: :development
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\