array_floe 1.0.0 → 1.1.0

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/README.rdoc CHANGED
@@ -1,10 +1,16 @@
1
1
  = array_floe
2
2
 
3
+ == Overview
4
+
3
5
  This small extension to ruby's Array class simplifies the reasonably-common
4
6
  need to specially handle "floe"--i.e., <b>f</b>irst, <b>l</b>ast, <b>o</b>dd, <b>e</b>ven--when
5
7
  iterating through the elements of an array. It's particularly handy for
6
8
  generating CSS classes.
7
9
 
10
+ Full Rdoc is available at http://rubydoc.info/gems/array_floe
11
+
12
+ == Usage
13
+
8
14
  The gem provides two additional iterators, Array#each_with_floe and
9
15
  Array#each_with_index_floe, that provide a "floe" object for each element
10
16
  in the array:
@@ -38,7 +44,7 @@ of "first", "last", "odd", and "even" as appropriate:
38
44
 
39
45
  [:a, :b, :c, :d].each_with_floe.collect{|element, floe| floe.to_s} #=> [ "first even", "odd", "even", "last odd" ]
40
46
 
41
- <code>floe.to_s</code> is particularly useful when generating HTML. For
47
+ <code>floe.to_s</code> is particularly useful to construct CSS classes when generating HTML. For
42
48
  example, this haml[http://haml-lang.com/] snippet:
43
49
 
44
50
  %table
@@ -65,12 +71,18 @@ would yield this HTML snippet:
65
71
 
66
72
  == Installing
67
73
 
68
- <code>% sudo gem install array_floe<code>
74
+ Standard installation from http://rubygems.org/gems/array_floe
69
75
 
70
- or, if you're using bundler[http://gembundler.com/]:
76
+ % sudo gem install array_floe
77
+
78
+ or, if you're using bundler[http://gembundler.com/], include this line in your Gemfile:
71
79
 
72
80
  gem "array_floe"
73
81
 
82
+ == Ruby Versions
83
+
84
+ Tested on ruby 1.8.7 and 1.9.2
85
+
74
86
  == Copyright
75
87
 
76
88
  Released under the MIT License. See LICENSE.txt for further details.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.0
1
+ 1.1.0
data/array_floe.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{array_floe}
8
- s.version = "1.0.0"
8
+ s.version = "1.1.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["ronen barzel"]
data/lib/array_floe.rb CHANGED
@@ -1,3 +1,5 @@
1
+ require 'enumerator' unless defined?(Enumerator)
2
+
1
3
  class Array
2
4
 
3
5
  # The class for the "floe" object that constructed by
@@ -61,7 +63,7 @@ class Array
61
63
  yield(element, FirstLastOddEven.new(i, size))
62
64
  end
63
65
  else
64
- Enumerable::Enumerator.new(self, :each_with_floe)
66
+ to_enum(:each_with_floe)
65
67
  end
66
68
  end
67
69
 
@@ -82,7 +84,7 @@ class Array
82
84
  yield(element, i, FirstLastOddEven.new(i, size))
83
85
  end
84
86
  else
85
- Enumerable::Enumerator.new(self, :each_with_index_floe)
87
+ to_enum(:each_with_index_floe)
86
88
  end
87
89
  end
88
90
  end
@@ -2,80 +2,112 @@ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
 
3
3
  describe "ArrayFloe" do
4
4
 
5
- let (:a1) { Array(0...1) }
6
- let (:a5) { Array(0...5) }
5
+ let (:enumerator) { defined?(Enumerator) ? Enumerator : Enumerable::Enumerator } # ruby 1.9 vs. 1.8
7
6
 
8
- ["each_with_floe", "each_with_index_floe"].each do |method|
7
+ let (:a1) { [:a] }
8
+ let (:a5) { [:a, :b, :c, :d, :e] }
9
9
 
10
- context method do
10
+ context "each_with_floe" do
11
11
 
12
- it "has correct arity" do
13
- a5.send(method) do |*args|
14
- args.size == (method == "each_with_index_floe" ? 3 : 2)
15
- end
12
+ it "correctly reports first" do
13
+ a5.each_with_floe do |item, floe|
14
+ floe.first?.should == (item == :a)
16
15
  end
16
+ end
17
17
 
18
- it "correctly reports first" do
19
- a5.send(method) do |*args|
20
- item = args.first
21
- floe = args.last
22
- floe.first?.should == (item == 0)
23
- end
18
+ it "correctly reports last" do
19
+ a5.each_with_floe do |item, floe|
20
+ floe.last?.should == (item == :e)
24
21
  end
22
+ end
25
23
 
26
- it "correctly reports last" do
27
- a5.send(method) do |*args|
28
- item = args.first
29
- floe = args.last
30
- floe.last?.should == (item == 4)
31
- end
24
+ it "correctly reports odd" do
25
+ a5.each_with_floe do |item, floe|
26
+ floe.odd?.should == [:b, :d].include?(item)
32
27
  end
28
+ end
33
29
 
34
- it "correctly reports odd" do
35
- a5.send(method) do |*args|
36
- item = args.first
37
- floe = args.last
38
- floe.odd?.should == (item % 2 == 1)
39
- end
30
+ it "correctly reports even" do
31
+ a5.each_with_floe do |item, floe|
32
+ floe.even?.should == [:a, :c, :e].include?(item)
40
33
  end
34
+ end
41
35
 
42
- it "correctly reports even" do
43
- a5.send(method) do |*args|
44
- item = args.first
45
- floe = args.last
46
- floe.even?.should == (item % 2 == 0)
47
- end
48
- end
36
+ it "returns an enumerator" do
37
+ a5.each_with_floe.should be_an_instance_of enumerator
38
+ end
39
+
40
+ it "iterates on the array entries" do
41
+ a5.each_with_floe.collect{|item, floe| item}.should == a5
42
+ end
43
+
44
+ it "constructs floe strings" do
45
+ a5.each_with_floe.collect{ |item, floe| floe.to_s }.should == [
46
+ "first even",
47
+ "odd",
48
+ "even",
49
+ "odd",
50
+ "last even"
51
+ ]
52
+ end
53
+
54
+ it "constructs floe string with first last and even when size == 1" do
55
+ a1.each_with_floe.collect{|item, floe| floe.to_s}.should == [ "first last even" ]
56
+ end
57
+ end
49
58
 
50
- it "returns an enumerator" do
51
- a5.send(method).should be_an_instance_of Enumerable::Enumerator
52
- a5.send(method).find{|args| args.last.last? }.first.should == 4
59
+ context "each_with_index_floe" do
60
+
61
+ it "passes the index" do
62
+ a5.each_with_index_floe do |item, i, floe|
63
+ a5[i].should == item
53
64
  end
65
+ end
54
66
 
55
- it "iterates on the array entries" do
56
- a5.send(method).collect(&:first).should == a5
67
+ it "correctly reports first" do
68
+ a5.each_with_index_floe do |item, i, floe|
69
+ floe.first?.should == (item == :a)
57
70
  end
71
+ end
58
72
 
59
- if method == "each_with_index_floe"
60
- it "passes the index" do
61
- a5.send(method).collect{|args| args[1]}.should == a5
62
- end
73
+ it "correctly reports last" do
74
+ a5.each_with_index_floe do |item, i, floe|
75
+ floe.last?.should == (item == :e)
63
76
  end
77
+ end
64
78
 
65
- it "constructs floe strings" do
66
- a5.send(method).collect{ |args| args.last.to_s }.should == [
67
- "first even",
68
- "odd",
69
- "even",
70
- "odd",
71
- "last even"
72
- ]
79
+ it "correctly reports odd" do
80
+ a5.each_with_index_floe do |item, i, floe|
81
+ floe.odd?.should == [:b, :d].include?(item)
73
82
  end
83
+ end
74
84
 
75
- it "constructs first and last floe string when size == 1" do
76
- a1.send(method).collect{|args| args.last.to_s}.should == [ "first last even" ]
85
+ it "correctly reports even" do
86
+ a5.each_with_index_floe do |item, i, floe|
87
+ floe.even?.should == [:a, :c, :e].include?(item)
77
88
  end
89
+ end
90
+
91
+ it "returns an enumerator" do
92
+ a5.each_with_index_floe.should be_an_instance_of enumerator
93
+ end
94
+
95
+ it "iterates on the array entries" do
96
+ a5.each_with_index_floe.collect{|item, i, floe| item}.should == a5
97
+ end
98
+
99
+ it "constructs floe strings" do
100
+ a5.each_with_index_floe.collect{ |item, i, floe| floe.to_s }.should == [
101
+ "first even",
102
+ "odd",
103
+ "even",
104
+ "odd",
105
+ "last even"
106
+ ]
107
+ end
78
108
 
109
+ it "constructs floe string with first last and even when size == 1" do
110
+ a1.each_with_index_floe.collect{|item, i, floe| floe.to_s}.should == [ "first last even" ]
79
111
  end
80
112
 
81
113
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: array_floe
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
4
+ hash: 19
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
+ - 1
8
9
  - 0
9
- - 0
10
- version: 1.0.0
10
+ version: 1.1.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - ronen barzel