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.
@@ -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\