def_dsl 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 261b8110ab1aac82ab1db4c553d93761cce94976
4
- data.tar.gz: e7143d0ab588b9c93ad750077260e5ba360a5238
3
+ metadata.gz: e0bf88a700504a38b4fc76da05744ba255305098
4
+ data.tar.gz: 76cccfdc5bdb63cc32797ede9e91907e631b9688
5
5
  SHA512:
6
- metadata.gz: 9cf5009a0ad94abeb3f3c74a84a994f077452ef42303f95d2abbaee5998398478d8ef7a09c6eb6c2a16e1618e21e8408546f5e4f675e51333aa2f47e3cb8d99e
7
- data.tar.gz: 46a1c3149973383fd39d21b4443a8c94c635108f8b6138229359da44f8e550d44b5b762575a91c13c54d8281334ad2abd94d4bfbcaf1a7b071f3e6a084e296ea
6
+ metadata.gz: 54a1517902548b0ea57202cf384638bffda51646a5cb10aeaf2fa83e1f751471ca34cf2696085fb6201119a377172a592e48223d76955e9f73e33d731b97b9bd
7
+ data.tar.gz: 3d86dd7b95305dcd8070b56454552804701385a16912a7575e044e41928538184e538d8a87401509187ec40d59078f18729b239c18f303c152cdecc3e934e806
data/.gitignore CHANGED
@@ -15,3 +15,5 @@ spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
+ *.un~
19
+ *.swp
data/Guardfile ADDED
@@ -0,0 +1,37 @@
1
+ # A sample Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
+
4
+ notification :tmux, display_message: false
5
+ #notification :tmux,
6
+ # :display_message => true,
7
+ # :timeout => 5, # in seconds
8
+ # :default_message_format => '%s >> %s',
9
+ # # the first %s will show the title, the second the message
10
+ # # Alternately you can also configure *success_message_format*,
11
+ # # *pending_message_format*, *failed_message_format*
12
+ # :line_separator => ' > ', # since we are single line we need a separator
13
+ # :color_location => 'status-left-bg' # to customize which tmux element will change color
14
+
15
+
16
+ guard 'rspec', all_on_start: true do
17
+ watch(%r{^spec/.+_spec\.rb$})
18
+ watch(/\.rb$/) { 'spec' }
19
+ # some discipline to map lib => spec
20
+ end
21
+ __END__
22
+ # Rails example
23
+ watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
24
+ watch(%r{^app/(.*)(\.erb|\.haml)$}) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
25
+ watch(%r{^app/controllers/(.+)_(controller)\.rb$}) { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
26
+ watch(%r{^spec/support/(.+)\.rb$}) { "spec" }
27
+ watch('config/routes.rb') { "spec/routing" }
28
+ watch('app/controllers/application_controller.rb') { "spec/controllers" }
29
+
30
+ # Capybara features specs
31
+ watch(%r{^app/views/(.+)/.*\.(erb|haml)$}) { |m| "spec/features/#{m[1]}_spec.rb" }
32
+
33
+ # Turnip features and steps
34
+ watch(%r{^spec/acceptance/(.+)\.feature$})
35
+ watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'spec/acceptance' }
36
+ end
37
+
data/def_dsl.gemspec CHANGED
@@ -22,4 +22,6 @@ Gem::Specification.new do |spec|
22
22
  spec.add_development_dependency "rake"
23
23
 
24
24
  spec.add_development_dependency "rspec"
25
+ spec.add_development_dependency "guard-rspec"
26
+ spec.add_development_dependency "meta_module"
25
27
  end
data/lib/def_dsl.rb CHANGED
@@ -3,55 +3,179 @@
3
3
  #
4
4
  # extended at the end of context class
5
5
  # rspec!!!!!!!!!!!!!
6
+ # mutant?
7
+ # So is'nt tested
8
+ # more comments inside method - more dumb decisions it has!
6
9
 
