gonzo_array_extensions 0.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/Manifest +10 -0
- data/README.rdoc +73 -0
- data/Rakefile +14 -0
- data/gonzo_array_extensions.gemspec +30 -0
- data/lib/gonzo_array_extensions/array.rb +26 -0
- data/lib/gonzo_array_extensions.rb +10 -0
- data/spec/custom_matchers.rb +24 -0
- data/spec/gonzo_array_extensions/array_spec.rb +102 -0
- data/spec/gonzo_array_extensions_spec.rb +13 -0
- data/spec/spec_helper.rb +11 -0
- data/tasks/rspec.rake +21 -0
- metadata +73 -0
data/Manifest
ADDED
data/README.rdoc
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
= Gonzo Array Extensions
|
2
|
+
|
3
|
+
Extends the Ruby core Array class, and augments some of its methods with additional functionality.
|
4
|
+
|
5
|
+
== Install
|
6
|
+
|
7
|
+
gem install gonzo_array_extensions --source http://gemcutter.org
|
8
|
+
|
9
|
+
== Usage
|
10
|
+
|
11
|
+
Gonzo Array Extensions augments the Array methods first, last and include? so you can pass an optional block to each so you can check for additional information.
|
12
|
+
|
13
|
+
To use the library just include the gem in your code...
|
14
|
+
|
15
|
+
include 'rubygems'
|
16
|
+
include 'gonzo_array_extensions'
|
17
|
+
|
18
|
+
=== Array#first
|
19
|
+
|
20
|
+
As well as supporting the original functionality of Array#first you can also pass an additional block and the first element(s) matching the block will be returned.
|
21
|
+
|
22
|
+
a = [ 1, 2, 3, 4, 5, 6 ]
|
23
|
+
a.first { |x| x > 3 } #=> 4
|
24
|
+
a.first(1) { |x| x > 3 } #=> [4]
|
25
|
+
a.first(3) { |x| x > 3 } #=> [4, 5, 6]
|
26
|
+
a.first { |x| x > 6 } #=> nil
|
27
|
+
|
28
|
+
=== Array#last
|
29
|
+
|
30
|
+
As well as supporting the original functionality of Array#last you can also pass an additional block and the last element(s) matching the block will be returned.
|
31
|
+
|
32
|
+
a = [ 1, 2, 3, 4, 5, 6 ]
|
33
|
+
a.last { |x| x < 3 } #=> 2
|
34
|
+
a.last(1) { |x| x < 3 } #=> [2]
|
35
|
+
a.last(3) { |x| x < 5 } #=> [2, 3, 4]
|
36
|
+
a.first { |x| x > 6 } #=> nil
|
37
|
+
|
38
|
+
=== Array#include?
|
39
|
+
|
40
|
+
As well as supporting the original functionality of Array#include? you can also pass an additional block and the method will return true if any element(s) match.
|
41
|
+
|
42
|
+
a = [ 1, 2, 3, 4, 5, 6 ]
|
43
|
+
a.include? { |x| x < 3 } #=> true
|
44
|
+
a.include? { |x| x > 6 } #=> false
|
45
|
+
|
46
|
+
== Thanks
|
47
|
+
|
48
|
+
Thats it really!
|
49
|
+
|
50
|
+
Love Rob.
|
51
|
+
|
52
|
+
== License
|
53
|
+
|
54
|
+
Copyright (c) 2010 Robert Oles
|
55
|
+
|
56
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
57
|
+
a copy of this software and associated documentation files (the
|
58
|
+
"Software"), to deal in the Software without restriction, including
|
59
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
60
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
61
|
+
permit persons to whom the Software is furnished to do so, subject to
|
62
|
+
the following conditions:
|
63
|
+
|
64
|
+
The above copyright notice and this permission notice shall be
|
65
|
+
included in all copies or substantial portions of the Software.
|
66
|
+
|
67
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
68
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
69
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
70
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
71
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
72
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
73
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/Rakefile
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
require 'echoe'
|
4
|
+
|
5
|
+
Dir['tasks/**/*.rake'].each { |t| load t }
|
6
|
+
|
7
|
+
Echoe.new('gonzo_array_extensions', '0.1.0') do |p|
|
8
|
+
p.description = "Extends standard library Array with some common gonzo needs"
|
9
|
+
p.url = "http://github.com/robertoles/gonzo_array_extensions"
|
10
|
+
p.author = "Robert Oles"
|
11
|
+
p.email = "robertoles@me.com"
|
12
|
+
p.ignore_pattern = ["tmp/*", "script/*"]
|
13
|
+
p.development_dependencies = []
|
14
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = %q{gonzo_array_extensions}
|
5
|
+
s.version = "0.1.0"
|
6
|
+
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
|
+
s.authors = ["Robert Oles"]
|
9
|
+
s.date = %q{2010-02-21}
|
10
|
+
s.description = %q{Extends standard library Array with some common gonzo needs}
|
11
|
+
s.email = %q{robertoles@me.com}
|
12
|
+
s.extra_rdoc_files = ["README.rdoc", "lib/gonzo_array_extensions.rb", "lib/gonzo_array_extensions/array.rb", "tasks/rspec.rake"]
|
13
|
+
s.files = ["Manifest", "README.rdoc", "Rakefile", "lib/gonzo_array_extensions.rb", "lib/gonzo_array_extensions/array.rb", "spec/custom_matchers.rb", "spec/gonzo_array_extensions/array_spec.rb", "spec/gonzo_array_extensions_spec.rb", "spec/spec_helper.rb", "tasks/rspec.rake", "gonzo_array_extensions.gemspec"]
|
14
|
+
s.homepage = %q{http://github.com/robertoles/gonzo_array_extensions}
|
15
|
+
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Gonzo_array_extensions", "--main", "README.rdoc"]
|
16
|
+
s.require_paths = ["lib"]
|
17
|
+
s.rubyforge_project = %q{gonzo_array_extensions}
|
18
|
+
s.rubygems_version = %q{1.3.5}
|
19
|
+
s.summary = %q{Extends standard library Array with some common gonzo needs}
|
20
|
+
|
21
|
+
if s.respond_to? :specification_version then
|
22
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
23
|
+
s.specification_version = 3
|
24
|
+
|
25
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
26
|
+
else
|
27
|
+
end
|
28
|
+
else
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Gonzo
|
2
|
+
module ArrayExtensions
|
3
|
+
def self.included(base)
|
4
|
+
base.instance_eval do
|
5
|
+
alias_method_chain :first, :block
|
6
|
+
alias_method_chain :last, :block
|
7
|
+
alias_method_chain :include?, :block
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def first_with_block(*args, &block)
|
12
|
+
return first_without_block(*args) unless block_given?
|
13
|
+
select(&block).first_without_block(*args)
|
14
|
+
end
|
15
|
+
|
16
|
+
def last_with_block(*args, &block)
|
17
|
+
return last_without_block(*args) unless block_given?
|
18
|
+
select(&block).last_without_block(*args)
|
19
|
+
end
|
20
|
+
|
21
|
+
def include_with_block?(*args, &block)
|
22
|
+
return include_without_block?(*args) unless block_given?
|
23
|
+
!select(&block).empty?
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module CustomMatchers
|
2
|
+
class IncludeModule
|
3
|
+
def initialize(expected_module)
|
4
|
+
@expected_module = expected_module
|
5
|
+
end
|
6
|
+
|
7
|
+
def matches?(clazz)
|
8
|
+
@clazz = clazz
|
9
|
+
@clazz.include?(@expected_module)
|
10
|
+
end
|
11
|
+
|
12
|
+
def failure_message_for_should
|
13
|
+
"expected #{@clazz.inspect} to include the module #{@expected_module.inspect}"
|
14
|
+
end
|
15
|
+
|
16
|
+
def failure_message_for_should_not
|
17
|
+
"expected #{@clazz.inspect} not to include the module #{@expected_module.inspect}"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def include_module(expected_module)
|
22
|
+
IncludeModule.new(expected_module)
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require File.join(ROOT, 'lib', 'gonzo_array_extensions')
|
3
|
+
|
4
|
+
describe Array do
|
5
|
+
describe "#first" do
|
6
|
+
describe "maintain its original functionality" do
|
7
|
+
it "should return nil if the array is empty" do
|
8
|
+
[].first.should be_nil
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should still return the first item" do
|
12
|
+
[1,2,3].first.should == 1
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should still return a single item in an array when n is one" do
|
16
|
+
[1,2,3].first(1).should == [1]
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should still return an array with the amount of items for n" do
|
20
|
+
[1,2,3,4,5].first(3).should == [1,2,3]
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "using a block" do
|
25
|
+
it "should return nil if no match is found" do
|
26
|
+
["some", "word", "foobar"].first{ |x| x == "blah" }.should be_nil
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should return the first item which matches the block" do
|
30
|
+
["some", "word", "foobar"].first{ |x| x == "foobar" }.should == "foobar"
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should return the a first item matching the block in an array when n is one" do
|
34
|
+
["some", "word", "foobar"].first(1){ |x| x == "foobar"}.should == ["foobar"]
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should return an array with the first n elements matching the block" do
|
38
|
+
[1, "foobar", 2, "foo", "bar"].first(2){ |x| x.instance_of?(String) }.should == ["foobar", "foo"]
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe "#last" do
|
44
|
+
describe "maintain its original functionality" do
|
45
|
+
it "should return nil if the array is empty" do
|
46
|
+
[].last.should be_nil
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should still return the last item" do
|
50
|
+
[1,2,3].last.should == 3
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should still return a single item in an array when n is one" do
|
54
|
+
[1,2,3].last(1).should == [3]
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should still return an array with the amount of items for n" do
|
58
|
+
[1,2,3,4,5].last(3).should == [3,4,5]
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
describe "using a block" do
|
63
|
+
it "should return nil if no match is found" do
|
64
|
+
["some", "word", "foobar"].last{ |x| x == "blah" }.should be_nil
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should return the first item which matches the block" do
|
68
|
+
["some", "word", "foobar"].last{ |x| x == "some" }.should == "some"
|
69
|
+
end
|
70
|
+
|
71
|
+
it "should return the a first item matching the block in an array when n is one" do
|
72
|
+
["some", "word", "foobar"].last(1){ |x| x == "some"}.should == ["some"]
|
73
|
+
end
|
74
|
+
|
75
|
+
it "should return an array with the first n elements matching the block" do
|
76
|
+
[1, "foobar", 2, "foo", "bar"].last(2){ |x| x.instance_of?(String) }.should == ["foo", "bar"]
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
describe "#include?" do
|
82
|
+
describe "maintain the original functionality" do
|
83
|
+
it "should still return true if the item is included in the array" do
|
84
|
+
[1,2,3].should include(2)
|
85
|
+
end
|
86
|
+
|
87
|
+
it "should still return false if the item is not included in the array" do
|
88
|
+
[1,2,3].should_not include(4)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
describe "using a block" do
|
93
|
+
it "should return true if a matching item if found in the array" do
|
94
|
+
["some", "word", "foobar"].include?{ |x| x.length == 6 }.should be_true
|
95
|
+
end
|
96
|
+
|
97
|
+
it "should return false if a macthing item is not found in the array" do
|
98
|
+
["some", "word", "foobar"].include?{ |x| x.length == 2 }.should be_false
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'Loading gonzo array extensions' do
|
4
|
+
|
5
|
+
before do
|
6
|
+
require File.join(ROOT, 'lib', 'gonzo_array_extensions')
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should include the Gonzo::ArayExtensions module in the core array class" do
|
10
|
+
Array.should include_module(Gonzo::ArrayExtensions)
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'spec'
|
3
|
+
|
4
|
+
ROOT = File.join(File.dirname(__FILE__), '..')
|
5
|
+
|
6
|
+
require File.join(ROOT, 'lib', 'gonzo_array_extensions', 'array.rb')
|
7
|
+
|
8
|
+
require File.dirname(__FILE__) + "/custom_matchers"
|
9
|
+
Spec::Runner.configure do |config|
|
10
|
+
config.include(CustomMatchers)
|
11
|
+
end
|
data/tasks/rspec.rake
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
begin
|
2
|
+
require 'spec'
|
3
|
+
rescue LoadError
|
4
|
+
require 'rubygems' unless ENV['NO_RUBYGEMS']
|
5
|
+
require 'spec'
|
6
|
+
end
|
7
|
+
begin
|
8
|
+
require 'spec/rake/spectask'
|
9
|
+
rescue LoadError
|
10
|
+
puts <<-EOS
|
11
|
+
To use rspec for testing you must install rspec gem:
|
12
|
+
gem install rspec
|
13
|
+
EOS
|
14
|
+
exit(0)
|
15
|
+
end
|
16
|
+
|
17
|
+
desc "Run the specs under spec/models"
|
18
|
+
Spec::Rake::SpecTask.new do |t|
|
19
|
+
t.spec_opts = ["-c"]
|
20
|
+
t.spec_files = FileList['spec/**/*_spec.rb']
|
21
|
+
end
|
metadata
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: gonzo_array_extensions
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Robert Oles
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2010-02-21 00:00:00 +00:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: Extends standard library Array with some common gonzo needs
|
17
|
+
email: robertoles@me.com
|
18
|
+
executables: []
|
19
|
+
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files:
|
23
|
+
- README.rdoc
|
24
|
+
- lib/gonzo_array_extensions.rb
|
25
|
+
- lib/gonzo_array_extensions/array.rb
|
26
|
+
- tasks/rspec.rake
|
27
|
+
files:
|
28
|
+
- Manifest
|
29
|
+
- README.rdoc
|
30
|
+
- Rakefile
|
31
|
+
- lib/gonzo_array_extensions.rb
|
32
|
+
- lib/gonzo_array_extensions/array.rb
|
33
|
+
- spec/custom_matchers.rb
|
34
|
+
- spec/gonzo_array_extensions/array_spec.rb
|
35
|
+
- spec/gonzo_array_extensions_spec.rb
|
36
|
+
- spec/spec_helper.rb
|
37
|
+
- tasks/rspec.rake
|
38
|
+
- gonzo_array_extensions.gemspec
|
39
|
+
has_rdoc: true
|
40
|
+
homepage: http://github.com/robertoles/gonzo_array_extensions
|
41
|
+
licenses: []
|
42
|
+
|
43
|
+
post_install_message:
|
44
|
+
rdoc_options:
|
45
|
+
- --line-numbers
|
46
|
+
- --inline-source
|
47
|
+
- --title
|
48
|
+
- Gonzo_array_extensions
|
49
|
+
- --main
|
50
|
+
- README.rdoc
|
51
|
+
require_paths:
|
52
|
+
- lib
|
53
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
54
|
+
requirements:
|
55
|
+
- - ">="
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: "0"
|
58
|
+
version:
|
59
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: "1.2"
|
64
|
+
version:
|
65
|
+
requirements: []
|
66
|
+
|
67
|
+
rubyforge_project: gonzo_array_extensions
|
68
|
+
rubygems_version: 1.3.5
|
69
|
+
signing_key:
|
70
|
+
specification_version: 3
|
71
|
+
summary: Extends standard library Array with some common gonzo needs
|
72
|
+
test_files: []
|
73
|
+
|