ghaki-meta 2011.11.29.1

Sign up to get free protection for your applications and to get access to all the features.
data/LICENSE ADDED
@@ -0,0 +1,19 @@
1
+ Copyright (c) 2010 Gerald Kalafut
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in
11
+ all copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ THE SOFTWARE.
data/README ADDED
@@ -0,0 +1,23 @@
1
+ = Ghaki Meta - Meta programming helpers
2
+
3
+ Ghaki Meta is a collection of meta programming helpers.
4
+
5
+ == Download
6
+
7
+ The latest version of Ghaki Meta can be found at
8
+
9
+ * git@github.com:ghaki/ghaki-meta.git
10
+
11
+ == Installation
12
+
13
+ The preferred method of installing Ghaki Meta is through its GEM file.
14
+
15
+ % [sudo] gem install ghaki-meta-1.0.0.gem
16
+
17
+ == License
18
+
19
+ Ghaki Meta is released under the MIT license.
20
+
21
+ == Support
22
+
23
+ Contact mailto:gerald@kalafut.org
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 2011.11.29.1
@@ -0,0 +1,63 @@
1
+ module Ghaki #:nodoc:
2
+ module Meta #:nodoc:
3
+
4
+ # Allow meta classes to be specified for later creation.
5
+ module Builder
6
+
7
+ # Generate meta objects using builders.
8
+ def setup_meta_builders *args
9
+ self.class.meta_builders.each_key do |token|
10
+ make_meta_builder token, *args
11
+ end
12
+ end
13
+
14
+ # Make meta object using builder.
15
+ def make_meta_builder token, *args
16
+ klass = self.class.meta_builders[token]
17
+ raise NotImplementedError, "Meta Builder Not Set: #{token}" if klass.nil?
18
+ obj = if klass.respond_to?(:new)
19
+ klass.new( *args )
20
+ elsif klass.respond_to?(:create)
21
+ klass.create( *args )
22
+ else
23
+ raise NotImplementedError, "Unknown Builder For Class: #{klass}"
24
+ end
25
+ self.send( (token.to_s + '=').to_sym, obj )
26
+ end
27
+
28
+ ######################################################################
29
+ module ClassMethods
30
+
31
+ # Getter for the meta builder helper object.
32
+ def meta_builders
33
+ @meta_builders ||= {}
34
+ end
35
+
36
+ # Declare meta builder attributes.
37
+ def attr_meta_builder *tokens
38
+ @meta_builders ||= {}
39
+ tokens.each do |token|
40
+ @meta_builders[token] = nil
41
+ module_eval <<-"END"
42
+ def #{token} ; @#{token} end
43
+ def #{token}= val ; @#{token} = val end
44
+ END
45
+ end
46
+ end
47
+
48
+ # Assign classes to meta builder attributes.
49
+ def set_meta_builder pairs
50
+ pairs.each_pair do |token,klass|
51
+ attr_meta_builder(token) unless meta_builders.has_key?(token)
52
+ self.meta_builders[token] = klass
53
+ end
54
+ end
55
+
56
+ end
57
+
58
+ def self.included klass #:nodoc:
59
+ klass.extend ClassMethods
60
+ end
61
+
62
+ end
63
+ end end
@@ -0,0 +1,29 @@
1
+ require 'ghaki/meta/dict/storage'
2
+ require 'ghaki/meta/dict/lookup'
3
+
4
+ module Ghaki #:nodoc:
5
+ module Meta #:nodoc:
6
+ module Dict #:nodoc:
7
+
8
+ class Base
9
+
10
+ def self.dict_lookup_rule *words
11
+ list = []
12
+ words.each do |word|
13
+ list.push <<-"END"
14
+ def #{word}
15
+ @lookups[ :#{word} ] ||=
16
+ Lookup.new( :#{word}, :dict_storage => @storage )
17
+ end
18
+ END
19
+ end
20
+ class_eval list.join("\n")
21
+ end
22
+
23
+ def initialize
24
+ @storage = Storage.new
25
+ @lookups = {}
26
+ end
27
+
28
+ end
29
+ end end end
@@ -0,0 +1,49 @@
1
+ require 'ghaki/meta/dict/storage'
2
+
3
+ module Ghaki #:nodoc:
4
+ module Meta #:nodoc:
5
+ module Dict #:nodoc:
6
+
7
+ class Lookup
8
+
9
+ attr_accessor :token, :storage
10
+
11
+ def initialize name, opts={}
12
+ @token = name
13
+ @storage = opts[:dict_storage] || Storage.new
14
+ end
15
+
16
+ %w{ snake camel title }.each do |rule|
17
+ list = []
18
+ list.push <<-"END"
19
+
20
+ def #{rule}
21
+ @storage.get_#{rule}( @token )
22
+ end
23
+
24
+ def #{rule}= val
25
+ @storage.put_#{rule}( @token, val )
26
+ end
27
+
28
+ END
29
+ class_eval list.join("\n")
30
+ end
31
+
32
+ def to_s
33
+ @storage.get_snake(@token)
34
+ end
35
+
36
+ def opt_plural opts, get
37
+ @storage.opt_plural opts, @token, get
38
+ end
39
+
40
+ def opt_alias opts, get
41
+ @storage.opt_alias opts, @token, get
42
+ end
43
+
44
+ def opt_set opts, value
45
+ @storage.opt_set opts, @token, value
46
+ end
47
+
48
+ end
49
+ end end end
@@ -0,0 +1,67 @@
1
+ module Ghaki #:nodoc:
2
+ module Meta #:nodoc:
3
+ module Dict #:nodoc:
4
+
5
+ class Storage
6
+
7
+ attr_accessor :snake, :title, :camel
8
+
9
+ def initialize
10
+ @snake = {}
11
+ @title = {}
12
+ @camel = {}
13
+ end
14
+
15
+ %w{ snake title camel }.each do |rule|
16
+ class_eval <<-"END"
17
+
18
+ def put_#{rule} token, value
19
+ @#{rule}[token] = value
20
+ end
21
+
22
+ END
23
+ end
24
+
25
+ def get_snake token
26
+ if @snake[token].nil?
27
+ raise ArgumentError, "Unknown Token: #{token}"
28
+ end
29
+ @snake[token]
30
+ end
31
+
32
+ def get_title token
33
+ if @title[token].nil?
34
+ put_title token, snake_to_title( get_snake(token) )
35
+ end
36
+ @title[token]
37
+ end
38
+
39
+ def get_camel token
40
+ if @camel[token].nil?
41
+ put_camel token, title_to_camel( get_title(token) )
42
+ end
43
+ @camel[token]
44
+ end
45
+
46
+ def opt_set opts, put, value
47
+ put_snake put, (opts[put] || value)
48
+ end
49
+ def opt_plural opts, put, get
50
+ put_snake put, (opts[put] || get_snake(get) + 's')
51
+ end
52
+ def opt_alias opts, put, get
53
+ put_snake put, (opts[put] || get_snake(get))
54
+ end
55
+
56
+ def snake_to_title text
57
+ text.split('_').map do |x| x.capitalize end.join(' ')
58
+ end
59
+ def title_to_camel text
60
+ text.gsub(' ','')
61
+ end
62
+ def snake_to_camel text
63
+ title_to_camel snake_to_title(text)
64
+ end
65
+
66
+ end
67
+ end end end
@@ -0,0 +1,222 @@
1
+ require 'ghaki/meta/builder'
2
+
3
+ module Ghaki module Meta module Builder_Testing
4
+
5
+ # SUPPORT OBJECTS
6
+ class UsingImport
7
+ include Ghaki::Meta::Builder
8
+ end
9
+ class UsingAttr < UsingImport
10
+ attr_meta_builder :child
11
+ end
12
+
13
+ class Helper
14
+ attr_accessor :word
15
+ def initialize word
16
+ @word = word
17
+ end
18
+ end
19
+ class Child < Helper; end
20
+ class Parent < Helper; end
21
+
22
+ class UsingSetup < UsingAttr
23
+ set_meta_builder :child => Child, :parent => Parent
24
+ def initialize
25
+ setup_meta_builders 'together'
26
+ end
27
+ end
28
+ class UsingMake < UsingAttr
29
+ set_meta_builder :child => Child, :parent => Parent
30
+ def initialize
31
+ make_meta_builder :child, 'first'
32
+ make_meta_builder :parent, 'second'
33
+ end
34
+ end
35
+
36
+ class Worm < Helper ; end
37
+ class UsingWorm < Helper
38
+ attr_accessor :dinner
39
+ end
40
+ class Bird < UsingWorm; end
41
+ class Fish < UsingWorm; end
42
+ class Vole < UsingWorm; end
43
+
44
+ class ChainA < UsingImport
45
+ attr_meta_builder :worm
46
+ def initialize
47
+ setup_meta_builders 'together'
48
+ setup_dinner
49
+ end
50
+ def setup_dinner
51
+ end
52
+ end
53
+ class ChainB < ChainA
54
+ attr_meta_builder :fish, :bird
55
+ def setup_dinner; super
56
+ @fish.dinner = @bird.dinner = @worm
57
+ end
58
+ end
59
+ class ChainC < ChainB
60
+ attr_meta_builder :vole
61
+ def setup_dinner; super
62
+ @vole.dinner = @worm
63
+ end
64
+ end
65
+ class ChainD < ChainC
66
+ set_meta_builder \
67
+ :worm => Worm,
68
+ :bird => Bird, :fish => Fish,
69
+ :vole => Vole
70
+ end
71
+
72
+ class Toy ; end
73
+ class ToyFactory
74
+ private_class_method :new
75
+ def self.create
76
+ Toy.new
77
+ end
78
+ end
79
+ class UsingFactory < UsingImport
80
+ set_meta_builder :toy => ToyFactory
81
+ def initialize
82
+ setup_meta_builders
83
+ end
84
+ end
85
+
86
+ # ACTUAL TESTING
87
+ describe Ghaki::Meta::Builder do
88
+
89
+ describe 'when importing' do
90
+ context 'meta' do
91
+ subject { UsingImport }
92
+ it { should respond_to :attr_meta_builder }
93
+ it { should respond_to :set_meta_builder }
94
+ it { should respond_to :meta_builders }
95
+ end
96
+ context 'object' do
97
+ subject { UsingImport.new }
98
+ it { should respond_to :setup_meta_builders }
99
+ it { should respond_to :make_meta_builder }
100
+ end
101
+ end
102
+
103
+ describe 'when calling #attr_meta_builder for child helper' do
104
+ context '#meta_builders' do
105
+ subject { UsingAttr }
106
+ it 'should have placeholder' do
107
+ subject.meta_builders.has_key?(:child).should be_true
108
+ subject.meta_builders[:child].should be_nil
109
+ end
110
+ end
111
+ context 'object' do
112
+ subject { UsingAttr.new }
113
+ it { should respond_to :child }
114
+ it { should respond_to :child= }
115
+ end
116
+ end
117
+
118
+ describe 'when calling #set_meta_builder for parent helper' do
119
+ context '#meta_builders' do
120
+ subject { UsingSetup }
121
+ it 'should have class for parent helper' do
122
+ subject.meta_builders[:child].should == Child
123
+ end
124
+ it 'should have class for child helper' do
125
+ subject.meta_builders[:parent].should == Parent
126
+ end
127
+ end
128
+ context 'object' do
129
+ subject { UsingSetup.new }
130
+ it { should respond_to :parent }
131
+ it { should respond_to :parent= }
132
+ end
133
+ end
134
+
135
+ shared_examples_for 'class creations' do
136
+ it 'should create parent helper' do
137
+ subject.child.should be_an_instance_of(Child)
138
+ end
139
+ it 'should create child helper' do
140
+ subject.parent.should be_an_instance_of(Parent)
141
+ end
142
+ end
143
+
144
+ describe 'when using #make_meta_builder' do
145
+ subject { UsingMake.new }
146
+ it_should_behave_like 'class creations'
147
+ it 'should set specific args for parent helper' do
148
+ subject.child.word.should == 'first'
149
+ end
150
+ it 'should set specific args for child helper' do
151
+ subject.parent.word.should == 'second'
152
+ end
153
+ end
154
+
155
+ describe 'when using #setup_meta_builders' do
156
+ subject { UsingSetup.new }
157
+ it_should_behave_like 'class creations'
158
+ it 'should set common args for parent helper' do
159
+ subject.child.word.should == 'together'
160
+ end
161
+ it 'should set common args for child helper' do
162
+ subject.parent.word.should == 'together'
163
+ end
164
+ end
165
+
166
+ describe 'when using factory class' do
167
+ subject { UsingFactory.new }
168
+ it 'should create object' do
169
+ subject.toy.should_not be_nil
170
+ end
171
+ end
172
+
173
+ describe 'when using chained inheritence' do
174
+
175
+ context '#meta_builders' do
176
+ subject { ChainD }
177
+ it 'should have full heirarchy of classes' do
178
+ subject.meta_builders.length.should == 4
179
+ end
180
+ it 'should set up worm' do
181
+ subject.meta_builders[:worm].should == Worm
182
+ end
183
+ it 'should set up bird' do
184
+ subject.meta_builders[:bird].should == Bird
185
+ end
186
+ it 'should set up fish' do
187
+ subject.meta_builders[:fish].should == Fish
188
+ end
189
+ it 'should set up vole' do
190
+ subject.meta_builders[:vole].should == Vole
191
+ end
192
+ end
193
+
194
+ context 'object' do
195
+ subject { ChainD.new }
196
+ it 'should have worm' do
197
+ subject.worm.class == Worm
198
+ end
199
+ it 'should have bird' do
200
+ subject.bird.class == Bird
201
+ end
202
+ it 'should have fish' do
203
+ subject.fish.class == Fish
204
+ end
205
+ it 'should have vole' do
206
+ subject.vole.class == Vole
207
+ end
208
+ it 'should set dinner for bird' do
209
+ subject.bird.dinner.should == subject.worm
210
+ end
211
+ it 'should set dinner for fish' do
212
+ subject.fish.dinner.should == subject.worm
213
+ end
214
+ it 'should set dinner for vole' do
215
+ subject.vole.dinner.should == subject.worm
216
+ end
217
+ end
218
+
219
+ end
220
+
221
+ end
222
+ end end end
@@ -0,0 +1,62 @@
1
+ require 'ghaki/meta/dict/base'
2
+ require File.join( File.dirname(__FILE__), 'dict_helper' )
3
+
4
+ module Ghaki module Meta module Dict module Base_Test
5
+ describe Base do
6
+ include DictHelper
7
+
8
+ class Mine < Dict::Base
9
+ dict_lookup_rule :quack, :quacks
10
+ end
11
+
12
+ before(:all) do
13
+ setup_dict_names
14
+ end
15
+
16
+ before(:each) do
17
+ @dict = Mine.new
18
+ end
19
+ subject { @dict }
20
+
21
+ it 'makes dict rules' do
22
+ should respond_to :quack
23
+ should respond_to :quacks
24
+ end
25
+
26
+ it 'allows get and set' do
27
+ subject.quack.snake = @snake
28
+ subject.quack.to_s.should == @snake
29
+ subject.quack.title.should == @title
30
+ subject.quack.snake.should == @snake
31
+ subject.quack.camel.should == @camel
32
+ end
33
+
34
+ context 'using :opt_set' do
35
+ subject { @dict.quack }
36
+ it 'accepts option' do
37
+ @dict.quack.opt_set( { @token => @snake }, 'ignore' )
38
+ subject.snake.should == @snake
39
+ end
40
+ it 'defaults value' do
41
+ @dict.quack.opt_set( {:ignore => 'bogus'}, @snake )
42
+ subject.snake.should == @snake
43
+ end
44
+ end
45
+
46
+ context 'using :opt_plural' do
47
+ before(:each) do
48
+ @dict.quack.snake = @snake
49
+ end
50
+ subject { @dict.quacks }
51
+ it 'accepts option' do
52
+ subject.opt_plural( { @tokens => @snakes}, :ignore )
53
+ subject.snake.should == @snakes
54
+ end
55
+ it 'defaults value' do
56
+ subject.opt_plural( { :ignore => 'bogus' }, @token )
57
+ subject.snake.should == @snakes
58
+ end
59
+ end
60
+
61
+ end
62
+ end end end end
@@ -0,0 +1,13 @@
1
+ module DictHelper
2
+
3
+ def setup_dict_names
4
+ @token = :quack
5
+ @snake = 'donald_duck'
6
+ @title = 'Donald Duck'
7
+ @camel = 'DonaldDuck'
8
+ @tokens = :quacks
9
+ @snakes = 'donald_ducks'
10
+ @aka = :mallard
11
+ end
12
+
13
+ end
@@ -0,0 +1,94 @@
1
+ require 'ghaki/meta/dict/lookup'
2
+
3
+ require File.join( File.dirname(__FILE__), 'dict_helper' )
4
+
5
+ module Ghaki module Meta module Dict module Lookup_Test
6
+ describe Lookup do
7
+ include DictHelper
8
+
9
+ before(:all) do
10
+ setup_dict_names
11
+ end
12
+
13
+ before(:each) do
14
+ @lookup = Lookup.new @token
15
+ end
16
+
17
+ subject { @lookup }
18
+
19
+ describe '#initialize' do
20
+ it 'accepts option :dict_storage' do
21
+ @storage = Storage.new
22
+ @lookup = Lookup.new( @token, :dict_storage => @storage )
23
+ subject.storage.should == @storage
24
+ end
25
+ end
26
+
27
+ describe '#snake' do
28
+ it 'get snake value' do
29
+ subject.storage.put_snake @token, @snake
30
+ subject.snake.should == @snake
31
+ end
32
+ end
33
+ describe '#snake=' do
34
+ it 'put snake value' do
35
+ subject.snake = @snake
36
+ subject.storage.get_snake(@token).should == @snake
37
+ end
38
+ end
39
+
40
+ describe '#camel' do
41
+ it 'get camel value' do
42
+ subject.storage.put_camel @token, @camel
43
+ subject.camel.should == @camel
44
+ end
45
+ end
46
+ describe '#camel=' do
47
+ it 'put camel value' do
48
+ subject.camel = @camel
49
+ subject.storage.get_camel(@token).should == @camel
50
+ end
51
+ end
52
+
53
+ describe '#title' do
54
+ it 'get title value' do
55
+ subject.storage.put_title @token, @title
56
+ subject.title.should == @title
57
+ end
58
+ end
59
+ describe '#title=' do
60
+ it 'put title value' do
61
+ subject.title = @title
62
+ subject.storage.get_title(@token).should == @title
63
+ end
64
+ end
65
+
66
+ describe '#opt_set' do
67
+ it 'delegates option setting' do
68
+ @opts = { :bogus => 'fake' }
69
+ subject.storage.expects(:opt_set).
70
+ with(@opts,@token,@snake).once
71
+ subject.opt_set @opts, @snake
72
+ end
73
+ end
74
+
75
+ describe '#opt_plural' do
76
+ it 'delegates option setting' do
77
+ @opts = { :bogus => 'fake' }
78
+ subject.storage.expects(:opt_plural).
79
+ with(@opts,@token,@tokens).once
80
+ subject.opt_plural @opts, @tokens
81
+ end
82
+ end
83
+
84
+ describe '#opt_alias' do
85
+ it 'delegates option setting' do
86
+ @opts = { :bogus => 'fake' }
87
+ subject.storage.expects(:opt_alias).
88
+ with(@opts,@token,@aka).once
89
+ subject.opt_alias @opts, @aka
90
+ end
91
+ end
92
+
93
+ end
94
+ end end end end
@@ -0,0 +1,143 @@
1
+ require 'ghaki/meta/dict/storage'
2
+ require File.join( File.dirname(__FILE__), 'dict_helper' )
3
+
4
+ module Ghaki module Meta module Dict module Storage_Test
5
+ describe Storage do
6
+ include DictHelper
7
+
8
+ before(:all) do
9
+ setup_dict_names
10
+ end
11
+
12
+ before(:each) do
13
+ @store = Storage.new
14
+ end
15
+
16
+ subject { @store }
17
+
18
+ describe '#initialize' do
19
+ it 'makes empty snake' do
20
+ subject.snake.should be_empty
21
+ end
22
+ it 'makes empty camel' do
23
+ subject.camel.should be_empty
24
+ end
25
+ it 'makes empty title' do
26
+ subject.title.should be_empty
27
+ end
28
+ end
29
+
30
+ it { should respond_to :snake }
31
+ describe '#put_snake' do
32
+ it 'stores value' do
33
+ subject.put_snake @token, @snake
34
+ subject.snake.has_key?(@token).should be_true
35
+ subject.snake[@token].should == @snake
36
+ end
37
+ end
38
+ describe '#get_snake' do
39
+ it 'returns value when present' do
40
+ subject.snake[@token] = @snake
41
+ subject.get_snake(@token).should == @snake
42
+ end
43
+ it 'fails when missing' do
44
+ lambda do
45
+ subject.get_snake(@token)
46
+ end.should raise_error(ArgumentError,"Unknown Token: #{@token}")
47
+ end
48
+ end
49
+
50
+ it { should respond_to :title }
51
+ describe '#put_title' do
52
+ it 'stores value' do
53
+ subject.put_title @token, @title
54
+ subject.title.has_key?(@token).should be_true
55
+ subject.title[@token].should == @title
56
+ end
57
+ end
58
+ describe '#get_title' do
59
+ it 'returns value when present' do
60
+ subject.title[@token] = @title
61
+ subject.get_title(@token).should == @title
62
+ end
63
+ it 'defaults when missing' do
64
+ subject.snake[@token] = @snake
65
+ subject.get_title(@token).should == @title
66
+ end
67
+ end
68
+
69
+ it { should respond_to :camel }
70
+ describe '#put_camel' do
71
+ it 'stores value' do
72
+ subject.put_camel @token, @camel
73
+ subject.camel.has_key?(@token).should be_true
74
+ subject.camel[@token].should == @camel
75
+ end
76
+ end
77
+ describe '#get_camel' do
78
+ it 'returns value when present' do
79
+ subject.camel[@token] = @camel
80
+ subject.get_camel(@token).should == @camel
81
+ end
82
+ it 'defaults when missing' do
83
+ subject.snake[@token] = @snake
84
+ subject.get_camel(@token).should == @camel
85
+ end
86
+ end
87
+
88
+ describe '#opt_set' do
89
+ it 'stores option when present' do
90
+ subject.opt_set( { @token => @snake }, @token, 'ignore' )
91
+ subject.get_snake(@token).should == @snake
92
+ end
93
+ it 'stores default when missing' do
94
+ subject.opt_set( {}, @token, @snake )
95
+ subject.get_snake(@token).should == @snake
96
+ end
97
+ end
98
+
99
+ describe '#opt_plural' do
100
+ it 'stores option when present' do
101
+ subject.opt_plural( { @tokens => @snakes }, @tokens, :ignore )
102
+ subject.get_snake(@tokens).should == @snakes
103
+ end
104
+ it 'stores default when missing' do
105
+ subject.put_snake @token, @snake
106
+ subject.opt_plural( {}, @tokens, @token )
107
+ subject.get_snake(@tokens).should == @snakes
108
+ end
109
+ end
110
+
111
+ describe '#opt_alias' do
112
+ it 'stores option when present' do
113
+ subject.put_snake @token, 'ignored'
114
+ subject.opt_alias( { @aka => @snake }, @aka, @token )
115
+ subject.get_snake(@aka).should == @snake
116
+ end
117
+ it 'stores default when missing' do
118
+ subject.put_snake @token, @snake
119
+ subject.opt_alias( {}, @aka, @token )
120
+ subject.get_snake(@aka).should == @snake
121
+ end
122
+ end
123
+
124
+ describe '#snake_to_title' do
125
+ it 'translates snake case into title case' do
126
+ subject.snake_to_title(@snake).should == @title
127
+ end
128
+ end
129
+
130
+ describe '#title_to_camel' do
131
+ it 'translates title case into camel case' do
132
+ subject.title_to_camel(@title).should == @camel
133
+ end
134
+ end
135
+
136
+ describe '#snake_to_camel' do
137
+ it 'translates snake case into camel case' do
138
+ subject.snake_to_camel(@snake).should == @camel
139
+ end
140
+ end
141
+
142
+ end
143
+ end end end end
@@ -0,0 +1,7 @@
1
+ require 'bundler/setup'
2
+ require 'mocha'
3
+
4
+ RSpec.configure do |cfg|
5
+ cfg.mock_with :mocha
6
+ cfg.color_enabled = true
7
+ end
metadata ADDED
@@ -0,0 +1,97 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ghaki-meta
3
+ version: !ruby/object:Gem::Version
4
+ version: 2011.11.29.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Gerald Kalafut
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-11-30 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rspec
16
+ requirement: &70995750 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 2.4.0
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: *70995750
25
+ - !ruby/object:Gem::Dependency
26
+ name: mocha
27
+ requirement: &70995520 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: 0.9.12
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *70995520
36
+ - !ruby/object:Gem::Dependency
37
+ name: rdoc
38
+ requirement: &71251820 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: 3.9.4
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *71251820
47
+ description: Collection of meta programming helpers.
48
+ email: gerald@kalafut.org
49
+ executables: []
50
+ extensions: []
51
+ extra_rdoc_files:
52
+ - README
53
+ files:
54
+ - lib/ghaki/meta/builder.rb
55
+ - lib/ghaki/meta/dict/storage.rb
56
+ - lib/ghaki/meta/dict/lookup.rb
57
+ - lib/ghaki/meta/dict/base.rb
58
+ - README
59
+ - LICENSE
60
+ - VERSION
61
+ - spec/ghaki/meta/builder_spec.rb
62
+ - spec/ghaki/meta/dict/storage_spec.rb
63
+ - spec/ghaki/meta/dict/base_spec.rb
64
+ - spec/ghaki/meta/dict/lookup_spec.rb
65
+ - spec/spec_helper.rb
66
+ - spec/ghaki/meta/dict/dict_helper.rb
67
+ homepage: http://github.com/ghaki
68
+ licenses: []
69
+ post_install_message:
70
+ rdoc_options: []
71
+ require_paths:
72
+ - lib
73
+ required_ruby_version: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ! '>='
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
79
+ required_rubygems_version: !ruby/object:Gem::Requirement
80
+ none: false
81
+ requirements:
82
+ - - ! '>='
83
+ - !ruby/object:Gem::Version
84
+ version: 1.3.6
85
+ requirements: []
86
+ rubyforge_project: ghaki-meta
87
+ rubygems_version: 1.8.10
88
+ signing_key:
89
+ specification_version: 3
90
+ summary: Meta programming helpers
91
+ test_files:
92
+ - spec/ghaki/meta/builder_spec.rb
93
+ - spec/ghaki/meta/dict/storage_spec.rb
94
+ - spec/ghaki/meta/dict/base_spec.rb
95
+ - spec/ghaki/meta/dict/lookup_spec.rb
96
+ - spec/spec_helper.rb
97
+ - spec/ghaki/meta/dict/dict_helper.rb