10
+ require "def_dsl/version"
11
+ require 'meta_module'
7
12
 
8
- # def def_dsl klass
9
- # end
13
+ #def DefDsl *classes
14
+ # DefDsl::Dsl.new *classes
15
+ #end
16
+ #alias DefDSL DefDsl
10
17
 
11
- require "def_dsl/version"
18
+ # shortcut to extend and define
19
+ def DefDsl! *black_list
20
+ Module.new do
21
+ define_singleton_method :extended do |target|
22
+ target.send :extend, DefDsl
23
+ target.def_dsl *black_list
24
+ end
25
+ end
26
+ end
27
+ alias DefDSL! DefDsl!
12
28
 
13
29
  module DefDsl
14
30
 
31
+ module Lazy
32
+ def feed_block &b; @block_ = b end
33
+ def block!; @block_ end
34
+ def call! ctx; ctx.instance_eval &block! end
35
+ end
36
+
37
+ # todo: test so, trash(?)
38
+ def def_dsl trash = []
39
+ DefDsl.traverse self, trash do |who|
40
+ who.send :include, So
41
+ who.send :include, Lazy if who.instance_eval { @lazy }
42
+
43
+ DefDsl.shallow(who, trash).each do |mod|
44
+ mini = mod.name.underscore # .....
45
+ method = mod.instance_eval { @dsl } || mod.name.underscore
15
46
 
16
- def def_dsl *const
17
- const.each do |const|
18
- define_dsl! self, [[const.name.to_s.underscore(self), const]]
47
+ who.module_eval do
48
+ define_method method do |*a,&b|
49
+ so [mini,method],*a,&b # artifact...
50
+ end
51
+ end
52
+ # or check superclass if respond for meta_modules + test
53
+ if who.class == Module
54
+ who.send :module_function, method
55
+ end
56
+ end
19
57
  end
20
58
  end
21
- alias define_dsl def_dsl
22
59
 
60
+ # todo: to test optional black list or run mutant :)
61
+ #
62
+ # @param given [Class, Module]
63
+ # @return [Array<Class, Module>] that explicitly defined in given
64
+ def shallow given, trash = []
65
+ if given.class == Module; given.constants.map { |x| given.const_get x }
66
+ elsif given.class == Class
67
+ here = given.constants.map { |x| given.const_get x }
68
+ sup = given.superclass
69
+ other = sup.constants.map { |x| sup.const_get x }
70
+ here - other
71
+ else []
72
+ end - trash
73
+ end
74
+ module_function :shallow # explicit_const or other name?
23
75
 
24
- def shallow_constants who
25
- (who.constants - who.superclass.constants).map { |name| * = name.to_s.underscore, who.const_get(name) }
76
+ # @param klass
77
+ # @param trash [Class, Module, Array<Class, Module>]
78
+ # optional black list of entities to visit and return
79
+ # @return [Array<Class, Module>]
80
+ def all_modules klass, trash = []
81
+ trash = [*trash]
82
+ trash += [klass]
83
+ children = shallow(klass, trash)
84
+ all = [klass, children.
85
+ map { |x| all_modules x, trash + children }].
86
+ flatten.select { |x| Module === x }
87
+ all
26
88
  end
89
+ module_function :all_modules
27
90
 
91
+ # implicit way to use instance_eval, by passing block with zero arity
92
+ # @param block [Proc]
93
+ # @return [Proc]
94
+ def arity_based &block
95
+ block.arity == 0 ? proc { |obj| obj.instance_eval &block }
96
+ : block
97
+ end
98
+ module_function :arity_based
28
99
 
29
- def define_dsl! who, constants=shallow_constants(who) # ...
30
- # constants = constants.nil?? shallow_constants(who) : constants_info(constants)
31
- constants.each do |mini, const|
100
+ # traverse tree of classes and modules, acts {arity_based}
101
+ #
102
+ # @param target [Class, Module] root of search tree
103
+ # @param trash [Array<Class, Module>] black list of entities to visit and yield
104
+ # @yield [Class, Module] once per entity
105
+ def traverse target, trash = [], &block
106
+ all_modules(target, trash).each &DefDsl.arity_based(&block)
107
+ end
108
+ module_function :traverse
32
109
 
