ruby-nuggets 0.8.4 → 0.8.5

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 CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  == VERSION
4
4
 
5
- This documentation refers to ruby-nuggets version 0.8.4
5
+ This documentation refers to ruby-nuggets version 0.8.5
6
6
 
7
7
 
8
8
  == DESCRIPTION
@@ -0,0 +1,5 @@
1
+ require 'nuggets/string/camelscore_mixin'
2
+
3
+ class String
4
+ include Nuggets::String::CamelscoreMixin
5
+ end
@@ -0,0 +1,117 @@
1
+ #--
2
+ ###############################################################################
3
+ # #
4
+ # A component of ruby-nuggets, some extensions to the Ruby programming #
5
+ # language. #
6
+ # #
7
+ # Copyright (C) 2007-2012 Jens Wille #
8
+ # #
9
+ # Authors: #
10
+ # Jens Wille <jens.wille@uni-koeln.de> #
11
+ # #
12
+ # ruby-nuggets is free software; you can redistribute it and/or modify it #
13
+ # under the terms of the GNU Affero General Public License as published by #
14
+ # the Free Software Foundation; either version 3 of the License, or (at your #
15
+ # option) any later version. #
16
+ # #
17
+ # ruby-nuggets is distributed in the hope that it will be useful, but WITHOUT #
18
+ # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
19
+ # FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License #
20
+ # for more details. #
21
+ # #
22
+ # You should have received a copy of the GNU Affero General Public License #
23
+ # along with ruby-nuggets. If not, see <http://www.gnu.org/licenses/>. #
24
+ # #
25
+ ###############################################################################
26
+ #++
27
+
28
+ module Nuggets
29
+ class String
30
+ module CamelscoreMixin
31
+
32
+ # List of acronyms to treat specially
33
+ # in #camelcase and #underscore.
34
+ CAMELSCORE_ACRONYMS = {
35
+ 'html' => 'HTML',
36
+ 'rss' => 'RSS',
37
+ 'sql' => 'SQL',
38
+ 'ssl' => 'SSL',
39
+ 'xml' => 'XML'
40
+ }
41
+
42
+ # call-seq:
43
+ # str.camelcase => new_string
44
+ #
45
+ # Returns the CamelCase form of _str_.
46
+ def camelcase
47
+ dup.camelcase!
48
+ end
49
+
50
+ alias_method :camelize, :camelcase
51
+
52
+ # call-seq:
53
+ # str.camelcase! => str
54
+ #
55
+ # Replaces _str_ with its CamelCase form and returns _str_.
56
+ def camelcase!
57
+ sub!(/^[a-z]+/) {
58
+ CAMELSCORE_ACRONYMS[$&] || $&.capitalize
59
+ }
60
+
61
+ gsub!(/(?:_|([\/\d]))([a-z]+)/i) {
62
+ "#{$1}#{CAMELSCORE_ACRONYMS[$2] || $2.capitalize}"
63
+ }
64
+
65
+ gsub!('/', '::')
66
+
67
+ self
68
+ end
69
+
70
+ alias_method :camelize!, :camelcase!
71
+
72
+ # call-seq:
73
+ # str.underscore => new_string
74
+ #
75
+ # Returns the under_score form of _str_.
76
+ def underscore
77
+ dup.underscore!
78
+ end
79
+
80
+ # call-seq:
81
+ # str.underscore! => str
82
+ #
83
+ # Replaces _str_ with its under_score form and returns _str_.
84
+ def underscore!
85
+ gsub!(/::/, '/')
86
+
87
+ a = CAMELSCORE_ACRONYMS.values
88
+ r = a.empty? ? /(?=a)b/ : Regexp.union(*a)
89
+
90
+ gsub!(/(?:([A-Za-z])|(\d)|^)(#{r})(?=\b|[^a-z])/) {
91
+ "#{$1 || $2}#{'_' if $1}#{$3.downcase}"
92
+ }
93
+
94
+ gsub!(/([A-Z])(?=[A-Z])/, '\1_')
95
+ gsub!(/([a-z\d])([A-Z])/, '\1_\2')
96
+
97
+ downcase!
98
+
99
+ self
100
+ end
101
+
102
+ # call-seq:
103
+ # str.constantize(base = Object) => anObject
104
+ #
105
+ # Returns the constant pointed to by _str_, relative to +base+.
106
+ def constantize(base = Object)
107
+ names = split('::')
108
+ return if names.empty?
109
+
110
+ const = names.first.empty? ? (names.shift; Object) : base
111
+ names.each { |name| const = const.const_get(name) }
112
+ const
113
+ end
114
+
115
+ end
116
+ end
117
+ end
@@ -4,7 +4,7 @@ module Nuggets
4
4
 
5
5
  MAJOR = 0
6
6
  MINOR = 8
7
- TINY = 4
7
+ TINY = 5
8
8
 
9
9
  class << self
10
10
 
@@ -0,0 +1,116 @@
1
+ require 'nuggets/string/camelscore'
2
+
3
+ describe String, 'when extended by', Nuggets::String::CamelscoreMixin do
4
+
5
+ it { String.ancestors.should include(Nuggets::String::CamelscoreMixin) }
6
+
7
+ def self.with_acronyms(acronyms, &block)
8
+ describe "with acronyms #{acronyms.inspect}" do
9
+ before :all do String::CAMELSCORE_ACRONYMS.replace(acronyms) end
10
+ after :all do String::CAMELSCORE_ACRONYMS.clear end
11
+
12
+ instance_eval(&block)
13
+ end
14
+ end
15
+
16
+ with_acronyms({}) { [
17
+ ['', ''],
18
+ %w[a A],
19
+ %w[a_b AB],
20
+ %w[a_b_c ABC],
21
+ %w[a/b A::B],
22
+ %w[a/b_c A::BC],
23
+ %w[a/b/c A::B::C],
24
+ %w[foo Foo],
25
+ %w[foo_bar FooBar],
26
+ %w[foo_bar_baz FooBarBaz],
27
+ %w[foo/bar Foo::Bar],
28
+ %w[foo/bar_baz Foo::BarBaz],
29
+ %w[foo/bar/baz Foo::Bar::Baz],
30
+ %w[active_model ActiveModel],
31
+ %w[active_model/errors ActiveModel::Errors],
32
+ %w[ssl_error SslError],
33
+ %w[s_s_l_error SSLError]
34
+ ].each { |a, b|
35
+ example { a.camelcase.should == b }
36
+ example { b.underscore.should == a }
37
+ } }
38
+
39
+ with_acronyms('ab' => 'AB') {
40
+ example { 'ab'.camelcase.should == 'AB' }
41
+ example { 'AB'.underscore.should == 'ab' }
42
+ example { 'abc'.camelcase.should == 'Abc' }
43
+ example { 'Abc'.underscore.should == 'abc' }
44
+ example { 'ab_c'.camelcase.should == 'ABC' }
45
+ example { 'ABC'.underscore.should == 'ab_c' }
46
+ }
47
+
48
+ with_acronyms('abc' => 'ABC') {
49
+ example { 'ab'.camelcase.should == 'Ab' }
50
+ example { 'AB'.underscore.should == 'a_b' }
51
+ example { 'abc'.camelcase.should == 'ABC' }
52
+ example { 'ABC'.underscore.should == 'abc' }
53
+ }
54
+
55
+ with_acronyms('ab' => 'AB', 'abc' => 'ABC') {
56
+ example { 'ab'.camelcase.should == 'AB' }
57
+ example { 'AB'.underscore.should == 'ab' }
58
+ example { 'abc'.camelcase.should == 'ABC' }
59
+ example { 'Abc'.underscore.should == 'abc' }
60
+ example { 'ab_c'.camelcase.should == 'ABC' }
61
+ example { 'ABC'.underscore.should == 'ab_c' }
62
+ }
63
+
64
+ with_acronyms('xml' => 'XML', 'html' => 'HTML', 'sql' => 'SQL') {
65
+ example { 'xml'.camelcase.should == 'XML' }
66
+ example { 'XML'.underscore.should == 'xml' }
67
+ example { 'html'.camelcase.should == 'HTML' }
68
+ example { 'HTML'.underscore.should == 'html' }
69
+ example { 'html5'.camelcase.should == 'HTML5' }
70
+ example { 'HTML5'.underscore.should == 'html5' }
71
+ pending { 'xhtml'.camelcase.should == 'XHTML' }
72
+ pending { 'XHTML'.underscore.should == 'xhtml' }
73
+ example { 'sql'.camelcase.should == 'SQL' }
74
+ example { 'SQL'.underscore.should == 'sql' }
75
+ pending { 'mysql'.camelcase.should == 'MySQL' }
76
+ pending { 'MySQL'.underscore.should == 'mysql' }
77
+ pending { 'postgresql'.camelcase.should == 'PostgreSQL' }
78
+ pending { 'PostgreSQL'.underscore.should == 'postgresql' }
79
+ pending { 'sqlite'.camelcase.should == 'SQLite' }
80
+ pending { 'SQLite'.underscore.should == 'sqlite' }
81
+ pending { 'nosql'.camelcase.should == 'NoSQL' }
82
+ pending { 'NoSQL'.underscore.should == 'nosql' }
83
+ }
84
+
85
+ with_acronyms('rss' => 'RSS', 'xml' => 'XML') {
86
+ example { 'rss2xml'.camelcase.should == 'RSS2XML' }
87
+ example { 'RSS2XML'.underscore.should == 'rss2xml' }
88
+ }
89
+
90
+ with_acronyms('ssl' => 'SSL') {
91
+ example { 'ssl'.camelcase.should == 'SSL' }
92
+ example { 'SSL'.underscore.should == 'ssl' }
93
+ example { 'ssl_error'.camelcase.should == 'SSLError' }
94
+ example { 'SSLError'.underscore.should == 'ssl_error' }
95
+ }
96
+
97
+ example { ''.constantize.should be_nil }
98
+ example { '::'.constantize.should be_nil }
99
+
100
+ example { 'Nuggets'.constantize.should == ::Nuggets }
101
+ example { '::Nuggets'.constantize.should == ::Nuggets }
102
+
103
+ example { 'Nuggets::String'.constantize.should == ::Nuggets::String }
104
+ example { '::Nuggets::String'.constantize.should == ::Nuggets::String }
105
+
106
+ example { 'String'.constantize.should == ::String }
107
+ example { 'String'.constantize(::Nuggets).should == ::Nuggets::String }
108
+ example { '::String'.constantize(::Nuggets).should == ::String }
109
+ example { 'String'.constantize(::Nuggets::String).should == ::String }
110
+ example { 'String'.constantize(::Nuggets::String::CamelscoreMixin).should == ::String }
111
+
112
+ example { lambda { 'CamelscoreMixin'.constantize }.should raise_error(NameError) }
113
+ example { lambda { 'CamelscoreMixin'.constantize(::Nuggets) }.should raise_error(NameError) }
114
+ example { 'CamelscoreMixin'.constantize(::Nuggets::String).should == ::Nuggets::String::CamelscoreMixin }
115
+
116
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-nuggets
3
3
  version: !ruby/object:Gem::Version
4
- hash: 55
4
+ hash: 53
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 8
9
- - 4
10
- version: 0.8.4
9
+ - 5
10
+ version: 0.8.5
11
11
  platform: ruby
12
12
  authors:
13
13
  - Jens Wille
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-01-09 00:00:00 Z
18
+ date: 2012-01-27 00:00:00 Z
19
19
  dependencies: []
20
20
 
21
21
  description: Some extensions to the Ruby programming language.
@@ -85,9 +85,11 @@ files:
85
85
  - lib/nuggets/string/capitalize_first.rb
86
86
  - lib/nuggets/string/wc.rb
87
87
  - lib/nuggets/string/evaluate.rb
88
+ - lib/nuggets/string/camelscore_mixin.rb
88
89
  - lib/nuggets/string/msub.rb
89
90
  - lib/nuggets/string/nsub.rb
90
91
  - lib/nuggets/string/xor.rb
92
+ - lib/nuggets/string/camelscore.rb
91
93
  - lib/nuggets/string/wc_mixin.rb
92
94
  - lib/nuggets/string/case.rb
93
95
  - lib/nuggets/string/xor_mixin.rb
@@ -181,6 +183,7 @@ files:
181
183
  - spec/nuggets/integer/map_spec.rb
182
184
  - spec/nuggets/integer/length_spec.rb
183
185
  - spec/nuggets/string/evaluate_spec.rb
186
+ - spec/nuggets/string/camelscore_spec.rb
184
187
  - spec/nuggets/string/xor_spec.rb
185
188
  - spec/nuggets/string/wc_spec.rb
186
189
  - spec/nuggets/array/regression_spec.rb
@@ -203,14 +206,14 @@ licenses: []
203
206
 
204
207
  post_install_message:
205
208
  rdoc_options:
209
+ - --line-numbers
206
210
  - --main
207
211
  - README
208
212
  - --all
209
213
  - --charset
210
214
  - UTF-8
211
215
  - --title
212
- - ruby-nuggets Application documentation (v0.8.4)
213
- - --line-numbers
216
+ - ruby-nuggets Application documentation (v0.8.5)
214
217
  require_paths:
215
218
  - lib
216
219
  required_ruby_version: !ruby/object:Gem::Requirement