mack_ruby_core_extensions 0.0.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/README +3 -0
- data/doc/classes/Array.html +465 -0
- data/doc/classes/Class.html +181 -0
- data/doc/classes/Dir.html +190 -0
- data/doc/classes/Float.html +148 -0
- data/doc/classes/Hash.html +232 -0
- data/doc/classes/Kernel.html +182 -0
- data/doc/classes/Mack.html +111 -0
- data/doc/classes/Mack/Utils.html +111 -0
- data/doc/classes/Mack/Utils/Inflector.html +422 -0
- data/doc/classes/Math.html +188 -0
- data/doc/classes/MethodNotImplemented.html +155 -0
- data/doc/classes/Module.html +203 -0
- data/doc/classes/NilClass.html +151 -0
- data/doc/classes/Object.html +315 -0
- data/doc/classes/String.html +890 -0
- data/doc/classes/Symbol.html +148 -0
- data/doc/created.rid +1 -0
- data/doc/files/README.html +111 -0
- data/doc/files/lib/extensions/array_rb.html +101 -0
- data/doc/files/lib/extensions/class_rb.html +101 -0
- data/doc/files/lib/extensions/dir_rb.html +101 -0
- data/doc/files/lib/extensions/float_rb.html +101 -0
- data/doc/files/lib/extensions/hash_rb.html +101 -0
- data/doc/files/lib/extensions/kernel_rb.html +109 -0
- data/doc/files/lib/extensions/logger_rb.html +101 -0
- data/doc/files/lib/extensions/math_rb.html +101 -0
- data/doc/files/lib/extensions/method_not_implemented_rb.html +108 -0
- data/doc/files/lib/extensions/module_rb.html +101 -0
- data/doc/files/lib/extensions/nil_rb.html +101 -0
- data/doc/files/lib/extensions/object_rb.html +101 -0
- data/doc/files/lib/extensions/string_rb.html +108 -0
- data/doc/files/lib/extensions/symbol_rb.html +101 -0
- data/doc/files/lib/mack_ruby_core_extensions_rb.html +101 -0
- data/doc/files/lib/utils/inflections_rb.html +101 -0
- data/doc/files/lib/utils/inflector_rb.html +108 -0
- data/doc/fr_class_index.html +42 -0
- data/doc/fr_file_index.html +44 -0
- data/doc/fr_method_index.html +92 -0
- data/doc/index.html +24 -0
- data/doc/rdoc-style.css +208 -0
- data/lib/extensions/array.rb +101 -0
- data/lib/extensions/class.rb +19 -0
- data/lib/extensions/dir.rb +25 -0
- data/lib/extensions/float.rb +5 -0
- data/lib/extensions/hash.rb +47 -0
- data/lib/extensions/kernel.rb +30 -0
- data/lib/extensions/logger.rb +0 -0
- data/lib/extensions/math.rb +15 -0
- data/lib/extensions/method_not_implemented.rb +12 -0
- data/lib/extensions/module.rb +29 -0
- data/lib/extensions/nil.rb +8 -0
- data/lib/extensions/object.rb +103 -0
- data/lib/extensions/string.rb +261 -0
- data/lib/extensions/symbol.rb +7 -0
- data/lib/mack_ruby_core_extensions.rb +7 -0
- data/lib/utils/inflections.rb +62 -0
- data/lib/utils/inflector.rb +129 -0
- data/test/extensions/array_test.rb +15 -0
- data/test/extensions/class_test.rb +28 -0
- data/test/extensions/dir_test.rb +15 -0
- data/test/extensions/float_test.rb +15 -0
- data/test/extensions/hash_test.rb +34 -0
- data/test/extensions/kernel_test.rb +15 -0
- data/test/extensions/logger_test.rb +15 -0
- data/test/extensions/math_test.rb +15 -0
- data/test/extensions/method_not_implemented_test.rb +15 -0
- data/test/extensions/module_test.rb +57 -0
- data/test/extensions/nil_test.rb +15 -0
- data/test/extensions/object_test.rb +15 -0
- data/test/extensions/string_test.rb +104 -0
- data/test/extensions/symbol_test.rb +15 -0
- data/test/test_helper.rb +6 -0
- data/test/utils/inflection_test.rb +32 -0
- metadata +133 -0
@@ -0,0 +1,62 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "inflector")
|
2
|
+
# Default inflections. This is taken from Jeremy McAnally's great Rails plugin, acts_as_good_speeler. Thanks Jeremy! http://www.jeremymcanally.com/
|
3
|
+
Mack::Utils::Inflector.inflections do |inflect|
|
4
|
+
inflect.plural(/$/, 's')
|
5
|
+
inflect.plural(/s$/i, 's')
|
6
|
+
inflect.plural(/(bu)s$/i, '\1ses')
|
7
|
+
inflect.plural(/(stimul|hippopotam|octop|vir|syllab|foc|alumn|fung|radi)us$/i, '\1i')
|
8
|
+
inflect.plural(/(ax|test)is$/i, '\1es')
|
9
|
+
inflect.plural(/(alias|status)$/i, '\1es')
|
10
|
+
inflect.plural(/(buffal|tomat|torped)o$/i, '\1oes')
|
11
|
+
inflect.plural(/([dti])um$/i, '\1a')
|
12
|
+
inflect.plural(/sis$/i, 'ses')
|
13
|
+
inflect.plural(/(?:([^f])fe|([lr])f)$/i, '\1\2ves')
|
14
|
+
inflect.plural(/(hive)$/i, '\1s')
|
15
|
+
inflect.plural(/([^aeiouy]|qu)y$/i, '\1ies')
|
16
|
+
inflect.plural(/(x|ch|ss|sh)$/i, '\1es')
|
17
|
+
inflect.plural(/(matr|append|vert|ind)ix|ex$/i, '\1ices')
|
18
|
+
inflect.plural(/([m|l])ouse$/i, '\1ice')
|
19
|
+
inflect.plural(/^(ox)$/i, '\1en')
|
20
|
+
inflect.plural(/(quiz)$/i, '\1zes')
|
21
|
+
inflect.plural(/(phenomen|criteri)on$/i, '\1a')
|
22
|
+
inflect.plural(/^(?!(.*hu|.*ger|.*sha))(.*)(wom|m)an$/i, '\2\3en')
|
23
|
+
inflect.plural(/(curricul|bacteri|medi)um$/i, '\1a')
|
24
|
+
inflect.plural(/(nebul|formul|vit|vertebr|alg|alumn)a$/i, '\1ae')
|
25
|
+
|
26
|
+
inflect.singular(/s$/i, '')
|
27
|
+
inflect.singular(/(n)ews$/i, '\1ews')
|
28
|
+
inflect.singular(/([dti])a$/i, '\1um')
|
29
|
+
inflect.singular(/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$/i, '\1\2sis')
|
30
|
+
inflect.singular(/(^analy|cri|empha)ses$/i, '\1sis')
|
31
|
+
inflect.singular(/([^f])ves$/i, '\1fe')
|
32
|
+
inflect.singular(/(hive)s$/i, '\1')
|
33
|
+
inflect.singular(/(tive)s$/i, '\1')
|
34
|
+
inflect.singular(/(bus)es$/i, '\1')
|
35
|
+
inflect.singular(/(o)es$/i, '\1')
|
36
|
+
inflect.singular(/(shoe)s$/i, '\1')
|
37
|
+
inflect.singular(/(test|ax)es$/i, '\1is')
|
38
|
+
inflect.singular(/(stimul|hippopotam|octop|vir|syllab|foc|alumn|fung|radi)i$/i, '\1us')
|
39
|
+
inflect.singular(/(alias|status)es$/i, '\1')
|
40
|
+
inflect.singular(/^(ox)en$/i, '\1')
|
41
|
+
inflect.singular(/(vert|ind)ices$/i, '\1ex')
|
42
|
+
inflect.singular(/(matr|append)ices$/i, '\1ix')
|
43
|
+
inflect.singular(/(quiz)zes$/i, '\1')
|
44
|
+
inflect.singular(/(phenomen|criteri)a$/i, '\1on')
|
45
|
+
inflect.singular(/(.*)(wo|m)en$/i, '\1\2an')
|
46
|
+
inflect.singular(/(medi|curricul|bacteri)a$/i, '\1um')
|
47
|
+
inflect.singular(/(nebula|formula|vita|vertebra|alga|alumna)e$/i, '\1')
|
48
|
+
inflect.singular(/^(.*)ookies$/, '\1ookie')
|
49
|
+
inflect.singular(/(.*)ss$/, '\1ss')
|
50
|
+
inflect.singular(/(.*)ies$/, '\1y')
|
51
|
+
|
52
|
+
inflect.irregular('person', 'people')
|
53
|
+
inflect.irregular('child', 'children')
|
54
|
+
inflect.irregular('sex', 'sexes')
|
55
|
+
inflect.irregular('move', 'moves')
|
56
|
+
inflect.irregular('tooth', 'teeth')
|
57
|
+
inflect.irregular('die', 'dice')
|
58
|
+
inflect.irregular('talisman', 'talismans')
|
59
|
+
inflect.irregular('penis', 'penises')
|
60
|
+
|
61
|
+
inflect.uncountable(%w(pokemon pokémon equipment information rice money species series fish sheep deer offspring))
|
62
|
+
end
|
@@ -0,0 +1,129 @@
|
|
1
|
+
require 'singleton'
|
2
|
+
module Mack
|
3
|
+
module Utils
|
4
|
+
# This class is used to deal with inflection strings. This means taken a string and make it plural, or singular, etc...
|
5
|
+
# Inflection rules can be added very easy, and are checked from the bottom up. This means that the last rule is the first
|
6
|
+
# rule to be matched. The exception to this, kind of, is 'irregular' and 'uncountable' rules. The 'uncountable' rules are
|
7
|
+
# always checked first, then the 'irregular' rules, and finally either the 'singular' or 'plural' rules, depending on what
|
8
|
+
# you're trying to do. Within each of these sets of rules, the last rule in is the first rule matched.
|
9
|
+
#
|
10
|
+
# Example:
|
11
|
+
# Mack::Utils::Inflector.inflections do |inflect|
|
12
|
+
# inflect.plural(/$/, 's')
|
13
|
+
# inflect.plural(/^(ox)$/i, '\1en')
|
14
|
+
# inflect.plural(/(phenomen|criteri)on$/i, '\1a')
|
15
|
+
#
|
16
|
+
# inflect.singular(/s$/i, '')
|
17
|
+
# inflect.singular(/(n)ews$/i, '\1ews')
|
18
|
+
# inflect.singular(/^(.*)ookies$/, '\1ookie')
|
19
|
+
#
|
20
|
+
# inflect.irregular('person', 'people')
|
21
|
+
# inflect.irregular('child', 'children')
|
22
|
+
#
|
23
|
+
# inflect.uncountable(%w(fish sheep deer offspring))
|
24
|
+
# end
|
25
|
+
class Inflector
|
26
|
+
include Singleton
|
27
|
+
|
28
|
+
def initialize # :nodoc:
|
29
|
+
@plural_rules = []
|
30
|
+
@singular_rules = []
|
31
|
+
@irregular_rules = []
|
32
|
+
@uncountable_rules = []
|
33
|
+
end
|
34
|
+
|
35
|
+
# Adds a plural rule to the system.
|
36
|
+
#
|
37
|
+
# Example:
|
38
|
+
# Mack::Utils::Inflector.inflections do |inflect|
|
39
|
+
# inflect.plural(/$/, 's')
|
40
|
+
# inflect.plural(/^(ox)$/i, '\1en')
|
41
|
+
# inflect.plural(/(phenomen|criteri)on$/i, '\1a')
|
42
|
+
# end
|
43
|
+
def plural(rule, replacement)
|
44
|
+
@plural_rules << {:rule => rule, :replacement => replacement}
|
45
|
+
end
|
46
|
+
|
47
|
+
# Adds a singular rule to the system.
|
48
|
+
#
|
49
|
+
# Example:
|
50
|
+
# Mack::Utils::Inflector.inflections do |inflect|
|
51
|
+
# inflect.singular(/s$/i, '')
|
52
|
+
# inflect.singular(/(n)ews$/i, '\1ews')
|
53
|
+
# inflect.singular(/^(.*)ookies$/, '\1ookie')
|
54
|
+
# end
|
55
|
+
def singular(rule, replacement)
|
56
|
+
@singular_rules << {:rule => rule, :replacement => replacement}
|
57
|
+
end
|
58
|
+
|
59
|
+
# Adds a irregular rule to the system.
|
60
|
+
#
|
61
|
+
# Example:
|
62
|
+
# Mack::Utils::Inflector.inflections do |inflect|
|
63
|
+
# inflect.irregular('person', 'people')
|
64
|
+
# inflect.irregular('child', 'children')
|
65
|
+
# end
|
66
|
+
def irregular(rule, replacement)
|
67
|
+
@irregular_rules << {:rule => rule, :replacement => replacement}
|
68
|
+
# do the reverse so you get:
|
69
|
+
# person => people
|
70
|
+
# people => person
|
71
|
+
@irregular_rules << {:rule => replacement, :replacement => rule}
|
72
|
+
end
|
73
|
+
|
74
|
+
# Adds a uncountable word, or words, to the system.
|
75
|
+
#
|
76
|
+
# Example:
|
77
|
+
# Mack::Utils::Inflector.inflections do |inflect|
|
78
|
+
# inflect.uncountable(%w(fish sheep deer offspring))
|
79
|
+
# end
|
80
|
+
def uncountable(*args)
|
81
|
+
[args].flatten.each do |word|
|
82
|
+
@uncountable_rules << word.downcase
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
# Returns the singular version of the word, if possible.
|
87
|
+
#
|
88
|
+
# Examples:
|
89
|
+
# Mack::Utils::Inflector.instance.singularize("armies") # => "army"
|
90
|
+
# Mack::Utils::Inflector.instance.singularize("people") # => "person"
|
91
|
+
# Mack::Utils::Inflector.instance.singularize("boats") # => "boat"
|
92
|
+
def singularize(word)
|
93
|
+
do_work(word, @singular_rules)
|
94
|
+
end
|
95
|
+
|
96
|
+
# Returns the singular version of the word, if possible.
|
97
|
+
#
|
98
|
+
# Examples:
|
99
|
+
# Mack::Utils::Inflector.instance.pluralize("army") # => "armies"
|
100
|
+
# Mack::Utils::Inflector.instance.pluralize("person") # => "people"
|
101
|
+
# Mack::Utils::Inflector.instance.pluralize("boat") # => "boats"
|
102
|
+
def pluralize(word)
|
103
|
+
do_work(word, @plural_rules)
|
104
|
+
end
|
105
|
+
|
106
|
+
private
|
107
|
+
def do_work(word, specific_rules)
|
108
|
+
return word if @uncountable_rules.include?(word.downcase)
|
109
|
+
w = word.dup
|
110
|
+
[specific_rules, @irregular_rules].flatten.reverse.each do |rule_hash|
|
111
|
+
return w if w.gsub!(rule_hash[:rule], rule_hash[:replacement])
|
112
|
+
end
|
113
|
+
# if all else fails, return the word:
|
114
|
+
return word
|
115
|
+
end
|
116
|
+
|
117
|
+
public
|
118
|
+
class << self
|
119
|
+
|
120
|
+
# Yields up Mack::Utils::Inflector.instance
|
121
|
+
def inflections
|
122
|
+
yield Mack::Utils::Inflector.instance
|
123
|
+
end
|
124
|
+
|
125
|
+
end
|
126
|
+
|
127
|
+
end # Inflection
|
128
|
+
end # Utils
|
129
|
+
end # Mack
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper.rb'
|
2
|
+
|
3
|
+
class Fruit
|
4
|
+
end
|
5
|
+
|
6
|
+
class Citrus < Fruit
|
7
|
+
end
|
8
|
+
|
9
|
+
class Orange < Citrus
|
10
|
+
end
|
11
|
+
|
12
|
+
class ClassTest < Test::Unit::TestCase
|
13
|
+
|
14
|
+
def setup
|
15
|
+
end
|
16
|
+
|
17
|
+
def teardown
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_class_is_a
|
21
|
+
assert !Orange.class_is_a?(Array)
|
22
|
+
assert Orange.class_is_a?(Orange)
|
23
|
+
assert Orange.class_is_a?(Citrus)
|
24
|
+
assert Orange.class_is_a?(Fruit)
|
25
|
+
assert !Fruit.class_is_a?(Orange)
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper.rb'
|
2
|
+
|
3
|
+
class HashTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
end
|
7
|
+
|
8
|
+
def teardown
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_minus
|
12
|
+
h = {:a => "aaa", :b => "bbb", :c => "ccc"}
|
13
|
+
assert_equal({:b => "bbb", :c => "ccc"}, (h - :a))
|
14
|
+
|
15
|
+
h = {:a => "aaa", :b => "bbb", :c => "ccc"}
|
16
|
+
assert_equal({:b => "bbb", :c => "ccc"}, (h - [:a]))
|
17
|
+
|
18
|
+
h = {:a => "aaa", :b => "bbb", :c => "ccc"}
|
19
|
+
assert_equal({:c => "ccc"}, (h - [:a, :b]))
|
20
|
+
|
21
|
+
h = {:a => "aaa", :b => "bbb", :c => "ccc"}
|
22
|
+
assert_equal({:a => "aaa", :b => "bbb", :c => "ccc"}, (h - [:d, :e]))
|
23
|
+
|
24
|
+
h = {:a => "aaa", :b => "bbb", :c => "ccc"}
|
25
|
+
assert_equal({:a => "aaa", :b => "bbb", :c => "ccc"}, (h - :d))
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_join
|
29
|
+
h = {:rel => "nofollow", :alt => "pickles"}
|
30
|
+
# assert_equal "rel=\"nofollow\" alt=\"pickles\"", h.join("%s=\"%s\"", " ")
|
31
|
+
assert ("rel=\"nofollow\" alt=\"pickles\"" == h.join("%s=\"%s\"", " ") || "alt=\"pickles\" rel=\"nofollow\"" == h.join("%s=\"%s\"", " "))
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper.rb'
|
2
|
+
|
3
|
+
class ModuleTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
end
|
7
|
+
|
8
|
+
def teardown
|
9
|
+
end
|
10
|
+
|
11
|
+
module ConvertMyMethodsPlease
|
12
|
+
def foo
|
13
|
+
end
|
14
|
+
|
15
|
+
def bar
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
module IncludeMeSafelyPlease
|
20
|
+
def foo
|
21
|
+
end
|
22
|
+
|
23
|
+
def bar
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
class LikeToBeSafe
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_convert_security_of_methods
|
31
|
+
assert ConvertMyMethodsPlease.public_instance_methods.include?("foo")
|
32
|
+
assert ConvertMyMethodsPlease.public_instance_methods.include?("bar")
|
33
|
+
ConvertMyMethodsPlease.convert_security_of_methods
|
34
|
+
assert !ConvertMyMethodsPlease.public_instance_methods.include?("foo")
|
35
|
+
assert !ConvertMyMethodsPlease.public_instance_methods.include?("bar")
|
36
|
+
assert ConvertMyMethodsPlease.protected_instance_methods.include?("foo")
|
37
|
+
assert ConvertMyMethodsPlease.protected_instance_methods.include?("bar")
|
38
|
+
ConvertMyMethodsPlease.convert_security_of_methods(:protected, :private)
|
39
|
+
assert !ConvertMyMethodsPlease.protected_instance_methods.include?("foo")
|
40
|
+
assert !ConvertMyMethodsPlease.protected_instance_methods.include?("bar")
|
41
|
+
assert ConvertMyMethodsPlease.private_instance_methods.include?("foo")
|
42
|
+
assert ConvertMyMethodsPlease.private_instance_methods.include?("bar")
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_include_safely_into
|
46
|
+
assert IncludeMeSafelyPlease.public_instance_methods.include?("foo")
|
47
|
+
assert IncludeMeSafelyPlease.public_instance_methods.include?("bar")
|
48
|
+
assert !LikeToBeSafe.public_instance_methods.include?("foo")
|
49
|
+
assert !LikeToBeSafe.public_instance_methods.include?("bar")
|
50
|
+
IncludeMeSafelyPlease.include_safely_into(LikeToBeSafe)
|
51
|
+
assert !LikeToBeSafe.public_instance_methods.include?("foo")
|
52
|
+
assert !LikeToBeSafe.public_instance_methods.include?("bar")
|
53
|
+
assert LikeToBeSafe.protected_instance_methods.include?("foo")
|
54
|
+
assert LikeToBeSafe.protected_instance_methods.include?("bar")
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|