stringray 1
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 +6 -0
- data/README.mkdn +41 -0
- data/Rakefile +98 -0
- data/StringRay.gemspec +77 -0
- data/lib/spec/rake/verify_ratio.rb +78 -0
- data/lib/stringray.rb +128 -0
- data/spec/stringray_spec.rb +75 -0
- metadata +76 -0
data/.manifest
ADDED
data/README.mkdn
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
StringRay
|
2
|
+
=========
|
3
|
+
|
4
|
+
**StringRay** exposes a powerful method to split a `String` into an `Array` of words,
|
5
|
+
and further allows you to include `Enumerable`, thus exposing many of the
|
6
|
+
most useful `Array` methods on your `String`s.
|
7
|
+
|
8
|
+
Usage
|
9
|
+
-----
|
10
|
+
|
11
|
+
class String; include StringRay; end
|
12
|
+
|
13
|
+
"Oi! I'm a string, do something fun with me!".each do |word|
|
14
|
+
p word
|
15
|
+
end
|
16
|
+
|
17
|
+
Getting
|
18
|
+
-------
|
19
|
+
|
20
|
+
The authoritative source for this project is available at
|
21
|
+
<http://github.com/elliottcable/stringray>. You can clone your own copy with the
|
22
|
+
following command:
|
23
|
+
|
24
|
+
git clone git://github.com/elliottcable/stringray.git
|
25
|
+
|
26
|
+
If you want to make changes to the codebase, you need to fork your own GitHub
|
27
|
+
repository for said changes. Send a pullrequest to [elliottcable](http://github.com/elliottcable "elliottcable on GitHub")
|
28
|
+
when you've got something ready for the master branch that you think should be
|
29
|
+
merged.
|
30
|
+
|
31
|
+
Requirements
|
32
|
+
------------
|
33
|
+
|
34
|
+
To run git-blog, you need... nothing!
|
35
|
+
|
36
|
+
To develop and contribute to git-blog, you also need:
|
37
|
+
|
38
|
+
* `gem install rake`
|
39
|
+
* `gem install rspec`
|
40
|
+
* `gem install rcov`
|
41
|
+
* `gem install echoe`
|
data/Rakefile
ADDED
@@ -0,0 +1,98 @@
|
|
1
|
+
($:.unshift File.expand_path(File.join( File.dirname(__FILE__), 'lib' ))).uniq!
|
2
|
+
require 'stringray'
|
3
|
+
require 'merb-extlib/string' # String#/, because I'm a lazy fuck.
|
4
|
+
require 'rake'
|
5
|
+
require 'rake/rdoctask'
|
6
|
+
require 'spec/rake/spectask'
|
7
|
+
require 'spec/rake/verify_rcov'
|
8
|
+
require 'spec/rake/verify_ratio'
|
9
|
+
|
10
|
+
begin
|
11
|
+
require 'echoe'
|
12
|
+
|
13
|
+
namespace :echoe do
|
14
|
+
Echoe.new('StringRay', StringRay::VERSION) do |g|
|
15
|
+
g.name = 'stringray'
|
16
|
+
g.author = ['elliottcable']
|
17
|
+
g.email = ['StringRay@elliottcable.com']
|
18
|
+
g.summary = 'Combining many of the benefits of Arrays and Strings, StringRay allows you to treat a String as an Array of words in many cases.'
|
19
|
+
g.url = 'http://github.com/elliottcable/stringray'
|
20
|
+
g.dependencies = []
|
21
|
+
g.manifest_name = '.manifest'
|
22
|
+
g.ignore_pattern = ['.git', 'meta', 'stringray.gemspec']
|
23
|
+
end
|
24
|
+
|
25
|
+
desc 'tests packaged files to ensure they are all present'
|
26
|
+
task :verify => :package do
|
27
|
+
# An error message will be displayed if files are missing
|
28
|
+
if system %(ruby -e "require 'rubygems'; require 'merb-core'; require 'pkg/merb_strokedb-#{Merb::Orms::StrokeDB::VERSION}/lib/merb_strokedb'")
|
29
|
+
puts "\nThe library files are present"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
task :copy_gemspec => [:package] do
|
34
|
+
pkg = Dir['pkg/*'].select {|dir| File.directory? dir}.last
|
35
|
+
mv File.join(pkg, pkg.gsub(/^pkg\//,'').gsub(/\-\d+$/,'.gemspec')), './'
|
36
|
+
end
|
37
|
+
|
38
|
+
desc 'builds a gemspec as GitHub wants it'
|
39
|
+
task :gemspec => [:package, :copy_gemspec, :clobber_package]
|
40
|
+
|
41
|
+
# desc 'Run specs, clean tree, update manifest, run coverage, and install gem!'
|
42
|
+
desc 'Clean tree, update manifest, and install gem!'
|
43
|
+
task :magic => [:clean, :manifest, :install]
|
44
|
+
end
|
45
|
+
|
46
|
+
task :manifest => [:'echoe:manifest']
|
47
|
+
|
48
|
+
rescue LoadError => boom
|
49
|
+
puts "You are missing a dependency required for meta-operations on this gem."
|
50
|
+
puts "#{boom.to_s.capitalize}."
|
51
|
+
ensure
|
52
|
+
task :default # No effect # Invisible
|
53
|
+
|
54
|
+
# Runs specs, generates rcov, and opens rcov in your browser.
|
55
|
+
namespace :rcov do
|
56
|
+
Spec::Rake::SpecTask.new(:run) do |t|
|
57
|
+
t.spec_opts = ["--format", "specdoc", "--colour"]
|
58
|
+
t.spec_files = Dir['spec/**/*_spec.rb'].sort
|
59
|
+
t.libs = ['lib']
|
60
|
+
t.rcov = true
|
61
|
+
t.rcov_dir = 'meta' / 'coverage'
|
62
|
+
end
|
63
|
+
|
64
|
+
Spec::Rake::SpecTask.new(:plain) do |t|
|
65
|
+
t.spec_opts = ["--format", "specdoc"]
|
66
|
+
t.spec_files = Dir['spec/**/*_spec.rb'].sort
|
67
|
+
t.libs = ['lib']
|
68
|
+
t.rcov = true
|
69
|
+
t.rcov_opts = ['--exclude-only', '".*"', '--include-file', '^lib']
|
70
|
+
t.rcov_dir = 'meta' / 'coverage'
|
71
|
+
end
|
72
|
+
|
73
|
+
RCov::VerifyTask.new(:verify) do |t|
|
74
|
+
t.threshold = 100
|
75
|
+
t.index_html = 'meta' / 'coverage' / 'index.html'
|
76
|
+
end
|
77
|
+
|
78
|
+
Spec::Rake::VerifySpecRatioTask.new(:ratio) do |t|
|
79
|
+
t.ratio = 1.00
|
80
|
+
end
|
81
|
+
|
82
|
+
task :open do
|
83
|
+
system 'open ' + 'meta' / 'coverage' / 'index.html' if PLATFORM['darwin']
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
namespace :git do
|
88
|
+
task :status do
|
89
|
+
`git status`
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
desc 'Check everything over before commiting'
|
94
|
+
task :aok => [:'echoe:manifest', :'rcov:run', :'rcov:verify', :'rcov:ratio', :'rcov:open', :'git:status']
|
95
|
+
|
96
|
+
# desc 'Task run during continuous integration' # Invisible
|
97
|
+
task :cruise => [:'rcov:plain', :'rcov:verify', :'rcov:ratio']
|
98
|
+
end
|
data/StringRay.gemspec
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+
|
2
|
+
# Gem::Specification for Stringray-1
|
3
|
+
# Originally generated by Echoe
|
4
|
+
|
5
|
+
--- !ruby/object:Gem::Specification
|
6
|
+
name: stringray
|
7
|
+
version: !ruby/object:Gem::Version
|
8
|
+
version: "1"
|
9
|
+
platform: ruby
|
10
|
+
authors:
|
11
|
+
- elliottcable
|
12
|
+
autorequire:
|
13
|
+
bindir: bin
|
14
|
+
|
15
|
+
date: 2008-08-11 00:00:00 -08:00
|
16
|
+
default_executable:
|
17
|
+
dependencies:
|
18
|
+
- !ruby/object:Gem::Dependency
|
19
|
+
name: echoe
|
20
|
+
type: :development
|
21
|
+
version_requirement:
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: "0"
|
27
|
+
version:
|
28
|
+
description: Combining many of the benefits of Arrays and Strings, StringRay allows you to treat a String as an Array of words in many cases.
|
29
|
+
email:
|
30
|
+
- StringRay@elliottcable.com
|
31
|
+
executables: []
|
32
|
+
|
33
|
+
extensions: []
|
34
|
+
|
35
|
+
extra_rdoc_files:
|
36
|
+
- lib/spec/rake/verify_ratio.rb
|
37
|
+
- lib/stringray.rb
|
38
|
+
- README.mkdn
|
39
|
+
files:
|
40
|
+
- lib/spec/rake/verify_ratio.rb
|
41
|
+
- lib/stringray.rb
|
42
|
+
- Rakefile
|
43
|
+
- README.mkdn
|
44
|
+
- spec/stringray_spec.rb
|
45
|
+
- .manifest
|
46
|
+
- StringRay.gemspec
|
47
|
+
has_rdoc: true
|
48
|
+
homepage: http://github.com/elliottcable/stringray
|
49
|
+
post_install_message:
|
50
|
+
rdoc_options:
|
51
|
+
- --line-numbers
|
52
|
+
- --inline-source
|
53
|
+
- --title
|
54
|
+
- StringRay
|
55
|
+
- --main
|
56
|
+
- README.mkdn
|
57
|
+
require_paths:
|
58
|
+
- lib
|
59
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: "0"
|
64
|
+
version:
|
65
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - "="
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: "1.2"
|
70
|
+
version:
|
71
|
+
requirements: []
|
72
|
+
|
73
|
+
rubyforge_project: stringray
|
74
|
+
rubygems_version: 1.2.0
|
75
|
+
specification_version: 2
|
76
|
+
summary: Combining many of the benefits of Arrays and Strings, StringRay allows you to treat a String as an Array of words in many cases.
|
77
|
+
test_files: []
|
@@ -0,0 +1,78 @@
|
|
1
|
+
module Spec
|
2
|
+
module Rake
|
3
|
+
|
4
|
+
# A task that can verify that the ratio of (lines of spec)
|
5
|
+
# over (lines of code) doesn't drop below a certain threshold.
|
6
|
+
# It should be run after running Spec::Rake::SpecTask.
|
7
|
+
class VerifySpecRatioTask < ::Rake::TaskLib
|
8
|
+
# Name of the task. Defaults to :verify_spec_ratio
|
9
|
+
attr_accessor :name
|
10
|
+
|
11
|
+
# Glob pattern to match code files. (default is '**/*.rb')
|
12
|
+
# Automatically excludes everything matching +spec_pattern+
|
13
|
+
attr_accessor :pattern
|
14
|
+
|
15
|
+
# Glob pattern to match spec files. (default is 'spec/**/*_spec.rb')
|
16
|
+
attr_accessor :spec_pattern
|
17
|
+
|
18
|
+
# Whether or not to output details. Defaults to true.
|
19
|
+
attr_accessor :verbose
|
20
|
+
|
21
|
+
# The threshold value (in decimal value) for ratio. If the
|
22
|
+
# actual ratio is not above this value, the task will raise an
|
23
|
+
# exception. The ratio is devised as LoS/LoC, so values above 1
|
24
|
+
# mean expressive specs, while values below one mean weak specs.
|
25
|
+
attr_accessor :ratio
|
26
|
+
|
27
|
+
def initialize(name=:verify_spec_ratio)
|
28
|
+
@name = name
|
29
|
+
@pattern = '**/*.rb'
|
30
|
+
@spec_pattern = 'spec/**/*_spec.rb'
|
31
|
+
@verbose = true
|
32
|
+
yield self if block_given?
|
33
|
+
raise "Ratio must be set" if @ratio.nil?
|
34
|
+
define_task
|
35
|
+
end
|
36
|
+
|
37
|
+
def define_task
|
38
|
+
desc "Verify that spec-ratio is at least #{@ratio}%"
|
39
|
+
task @name do
|
40
|
+
loc = 0
|
41
|
+
los = 0
|
42
|
+
|
43
|
+
code_files = Dir[@pattern]
|
44
|
+
spec_files = Dir[@spec_pattern]
|
45
|
+
|
46
|
+
code_files.each do |code_file|
|
47
|
+
next if spec_files.include? code_file
|
48
|
+
code = File.open(code_file)
|
49
|
+
|
50
|
+
code.each_line do |line|
|
51
|
+
line.gsub! /#(.*)/, '' # Get rid of all comments
|
52
|
+
line.gsub! /\s/, '' # Get rid of all whitespace
|
53
|
+
loc += 1 unless line.empty?
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
spec_files.each do |spec_file|
|
58
|
+
spec = File.open(spec_file)
|
59
|
+
|
60
|
+
spec.each_line do |line|
|
61
|
+
line.gsub! /#(.*)/, '' # Get rid of all comments
|
62
|
+
line.gsub! /\s/, '' # Get rid of all whitespace
|
63
|
+
los += 1 unless line.empty?
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
ratio = (los.to_f / loc.to_f)
|
68
|
+
|
69
|
+
puts "Spec-ratio: #{los}/#{loc} (#{ratio.to_s[0..3]}, expected >=: #{@ratio})" if @verbose
|
70
|
+
raise "Spec-ratio must be above #{@ratio} but was #{ratio.to_s[0..3]}" if ratio < @ratio
|
71
|
+
raise "Your spec-ratio file pattern matched no files" if loc == 0
|
72
|
+
raise "Your spec-ratio specfile pattern matched no files" if los == 0
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
78
|
+
end
|
data/lib/stringray.rb
ADDED
@@ -0,0 +1,128 @@
|
|
1
|
+
module StringRay
|
2
|
+
VERSION = 1
|
3
|
+
|
4
|
+
# Splits a string into words. Not using the obvious names (+#split+, +#words+)
|
5
|
+
# because I want compatibility for inclusion into +String+.
|
6
|
+
def enumerate
|
7
|
+
ray = []
|
8
|
+
|
9
|
+
self.each_byte do |byte|
|
10
|
+
char = byte.chr
|
11
|
+
|
12
|
+
if Delimiter::Characters.include? char
|
13
|
+
ray << Delimiter.new(char)
|
14
|
+
|
15
|
+
elsif Whitespace::Characters.include? char
|
16
|
+
if ray.last.is_a? Whitespace
|
17
|
+
ray.last << char
|
18
|
+
else
|
19
|
+
ray << Whitespace.new(char)
|
20
|
+
end
|
21
|
+
|
22
|
+
else
|
23
|
+
if ray.last.is_a? Word
|
24
|
+
ray.last << char
|
25
|
+
else
|
26
|
+
ray << Word.new(char)
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
ray
|
33
|
+
end
|
34
|
+
|
35
|
+
# More sensible than +String#each+, this uses +#enumerate+ to enumerate on
|
36
|
+
# words. Accepts options as a hash, determining whether :whitespace and
|
37
|
+
# :delemiters will :attach_before, :standalone, or :attach_after. Default is
|
38
|
+
# for both to :attach_before.
|
39
|
+
def each_word opts = {}, &block
|
40
|
+
{:whitespace => :attach_before, :delemiters => :attach_before}.merge! opts
|
41
|
+
|
42
|
+
# First, we create a two-dimensional array of words with any whitespace or
|
43
|
+
# delemiters that should attach to them.
|
44
|
+
words = self.enumerate
|
45
|
+
mapped = []
|
46
|
+
attach_before_next = []
|
47
|
+
|
48
|
+
words.each do |item|
|
49
|
+
case item
|
50
|
+
when Delimiter
|
51
|
+
case opts[:delemiters]
|
52
|
+
when :standalone
|
53
|
+
mapped << [item]
|
54
|
+
when :attach_after
|
55
|
+
attach_before_next << item
|
56
|
+
else
|
57
|
+
if attach_before_next.empty?
|
58
|
+
mapped.last << item
|
59
|
+
else
|
60
|
+
attach_before_next << item
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
when Whitespace
|
65
|
+
case opts[:whitespace]
|
66
|
+
when :standalone
|
67
|
+
mapped << [item]
|
68
|
+
when :attach_after
|
69
|
+
attach_before_next << item
|
70
|
+
else
|
71
|
+
if attach_before_next.empty?
|
72
|
+
mapped.last << item
|
73
|
+
else
|
74
|
+
attach_before_next << item
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
when Word
|
79
|
+
if not attach_before_next.empty?
|
80
|
+
mapped << [attach_before_next, item].flatten
|
81
|
+
attach_before_next = []
|
82
|
+
else
|
83
|
+
mapped << [item]
|
84
|
+
end
|
85
|
+
|
86
|
+
end
|
87
|
+
end
|
88
|
+
(mapped.last << attach_before_next).flatten! if not attach_before_next.empty?
|
89
|
+
|
90
|
+
# Next, we yield each group of (word plus delimiters and whitespace) as a
|
91
|
+
# normal string to the block
|
92
|
+
mapped.each do |arr|
|
93
|
+
yield arr.map{|w|w.to_s}.join
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
class Word < String
|
98
|
+
def inspect
|
99
|
+
"(#{self})"
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
class Whitespace < String
|
104
|
+
Characters = [" ", "\t", "\n"]
|
105
|
+
def inspect
|
106
|
+
"#{self}"
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
class Delimiter < String
|
111
|
+
Characters = ['-', ',', '.', '?', '!']
|
112
|
+
|
113
|
+
def inspect
|
114
|
+
"<#{self}>"
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
# This overrides +String#each+ with +StringRay#each_word+, thus allowing us
|
119
|
+
# to include +Enumerable+.
|
120
|
+
def self.included klass
|
121
|
+
klass.class_eval do
|
122
|
+
alias_method :each_at, :each
|
123
|
+
alias_method :each, :each_word
|
124
|
+
|
125
|
+
include Enumerable
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
require 'stringray'
|
2
|
+
|
3
|
+
describe 'a String including StringRay' do
|
4
|
+
before :all do
|
5
|
+
String.send :include, StringRay
|
6
|
+
end
|
7
|
+
|
8
|
+
describe '#enumerate' do
|
9
|
+
it 'should split a string into an array' do
|
10
|
+
string = 'The time has come to talk of many things - of sailing ' +
|
11
|
+
'ships and sealing wax, of cabbages and kings!'
|
12
|
+
array = []
|
13
|
+
string.each {|i| array << i }
|
14
|
+
array.should == ['The ','time ','has ','come ','to ','talk ','of ',
|
15
|
+
'many ','things - ','of ','sailing ','ships ','and ','sealing ',
|
16
|
+
'wax, ','of ','cabbages ','and ','kings!']
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe '#each_word' do
|
21
|
+
it 'should be able to attach delimeters to the beginning of the next word' do
|
22
|
+
string = 'The time has come to talk of many things - of sailing ' +
|
23
|
+
'ships and sealing wax, of cabbages and kings!'
|
24
|
+
array = []
|
25
|
+
string.each(:delemiters => :attach_after) {|i| array << i }
|
26
|
+
array.should == ['The ','time ','has ','come ','to ','talk ','of ',
|
27
|
+
'many ','things ','- of ','sailing ','ships ','and ','sealing ',
|
28
|
+
'wax',', of ','cabbages ','and ','kings!']
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'should be able to let delimeters stand alone' do
|
32
|
+
string = 'The time has come to talk of many things - of sailing ' +
|
33
|
+
'ships and sealing wax, of cabbages and kings!'
|
34
|
+
array = []
|
35
|
+
string.each(:delemiters => :standalone) {|i| array << i }
|
36
|
+
array.should == ['The ','time ','has ','come ','to ','talk ','of ',
|
37
|
+
'many ','things ','- ', 'of ','sailing ','ships ','and ','sealing ',
|
38
|
+
'wax',', ','of ','cabbages ','and ','kings','!']
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'should be able to attach whitespace to the beginning of the next word' do
|
42
|
+
string = 'The time has come to talk of many things - of sailing ' +
|
43
|
+
'ships and sealing wax, of cabbages and kings!'
|
44
|
+
array = []
|
45
|
+
string.each(:whitespace => :attach_after) {|i| array << i }
|
46
|
+
array.should == ['The',' time',' has',' come',' to',' talk',' of',
|
47
|
+
' many',' things',' - of',' sailing',' ships',' and',' sealing',
|
48
|
+
' wax,',' of',' cabbages',' and',' kings!']
|
49
|
+
end
|
50
|
+
|
51
|
+
it 'should be able to let whitespace stand alone' do
|
52
|
+
string = 'The time has come to talk of many things - of sailing ' +
|
53
|
+
'ships and sealing wax, of cabbages and kings!'
|
54
|
+
array = []
|
55
|
+
string.each(:whitespace => :standalone) {|i| array << i }
|
56
|
+
array.should == ['The',' ','time',' ','has',' ','come',' ','to',' ','talk',' ','of',
|
57
|
+
' ','many',' ','things',' -',' ','of',' ','sailing',' ','ships',' ','and',' ','sealing',
|
58
|
+
' ','wax,',' ','of',' ','cabbages',' ','and',' ','kings!']
|
59
|
+
end
|
60
|
+
|
61
|
+
it 'should be able to not split a delimated word' do
|
62
|
+
pending "Figure out a way to allow delemiters to _not_ split words " +
|
63
|
+
"- i.e. 'K-I-S-S-I-N-G' should be passed as a single word."
|
64
|
+
|
65
|
+
string = "String and Array, sitting in a tree - K-I-S-S-I-N-G!"
|
66
|
+
array = string.map
|
67
|
+
array.should == ['String ','and ','Array, ','sitting ','in ','a ','tree - ','K-','I-','S-','S-','I-','N-','G!']
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
# TODO: Figure out a better way to say 'should be_include(Enumerable)'
|
72
|
+
it 'should also include enumerable' do
|
73
|
+
String.ancestors.should be_include(Enumerable)
|
74
|
+
end
|
75
|
+
end
|
metadata
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: stringray
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: "1"
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- elliottcable
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2008-08-11 00:00:00 -08:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: echoe
|
17
|
+
type: :development
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "0"
|
24
|
+
version:
|
25
|
+
description: Combining many of the benefits of Arrays and Strings, StringRay allows you to treat a String as an Array of words in many cases.
|
26
|
+
email:
|
27
|
+
- StringRay@elliottcable.com
|
28
|
+
executables: []
|
29
|
+
|
30
|
+
extensions: []
|
31
|
+
|
32
|
+
extra_rdoc_files:
|
33
|
+
- lib/spec/rake/verify_ratio.rb
|
34
|
+
- lib/stringray.rb
|
35
|
+
- README.mkdn
|
36
|
+
files:
|
37
|
+
- lib/spec/rake/verify_ratio.rb
|
38
|
+
- lib/stringray.rb
|
39
|
+
- Rakefile
|
40
|
+
- README.mkdn
|
41
|
+
- spec/stringray_spec.rb
|
42
|
+
- .manifest
|
43
|
+
- StringRay.gemspec
|
44
|
+
has_rdoc: true
|
45
|
+
homepage: http://github.com/elliottcable/stringray
|
46
|
+
post_install_message:
|
47
|
+
rdoc_options:
|
48
|
+
- --line-numbers
|
49
|
+
- --inline-source
|
50
|
+
- --title
|
51
|
+
- StringRay
|
52
|
+
- --main
|
53
|
+
- README.mkdn
|
54
|
+
require_paths:
|
55
|
+
- lib
|
56
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: "0"
|
61
|
+
version:
|
62
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
63
|
+
requirements:
|
64
|
+
- - "="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: "1.2"
|
67
|
+
version:
|
68
|
+
requirements: []
|
69
|
+
|
70
|
+
rubyforge_project: stringray
|
71
|
+
rubygems_version: 1.2.0
|
72
|
+
signing_key:
|
73
|
+
specification_version: 2
|
74
|
+
summary: Combining many of the benefits of Arrays and Strings, StringRay allows you to treat a String as an Array of words in many cases.
|
75
|
+
test_files: []
|
76
|
+
|