33
- next if const.included_modules.include? So
34
- who.send :include, So
35
- define_dsl! const if const.is_a? Class
110
+ #include MetaModule
111
+ #class DSL < MModule
112
+ # def initialize(*classes) @classes = classes end
113
+ # used do |x|
114
+ # x.extend DefDsl
115
+ # @classes.each { |c| x.def_dsl c }
116
+ # end
117
+ #end
118
+ #Dsl = DSL
36
119
 
37
- meth = const.instance_eval { @dsl } || mini
38
120
 
39
- who.class_eval do
40
- define_method(meth) do |*a,&b|
41
- so [mini,meth],*a,&b
42
- end
43
- end
44
121
 
45
- # const.send :include, So if const.is_a? Module # or even class
46
- # who.send :include, So if who.is_a? Module # or even class
47
- if who.class == Module
48
- who.send :module_function, meth
49
- who.send :module_function, :so
50
- who.send :module_function, :so1
51
- who.send :module_function, :so2
52
- end
53
- end
54
- end
122
+ #
123
+ #
124
+ #
125
+ #
126
+ #######################################################
127
+ #
128
+ #
129
+ #
130
+ #
131
+
132
+
133
+
134
+ #def def_dsl *const
135
+ # const.each do |const|
136
+ # define_dsl! self, [[const.name.to_s.underscore(self), const]]
137
+ # end
138
+ #end
139
+ #alias define_dsl def_dsl
140
+
141
+
142
+ # def shallow_constants who
143
+ # (who.constants - who.superclass.constants).map { |name| * = name.to_s.underscore, who.const_get(name) }
144
+ # end
145
+ #
146
+ #
147
+ # def define_dsl! who, constants=shallow_constants(who) # ...
148
+ # # constants = constants.nil?? shallow_constants(who) : constants_info(constants)
149
+ # return if who.included_modules.include? So
150
+ # who.send :include, So
151
+ # constants.each do |mini, const|
152
+ #
153
+ # #next if who.included_modules.include? So
154
+ # #who.send :include, So
155
+ # next if const.included_modules.include? So
156
+ # const.send :include, So
157
+ # #who.send :include, So
158
+ #
159
+ # define_dsl! const if const.is_a? Class
160
+ #
161
+ # meth = const.instance_eval { @dsl } || mini
162
+ #
163
+ # who.class_eval do
164
+ # define_method(meth) do |*a,&b|
165
+ # so [mini,meth],*a,&b
166
+ # end
167
+ # end
168
+ #
169
+ # # const.send :include, So if const.is_a? Module # or even class
170
+ # # who.send :include, So if who.is_a? Module # or even class
171
+ # if who.class == Module
172
+ # who.send :module_function, meth
173
+ # who.send :module_function, :so
174
+ # who.send :module_function, :so1
175
+ # who.send :module_function, :so2
176
+ # end
177
+ # end
178
+ # end
55
179
 
56
180
  module So
57
181
  def feed_block &block
@@ -87,8 +211,17 @@ module DefDsl
87
211
  value = @so[name]
88
212
  value.is_a?(Array) ? value : [value]
89
213
  end
214
+
215
+ def self.included target
216
+ if target.class == Module # class.superclass for meta_module...
217
+ target.send :module_function, :so
218
+ target.send :module_function, :so1
219
+ target.send :module_function, :so2
220
+ end
221
+ end
90
222
  end
91
223
 
224
+
92
225
  end
93
226
  DefDSL = DefDsl
94
227
 
@@ -98,12 +231,56 @@ class String
98
231
  self.split(/[^a-z0-9]/i).map{|w| w.capitalize}.join
99
232
  end
