extlib_lite 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/.gitignore ADDED
@@ -0,0 +1,3 @@
1
+ *~
2
+ rerun.txt
3
+
data/MIT-LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ Copyright (c) 2010 David Wilkie
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.
21
+
data/README.markdown ADDED
@@ -0,0 +1,23 @@
1
+ # extlib_lite
2
+
3
+ extlib_lite is a super lightweight alternative to [activesupport](http://github.com/rails/rails/tree/master/activesupport) or [extlib](http://github.com/datamapper/extlib). It contains some of the usual friends such as pluralize, singularize, classify, and constantize without the overhead of its big brothers. I take no credit for extlib_lite, I simply extracted the code that I needed from [activesupport](http://github.com/rails/rails/tree/master/activesupport) and [extlib](http://github.com/datamapper/extlib).
4
+ ## Supported Functions
5
+ Currently extlib_lite supports the following functions
6
+ ### String
7
+ * pluralize
8
+ * singularize
9
+ * classify
10
+ * constantize
11
+ * underscore
12
+ * from_query
13
+
14
+ ### Hash
15
+ * to_query
16
+
17
+ ## Installation
18
+
19
+ gem install extlib_lite
20
+ require 'extlib_lite'
21
+
22
+ Copyright (c) 2010 David Wilkie, released under the MIT license
23
+
data/Rakefile ADDED
@@ -0,0 +1,39 @@
1
+ require 'rake'
2
+ require 'rake/testtask'
3
+ require 'rake/rdoctask'
4
+
5
+ desc 'Default: run unit tests.'
6
+ task :default => :test
7
+
8
+ desc 'Test the ExtlibLite plugin.'
9
+ Rake::TestTask.new(:test) do |t|
10
+ t.libs << 'lib'
11
+ t.libs << 'spec'
12
+ t.libs << 'features'
13
+ t.pattern = 'spec/**/*_spec.rb'
14
+ t.verbose = true
15
+ end
16
+
17
+ begin
18
+ require 'jeweler'
19
+ Jeweler::Tasks.new do |gemspec|
20
+ gemspec.name = "extlib_lite"
21
+ gemspec.summary = "Lightweight alternative to activesupport and extlib"
22
+ gemspec.email = "dwilkie@gmail.com"
23
+ gemspec.homepage = "http://github.com/dwilkie/extlib_lite"
24
+ gemspec.authors = ["David Wilkie"]
25
+ gemspec.add_runtime_dependency "addressable", ">=2.1.1"
26
+ end
27
+ rescue LoadError
28
+ puts "Jeweler not available. Install it with: gem install jeweler"
29
+ end
30
+
31
+ desc 'Generate documentation for the ExtlibLite plugin.'
32
+ Rake::RDocTask.new(:rdoc) do |rdoc|
33
+ rdoc.rdoc_dir = 'rdoc'
34
+ rdoc.title = 'ExtlibLite'
35
+ rdoc.options << '--line-numbers' << '--inline-source'
36
+ rdoc.rdoc_files.include('README')
37
+ rdoc.rdoc_files.include('lib/**/*.rb')
38
+ end
39
+
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.1
@@ -0,0 +1,50 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{extlib_lite}
8
+ s.version = "0.0.1"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["David Wilkie"]
12
+ s.date = %q{2010-07-08}
13
+ s.email = %q{dwilkie@gmail.com}
14
+ s.extra_rdoc_files = [
15
+ "README.markdown"
16
+ ]
17
+ s.files = [
18
+ ".gitignore",
19
+ "MIT-LICENSE",
20
+ "README.markdown",
21
+ "Rakefile",
22
+ "VERSION",
23
+ "extlib_lite.gemspec",
24
+ "lib/extlib_lite.rb",
25
+ "lib/extlib_lite/core_extensions.rb",
26
+ "lib/extlib_lite/core_extensions/hash.rb",
27
+ "lib/extlib_lite/core_extensions/string.rb",
28
+ "lib/extlib_lite/inflections.rb",
29
+ "todo"
30
+ ]
31
+ s.homepage = %q{http://github.com/dwilkie/extlib_lite}
32
+ s.rdoc_options = ["--charset=UTF-8"]
33
+ s.require_paths = ["lib"]
34
+ s.rubygems_version = %q{1.3.7}
35
+ s.summary = %q{Lightweight alternative to activesupport and extlib}
36
+
37
+ if s.respond_to? :specification_version then
38
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
39
+ s.specification_version = 3
40
+
41
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
42
+ s.add_runtime_dependency(%q<addressable>, [">= 2.1.1"])
43
+ else
44
+ s.add_dependency(%q<addressable>, [">= 2.1.1"])
45
+ end
46
+ else
47
+ s.add_dependency(%q<addressable>, [">= 2.1.1"])
48
+ end
49
+ end
50
+
@@ -0,0 +1,47 @@
1
+ module CoreExtensions
2
+ module Hash
3
+ ##
4
+ # Convert to a query string
5
+ #
6
+ # {
7
+ # :text_message => {
8
+ # :to => 61447100308,
9
+ # :from => 61447100547,
10
+ # :msg => "Edin knif lie km"
11
+ # :date => "2010-05-13 23:59:58"
12
+ # }
13
+ # }.to_query #=> "text_message%5Bto%5D=61447100308&text_message%5Bfrom%5D=61447100547&text_message%5Bmsg%5D=Edin%20knif%20lie%20km&text_message%5Bdate%5D=2010-05-13%2023%3A59%3A58"
14
+ #
15
+ # @return [String] Hash converted to a query string
16
+ #
17
+ # @api public
18
+ def to_query
19
+ uri = Addressable::URI.new
20
+ uri.query_values = self.stringify
21
+ uri.query.gsub("[", "%5B").gsub("]", "%5D")
22
+ end
23
+
24
+ def stringify
25
+ Marshal.load(Marshal.dump(self)).stringify!
26
+ end
27
+
28
+ # Destructively convert all keys and values to strings
29
+ def stringify!
30
+ keys.each do |key|
31
+ new_key = key.to_s
32
+ self[new_key] = delete(key)
33
+ if self[new_key].is_a?(Hash)
34
+ self[new_key].stringify!
35
+ else
36
+ self[new_key] = delete(new_key).to_s
37
+ end
38
+ end
39
+ self
40
+ end
41
+ end
42
+ end
43
+
44
+ class Hash
45
+ include CoreExtensions::Hash
46
+ end
47
+
@@ -0,0 +1,60 @@
1
+ module CoreExtensions
2
+ module String
3
+
4
+ ##
5
+ # Convert to hash from a query string.
6
+ #
7
+ # "text_message%5Bto%5D=61447100308&text_message%5Bfrom%5D=61447100547&text_message%5Bmsg%5D=Edin%20knif%20lie%20km&text_message%5Bdate%5D=2010-05-13%2023%3A59%3A58".from_query #=> {
8
+ # "text_message"=>{
9
+ # "to"=>"61447100308",
10
+ # "from"=>"61447100547",
11
+ # "msg"=>"Edin knif lie km",
12
+ # "date"=>"2010-05-13 23:59:58"
13
+ # }
14
+ # }
15
+ #
16
+ # @return [Hash] Query string converted to hash.
17
+ #
18
+ # @api public
19
+ def from_query
20
+ uri = Addressable::URI.new
21
+ uri.query = self
22
+ uri.query_values
23
+ end
24
+
25
+ ##
26
+ # Convert a constant name to a path, assuming a conventional structure.
27
+ #
28
+ # "FooBar::Baz".to_const_path # => "foo_bar/baz"
29
+ #
30
+ # @return [String] Path to the file containing the constant named by receiver
31
+ # (constantized string), assuming a conventional structure.
32
+ #
33
+ # @api public
34
+ def to_const_path
35
+ snake_case.gsub(/::/, "/")
36
+ end
37
+
38
+ ##
39
+ # Convert to snake case.
40
+ #
41
+ # "FooBar".snake_case #=> "foo_bar"
42
+ # "HeadlineCNNNews".snake_case #=> "headline_cnn_news"
43
+ # "CNN".snake_case #=> "cnn"
44
+ #
45
+ # @return [String] Receiver converted to snake case.
46
+ #
47
+ # @api public
48
+ def snake_case
49
+ return downcase if match(/\A[A-Z]+\z/)
50
+ gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2').
51
+ gsub(/([a-z])([A-Z])/, '\1_\2').
52
+ downcase
53
+ end
54
+ end
55
+ end
56
+
57
+ class String
58
+ include CoreExtensions::String
59
+ end
60
+
@@ -0,0 +1,6 @@
1
+ require 'addressable/uri'
2
+ # Load each available extension
3
+ Dir["#{File.dirname(__FILE__)}/core_extensions/*.rb"].sort.each do |path|
4
+ require "extlib_lite/core_extensions/#{File.basename(path)}"
5
+ end
6
+
@@ -0,0 +1,395 @@
1
+ module Extlib
2
+
3
+ # = English Nouns Number Inflection.
4
+ #
5
+ # This module provides english singular <-> plural noun inflections.
6
+ module Inflection
7
+
8
+ class << self
9
+ # Take an underscored name and make it into a camelized name
10
+ #
11
+ # @example
12
+ # "egg_and_hams".classify #=> "EggAndHam"
13
+ # "enlarged_testes".classify #=> "EnlargedTestis"
14
+ # "post".classify #=> "Post"
15
+ #
16
+ def classify(name)
17
+ words = name.to_s.sub(/.*\./, '').split('_')
18
+ words[-1] = singularize(words[-1])
19
+ words.collect { |word| word.capitalize }.join
20
+ end
21
+
22
+ # The reverse of +camelize+. Makes an underscored form from the expression in the string.
23
+ #
24
+ # Changes '::' to '/' to convert namespaces to paths.
25
+ #
26
+ # @example
27
+ # "ActiveRecord".underscore #=> "active_record"
28
+ # "ActiveRecord::Errors".underscore #=> active_record/errors
29
+ #
30
+ def underscore(camel_cased_word)
31
+ camel_cased_word.to_const_path
32
+ end
33
+
34
+ # Constantize tries to find a declared constant with the name specified
35
+ # in the string. It raises a NameError when the name is not in CamelCase
36
+ # or is not initialized.
37
+ #
38
+ # @example
39
+ # "Module".constantize #=> Module
40
+ # "Class".constantize #=> Class
41
+ def constantize(camel_cased_word)
42
+ unless /\A(?:::)?([A-Z]\w*(?:::[A-Z]\w*)*)\z/ =~ camel_cased_word
43
+ raise NameError, "#{camel_cased_word.inspect} is not a valid constant name!"
44
+ end
45
+
46
+ Object.module_eval("::#{$1}", __FILE__, __LINE__)
47
+ end
48
+ end
49
+
50
+ @singular_of = {}
51
+ @plural_of = {}
52
+
53
+ @singular_rules = []
54
+ @plural_rules = []
55
+
56
+ class << self
57
+ # Defines a general inflection exception case.
58
+ #
59
+ # ==== Parameters
60
+ # singular<String>::
61
+ # singular form of the word
62
+ # plural<String>::
63
+ # plural form of the word
64
+ #
65
+ # ==== Examples
66
+ #
67
+ # Here we define erratum/errata exception case:
68
+ #
69
+ # English::Inflect.word "erratum", "errata"
70
+ #
71
+ # In case singular and plural forms are the same omit
72
+ # second argument on call:
73
+ #
74
+ # English::Inflect.word 'information'
75
+ def word(singular, plural=nil)
76
+ plural = singular unless plural
77
+ singular_word(singular, plural)
78
+ plural_word(singular, plural)
79
+ end
80
+
81
+ def clear(type = :all)
82
+ if type == :singular || type == :all
83
+ @singular_of = {}
84
+ @singular_rules = []
85
+ @singularization_rules, @singularization_regex = nil, nil
86
+ end
87
+ if type == :plural || type == :all
88
+ @singular_of = {}
89
+ @singular_rules = []
90
+ @singularization_rules, @singularization_regex = nil, nil
91
+ end
92
+ end
93
+
94
+
95
+ # Define a singularization exception.
96
+ #
97
+ # ==== Parameters
98
+ # singular<String>::
99
+ # singular form of the word
100
+ # plural<String>::
101
+ # plural form of the word
102
+ def singular_word(singular, plural)
103
+ @singular_of[plural] = singular
104
+ @singular_of[plural.capitalize] = singular.capitalize
105
+ end
106
+
107
+ # Define a pluralization exception.
108
+ #
109
+ # ==== Parameters
110
+ # singular<String>::
111
+ # singular form of the word
112
+ # plural<String>::
113
+ # plural form of the word
114
+ def plural_word(singular, plural)
115
+ @plural_of[singular] = plural
116
+ @plural_of[singular.capitalize] = plural.capitalize
117
+ end
118
+
119
+ # Define a general rule.
120
+ #
121
+ # ==== Parameters
122
+ # singular<String>::
123
+ # ending of the word in singular form
124
+ # plural<String>::
125
+ # ending of the word in plural form
126
+ # whole_word<Boolean>::
127
+ # for capitalization, since words can be
128
+ # capitalized (Man => Men) #
129
+ # ==== Examples
130
+ # Once the following rule is defined:
131
+ # English::Inflect.rule 'y', 'ies'
132
+ #
133
+ # You can see the following results:
134
+ # irb> "fly".plural
135
+ # => flies
136
+ # irb> "cry".plural
137
+ # => cries
138
+ # Define a general rule.
139
+
140
+ def rule(singular, plural, whole_word = false)
141
+ singular_rule(singular, plural)
142
+ plural_rule(singular, plural)
143
+ word(singular, plural) if whole_word
144
+ end
145
+
146
+ # Define a singularization rule.
147
+ #
148
+ # ==== Parameters
149
+ # singular<String>::
150
+ # ending of the word in singular form
151
+ # plural<String>::
152
+ # ending of the word in plural form
153
+ #
154
+ # ==== Examples
155
+ # Once the following rule is defined:
156
+ # English::Inflect.singular_rule 'o', 'oes'
157
+ #
158
+ # You can see the following results:
159
+ # irb> "heroes".singular
160
+ # => hero
161
+ def singular_rule(singular, plural)
162
+ @singular_rules << [singular, plural]
163
+ end
164
+
165
+ # Define a plurualization rule.
166
+ #
167
+ # ==== Parameters
168
+ # singular<String>::
169
+ # ending of the word in singular form
170
+ # plural<String>::
171
+ # ending of the word in plural form
172
+ #
173
+ # ==== Examples
174
+ # Once the following rule is defined:
175
+ # English::Inflect.singular_rule 'fe', 'ves'
176
+ #
177
+ # You can see the following results:
178
+ # irb> "wife".plural
179
+ # => wives
180
+ def plural_rule(singular, plural)
181
+ @plural_rules << [singular, plural]
182
+ end
183
+
184
+ # Read prepared singularization rules.
185
+ def singularization_rules
186
+ if defined?(@singularization_regex) && @singularization_regex
187
+ return [@singularization_regex, @singularization_hash]
188
+ end
189
+ # No sorting needed: Regexen match on longest string
190
+ @singularization_regex = Regexp.new("(" + @singular_rules.map {|s,p| p}.join("|") + ")$", "i")
191
+ @singularization_hash = Hash[*@singular_rules.flatten].invert
192
+ [@singularization_regex, @singularization_hash]
193
+ end
194
+
195
+ # Read prepared pluralization rules.
196
+ def pluralization_rules
197
+ if defined?(@pluralization_regex) && @pluralization_regex
198
+ return [@pluralization_regex, @pluralization_hash]
199
+ end
200
+ @pluralization_regex = Regexp.new("(" + @plural_rules.map {|s,p| s}.join("|") + ")$", "i")
201
+ @pluralization_hash = Hash[*@plural_rules.flatten]
202
+ [@pluralization_regex, @pluralization_hash]
203
+ end
204
+
205
+ attr_reader :singular_of, :plural_of
206
+
207
+ # Convert an English word from plural to singular.
208
+ #
209
+ # "boys".singular #=> boy
210
+ # "tomatoes".singular #=> tomato
211
+ #
212
+ # ==== Parameters
213
+ # word<String>:: word to singularize
214
+ #
215
+ # ==== Returns
216
+ # <String>:: singularized form of word
217
+ #
218
+ # ==== Notes
219
+ # Aliased as singularize (a Railism)
220
+ def singular(word)
221
+ if result = singular_of[word]
222
+ return result.dup
223
+ end
224
+ result = word.dup
225
+ regex, hash = singularization_rules
226
+ result.sub!(regex) {|m| hash[m]}
227
+ singular_of[word] = result
228
+ return result
229
+ end
230
+
231
+ # Alias for #singular (a Railism).
232
+ #
233
+ alias_method(:singularize, :singular)
234
+
235
+ # Convert an English word from singular to plural.
236
+ #
237
+ # "boy".plural #=> boys
238
+ # "tomato".plural #=> tomatoes
239
+ #
240
+ # ==== Parameters
241
+ # word<String>:: word to pluralize
242
+ #
243
+ # ==== Returns
244
+ # <String>:: pluralized form of word
245
+ #
246
+ # ==== Notes
247
+ # Aliased as pluralize (a Railism)
248
+ def plural(word)
249
+ # special exceptions
250
+ return "" if word == ""
251
+ if result = plural_of[word]
252
+ return result.dup
253
+ end
254
+ result = word.dup
255
+ regex, hash = pluralization_rules
256
+ result.sub!(regex) {|m| hash[m]}
257
+ plural_of[word] = result
258
+ return result
259
+ end
260
+
261
+ # Alias for #plural (a Railism).
262
+ alias_method(:pluralize, :plural)
263
+ end
264
+
265
+ # One argument means singular and plural are the same.
266
+
267
+ word 'equipment'
268
+ word 'fish'
269
+ word 'grass'
270
+ word 'hovercraft'
271
+ word 'information'
272
+ word 'milk'
273
+ word 'money'
274
+ word 'moose'
275
+ word 'plurals'
276
+ word 'postgres'
277
+ word 'rain'
278
+ word 'rice'
279
+ word 'series'
280
+ word 'sheep'
281
+ word 'species'
282
+ word 'status'
283
+
284
+ # Two arguments defines a singular and plural exception.
285
+ word 'alias' , 'aliases'
286
+ word 'analysis' , 'analyses'
287
+ word 'axis' , 'axes'
288
+ word 'basis' , 'bases'
289
+ word 'buffalo' , 'buffaloes'
290
+ word 'cactus' , 'cacti'
291
+ word 'crisis' , 'crises'
292
+ word 'criterion' , 'criteria'
293
+ word 'cross' , 'crosses'
294
+ word 'datum' , 'data'
295
+ word 'diagnosis' , 'diagnoses'
296
+ word 'drive' , 'drives'
297
+ word 'erratum' , 'errata'
298
+ word 'goose' , 'geese'
299
+ word 'index' , 'indices'
300
+ word 'life' , 'lives'
301
+ word 'louse' , 'lice'
302
+ word 'matrix' , 'matrices'
303
+ word 'medium' , 'media'
304
+ word 'mouse' , 'mice'
305
+ word 'movie' , 'movies'
306
+ word 'octopus' , 'octopi'
307
+ word 'ox' , 'oxen'
308
+ word 'phenomenon' , 'phenomena'
309
+ word 'plus' , 'plusses'
310
+ word 'potato' , 'potatoes'
311
+ word 'quiz' , 'quizzes'
312
+ word 'status' , 'status'
313
+ word 'status' , 'statuses'
314
+ word 'Swiss' , 'Swiss'
315
+ word 'testis' , 'testes'
316
+ word 'thesaurus' , 'thesauri'
317
+ word 'thesis' , 'theses'
318
+ word 'thief' , 'thieves'
319
+ word 'tomato' , 'tomatoes'
320
+ word 'torpedo' , 'torpedoes'
321
+ word 'vertex' , 'vertices'
322
+ word 'wife' , 'wives'
323
+
324
+ # One-way singularization exception (convert plural to singular).
325
+
326
+ # General rules.
327
+ rule 'person' , 'people', true
328
+ rule 'shoe' , 'shoes', true
329
+ rule 'hive' , 'hives', true
330
+ rule 'man' , 'men', true
331
+ rule 'child' , 'children', true
332
+ rule 'news' , 'news', true
333
+ rule 'rf' , 'rves'
334
+ rule 'af' , 'aves'
335
+ rule 'ero' , 'eroes'
336
+ rule 'man' , 'men'
337
+ rule 'ch' , 'ches'
338
+ rule 'sh' , 'shes'
339
+ rule 'ss' , 'sses'
340
+ rule 'ta' , 'tum'
341
+ rule 'ia' , 'ium'
342
+ rule 'ra' , 'rum'
343
+ rule 'ay' , 'ays'
344
+ rule 'ey' , 'eys'
345
+ rule 'oy' , 'oys'
346
+ rule 'uy' , 'uys'
347
+ rule 'y' , 'ies'
348
+ rule 'x' , 'xes'
349
+ rule 'lf' , 'lves'
350
+ rule 'ffe' , 'ffes'
351
+ rule 'afe' , 'aves'
352
+ rule 'ouse' , 'ouses'
353
+ # more cases of words ending in -oses not being singularized properly
354
+ # than cases of words ending in -osis
355
+ # rule 'osis' , 'oses'
356
+ rule 'ox' , 'oxes'
357
+ rule 'us' , 'uses'
358
+ rule '' , 's'
359
+
360
+ # One-way singular rules.
361
+
362
+ singular_rule 'of' , 'ofs' # proof
363
+ singular_rule 'o' , 'oes' # hero, heroes
364
+ singular_rule 'f' , 'ves'
365
+
366
+ # One-way plural rules.
367
+
368
+ #plural_rule 'fe' , 'ves' # safe, wife
369
+ plural_rule 's' , 'ses'
370
+ plural_rule 'ive' , 'ives' # don't want to snag wife
371
+ plural_rule 'fe' , 'ves' # don't want to snag perspectives
372
+
373
+ end
374
+ end
375
+
376
+ class String
377
+ def singular
378
+ Extlib::Inflection.singular(self)
379
+ end
380
+ alias_method(:singularize, :singular)
381
+ def plural
382
+ Extlib::Inflection.plural(self)
383
+ end
384
+ alias_method(:pluralize, :plural)
385
+ def classify
386
+ Extlib::Inflection.classify(self)
387
+ end
388
+ def constantize
389
+ Extlib::Inflection.constantize(self)
390
+ end
391
+ def underscore
392
+ Extlib::Inflection.underscore(self)
393
+ end
394
+ end
395
+
@@ -0,0 +1,3 @@
1
+ require 'extlib_lite/core_extensions'
2
+ require 'extlib_lite/inflections'
3
+
data/todo ADDED
@@ -0,0 +1,2 @@
1
+ Add some tests
2
+
metadata ADDED
@@ -0,0 +1,89 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: extlib_lite
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 1
9
+ version: 0.0.1
10
+ platform: ruby
11
+ authors:
12
+ - David Wilkie
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-07-08 00:00:00 +07:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: addressable
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ segments:
29
+ - 2
30
+ - 1
31
+ - 1
32
+ version: 2.1.1
33
+ type: :runtime
34
+ version_requirements: *id001
35
+ description:
36
+ email: dwilkie@gmail.com
37
+ executables: []
38
+
39
+ extensions: []
40
+
41
+ extra_rdoc_files:
42
+ - README.markdown
43
+ files:
44
+ - .gitignore
45
+ - MIT-LICENSE
46
+ - README.markdown
47
+ - Rakefile
48
+ - VERSION
49
+ - extlib_lite.gemspec
50
+ - lib/extlib_lite.rb
51
+ - lib/extlib_lite/core_extensions.rb
52
+ - lib/extlib_lite/core_extensions/hash.rb
53
+ - lib/extlib_lite/core_extensions/string.rb
54
+ - lib/extlib_lite/inflections.rb
55
+ - todo
56
+ has_rdoc: true
57
+ homepage: http://github.com/dwilkie/extlib_lite
58
+ licenses: []
59
+
60
+ post_install_message:
61
+ rdoc_options:
62
+ - --charset=UTF-8
63
+ require_paths:
64
+ - lib
65
+ required_ruby_version: !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ segments:
71
+ - 0
72
+ version: "0"
73
+ required_rubygems_version: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ segments:
79
+ - 0
80
+ version: "0"
81
+ requirements: []
82
+
83
+ rubyforge_project:
84
+ rubygems_version: 1.3.7
85
+ signing_key:
86
+ specification_version: 3
87
+ summary: Lightweight alternative to activesupport and extlib
88
+ test_files: []
89
+