visionmedia-rext 0.0.8 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.rdoc +5 -0
- data/README.rdoc +1 -1
- data/lib/rext/module/helpers.rb +42 -0
- data/lib/rext/object.rb +1 -1
- data/lib/rext/object/helpers.rb +1 -1
- data/lib/rext/string/helpers.rb +29 -0
- data/lib/rext/version.rb +1 -1
- data/rext.gemspec +4 -4
- data/spec/module_spec.rb +12 -26
- data/spec/string_spec.rb +20 -0
- metadata +3 -3
data/History.rdoc
CHANGED
data/README.rdoc
CHANGED
@@ -100,7 +100,7 @@ well as forward compatibility for features such as BasicObject.
|
|
100
100
|
== Contrib
|
101
101
|
|
102
102
|
Feel free to fork Rext on github, or submit a ticket:
|
103
|
-
http://
|
103
|
+
http://github.com/visionmedia/rext/issues
|
104
104
|
|
105
105
|
== License
|
106
106
|
|
data/lib/rext/module/helpers.rb
CHANGED
@@ -8,4 +8,46 @@ class Module
|
|
8
8
|
include Module.new(&block)
|
9
9
|
end
|
10
10
|
|
11
|
+
##
|
12
|
+
# Call +method+ when conditions are met.
|
13
|
+
#
|
14
|
+
# This method provides a simple means of
|
15
|
+
# utilizing method_missing, and should
|
16
|
+
# be used in most cases.
|
17
|
+
#
|
18
|
+
# When using a regular expression with
|
19
|
+
# the :if option, all captures are passed
|
20
|
+
# to the handling method.
|
21
|
+
#
|
22
|
+
# === Examples
|
23
|
+
#
|
24
|
+
# class Foo
|
25
|
+
# call_method :find_by, :if => /^find_by_(\w+)/
|
26
|
+
# def find_by attr, *args
|
27
|
+
# "finding by #{attr} with #{args.join(', ')}"
|
28
|
+
# end
|
29
|
+
# end
|
30
|
+
#
|
31
|
+
# foo = Foo.new
|
32
|
+
# foo.find_by_name('bar') # => "finding by name with bar"
|
33
|
+
#
|
34
|
+
# === Options
|
35
|
+
#
|
36
|
+
# :if regexp or proc
|
37
|
+
#
|
38
|
+
|
39
|
+
def call_method method, options = {}
|
40
|
+
chain {
|
41
|
+
define_method :method_missing do |meth, *args|
|
42
|
+
if options[:if].is_a?(Regexp) && meth.to_s =~ options[:if]
|
43
|
+
send method, *($~.captures + args)
|
44
|
+
elsif options[:if].respond_to?(:call) && options[:if].call(meth, *args)
|
45
|
+
send method, *args
|
46
|
+
else
|
47
|
+
super
|
48
|
+
end
|
49
|
+
end
|
50
|
+
}
|
51
|
+
end
|
52
|
+
|
11
53
|
end
|
data/lib/rext/object.rb
CHANGED
data/lib/rext/object/helpers.rb
CHANGED
data/lib/rext/string/helpers.rb
CHANGED
@@ -220,6 +220,35 @@ class String
|
|
220
220
|
tr '_', '-'
|
221
221
|
end
|
222
222
|
|
223
|
+
##
|
224
|
+
# Return hash of word frequencies.
|
225
|
+
#
|
226
|
+
# === Examples
|
227
|
+
#
|
228
|
+
# 'foo foo bar'.word_frequency
|
229
|
+
# # => { 'foo' => 2, 'bar' => 1 }
|
230
|
+
#
|
231
|
+
|
232
|
+
def word_frequency
|
233
|
+
split.inject Hash.new(0) do |frequencies, word|
|
234
|
+
frequencies[word] += 1
|
235
|
+
frequencies
|
236
|
+
end
|
237
|
+
end
|
238
|
+
|
239
|
+
##
|
240
|
+
# Return frequency of _word_ or 0.
|
241
|
+
#
|
242
|
+
# === Examples
|
243
|
+
#
|
244
|
+
# 'foo foo bar'.frequency_of_word('foo') # => 2
|
245
|
+
# 'foo foo bar'.frequency_of_word('bar') # => 1
|
246
|
+
#
|
247
|
+
|
248
|
+
def frequency_of_word word
|
249
|
+
word_frequency[word]
|
250
|
+
end
|
251
|
+
|
223
252
|
##
|
224
253
|
# Returns the switch equivilant of this string.
|
225
254
|
#
|
data/lib/rext/version.rb
CHANGED
data/rext.gemspec
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{rext}
|
5
|
-
s.version = "0.0
|
5
|
+
s.version = "0.1.0"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["TJ Holowaychuk"]
|
9
|
-
s.date = %q{2009-04
|
9
|
+
s.date = %q{2009-05-04}
|
10
10
|
s.description = %q{Ruby extensions}
|
11
11
|
s.email = %q{tj@vision-media.ca}
|
12
12
|
s.extra_rdoc_files = ["lib/rext/all.rb", "lib/rext/array/helpers.rb", "lib/rext/array.rb", "lib/rext/compat/basic_object.rb", "lib/rext/compat.rb", "lib/rext/date/helpers.rb", "lib/rext/date.rb", "lib/rext/enumerable/helpers.rb", "lib/rext/enumerable.rb", "lib/rext/hash/helpers.rb", "lib/rext/hash.rb", "lib/rext/integer/helpers.rb", "lib/rext/integer.rb", "lib/rext/module/helpers.rb", "lib/rext/module.rb", "lib/rext/numeric/bytes.rb", "lib/rext/numeric/time.rb", "lib/rext/numeric.rb", "lib/rext/object/helpers.rb", "lib/rext/object/metaclass.rb", "lib/rext/object.rb", "lib/rext/proc/helpers.rb", "lib/rext/proc.rb", "lib/rext/string/escape.rb", "lib/rext/string/helpers.rb", "lib/rext/string.rb", "lib/rext/time/helpers.rb", "lib/rext/time.rb", "lib/rext/version.rb", "lib/rext.rb", "README.rdoc", "tasks/benchmark.rake", "tasks/docs.rake", "tasks/gemspec.rake", "tasks/spec.rake"]
|
@@ -16,12 +16,12 @@ Gem::Specification.new do |s|
|
|
16
16
|
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Rext", "--main", "README.rdoc"]
|
17
17
|
s.require_paths = ["lib"]
|
18
18
|
s.rubyforge_project = %q{rext}
|
19
|
-
s.rubygems_version = %q{1.3.
|
19
|
+
s.rubygems_version = %q{1.3.2}
|
20
20
|
s.summary = %q{Ruby extensions}
|
21
21
|
|
22
22
|
if s.respond_to? :specification_version then
|
23
23
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
24
|
-
s.specification_version =
|
24
|
+
s.specification_version = 3
|
25
25
|
|
26
26
|
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
27
27
|
else
|
data/spec/module_spec.rb
CHANGED
@@ -3,33 +3,19 @@ require 'rext/module'
|
|
3
3
|
|
4
4
|
describe Module do
|
5
5
|
describe "helpers" do
|
6
|
-
describe "#
|
7
|
-
it "should
|
8
|
-
class
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
super
|
14
|
-
end
|
15
|
-
end
|
6
|
+
describe "#proxy_method" do
|
7
|
+
it "should implement method_missing, passing regexp captures and arguments to the handler method" do
|
8
|
+
class FooBar
|
9
|
+
call_method :find, :if => /^find_by_(\w+)_(\w+)/
|
10
|
+
call_method :delete, :if => lambda { |meth, *args| meth.to_s =~ /^delete_by_(\w+)_(\w+)/ }
|
11
|
+
def find *args; args end
|
12
|
+
def delete *args; args; end
|
16
13
|
end
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
"asked for #{$1}"
|
23
|
-
else
|
24
|
-
super
|
25
|
-
end
|
26
|
-
end
|
27
|
-
}
|
28
|
-
end
|
29
|
-
|
30
|
-
Foo.new.ask_for_array.should == 'asked for array'
|
31
|
-
Foo.new.say_hello.should == 'said hello'
|
32
|
-
lambda { Foo.new.does_not_exist }.should raise_error(NoMethodError)
|
14
|
+
foo = FooBar.new
|
15
|
+
foo.find_by_user_email.should == ['user', 'email']
|
16
|
+
foo.find_by_user_name('foo').should == ['user', 'name', 'foo']
|
17
|
+
foo.delete_by_user_name('foo', 'bar').should == ['foo', 'bar']
|
18
|
+
lambda { foo.does_not_exist }.should raise_error(NoMethodError)
|
33
19
|
end
|
34
20
|
end
|
35
21
|
end
|
data/spec/string_spec.rb
CHANGED
@@ -4,6 +4,26 @@ require 'rext/string'
|
|
4
4
|
describe String do
|
5
5
|
describe "helpers" do
|
6
6
|
|
7
|
+
describe "#word_frequency" do
|
8
|
+
it "should return a hash with word keys and count values" do
|
9
|
+
'mm i love cookies mm'.word_frequency.
|
10
|
+
should == {
|
11
|
+
'mm' => 2,
|
12
|
+
'i' => 1,
|
13
|
+
'love' => 1,
|
14
|
+
'cookies' => 1,
|
15
|
+
}
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "#frequency_of_word" do
|
20
|
+
it "should return the frequency of a word, or 0" do
|
21
|
+
'yum yum ? yes'.frequency_of_word('yum').should == 2
|
22
|
+
'yum yum ? yes'.frequency_of_word('yes').should == 1
|
23
|
+
'yum yum ? yes'.frequency_of_word('no').should == 0
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
7
27
|
describe "#switchify" do
|
8
28
|
it "should return a switch version of the string" do
|
9
29
|
'some_foo_bar'.switchify.should == '--some-foo-bar'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: visionmedia-rext
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- TJ Holowaychuk
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-04
|
12
|
+
date: 2009-05-04 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -138,7 +138,7 @@ requirements: []
|
|
138
138
|
rubyforge_project: rext
|
139
139
|
rubygems_version: 1.2.0
|
140
140
|
signing_key:
|
141
|
-
specification_version:
|
141
|
+
specification_version: 3
|
142
142
|
summary: Ruby extensions
|
143
143
|
test_files: []
|
144
144
|
|