comprise 1.0.1 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -41,6 +41,14 @@ listcomp(y: -> { (1..5).map { |i| i * 2 } }, x: 1..2) { x * y }.to_a
41
41
  => [2, 4, 4, 8, 6, 12, 8, 16, 10, 20]
42
42
  ```
43
43
 
44
+ Comprehensions can also be self referential; provided that your using a lambda or a Proc & your
45
+ referencing lists that have already been evaluated.
46
+
47
+ ```ruby
48
+ listcomp(x: 1..3, y: -> { 1..x }, z: -> { [x + y] }).to_a
49
+ # => [[1, 1, 2], [2, 1, 3], [2, 2, 4], [3, 1, 4], [3, 2, 5], [3, 3, 6]]
50
+ ```
51
+
44
52
  *Important note: In Ruby 2.0.x Comprise makes use of Lazy emuerators.*
45
53
 
46
54
  ## Contributing
@@ -7,7 +7,7 @@ module Comprise
7
7
  @context = Struct.new(*lists.keys)
8
8
  @enumerator = vars.inject(enum) do |enum, var|
9
9
  if var.respond_to? :call
10
- enum.flat_map { |other| var.call.map { |x| other + [x] } }
10
+ enum.flat_map { |other| @context.new(*other).instance_exec(&var).map { |x| other + [x] } }
11
11
  else
12
12
  enum.flat_map { |other| var.map { |x| other + [x] } }
13
13
  end
@@ -19,7 +19,7 @@ module Comprise
19
19
  end
20
20
 
21
21
  def map
22
- @enumerator.map { |values| @context.new(*values).instance_eval(&Proc.new) }
22
+ @enumerator.map { |values| @context.new(*values).instance_exec(&Proc.new) }
23
23
  end
24
24
 
25
25
  def inspect
@@ -1,3 +1,3 @@
1
1
  module Comprise
2
- VERSION = "1.0.1"
2
+ VERSION = "1.1.0"
3
3
  end
@@ -35,4 +35,12 @@ describe Comprise::ListComprehension do
35
35
  end.to_a
36
36
  }.not_to raise_error
37
37
  end
38
+
39
+ it "allow lists to reference earlier lists, requires lambda or Proc (i.e. deferred execution)" do
40
+ listcomp(x: 1..3, y: -> { 1..x }, z: -> { [x + y] }).to_a.should == [
41
+ [1,1,2],
42
+ [2,1,3], [2,2,4],
43
+ [3,1,4], [3,2,5], [3,3,6]
44
+ ]
45
+ end
38
46
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: comprise
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: