rext 0.3.4
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/History.rdoc +97 -0
- data/Manifest +54 -0
- data/README.rdoc +136 -0
- data/Rakefile +16 -0
- data/benchmarks/enumerable.rb +14 -0
- data/benchmarks/proc.rb +24 -0
- data/lib/rext.rb +24 -0
- data/lib/rext/all.rb +18 -0
- data/lib/rext/array.rb +6 -0
- data/lib/rext/array/helpers.rb +64 -0
- data/lib/rext/date.rb +6 -0
- data/lib/rext/date/helpers.rb +11 -0
- data/lib/rext/enumerable.rb +6 -0
- data/lib/rext/enumerable/helpers.rb +88 -0
- data/lib/rext/hash.rb +6 -0
- data/lib/rext/hash/helpers.rb +42 -0
- data/lib/rext/integer.rb +6 -0
- data/lib/rext/integer/helpers.rb +29 -0
- data/lib/rext/module.rb +6 -0
- data/lib/rext/module/helpers.rb +85 -0
- data/lib/rext/numeric.rb +7 -0
- data/lib/rext/numeric/bytes.rb +16 -0
- data/lib/rext/numeric/time.rb +57 -0
- data/lib/rext/object.rb +7 -0
- data/lib/rext/object/helpers.rb +62 -0
- data/lib/rext/object/metaclass.rb +29 -0
- data/lib/rext/proc.rb +7 -0
- data/lib/rext/proc/helpers.rb +22 -0
- data/lib/rext/string.rb +7 -0
- data/lib/rext/string/encode.rb +82 -0
- data/lib/rext/string/helpers.rb +246 -0
- data/lib/rext/symbol.rb +6 -0
- data/lib/rext/symbol/helpers.rb +16 -0
- data/lib/rext/time.rb +6 -0
- data/lib/rext/time/helpers.rb +43 -0
- data/lib/rext/version.rb +4 -0
- data/rext.gemspec +30 -0
- data/spec/array_spec.rb +61 -0
- data/spec/date_spec.rb +14 -0
- data/spec/enumerable_spec.rb +55 -0
- data/spec/hash_spec.rb +36 -0
- data/spec/integer_spec.rb +19 -0
- data/spec/module_spec.rb +41 -0
- data/spec/numeric_spec.rb +31 -0
- data/spec/object_spec.rb +101 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +5 -0
- data/spec/string_spec.rb +194 -0
- data/spec/symbol_spec.rb +14 -0
- data/spec/time_spec.rb +22 -0
- data/tasks/benchmark.rake +13 -0
- data/tasks/docs.rake +13 -0
- data/tasks/gemspec.rake +3 -0
- data/tasks/spec.rake +25 -0
- metadata +147 -0
data/lib/rext/version.rb
ADDED
data/rext.gemspec
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = %q{rext}
|
5
|
+
s.version = "0.3.4"
|
6
|
+
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
|
+
s.authors = ["TJ Holowaychuk"]
|
9
|
+
s.date = %q{2009-10-08}
|
10
|
+
s.description = %q{Ruby extensions}
|
11
|
+
s.email = %q{tj@vision-media.ca}
|
12
|
+
s.extra_rdoc_files = ["README.rdoc", "lib/rext.rb", "lib/rext/all.rb", "lib/rext/array.rb", "lib/rext/array/helpers.rb", "lib/rext/date.rb", "lib/rext/date/helpers.rb", "lib/rext/enumerable.rb", "lib/rext/enumerable/helpers.rb", "lib/rext/hash.rb", "lib/rext/hash/helpers.rb", "lib/rext/integer.rb", "lib/rext/integer/helpers.rb", "lib/rext/module.rb", "lib/rext/module/helpers.rb", "lib/rext/numeric.rb", "lib/rext/numeric/bytes.rb", "lib/rext/numeric/time.rb", "lib/rext/object.rb", "lib/rext/object/helpers.rb", "lib/rext/object/metaclass.rb", "lib/rext/proc.rb", "lib/rext/proc/helpers.rb", "lib/rext/string.rb", "lib/rext/string/encode.rb", "lib/rext/string/helpers.rb", "lib/rext/symbol.rb", "lib/rext/symbol/helpers.rb", "lib/rext/time.rb", "lib/rext/time/helpers.rb", "lib/rext/version.rb", "tasks/benchmark.rake", "tasks/docs.rake", "tasks/gemspec.rake", "tasks/spec.rake"]
|
13
|
+
s.files = ["History.rdoc", "Manifest", "README.rdoc", "Rakefile", "benchmarks/enumerable.rb", "benchmarks/proc.rb", "lib/rext.rb", "lib/rext/all.rb", "lib/rext/array.rb", "lib/rext/array/helpers.rb", "lib/rext/date.rb", "lib/rext/date/helpers.rb", "lib/rext/enumerable.rb", "lib/rext/enumerable/helpers.rb", "lib/rext/hash.rb", "lib/rext/hash/helpers.rb", "lib/rext/integer.rb", "lib/rext/integer/helpers.rb", "lib/rext/module.rb", "lib/rext/module/helpers.rb", "lib/rext/numeric.rb", "lib/rext/numeric/bytes.rb", "lib/rext/numeric/time.rb", "lib/rext/object.rb", "lib/rext/object/helpers.rb", "lib/rext/object/metaclass.rb", "lib/rext/proc.rb", "lib/rext/proc/helpers.rb", "lib/rext/string.rb", "lib/rext/string/encode.rb", "lib/rext/string/helpers.rb", "lib/rext/symbol.rb", "lib/rext/symbol/helpers.rb", "lib/rext/time.rb", "lib/rext/time/helpers.rb", "lib/rext/version.rb", "rext.gemspec", "spec/array_spec.rb", "spec/date_spec.rb", "spec/enumerable_spec.rb", "spec/hash_spec.rb", "spec/integer_spec.rb", "spec/module_spec.rb", "spec/numeric_spec.rb", "spec/object_spec.rb", "spec/spec.opts", "spec/spec_helper.rb", "spec/string_spec.rb", "spec/symbol_spec.rb", "spec/time_spec.rb", "tasks/benchmark.rake", "tasks/docs.rake", "tasks/gemspec.rake", "tasks/spec.rake"]
|
14
|
+
s.homepage = %q{http://github.com/visionmedia/rext}
|
15
|
+
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Rext", "--main", "README.rdoc"]
|
16
|
+
s.require_paths = ["lib"]
|
17
|
+
s.rubyforge_project = %q{rext}
|
18
|
+
s.rubygems_version = %q{1.3.5}
|
19
|
+
s.summary = %q{Ruby extensions}
|
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
|
data/spec/array_spec.rb
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
|
2
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
3
|
+
require 'rext/array'
|
4
|
+
|
5
|
+
describe Array do
|
6
|
+
describe "helpers" do
|
7
|
+
|
8
|
+
before :each do
|
9
|
+
@items = %w( some foo bar )
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "#from" do
|
13
|
+
it "should return elements after the position specified" do
|
14
|
+
@items.from(1).should == %w( foo bar )
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "#to" do
|
19
|
+
it "should return elements up to position" do
|
20
|
+
@items.to(1).should == %w( some foo )
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "#chunk" do
|
25
|
+
it "should split an array into several containing the length of n" do
|
26
|
+
(1..9).to_a.chunk(3).should == [[1,2,3], [4,5,6], [7,8,9]]
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should accept a block, yielding each chunk" do
|
30
|
+
chunks = []
|
31
|
+
(1..9).to_a.in_groups_of(3) do |chunk|
|
32
|
+
chunks << chunk
|
33
|
+
end
|
34
|
+
chunks.should == [[1,2,3], [4,5,6], [7,8,9]]
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should pad with nil by default" do
|
38
|
+
(1..5).to_a.in_groups_of(4).should == [[1,2,3,4], [5,nil,nil,nil]]
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should not padd when pad_with is false" do
|
42
|
+
(1..6).to_a.in_groups_of(4, false).should == [[1,2,3,4], [5,6]]
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe "#pad" do
|
47
|
+
it "should pad with nil by default" do
|
48
|
+
[1,2].pad(4).should == [1, 2, nil, nil]
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should pad an with an object" do
|
52
|
+
[1,2].pad(3 ,'x').should == [1, 2, 'x']
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should do nothing when the array is of expected length" do
|
56
|
+
[1,2].pad(2).should == [1,2]
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
end
|
data/spec/date_spec.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
|
2
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
3
|
+
require 'rext/date'
|
4
|
+
|
5
|
+
describe Date do
|
6
|
+
describe "helpers" do
|
7
|
+
describe "#to_time" do
|
8
|
+
it "should convert to a Time instance" do
|
9
|
+
event = Date.parse('may 25th 1987')
|
10
|
+
event.to_time.should be_an_instance_of(Time)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
|
2
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
3
|
+
require 'rext/enumerable'
|
4
|
+
|
5
|
+
describe Enumerable do
|
6
|
+
describe "helpers" do
|
7
|
+
describe "#includes_all?" do
|
8
|
+
it "should return true when all arguments are present" do
|
9
|
+
[1,2,3].includes_all?(1,2).should be_true
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should return true when not all arguments are present" do
|
13
|
+
[1,1,3,3,4].includes_all?(1,3,6).should be_false
|
14
|
+
[1,1,3,3,4].includes_all?(6,3,1).should be_false
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "#group_by" do
|
19
|
+
before :each do
|
20
|
+
@enum = 'foo', :bar, 1, 2, 3
|
21
|
+
@results = {
|
22
|
+
String => ['foo'],
|
23
|
+
Symbol => [:bar],
|
24
|
+
Fixnum => [1, 2, 3]
|
25
|
+
}
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should group an enum" do
|
29
|
+
@enum.group_by { |v| v.class }.should == @results
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should group using instance evaluated block" do
|
33
|
+
@enum.group_by { self.class }.should == @results
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should group by method call" do
|
37
|
+
@enum.group_by.class.should == @results
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe "#every" do
|
42
|
+
it "should map a method call" do
|
43
|
+
list = %w( cookies icecream sugar )
|
44
|
+
list.every.length.should == [7, 8 ,5]
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should allow mapping shortcuts using a block" do
|
48
|
+
people = []
|
49
|
+
people << mock('Person', :name => 'TJ')
|
50
|
+
people << mock('Person', :name => 'Scott')
|
51
|
+
people.every { name.length }.should == [2, 5]
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
data/spec/hash_spec.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
|
2
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
3
|
+
require 'rext/hash'
|
4
|
+
|
5
|
+
describe Hash do
|
6
|
+
describe "helpers" do
|
7
|
+
describe "#delete_at" do
|
8
|
+
it "should delete several keys, returning their values when present" do
|
9
|
+
options = { :foo => 1, :bar => 2 }
|
10
|
+
foo, bar, does_not_exist = options.delete_at :foo, :bar, :does_not_exist
|
11
|
+
foo.should == 1
|
12
|
+
bar.should == 2
|
13
|
+
does_not_exist.should be_nil
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe "#switchify" do
|
18
|
+
it "should work with bools" do
|
19
|
+
{ :use_foobar => true }.switchify.should == ['--use-foobar']
|
20
|
+
{ :use_foobar => false }.switchify.should be_empty
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should stringify numbers and symbols" do
|
24
|
+
{ :interval => 15, :icon => :jpeg }.switchify.sort.should == ['--icon', '--interval', '15', 'jpeg']
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should work with little switches" do
|
28
|
+
{ :T => true }.switchify.should == ['-T']
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should add quotes around strings" do
|
32
|
+
{ :glob => 'lib/**/*.rb' }.switchify.should == ['--glob', '"lib/**/*.rb"']
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
|
2
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
3
|
+
require 'rext/integer'
|
4
|
+
|
5
|
+
describe Integer do
|
6
|
+
describe "helpers" do
|
7
|
+
describe "#ordanalize" do
|
8
|
+
it "should convert integers to an ordanal string" do
|
9
|
+
1.ordinalize.should == '1st'
|
10
|
+
2.ordinalize.should == '2nd'
|
11
|
+
3.ordinalize.should == '3rd'
|
12
|
+
4.ordinalize.should == '4th'
|
13
|
+
11.ordinalize.should == '11th'
|
14
|
+
12.ordinalize.should == '12th'
|
15
|
+
13.ordinalize.should == '13th'
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/spec/module_spec.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
|
2
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
3
|
+
require 'rext/module'
|
4
|
+
|
5
|
+
describe Module do
|
6
|
+
describe "helpers" do
|
7
|
+
describe "#proxy_method" do
|
8
|
+
it "should implement method_missing, passing regexp captures and arguments to the handler method" do
|
9
|
+
class FooBar
|
10
|
+
call_method :find, :if => /^find_by_(\w+)_(\w+)/
|
11
|
+
call_method :delete, :if => lambda { |meth, *args| meth.to_s =~ /^delete_by_(\w+)_(\w+)/ }
|
12
|
+
def find *args; args end
|
13
|
+
def delete *args; args; end
|
14
|
+
end
|
15
|
+
foo = FooBar.new
|
16
|
+
foo.find_by_user_email.should == ['user', 'email']
|
17
|
+
foo.find_by_user_name('foo').should == ['user', 'name', 'foo']
|
18
|
+
foo.delete_by_user_name('foo', 'bar').should == ['foo', 'bar']
|
19
|
+
lambda { foo.does_not_exist }.should raise_error(NoMethodError)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "#setup" do
|
24
|
+
it "should define included instance evaluated in context to the module passed" do
|
25
|
+
module BarFoo
|
26
|
+
setup do
|
27
|
+
include InstanceMethods
|
28
|
+
end
|
29
|
+
|
30
|
+
module InstanceMethods
|
31
|
+
def bar_foo
|
32
|
+
'wahoo'
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
FooBar.send :include, BarFoo
|
37
|
+
FooBar.new.bar_foo.should == 'wahoo'
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
|
2
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
3
|
+
require 'rext/numeric'
|
4
|
+
|
5
|
+
describe Numeric do
|
6
|
+
describe "time" do
|
7
|
+
describe "#ago / #before" do
|
8
|
+
it "should return the distance in time before now, or specified time" do
|
9
|
+
event = Time.mktime 1987, 5, 25
|
10
|
+
15.days.before(event).should == Time.mktime(1987, 5, 10)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
describe "#since / #from_now" do
|
15
|
+
it "should return the distance in time from now, or specified time" do
|
16
|
+
event = Time.mktime 1987, 5, 25
|
17
|
+
5.days.since(event).should == Time.mktime(1987, 5, 30)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "bytes" do
|
23
|
+
it "should return bytes, kilobytes, megabytes, gigabytes, and terabytes" do
|
24
|
+
5.bytes.should == 5
|
25
|
+
5.kilobytes.should == 5120
|
26
|
+
5.megabytes.should == 5242880
|
27
|
+
5.gigabytes.should == 5368709120
|
28
|
+
5.terabytes.should == 5497558138880
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/spec/object_spec.rb
ADDED
@@ -0,0 +1,101 @@
|
|
1
|
+
|
2
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
3
|
+
require 'rext/object'
|
4
|
+
|
5
|
+
describe Object do
|
6
|
+
describe "metaclass" do
|
7
|
+
describe "#metaclass" do
|
8
|
+
it "should return the anonymous 'virtual' class" do
|
9
|
+
'foo'.metaclass.should be_an_instance_of(Class)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "#meta_eval" do
|
14
|
+
it "should evaluate a block in context to the metaclass" do
|
15
|
+
object = 'foo'
|
16
|
+
object.meta_eval do
|
17
|
+
define_method :foo do
|
18
|
+
'bar'
|
19
|
+
end
|
20
|
+
end
|
21
|
+
object.foo.should == 'bar'
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should accept a string to be evaluated" do
|
25
|
+
object = 'foo'
|
26
|
+
object.meta_eval <<-EOF
|
27
|
+
def foo
|
28
|
+
'bar'
|
29
|
+
end
|
30
|
+
EOF
|
31
|
+
object.foo.should == 'bar'
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe "#meta_def" do
|
36
|
+
it "should define a method within the metaclass" do
|
37
|
+
object = 'foo'
|
38
|
+
object.meta_def(:foo) { |*args| "bar #{ args.join(', ') }" }
|
39
|
+
object.foo(1,2,3).should == 'bar 1, 2, 3'
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe "helpers" do
|
45
|
+
describe "#indifferent_hash" do
|
46
|
+
it "should return a hash indifferent to symbols or strings for key access" do
|
47
|
+
hash = indifferent_hash
|
48
|
+
hash['foo'] = 'foo'
|
49
|
+
hash[:foo].should == 'foo'
|
50
|
+
hash['foo'].should == 'foo'
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
describe "#try" do
|
56
|
+
it "should try the block once with no args" do
|
57
|
+
times = 0
|
58
|
+
try { times += 1 }
|
59
|
+
times.should == 1
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should try the block multiple times when failing" do
|
63
|
+
times = 0
|
64
|
+
try(3) { times += 1; raise 'foo' }
|
65
|
+
times.should == 3
|
66
|
+
end
|
67
|
+
|
68
|
+
it "should try the block one time when succesful" do
|
69
|
+
times = 0
|
70
|
+
try(3) { times += 1 }
|
71
|
+
times.should == 1
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should return the value returned by the block" do
|
75
|
+
val = try(3) { 'test' }
|
76
|
+
val.should == 'test'
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should allow specific exceptions to be rescued" do
|
80
|
+
lambda { try(3){ raise ArgumentError, 'foo' } }.should_not raise_error
|
81
|
+
lambda { try(3, :on => ArgumentError){ raise ArgumentError, 'foo' } }.should_not raise_error
|
82
|
+
lambda { try(3, :on => TypeError){ raise ArgumentError, 'foo' } }.should raise_error(ArgumentError)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
describe "#returning" do
|
87
|
+
it "should return the value given to it" do
|
88
|
+
def frequency_of enum
|
89
|
+
returning Hash.new(0) do |hash|
|
90
|
+
enum.each do |value|
|
91
|
+
hash[value] += 1
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
frequency_of(%w( foo bar foo foo )).should == {
|
96
|
+
'foo' => 3,
|
97
|
+
'bar' => 1,
|
98
|
+
}
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
data/spec/spec.opts
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--color
|
data/spec/spec_helper.rb
ADDED
data/spec/string_spec.rb
ADDED
@@ -0,0 +1,194 @@
|
|
1
|
+
|
2
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
3
|
+
require 'rext/string'
|
4
|
+
|
5
|
+
describe String do
|
6
|
+
describe "encode" do
|
7
|
+
describe "#to_md5" do
|
8
|
+
it "should return an md5 hash" do
|
9
|
+
'test'.to_md5.should == '098f6bcd4621d373cade4e832627b4f6'
|
10
|
+
'test'.to_md5.should == 'test'.to_md5
|
11
|
+
'test'.to_md5.should_not == 'tests'.to_md5
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "#to_sha512" do
|
16
|
+
it "should return an md5 hash" do
|
17
|
+
'test'.to_sha512.should == 'ee26b0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732c304cc5fa9ad8e6f57f50028a8ff'
|
18
|
+
'test'.to_sha512.should == 'test'.to_sha512
|
19
|
+
'test'.to_sha512.should_not == 'tests'.to_sha512
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "#base64_encode" do
|
24
|
+
it "should base64 encode a string" do
|
25
|
+
'tj'.base64_encode.should == 'dGo='
|
26
|
+
"foo \n bar\n\n".base64_encode.base64_decode.should == "foo \n bar\n\n"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe "#base64_decode" do
|
31
|
+
it "should decode a base64 string" do
|
32
|
+
'dGo='.base64_decode.should == 'tj'
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe "helpers" do
|
38
|
+
describe "#word_frequency" do
|
39
|
+
it "should return a hash with word keys and count values" do
|
40
|
+
'mm i love cookies mm'.word_frequency.
|
41
|
+
should == {
|
42
|
+
'mm' => 2,
|
43
|
+
'i' => 1,
|
44
|
+
'love' => 1,
|
45
|
+
'cookies' => 1,
|
46
|
+
}
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
describe "#frequency_of_word" do
|
51
|
+
it "should return the frequency of a word, or 0" do
|
52
|
+
'yum yum ? yes'.frequency_of_word('yum').should == 2
|
53
|
+
'yum yum ? yes'.frequency_of_word('yes').should == 1
|
54
|
+
'yum yum ? yes'.frequency_of_word('no').should == 0
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe "#switchify" do
|
59
|
+
it "should return a switch version of the string" do
|
60
|
+
'some_foo_bar'.switchify.should == '--some-foo-bar'
|
61
|
+
end
|
62
|
+
|
63
|
+
it "should return small switches when only a single char" do
|
64
|
+
't'.switchify.should == '-t'
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should raise an InvalidSwitchError when length 0" do
|
68
|
+
lambda { ''.switchify }.should raise_error(String::InvalidSwitchError)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
describe "#path" do
|
73
|
+
it "should return an instance of a pathname" do
|
74
|
+
'History.rdoc'.path.should be_an_instance_of(Pathname)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
describe "#files" do
|
79
|
+
it "should return result of Dir glob" do
|
80
|
+
'lib/*.*'.files.should be_an_instance_of(Array)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
describe "#file" do
|
85
|
+
it "should return an instance of a file" do
|
86
|
+
'History.rdoc'.file.should be_an_instance_of(File)
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
describe "#add_class" do
|
91
|
+
it "should add a word that does not exist" do
|
92
|
+
'foo'.add_class('bar').should == 'foo bar'
|
93
|
+
end
|
94
|
+
|
95
|
+
it "should not add the same word twice" do
|
96
|
+
'foo-bar bar'.add_class('bar').should == 'foo-bar bar'
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
describe "#wrap" do
|
101
|
+
it "should wrap a string" do
|
102
|
+
'foo'.wrap('|').should == '|foo|'
|
103
|
+
end
|
104
|
+
|
105
|
+
it "should wrap with optional suffix" do
|
106
|
+
'foo'.wrap('(', ')').should == '(foo)'
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
describe "#starts_with?" do
|
111
|
+
it "should check if a string starts with another" do
|
112
|
+
'foo bar'.starts_with?('foo').should be_true
|
113
|
+
' foo bar'.starts_with?('foo').should_not be_true
|
114
|
+
'bar foo'.starts_with?('foo').should_not be_true
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
describe "#ends_with?" do
|
119
|
+
it "should check if a string ends with another" do
|
120
|
+
'foo bar'.ends_with?('bar').should be_true
|
121
|
+
'foo bar '.ends_with?('bar').should_not be_true
|
122
|
+
'bar foo foo'.ends_with?('foo').should be_true
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
describe "#plural?" do
|
127
|
+
it "should check if a string is plural" do
|
128
|
+
'cookies'.should be_plural
|
129
|
+
'cookie'.should_not be_plural
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
describe "#singular?" do
|
134
|
+
it "should check if a string is singular" do
|
135
|
+
'cookie'.should be_singular
|
136
|
+
'cookies'.should_not be_singular
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
describe "#first" do
|
141
|
+
it "should return the first character" do
|
142
|
+
'foo'.first.should == 'f'
|
143
|
+
end
|
144
|
+
|
145
|
+
it "should return n number of charcters" do
|
146
|
+
'foo'.first(2).should == 'fo'
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
describe "#last" do
|
151
|
+
it "should return the last character" do
|
152
|
+
'bar'.last.should == 'r'
|
153
|
+
end
|
154
|
+
|
155
|
+
it "should return the last n number of characters" do
|
156
|
+
'bar'.last(2).should == 'ar'
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
describe "#from" do
|
161
|
+
it "should return all characters from n" do
|
162
|
+
'cookies'.from(3).should == 'kies'
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
describe "#camelize" do
|
167
|
+
it "should camel-case a string, leaving the first character lower by default" do
|
168
|
+
'some_foo_bar'.camelize.should == 'someFooBar'
|
169
|
+
end
|
170
|
+
|
171
|
+
it "should camel-case a string, with first character capitalized" do
|
172
|
+
'some_foo_bar'.camelize(true).should == 'SomeFooBar'
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
describe "#constantize" do
|
177
|
+
it "should convert a string to a constant" do
|
178
|
+
'Rext::VERSION'.constantize.should == Rext::VERSION
|
179
|
+
end
|
180
|
+
|
181
|
+
it "should raise an error when an invalid constant name is passed" do
|
182
|
+
lambda { 'foo bar'.constantize }.should raise_error(NameError)
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
describe "#digitize" do
|
187
|
+
it "should leave only numeric characters" do
|
188
|
+
'$100,000'.digitize.should == '100000'
|
189
|
+
'$100,000'.digitize.to_i.should == 100_000
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
193
|
+
end
|
194
|
+
end
|