arrayextension 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/.document +5 -0
- data/.gitignore +21 -0
- data/LICENSE +20 -0
- data/README.rdoc +18 -0
- data/Rakefile +44 -0
- data/VERSION +1 -0
- data/lib/arrayextension.rb +34 -0
- data/spec/arrayextension_spec.rb +52 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +9 -0
- metadata +75 -0
data/.document
ADDED
data/.gitignore
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2009 Vinicius Teles
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
= arrayextension
|
2
|
+
|
3
|
+
This gem extends the Ruby class Array with a few useful methods.
|
4
|
+
|
5
|
+
== Note on Patches/Pull Requests
|
6
|
+
|
7
|
+
* Fork the project.
|
8
|
+
* Make your feature addition or bug fix.
|
9
|
+
* Add specs for it. This is important so I don't break it in a
|
10
|
+
future version unintentionally.
|
11
|
+
* Commit, do not mess with rakefile, version, or history.
|
12
|
+
(if you want to have your own version, that is fine but
|
13
|
+
bump version in a commit by itself I can ignore when I pull)
|
14
|
+
* Send me a pull request. Bonus points for topic branches.
|
15
|
+
|
16
|
+
== Copyright
|
17
|
+
|
18
|
+
Copyright (c) 2009 Vinicius Teles. See LICENSE for details.
|
data/Rakefile
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'jeweler'
|
6
|
+
Jeweler::Tasks.new do |gem|
|
7
|
+
gem.name = "arrayextension"
|
8
|
+
gem.summary = "This gem extends the Ruby class Array with a few useful methods."
|
9
|
+
gem.description = "This gem extends the Ruby class Array with a few useful methods. Just a bit of sugar."
|
10
|
+
gem.email = "vinicius@improveit.com.br"
|
11
|
+
gem.homepage = "http://github.com/viniciusteles/arrayextension"
|
12
|
+
gem.authors = ["Vinicius Teles"]
|
13
|
+
gem.add_development_dependency "rspec", ">= 1.2.8"
|
14
|
+
end
|
15
|
+
Jeweler::GemcutterTasks.new
|
16
|
+
rescue LoadError
|
17
|
+
puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
|
18
|
+
end
|
19
|
+
|
20
|
+
require 'spec/rake/spectask'
|
21
|
+
Spec::Rake::SpecTask.new(:spec) do |spec|
|
22
|
+
spec.libs << 'lib' << 'spec'
|
23
|
+
spec.spec_files = FileList['spec/**/*_spec.rb']
|
24
|
+
end
|
25
|
+
|
26
|
+
Spec::Rake::SpecTask.new(:rcov) do |spec|
|
27
|
+
spec.libs << 'lib' << 'spec'
|
28
|
+
spec.pattern = 'spec/**/*_spec.rb'
|
29
|
+
spec.rcov = true
|
30
|
+
end
|
31
|
+
|
32
|
+
task :spec => :check_dependencies
|
33
|
+
|
34
|
+
task :default => :spec
|
35
|
+
|
36
|
+
require 'rake/rdoctask'
|
37
|
+
Rake::RDocTask.new do |rdoc|
|
38
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
39
|
+
|
40
|
+
rdoc.rdoc_dir = 'rdoc'
|
41
|
+
rdoc.title = "arrayextension #{version}"
|
42
|
+
rdoc.rdoc_files.include('README*')
|
43
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
44
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.1.0
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# The Ruby class Array is extended with a few useful methods.
|
2
|
+
#
|
3
|
+
class Array
|
4
|
+
|
5
|
+
# Returns a string created by converting each element of the array to a string, separated by \n
|
6
|
+
#
|
7
|
+
# [].join_cr #=> ""
|
8
|
+
# ["a"].join_cr #=> "a"
|
9
|
+
# ["a", "b", "c"].join_cr #=> "a\nb\nc\n"
|
10
|
+
#
|
11
|
+
def join_cr
|
12
|
+
self.compact.reject { |element| element.to_s.empty? || element.to_s.strip == "\n" }.join("\n")
|
13
|
+
end
|
14
|
+
|
15
|
+
# Returns an array containing elements choosen at random
|
16
|
+
#
|
17
|
+
# [].draw #=> []
|
18
|
+
# [].draw(2) #=> []
|
19
|
+
# ["a"].draw(2) #=> ["a", "a"]
|
20
|
+
# ["a", "b", "c"].draw #=> ["b"] assuming "b" was choosen randomly
|
21
|
+
# ["a", "b", "c"].draw(2) #=> ["b", "c"] assuming "b" and "c" were choosen randomly
|
22
|
+
#
|
23
|
+
def draw(number_of_elements = 1)
|
24
|
+
return [] if empty?
|
25
|
+
(1..number_of_elements).to_a.map { random_element }
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def random_element
|
31
|
+
self[Kernel.rand(self.length)]
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
describe Array do
|
4
|
+
|
5
|
+
describe ".join_cr" do
|
6
|
+
|
7
|
+
it "should be an empty string when array is empty" do
|
8
|
+
[].join_cr.should == ''
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should return a string with no \\n at the end, when there's only one element in the array" do
|
12
|
+
%w(element).join_cr.should == 'element'
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should join elements of an array so that each element appears in one line, in the resulting string" do
|
16
|
+
%w(each word in one line please).join_cr.should == "each\nword\nin\none\nline\nplease"
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
describe ".draw" do
|
22
|
+
|
23
|
+
it "should be empty when array is empty" do
|
24
|
+
[].draw.should == []
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should be empty when array is empty it's asked to return more than one element" do
|
28
|
+
[].draw(2).should == []
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should return the only element of an one element array" do
|
32
|
+
%w(element).draw.should == %w(element)
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should return the same element more than once when it's asked to return more than one element" do
|
36
|
+
%w(element).draw(2).should == %w(element element)
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should return element at random when array has several elements" do
|
40
|
+
Kernel.should_receive(:rand).and_return(3)
|
41
|
+
%w(this is an array full of elements).draw.should == %w(array)
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should return more than one element at random when array has several elements and it's asked to return more than one element" do
|
45
|
+
Kernel.should_receive(:rand).and_return(0)
|
46
|
+
Kernel.should_receive(:rand).and_return(3)
|
47
|
+
%w(this is an array full of elements).draw(2).should == %w(this array)
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
data/spec/spec.opts
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--color
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: arrayextension
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Vinicius Teles
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-11-11 00:00:00 -02:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: rspec
|
17
|
+
type: :development
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 1.2.8
|
24
|
+
version:
|
25
|
+
description: This gem extends the Ruby class Array with a few useful methods. Just a bit of sugar.
|
26
|
+
email: vinicius@improveit.com.br
|
27
|
+
executables: []
|
28
|
+
|
29
|
+
extensions: []
|
30
|
+
|
31
|
+
extra_rdoc_files:
|
32
|
+
- LICENSE
|
33
|
+
- README.rdoc
|
34
|
+
files:
|
35
|
+
- .document
|
36
|
+
- .gitignore
|
37
|
+
- LICENSE
|
38
|
+
- README.rdoc
|
39
|
+
- Rakefile
|
40
|
+
- VERSION
|
41
|
+
- lib/arrayextension.rb
|
42
|
+
- spec/arrayextension_spec.rb
|
43
|
+
- spec/spec.opts
|
44
|
+
- spec/spec_helper.rb
|
45
|
+
has_rdoc: true
|
46
|
+
homepage: http://github.com/viniciusteles/arrayextension
|
47
|
+
licenses: []
|
48
|
+
|
49
|
+
post_install_message:
|
50
|
+
rdoc_options:
|
51
|
+
- --charset=UTF-8
|
52
|
+
require_paths:
|
53
|
+
- lib
|
54
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
55
|
+
requirements:
|
56
|
+
- - ">="
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
version: "0"
|
59
|
+
version:
|
60
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
61
|
+
requirements:
|
62
|
+
- - ">="
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: "0"
|
65
|
+
version:
|
66
|
+
requirements: []
|
67
|
+
|
68
|
+
rubyforge_project:
|
69
|
+
rubygems_version: 1.3.5
|
70
|
+
signing_key:
|
71
|
+
specification_version: 3
|
72
|
+
summary: This gem extends the Ruby class Array with a few useful methods.
|
73
|
+
test_files:
|
74
|
+
- spec/arrayextension_spec.rb
|
75
|
+
- spec/spec_helper.rb
|