100
233
 
101
- def underscore(relative_to=nil)
102
- name = relative_to.nil?? self : self.sub(/^#{ relative_to.to_s }::/,'')
234
+ # just last name
235
+ def underscore #(relative_to=nil)
236
+ #name = relative_to.nil?? self : self.sub(/^#{ relative_to.name.to_s }::/,'')
237
+ name = self
103
238
  name.gsub(/::/, '/').
104
239
  gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
105
240
  gsub(/([a-z\d])([A-Z])/,'\1_\2').
106
241
  tr("-", "_").
107
- downcase
242
+ downcase.
243
+ split('/').last
108
244
  end
109
245
  end
246
+ __END__
247
+ #def def_dsl *classes
248
+ # classes.any?? def_dsl!(classes) : def_dsl!
249
+ #end
250
+ #def def_dsl #*classes #=shallow(self)
251
+ # classes
252
+ # classes.each do |klass|
253
+ # klass.def_dsl_shallow # WTF? #klass
254
+ # end
255
+ # #magic = So
256
+ # #self.send :include, magic #unless self.included_modules.include? magic
257
+ # #p self
258
+ # #classes.each do |klass|
259
+ # # DefDsl.include_recursively klass, magic
260
+ # #end
261
+ #end
262
+ #def def_dsl_shallow targets = shallow(self); root = self
263
+ # [*targets].each do |x|
264
+ # meth = x.instance_eval { @dsl } || x.name.to_s.underscore(root)
265
+ # root.class_eval do
266
+ # define_method(meth) do |*a,&b|
267
+ # #so [mini,meth],*a,&b
268
+ # end
269
+ # end
270
+ # if root.class == Module
271
+ # root.send :module_function, meth
272
+ # #who.send :module_function, :so
273
+ # #who.send :module_function, :so1
274
+ # #who.send :module_function, :so2
275
+ # end
276
+ # end
277
+ #end
278
+
279
+ ####def include_recursively target, mod, &block
280
+ #### all_modules(target).each do |x|
281
+ #### x.send :include, mod
282
+ #### x.instance_eval &block if block
283
+ #### end
284
+ ####end
285
+ ####module_function :include_recursively
286
+ ####module_function :all_modules, :shallow
@@ -1,3 +1,3 @@
1
1
  module DefDsl
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
data/spec/exmaple_spec.rb CHANGED
@@ -1,4 +1,4 @@
1
- describe [DefDsl,DefDSL].join' or ' do
1
+ describe 'DefDsl or DefDSL' do
2
2
  after { remove_const :My if defined? My }
3
3
 
4
4
  example 'usage inside module' do
@@ -10,8 +10,7 @@ describe [DefDsl,DefDSL].join' or ' do
10
10
  File = File
11
11
  end
12
12
 
13
- extend DefDSL
14
- def_dsl Dir, File
13
+ extend DefDSL! # accepts optional black list of classes
15
14
 
16
15
  file 'root.txt'
17
16
  dir 'dir' do
@@ -42,7 +41,7 @@ describe [DefDsl,DefDSL].join' or ' do
42
41
  end
43
42
 
44
43
  extend DefDSL
45
- def_dsl Dir, File
44
+ def_dsl # accepts optional black list of classes
46
45
 
47
46
  def initialize
48
47
  file 'root.txt'
@@ -77,7 +76,7 @@ describe [DefDsl,DefDSL].join' or ' do
77
76
  end
78
77
 
79
78
  extend DefDSL
80
- def_dsl ADir, AFile
79
+ def_dsl #ADir, AFile
81
80
 
82
81
  file 'root.txt'
83
82
  dir 'dir' do
@@ -112,7 +111,7 @@ describe [DefDsl,DefDSL].join' or ' do
112
111
  end
113
112
 
114
113
  extend DefDSL
115
- def_dsl Dir, File
114
+ def_dsl #Dir, File
116
115
 
117
116
  file 'root.txt' do
118
117
  this.block.should_be just stored.in_ivar
@@ -137,7 +136,7 @@ describe [DefDsl,DefDSL].join' or ' do
137
136
  end
138
137
 
139
138
 
140
- example 'lazy evaluation' do
139
+ example 'lazy evaluation' do # useless
141
140
  pending
142
141
  class My
143
142
  class File < Struct.new :name; end
@@ -147,7 +146,7 @@ describe [DefDsl,DefDSL].join' or ' do
147
146
  end
148
147
 
149
148
  extend DefDSL
150
- def_dsl Dir, File
149
+ def_dsl #Dir, File
151
150
 
152
151
  def initialize &block
153
152
  @block = block
@@ -195,4 +194,41 @@ describe [DefDsl,DefDSL].join' or ' do
195
194
  pending
196
195
  end
197
196
 
198
- end
197
+
198
+ example 'easy dsl' do
199
+ module My
200
+ class Use123; end
201
+
202
+ extend DefDsl!
203
+ use123
204
+ so.should == {use123: so1(:use123)}
205
+ end
206
+ end
207
+
208
+ example 'declarative way to remember block' do
209
+ module My
210
+ class Blocky
211
+ @lazy = true # should remember block to be used in other context
212
+ end # lazy is too short to ignore
213
+ extend DefDSL!
214
+
215
+ blocky do |x|
216
+ @a = (@a || 0) + 1
217
+ end
218
+
219
+ context = Object.new
220
+ so1(:blocky).call!(context)
221
+ context.instance_eval { @a }.should == 1
222
+
223
+ #so.should == {file: so1(:file), dir: so1(:dir)}
224
+ #class Blocky < Struct.new :shit
225
+ #end
226
+ #extend DefDsl #(Block)
227
+ #def_dsl Blocky
228
+ #blocky do
229
+ # @a = 123
230
+ #end
231
+ #expect { my.so1(:block).call! }.to change { my.so1(:block).instance_eval{@a} }.from(nil).to(123)
232
+ end
233
+ end
234
+ end
@@ -1,3 +1,3 @@
1
- def remove_const name
2
- Object.send :remove_const, name
3
- end
1
+ def remove_const *names
2
+ names.each { |name| Object.send :remove_const, name }
3
+ end
@@ -0,0 +1,255 @@
1
+ describe DefDsl do
2
+ #subject { DefDsl }
3
+ after { remove_const :My if defined? My }
4
+
5
+ describe '.shallow' do
6
+ it '<:*works*:>' do
7
+ module My
8
+ X = Class.new
9
+ class ASuper
10
+ B = Class.new
11
+ C = Class.new
12
+ end
13
+ class Super < ASuper
14
+ A = Class.new
15
+ Y = Class.new
16
+ end
17
+ class B < Super
18
+ A = Class.new
19
+ B = Class.new
20
+ C = Class.new
21
+ end
22
+ end
23
+
24
+ DefDsl.shallow(My::B).should == [My::B::A, My::B::B, My::B::C]
25
+ end
26
+ end
27
+
28
+ # todo find a better place for helpers
29
+ describe '.arity_based' do
30
+ it 'wraps block with instance_eval if block.arity == 0' do
31
+ a = [1,2,3].map &DefDsl.arity_based { to_s }
32
+ a.should == %w[1 2 3]
33
+ end
34
+ it 'just returns given block otherwise' do
35
+ a = proc { |x| }
36
+ DefDsl.arity_based(&a).should == a
37
+ end
38
+ end
39
+
40
+
41
+ describe '#def_dsl' do
42
+ #it 'traverse self, includes So; So.included does other work?'
43
+ #it 'define dsl for each AMBIGUOUS?
44
+ #it 'takes optional black list'
45
+ it 'includes So... in self and each who is_a module' do
46
+ module My
47
+ @magic = DefDsl::So # name...
48
+
49
+ class A; end; class B; end
50
+ class C
51
+ module E
52
+ class D; end
53
+ end
54
+ end
55
+
56
+ extend DefDsl
57
+
58
+ [My,A,B,C,C::E,C::E::D].map { |x| x.include? @magic }.should == [false]*6
59
+ def_dsl
60
+ [My,A,B,C,C::E,C::E::D].map { |x| x.include? @magic }.should == [true]*6
61
+
62
+ #extend RSpec::Matchers ### redefines method `include`...
63
+ #RSpec::Matchers.expect { def_dsl }.to RSpec::Matchers.change {
64
+ # [My, A, B, C, C::E, C::E::D].map { |x| x.include? @magic }
65
+ #}.from([false]*6).to([true]*6)
66
+ end
67
+ end
68
+ it 'defines dsl methods for classes inside module' do
69
+ module My
70
+ class A; end
71
+ class B
72
+ class C; end
73
+ end
74
+
75
+ extend DefDsl
76
+ def_dsl
77
+ extend RSpec::Matchers
78
+ expect { a;b;B.new.c }.not_to raise_error
79
+ end
80
+ end
81
+ it 'defines dsl methods for classes inside class' do
82
+ class My
83
+ class A < Struct.new :any; end
84
+ class B
85
+ class C; end
86
+ end
87
+
88
+ extend DefDsl
89
+ def_dsl
90
+ self
91
+ end.new.instance_eval do
92
+ extend RSpec::Matchers
93
+ expect { a;b;My::B.new.c }.not_to raise_error
94
+ end
95
+ end
96
+ end
97
+
98
+ describe '.traverse' do
99
+ it 'acts arity based' do
100
+ module My
101
+ class A; end; class B; end
102
+
103
+ DefDsl.should_receive(:arity_based).once
104
+ DefDsl.traverse(My) { }
105
+ end
106
+ end
107
+ context 'one argument' do
108
+ it 'runs block in context of each found module once per entity' do
109
+ module My
110
+ class A
111
+ end
112
+ class B
113
+ module C
114
+ A = A
115
+ X = A
116
+ Y = B
117
+ end
118
+ end
119
+ DefDsl.traverse My do
120
+ @count = (@count || 0) + 1
121
+ end
122
+ [A, B, B::C, B::C::A, B::C::X, B::C::Y].each do |x|
123
+ x.instance_eval { @count }.should == 1
124
+ end
125
+ end
126
+ end
127
+ end
128
+ context 'two arguments' do # not very useful but emergent anyway!
129
+ it 'takes optional black list of entities to visit and yield' do
130
+ module My
131
+ class A
132
+ end
133
+ class B
134
+ module C
135
+ A = A
136
+ X = A
137
+ Y = B
138
+ end
139
+ end
140
+ DefDsl.traverse My, [A] do
141
+ @count = (@count || 0) + 1
142
+ end
143
+ [A, B::C::A, B::C::X].each do |x|
144
+ x.instance_eval { @count }.should == nil
145
+ end
146
+ [B, B::C, B::C::Y].each do |x|
147
+ x.instance_eval { @count }.should == 1
148
+ end
149
+ end
150
+ end
151
+ end
152
+ end
153
+
154
+ describe '.all_modules' do
155
+ # todo: returns '' do instead of it '' do
156
+ it 'returns all unique nested modules and classes' do
157
+ module My
158
+ ODDMy = My
159
+ ODD = 1
160
+ A = Class.new
161
+ class B
162
+ ODDB = B
163
+ ODDA = A
164
+ C = Module.new
165
+ ODD = 1
166
+ module D
167
+ ODDB = B
168
+ E = Module.new
169
+ ODD = 1
170
+ end
171
+ end
172
+ module F
173
+ ODD = 1
174
+ G = Module.new
175
+ end
176
+ end
177
+
178
+ DefDsl.all_modules(My).map(&:name).map{|x|x.split('::').last}.should == ['My',*'A'..'G']
179
+ end
180
+ it 'takes optional black list of entities to visit and return' do
181
+ module My
182
+ A = Class.new
183
+ class B
184
+ C = Class.new
185
+ end
186
+
187
+ DefDsl.all_modules(My, My::B).should == [My,My::A]
188
+ end
189
+ end
190
+ end
191
+ end
192
+ __END__
193
+ describe '#def_dsl_shallow' do
194
+ it 'defines dsl methods for each shallow nested module if no argument given' do
195
+ module My
196
+ A = Class.new
197
+ B = Module.new
198
+ extend DefDsl
199
+ extend RSpec::Matchers
200
+ expect { def_dsl_shallow }.to change { (a && b) rescue :err }.from(:err)
201
+ end
202
+ end
203
+ it 'defines dsl methods only for given classes/modules' do
204
+ module My
205
+ A = Class.new
206
+ B = Module.new
207
+ extend DefDsl
208
+ extend RSpec::Matchers
209
+ expect { def_dsl_shallow A }.to change {
210
+ [:a,:b].select { |x| respond_to? x } }.from([]).to([:a])
211
+ end
212
+ end
213
+ end
214
+
215
+ #describe 'def_dsl' do
216
+ # it 'calls def_dsl_shallow for self and each nested module recursively' do
217
+ # module My
218
+ # A = Module.new
219
+ # class B
220
+ # C = Class.new
221
+ # end
222
+ # extend DefDsl
223
+ # extend RSpec::Matchers
224
+ # ########## DefDsl.should_receive(:def_shallow_dsl) ###
225
+ # def_dsl
226
+ # expect { def_dsl }.to change {
227
+ # respond_to?(:a) # && respond_to?(:b) && B.new.respond_to?(:c)
228
+ # }.from(false).to(true)
229
+ # end
230
+ # end
231
+ # it 'include ***crap*** in self' do#.include_recursively for given module' do
232
+ # module My
233
+ # class A; end
234
+ # #DefDsl.should_receive(:include_recursively).with(My, DefDsl::So)
235
+ # extend DefDsl
236
+ # extend RSpec::Matchers
237
+ # expect { My.def_dsl A }.to change { My.included_modules }
238
+ # end
239
+ # end
240
+ #end
241
+ #it 'includes second module into first and all its children' do
242
+ # module My
243
+ # @rec = Module.new
244
+ # class A
245
+ # end
246
+ # class B
247
+ # module C
248
+ # end
249
+ # end
250
+ # DefDsl.include_recursively My, @rec
251
+ # [A, B, B::C].each do |x|
252
+ # x.included_modules.include?(@rec).should == true
253
+ # end
254
+ # end
255
+ #end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: def_dsl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexander K
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-04-24 00:00:00.000000000 Z
11
+ date: 2013-05-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,6 +52,34 @@ dependencies:
52
52
  - - '>='
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: guard-rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: meta_module
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
55
83
  description: easy way to build dsl without use of dsl...
56
84
  email:
57
85
  - xpyro@ya.ru
@@ -62,6 +90,7 @@ files:
62
90
  - .gitignore
63
91
  - .rspec
64
92
  - Gemfile
93
+ - Guardfile
65
94
  - LICENSE.txt
66
95
  - README.md
67
96
  - Rakefile
@@ -72,6 +101,7 @@ files:
72
101
  - spec/support/remove_const.rb
73
102
  - spec/support/require_self.rb
74
103
  - spec/support/spec_helper.rb
104
+ - spec/unit/def_dsl/all_modules_spec.rb
75
105
  homepage: https://github.com/sowcow/def_dsl
76
106
  licenses:
77
107
  - MIT
@@ -101,3 +131,4 @@ test_files:
101
131
  - spec/support/remove_const.rb
102
132
  - spec/support/require_self.rb
103
133
  - spec/support/spec_helper.rb
134
+ - spec/unit/def_dsl/all_modules_spec.rb