development 1.0.8 → 1.1.0

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.
Files changed (38) hide show
  1. data/CHANGELOG.md +3 -0
  2. data/README.md +59 -82
  3. data/lib/development/configuration_interface.rb +123 -0
  4. data/lib/development/directory/directory_interface.rb +165 -0
  5. data/lib/development/directory.rb +9 -0
  6. data/lib/development/gem/gem_interface.rb +191 -0
  7. data/lib/development/gem.rb +9 -0
  8. data/lib/development/gemset/gemset_interface.rb +314 -0
  9. data/lib/development/gemset.rb +9 -0
  10. data/lib/development.rb +428 -783
  11. data/lib/namespaces.rb +9 -0
  12. data/lib/requires.rb +23 -0
  13. data/lib/setup.rb +15 -0
  14. data/spec/development/directory_spec.rb +75 -0
  15. data/spec/development/gem_spec.rb +63 -0
  16. data/spec/development/gemset_spec.rb +105 -0
  17. data/spec/development_spec.rb +142 -277
  18. data/spec/{require_mock → mock/require_mock}/lib/require_mock.rb +0 -0
  19. data/spec/mock/require_mock-submock/lib/require_mock/submock.rb +3 -0
  20. data/spec/{require_mock2 → mock/require_mock2}/lib/require_mock2.rb +0 -0
  21. data/spec/mock/require_mock3/lib/require_mock3.rb +4 -0
  22. data/spec/mock/require_mock4/lib/require_mock4.rb +4 -0
  23. metadata +20 -19
  24. data/lib/development/exception/expression_error/unknown_directory_name.rb +0 -14
  25. data/lib/development/exception/expression_error/unknown_gem_or_gemset_name.rb +0 -14
  26. data/lib/development/exception/expression_error.rb +0 -18
  27. data/lib/development/exception/malformed_expression/malformed_enable_disable_expression.rb +0 -15
  28. data/lib/development/exception/malformed_expression/malformed_gemset_expression.rb +0 -15
  29. data/lib/development/exception/malformed_expression/malformed_general_directory_expression.rb +0 -15
  30. data/lib/development/exception/malformed_expression/malformed_location_expression.rb +0 -15
  31. data/lib/development/exception/malformed_expression/malformed_named_directory_expression.rb +0 -15
  32. data/lib/development/exception/malformed_expression/malformed_remove_general_directory_expression.rb +0 -15
  33. data/lib/development/exception/malformed_expression.rb +0 -16
  34. data/spec/mock_gem/lib/mock_gem.rb +0 -4
  35. data/spec/mock_gem-subgem/lib/mock_gem/subgem.rb +0 -4
  36. data/spec/mock_gem-subgem2/lib/mock_gem/subgem2.rb +0 -4
  37. data/spec/mock_gem2/lib/mock_gem2.rb +0 -4
  38. data/spec/other_require_mock/lib/other_require_mock.rb +0 -4
@@ -0,0 +1,9 @@
1
+
2
+ ###
3
+ # Gemset class.
4
+ #
5
+ class ::Development::Gemset
6
+
7
+ include ::Development::Gemset::GemsetInterface
8
+
9
+ end
data/lib/development.rb CHANGED
@@ -1,949 +1,619 @@
1
1
 
2
+ # namespaces that have to be declared ahead of time for proper load order
3
+ require_relative './namespaces'
4
+
5
+ # source file requires
6
+ require_relative './requires.rb'
7
+
2
8
  ###
3
9
  # Singleton that manages configurations and requires.
4
10
  #
5
11
  module ::Development
6
-
7
- #############
8
- # loaded? #
9
- #############
10
12
 
11
13
  ###
12
- # Query whether gem was loaded via Development rather than standard require.
13
- #
14
- # @param gem_name
15
- #
16
- # Name of gem.
17
- #
18
- # @return [true,false] Whether gem was loaded via Development.
14
+ # Name of configuration file: .development.rb.
19
15
  #
20
- def loaded?( gem_name )
21
-
22
- return @loaded_gems.has_key?( gem_name.to_sym )
23
-
24
- end
25
-
26
- ####################
27
- # self.directory #
28
- ####################
16
+ ConfigurationFileName = '.development.rb'
17
+
18
+ #####################
19
+ # self.initialize #
20
+ #####################
29
21
 
30
22
  ###
31
- # Return path for directory name.
32
- #
33
- # @param directory_name
23
+ # Initialize internal tracking variables.
34
24
  #
35
- # Name of named directory.
36
- #
37
- # @return [String] Directory path associated with directory name.
25
+ # @return [Development] Self.
38
26
  #
39
- def self.directory( directory_name )
27
+ def self.initialize
40
28
 
41
- return @named_directories[ directory_name.to_sym ]
29
+ @enable_for_all = false
42
30
 
43
- end
44
-
45
- #############################
46
- # self.general_load_paths #
47
- #############################
48
-
49
- ###
50
- # Get Array of paths that will be used for general loading purposes if a specific gem path is not given.
51
- #
52
- # @return [Array<String>] Paths to be used for general loading purposes.
53
- #
54
- def self.general_load_paths
31
+ @directories = { }
32
+
33
+ @gems = { }
34
+ @gemsets = { }
55
35
 
56
- return @general_load_paths
36
+ @general_load_paths = [ ]
37
+
38
+ @loaded_gems = { }
57
39
 
40
+ return self
41
+
58
42
  end
59
43
 
60
- ############################
61
- # self.named_directories #
62
- ############################
44
+ ################
45
+ # self.clear #
46
+ ################
63
47
 
64
48
  ###
65
- # Get Hash of named directory names to paths.
49
+ # Reset internal tracking variables.
66
50
  #
67
- # @return [Hash{Symbol=>String}]
51
+ # @return [Development] Self.
68
52
  #
69
- def self.named_directories
53
+ def self.clear
54
+
55
+ @enable_for_all = false
70
56
 
71
- return @named_directories
57
+ @directories.clear
72
58
 
73
- end
59
+ @gems.clear
60
+ @gemsets.clear
74
61
 
75
- ###########################
76
- # self.enabled_for_all? #
77
- ###########################
78
-
79
- ###
80
- # Query whether Development is set to search in general paths for any gem, even if not explicitly enabled.
81
- #
82
- # @return [true,false] Whether general gem search is enabled.
83
- #
84
- def self.enabled_for_all?
62
+ @general_load_paths.clear
63
+
64
+ @loaded_gems.clear
85
65
 
86
- return @enable_for_all
66
+ return self
87
67
 
88
68
  end
89
69
 
90
- #######################
91
- # self.enabled_gems #
92
- #######################
70
+ ##############
71
+ # self.gem #
72
+ ##############
93
73
 
94
74
  ###
95
- # Get gems that have been explicitly enabled.
75
+ # Define a gem or retrieve defined gem.
96
76
  #
97
- # @return [Array<Symbol>] Array of gem or gemset names.
77
+ # @param name
98
78
  #
99
- def self.enabled_gems
100
-
101
- return @enabled_gems.keys
102
-
103
- end
104
-
105
- ########################
106
- # self.disabled_gems #
107
- ########################
108
-
109
- ###
110
- # Get gems that have been explicitly disabled.
79
+ # Name of gem.
80
+ #
81
+ # @param directory_or_path
111
82
  #
112
- # @return [Array<Symbol>] Array of gem or gemset names.
83
+ # Development::Directory or String describing path.
113
84
  #
114
- def self.disabled_gems
85
+ # @return [::Development::Gem]
86
+ #
87
+ def self.gem( name, directory_or_path = nil )
115
88
 
116
- return @disabled_gems.keys
89
+ gem_require_name = name.to_s.gsub( '/', '-' )
117
90
 
118
- end
91
+ name = gem_require_name.to_sym
92
+
93
+ if gem_instance = @gems[ name ]
94
+ if directory_or_path
95
+ gem_instance.set_directory( directory_or_path )
96
+ end
97
+ else
98
+ @gems[ name ] = gem_instance = Gem.new( name, directory_or_path )
99
+ end
100
+
101
+ return gem_instance
119
102
 
103
+ end
104
+
120
105
  ##################
121
- # self.gemsets #
106
+ # self.get_gem #
122
107
  ##################
123
108
 
124
109
  ###
125
- # Get hash of gemsets and their gem or gemset members.
110
+ # Retrieve defined gem.
126
111
  #
127
- # @return [Hash{Symbol=>Array<Symbol>}] Hash of gemsets and their gem or gemset members.
112
+ # @param name
128
113
  #
129
- def self.gemsets
114
+ # Name of gem.
115
+ #
116
+ # @return [::Development::Gem]
117
+ #
118
+ def self.get_gem( name )
130
119
 
131
- return @gemsets
120
+ return @gems[ name.to_sym ]
132
121
 
133
122
  end
134
-
135
- ####################
136
- # self.locations #
137
- ####################
123
+
124
+ ###############
125
+ # self.gems #
126
+ ###############
138
127
 
139
128
  ###
140
- # Hash of locations and the gems or gemsets located at each.
129
+ # Get hash of gems.
141
130
  #
142
- # @return [Hash{Symbol=>Array{String}]
131
+ # @return [Hash{Symbol=>Array<::Development::Gem>}] Hash of gemsets and their gem or gemset members.
143
132
  #
144
- def self.locations
133
+ def self.gems
145
134
 
146
- return @locations
135
+ return @gems
147
136
 
148
137
  end
149
138
 
150
- ###################
151
- # self.location #
152
- ###################
139
+ #################
140
+ # self.gemset #
141
+ #################
153
142
 
154
143
  ###
155
- # Get gems or gemsets associated with location.
144
+ # Define a gem or retrieve defined gem.
145
+ #
146
+ # @overload self.gemset( name, gem_or_gemset, ... )
156
147
  #
157
- # @param location_name
148
+ # @param name
149
+ #
150
+ # Name of gemset.
158
151
  #
159
- # Name of location.
152
+ # @param gem_or_gemset
160
153
  #
161
- # @return [Array<Symbol>]
154
+ # Gem or Gemset name or instance.
162
155
  #
163
- def self.location( location_name )
156
+ # @return [::Development::Gemset]
157
+ #
158
+ def self.gemset( name, *gems_or_gemsets )
159
+
160
+ name = name.to_sym
161
+
162
+ unless gemset_instance = @gemsets[ name ]
163
+ @gemsets[ name ] = gemset_instance = Gemset.new( name )
164
+ end
164
165
 
165
- return @locations[ location_name.to_sym ]
166
+ gemset_instance.add( *gems_or_gemsets )
167
+
168
+ return gemset_instance
166
169
 
167
170
  end
168
171
 
169
- ######################################################################################################################
170
- private ##########################################################################################################
171
- ######################################################################################################################
172
+ #####################
173
+ # self.get_gemset #
174
+ #####################
172
175
 
173
176
  ###
174
- # @private
177
+ # Retrieve defined gemset.
175
178
  #
176
- # Container to namespace exceptions.
177
- #
178
- module Exception
179
- end
180
-
181
- ###
182
- # Name of configuration file: .development.
179
+ # @param name
183
180
  #
184
- ConfigurationFileName = '.development'
185
-
186
- @enabled_gems = { }
187
- @disabled_gems = { }
188
-
189
- @gemsets = { }
190
- @gem_locations = { }
191
-
192
- @general_load_paths = [ ]
193
-
194
- @loaded_gems = { }
195
-
196
- @named_directories = { }
197
- @locations = { }
198
-
199
- @enable_for_all = false
200
-
201
- ################
202
- # self.clear #
203
- ################
204
-
205
- ###
206
- # Reset internal tracking variables.
181
+ # Name of gemset.
207
182
  #
208
- # @return [Development] Self.
183
+ # @return [::Development::Gemset]
209
184
  #
210
- def self.clear
185
+ def self.get_gemset( name )
211
186
 
212
- @enabled_gems.clear
213
- @disabled_gems.clear
214
- @gemsets.clear
215
- @gem_locations.clear
216
- @general_load_paths.clear
217
- @loaded_gems.clear
218
- @named_directories.clear
219
- @locations.clear
220
- @enable_for_all = false
221
-
222
- return self
187
+ return @gemsets[ name.to_sym ]
223
188
 
224
189
  end
225
190
 
226
- ##################################
227
- # self.load_configuration_file #
228
- ##################################
191
+ ##################
192
+ # self.gemsets #
193
+ ##################
229
194
 
230
195
  ###
231
- # Load configuration file.
232
- # Looks first in project directory, second in home directory.
233
- # If configuration file is not found in project directory, Development will not load.
196
+ # Get hash of gemsets and their gem or gemset members.
234
197
  #
235
- def self.load_configuration_file( path )
236
-
237
- # we build up a configuration line and process when we reach its end (the next line)
238
- expression_string = ''
239
-
240
- configuration_file_path = ::File.expand_path( path )
241
-
242
- @line_number = 0
243
-
244
- ::File.open( configuration_file_path ).each_with_index do |this_line, this_line_number|
198
+ # @return [Hash{Symbol=>Array<::Development::Gemset>}] Hash of gemsets and their gem or gemset members.
199
+ #
200
+ def self.gemsets
245
201
 
246
- # when parse_configuration_file_line returns false we have a complete expression
247
- while parse_configuration_file_line( expression_string, this_line )
248
-
249
- # process expression_string
250
- parse_configuration_expression( expression_string )
251
-
252
- # reset expression_string
253
- expression_string.clear
254
-
255
- # update line number where expression begins
256
- @line_number = this_line_number
257
- unless this_line.empty?
258
- @line_number += 1
259
- end
260
-
261
- # loop will cause start with this_line, which told parse_configuration_file_line
262
- # that we were done, and which is therefore not yet processed
263
-
264
- end
265
-
266
- end
267
-
268
- parse_configuration_expression( expression_string )
202
+ return @gemsets
269
203
 
270
204
  end
271
-
272
- ########################################
273
- # self.parse_configuration_file_line #
274
- ########################################
205
+
206
+ ####################
207
+ # self.directory #
208
+ ####################
275
209
 
276
210
  ###
277
- # Parses configuration_file_line to construct expression_string from multiple configuration_file_lines.
278
- #
279
- # @param expression_string
280
- #
281
- # Configuration expression that spans one or more lines in configuration file.
211
+ # Return path for directory name.
282
212
  #
283
- # @param configuration_file_line
213
+ # @overload self.directory( name, path, gem_or_gemset, ... )
284
214
  #
285
- # Literal line from configuration file (may only be part of an expression).
215
+ # @param directory_name
216
+ #
217
+ # Name of named directory.
218
+ #
219
+ # @param path_parts
220
+ #
221
+ # The first can be a Symbol naming a directory; any can be String describing directory path.
286
222
  #
287
- # @return [true,false] Whether expression is still complete.
288
- # True means configuration_file_line was not processed.
223
+ # @return [::Development::Directory] Directory.
289
224
  #
290
- def self.parse_configuration_file_line( expression_string, configuration_file_line, continuation = false )
291
-
292
- expression_complete = false
293
-
294
- # if we begin with a comment we can throw away the line
295
- if configuration_file_line[ 0 ] == '#'
296
-
297
- # nothing to do - we just ignore the line
298
-
299
- # if we begin with whitespace we have a continuation
300
- elsif configuration_file_line[ 0 ] =~ /\s/
301
-
302
- configuration_file_line.strip!
303
-
304
- expression_complete = parse_configuration_file_line( expression_string, configuration_file_line, true )
225
+ def self.directory( name, *path_parts )
305
226
 
306
- elsif continuation
307
-
308
- unless expression_string.empty?
309
- unless configuration_file_line.empty?
310
- expression_string << ' '
311
- end
312
- end
313
- expression_string << configuration_file_line.strip
227
+ name = name.to_sym
314
228
 
315
- elsif expression_string.empty?
316
-
317
- expression_string.replace( configuration_file_line.strip )
318
-
319
- # otherwise we reached the next line of the configuration file
229
+ if directory_instance = @directories[ name ]
230
+ unless path_parts.empty?
231
+ directory_instance.set_path( *path_parts )
232
+ end
320
233
  else
321
-
322
- expression_complete = true
323
-
234
+ if path_parts.empty?
235
+ raise ::ArgumentError, 'Path required to create directory :' << name.to_s + '.'
236
+ end
237
+ @directories[ name ] = directory_instance = Directory.new( name, *path_parts )
324
238
  end
325
-
326
- return expression_complete
327
-
328
- end
329
-
330
- #########################################
331
- # self.parse_configuration_expression #
332
- #########################################
333
-
334
- ###
335
- # Parse single configuration expression built up from one or more actual configuration file lines.
336
- #
337
- # @param expression_string
338
- #
339
- # String describing configuration directive.
340
- #
341
- # @return [Object] self.
342
- #
343
- def self.parse_configuration_expression( expression_string )
344
-
345
- case expression_string[ 0 ]
346
-
347
- # + - named directory expression
348
- when '+'
349
-
350
- # either a directory definition or a general directory directive
351
- # directory definitions are multiplart, whereas general directory definitions are one part
352
- parse_named_directory_expression( expression_string )
353
-
354
- # - - remove general path
355
- when '-'
356
-
357
- parse_remove_general_load_path_expression( expression_string )
358
-
359
- # = - gemset expression
360
- when '='
361
-
362
- parse_gemset_expression( expression_string )
363
-
364
- # @ - location expression
365
- when '@'
366
-
367
- parse_general_directory_or_location_expression( expression_string )
368
239
 
369
- # ! - enable/disable expression
370
- when '!'
371
-
372
- parse_enable_disable_expression( expression_string )
373
-
374
- # general path expression
375
- else
376
-
377
- parse_general_load_path_expression( expression_string )
378
-
379
- end
380
-
381
- return self
240
+ return directory_instance
382
241
 
383
242
  end
384
243
 
385
- #########################################################
386
- # self.parse_general_directory_or_location_expression #
387
- #########################################################
244
+ ########################
245
+ # self.get_directory #
246
+ ########################
388
247
 
389
248
  ###
390
- # Parse expression string that has been determined as either a general path or location expression.
249
+ # Return directory with name.
391
250
  #
392
- # @param expression_string
251
+ # @param name
393
252
  #
394
- # String describing general path or location expression.
253
+ # Name of directory to return.
395
254
  #
396
- # @return [Object] Self.
255
+ # @return [::Development::Directory] Directory.
397
256
  #
398
- def self.parse_general_directory_or_location_expression( expression_string )
399
-
400
- # if we have multiple parts
401
- if whitespace_index = expression_string =~ /\s/
402
-
403
- parse_location_expression( expression_string )
257
+ def self.get_directory( name )
404
258
 
405
- # if we have one part
406
- else
407
-
408
- parse_general_load_path_expression( expression_string )
409
-
410
- end
411
-
412
- return self
259
+ return @directories[ name.to_sym ]
413
260
 
414
261
  end
415
-
416
- ###########################################
417
- # self.parse_named_directory_expression #
418
- ###########################################
262
+
263
+ ######################
264
+ # self.directories #
265
+ ######################
419
266
 
420
267
  ###
421
- # Parse expression string that has been determined as a named directory expression.
422
- #
423
- # @param expression_string
424
- #
425
- # String describing named directory expression.
268
+ # Get Hash of named directory names to paths.
426
269
  #
427
- # @return [Object] Self.
270
+ # @return [Hash{Symbol=>::Development::Directory}]
428
271
  #
429
- def self.parse_named_directory_expression( expression_string )
430
-
431
- # +directory_name path
272
+ def self.directories
432
273
 
433
- unless whitespace_index = expression_string =~ /\s/
434
- raise Exception::MalformedExpression::
435
- MalformedNamedDirectoryExpression.new( expression_string, @line_number )
436
- end
274
+ return @directories
437
275
 
438
- directory_name = expression_string.slice( 1, whitespace_index - 1 )
439
- slice_length = expression_string.length - whitespace_index
440
- path = expression_string.slice( whitespace_index + 1, slice_length ).strip
276
+ end
441
277
 
442
- case path[0]
443
- when '@'
444
- path_parts = path.split( '/' )
445
- named_path_name = path_parts.shift
446
- named_path_name.slice!( 0, 1 )
447
- path = ::File.join( directory( named_path_name ), path_parts )
448
- end
278
+ ############################
279
+ # self.general_load_path #
280
+ ############################
281
+
282
+ ###
283
+ # Define general load path.
284
+ #
285
+ # @param path
286
+ #
287
+ # String describing directory path.
288
+ #
289
+ # @return [::Development] Self.
290
+ #
291
+ def self.general_load_path( path )
449
292
 
450
- @named_directories[ directory_name.to_sym ] = ::File.expand_path( path )
293
+ @general_load_paths.push( ::File.expand_path( path ) )
451
294
 
452
295
  return self
453
296
 
454
297
  end
455
298
 
456
- ##################################
457
- # self.parse_gemset_expression #
458
- ##################################
299
+ ###################################
300
+ # self.remove_general_load_path #
301
+ ###################################
459
302
 
460
303
  ###
461
- # Parse expression string that has been determined as a gemset expression.
462
- #
463
- # @param expression_string
464
- #
465
- # String describing gemset expression.
304
+ # Remove general load path.
305
+ #
306
+ # @param path
307
+ #
308
+ # String describing directory path.
466
309
  #
467
- # @return [Object] Self.
310
+ # @return [::Development] Self.
468
311
  #
469
- def self.parse_gemset_expression( expression_string )
470
-
471
- # =gemset gem_or_set_name[,] ...
472
- # =gemset +gem_or_set_name[,] ...
473
- # =gemset -gem_or_set_name[,] ...
474
-
475
- gemset_name = parse_base_action_from_expression_string( expression_string )
476
-
477
- gemset = create_gemset( gemset_name )
312
+ def self.remove_general_load_path( path )
478
313
 
479
- parse_gem_names_from_expression_string( gemset, expression_string )
314
+ @general_load_paths.delete( ::File.expand_path( path ) )
480
315
 
481
316
  return self
482
317
 
483
318
  end
484
-
485
- ###################################################
486
- # self.parse_base_action_from_expression_string #
487
- ###################################################
319
+
320
+ #############################
321
+ # self.general_load_paths #
322
+ #############################
488
323
 
489
324
  ###
490
- # Parse signal character (+, -, =, @, !) and base action string from expression.
325
+ # Get Array of paths that will be used for general loading purposes if a specific gem path is not given.
491
326
  #
492
- # @param expression_string
327
+ # @return [Array<String>] Paths to be used for general loading purposes.
493
328
  #
494
- # Expression string.
329
+ def self.general_load_paths
330
+
331
+ return @general_load_paths
332
+
333
+ end
334
+
335
+ ###########################
336
+ # self.enabled_for_all? #
337
+ ###########################
338
+
339
+ ###
340
+ # Query whether Development is set to search in general paths for any gem, even if not explicitly enabled.
495
341
  #
496
- # @return [String] Base action string.
342
+ # @return [true,false] Whether general gem search is enabled.
497
343
  #
498
- def self.parse_base_action_from_expression_string( expression_string )
499
-
500
- base_action = nil
501
-
502
- # get rid of =
503
- expression_string.slice!( 0, 1 )
504
-
505
- if whitespace_index = expression_string =~ /\s/
506
- base_action = expression_string.slice!( 0, whitespace_index )
507
- else
508
- base_action = expression_string.dup
509
- expression_string.clear
510
- end
344
+ def self.enabled_for_all?
511
345
 
512
- expression_string.strip!
513
-
514
- return base_action
346
+ return @enable_for_all
515
347
 
516
348
  end
517
-
518
- #################################################
519
- # self.parse_gem_names_from_expression_string #
520
- #################################################
349
+
350
+ ##################
351
+ # self.enable! #
352
+ ##################
521
353
 
522
354
  ###
523
- # Parse gem name list separated by optional comma and white space from expression.
524
- #
525
- # @param hash
526
- #
527
- # Hash to add parsed data to.
355
+ # Enable gems.
528
356
  #
529
- # @param expression_string
357
+ # @overload enable!
530
358
  #
531
- # Expression string.
359
+ # @overload enable( gem_or_gemset, ... )
532
360
  #
533
- # @param require_exist [true,false]
361
+ # @param gem_or_gemset
534
362
  #
535
- # Raise exception if gems do not exist.
363
+ # Gem or Gemset instance or name to enable.
536
364
  #
537
- # @return [Development] Self.
365
+ # @return [::Development] Self.
538
366
  #
539
- def self.parse_gem_names_from_expression_string( hash, expression_string, require_exist = false )
367
+ def self.enable!( *gem_or_gemset_names )
368
+
369
+ if gem_or_gemset_names.empty?
540
370
 
541
- while next_whitespace_index = expression_string =~ /\s/
542
- parse_gem_name_from_expression_string( hash, expression_string, next_whitespace_index )
543
- end
371
+ @enable_for_all = true
372
+ @gems.each do |this_gem_name, this_gem|
373
+ this_gem.enable!
374
+ end
375
+ @gemsets.each do |this_gemset_name, this_gemset|
376
+ this_gemset.enable!
377
+ end
378
+
379
+ else
380
+
381
+ gem_or_gemset_names.each do |this_gemset_or_gem_name|
382
+ if this_gemset_or_gem_name.is_a?( ::Hash )
383
+ this_gemset_or_gem_name.each do |this_gem, this_path|
384
+ gem_instance = gem( this_gem )
385
+ gem_instance.set_directory( this_path )
386
+ gem_instance.enable!
387
+ end
388
+ else
389
+ this_gem_or_gemset_reference_name = this_gemset_or_gem_name.to_s.gsub( '/', '-' ).to_sym
390
+ if gem_instance = @gems[ this_gem_or_gemset_reference_name ]
391
+ gem_instance.enable!
392
+ end
393
+ if gemset_instance = @gemsets[ this_gem_or_gemset_reference_name ]
394
+ gemset_instance.enable!
395
+ end
396
+ end
397
+ end
544
398
 
545
- # also slice till the end
546
- parse_gem_name_from_expression_string( hash, expression_string, expression_string.length, require_exist )
399
+ end
547
400
 
548
401
  return self
549
402
 
550
403
  end
551
404
 
552
- ################################################
553
- # self.parse_gem_name_from_expression_string #
554
- ################################################
555
-
405
+ ###################
406
+ # self.disable! #
407
+ ###################
408
+
556
409
  ###
557
- # Helper method to slice gem name from expression string and add or subtract from gemset.
558
- #
559
- # @param hash
410
+ # Disable gems.
560
411
  #
561
- # Hash to add parsed data to.
412
+ # @overload disable!
562
413
  #
563
- # @param gemset
414
+ # @overload disable( gem_or_gemset, ... )
564
415
  #
565
- # Gemset instance.
416
+ # @param gem_or_gemset
566
417
  #
567
- # @param expression_string
418
+ # Gem or Gemset instance or name to disable.
568
419
  #
569
- # Expression string.
570
- #
571
- # @param slice_to_index
572
- #
573
- # Index to slice expression string to.
574
- #
575
- # @param require_exist [true,false]
576
- #
577
- # Raise exception if gems do not exist.
420
+ # @return [::Development] Self.
578
421
  #
579
- # @return [Symbol] Parsed gem name.
580
- #
581
- def self.parse_gem_name_from_expression_string( hash, expression_string, slice_to_index, require_exist = false )
582
-
583
- gem_name = expression_string.slice!( 0, slice_to_index )
422
+ def self.disable!( *gem_or_gemset_names )
584
423
 
585
- unless gem_name.empty?
586
-
587
- case gem_name[ -1 ]
588
- when ','
589
- gem_name.slice!( -1, 1 )
424
+ if gem_or_gemset_names.empty?
425
+
426
+ @enable_for_all = false
427
+ @gems.each do |this_gem_name, this_gem|
428
+ this_gem.disable!
590
429
  end
591
-
592
- should_add = true
593
-
594
- case gem_name[ 0 ]
595
- when '+'
596
- gem_name.slice!( 0, 1 )
597
- when '-'
598
- gem_name.slice!( 0, 1 )
599
- hash.delete( gem_name.to_sym )
600
- should_add = false
601
- else
430
+ @gemsets.each do |this_gemset_name, this_gemset|
431
+ this_gemset.disable!
602
432
  end
603
433
 
604
- # ensure we have 'gem-subname' rather than 'gem/subname'
605
- # we really just need one or the other consistently
606
- gem_name.gsub!( '/', '-' )
607
-
608
- gem_name = gem_name.to_sym
434
+ else
609
435
 
610
- if require_exist
611
- unless @enabled_gems.has_key?( gem_name ) or
612
- @disabled_gems.has_key?( gem_name ) or
613
- @gemsets.has_key?( gem_name)
614
- raise Exception::ExpressionError::UnknownGemOrGemsetName.new( gem_name, @line_number )
436
+ gem_or_gemset_names.each do |this_gemset_or_gem_name|
437
+ this_gem_or_gemset_reference_name = this_gemset_or_gem_name.to_s.gsub( '/', '-' ).to_sym
438
+ if gem_instance = @gems[ this_gem_or_gemset_reference_name ]
439
+ gem_instance.disable!
440
+ end
441
+ if gemset_instance = @gemsets[ this_gem_or_gemset_reference_name ]
442
+ gemset_instance.disable!
615
443
  end
616
444
  end
617
445
 
618
- if should_add
619
- hash[ gem_name ] = true
620
- end
621
-
622
- expression_string.strip!
623
-
624
446
  end
625
-
626
- return gem_name
627
-
628
- end
629
447
 
630
- ########################
631
- # self.create_gemset #
632
- ########################
633
-
634
- ###
635
- # Create gemset with name.
636
- #
637
- # @param gemset_name
638
- #
639
- # Name of gemset.
640
- #
641
- # @return [Array] Gemset.
642
- #
643
- def self.create_gemset( gemset_name )
448
+ return self
644
449
 
645
- gemset_name = gemset_name.to_sym
646
-
647
- unless gemset = @gemsets[ gemset_name ]
648
- @gemsets[ gemset_name ] = gemset = { }
649
- end
650
-
651
- return gemset
652
-
653
450
  end
654
-
655
- #################
656
- # self.gemset #
657
- #################
658
451
 
452
+ #############
453
+ # loaded? #
454
+ #############
455
+
659
456
  ###
660
- # Get gemset with name.
457
+ # Query whether gem was loaded via Development rather than standard require.
661
458
  #
662
- # @param gemset_name
459
+ # @param gem_name
663
460
  #
664
- # Name of gemset.
461
+ # Name of gem.
665
462
  #
666
- # @return [Array] Gemset.
463
+ # @return [true,false] Whether gem was loaded via Development.
667
464
  #
668
- def self.gemset( gemset_name )
669
-
670
- gemset_members = nil
465
+ def loaded?( gem_name )
671
466
 
672
- if gemset = @gemsets[ gemset_name.to_sym ]
673
- gemset_members = gemset.keys
674
- end
467
+ gem_require_name = gem_name.to_s.gsub( '/', '-' )
675
468
 
676
- return gemset_members
469
+ return @loaded_gems.has_key?( gem_require_name.to_sym )
677
470
 
678
471
  end
679
-
680
- ####################################
681
- # self.parse_location_expression #
682
- ####################################
472
+
473
+ ######################################################################################################################
474
+ private ##########################################################################################################
475
+ ######################################################################################################################
683
476
 
477
+ initialize
478
+
479
+ ##################
480
+ # self.require #
481
+ ##################
482
+
684
483
  ###
685
- # Parse expression string that has been determined as a location expression.
484
+ # Filters requires to match configuration specifications for loading development paths instead of production gems.
686
485
  #
687
- # @param expression_string
486
+ # @param gem_name_or_path
688
487
  #
689
- # String describing location expression.
488
+ # Gem name or path to file passed to {::Object#require}.
690
489
  #
691
- # @return [Object] Self.
490
+ # @return [true,false] Whether Development handled gem_name_or_path (true) or processing should continue (false).
692
491
  #
693
- def self.parse_location_expression( expression_string )
694
-
695
- # @directory_name gem_or_set_name[,] ...
696
-
697
- directory_name = parse_base_action_from_expression_string( expression_string )
698
-
699
- directory_name = directory_name.to_sym
700
-
701
- unless @named_directories.has_key?( directory_name )
702
- raise Exception::MalformedExpression::UnknownDirectoryName.new( directory_name, @line_number )
703
- end
704
-
705
- unless directory_members = @locations[ directory_name ]
706
- @locations[ directory_name ] = directory_members = { }
707
- end
708
-
709
- parse_gem_names_from_expression_string( directory_members, expression_string )
710
-
711
- directory_members.each do |this_gem_or_gemset, true_value|
712
- if gemset = @gemsets[ this_gem_or_gemset ]
713
- gemset.each do |this_gem, true_value|
714
- @gem_locations[ this_gem ] = directory_name
715
- end
716
- else
717
- @gem_locations[ this_gem_or_gemset ] = directory_name
718
- end
719
- end
720
-
721
- return self
492
+ def self.require( gem_name_or_path )
722
493
 
723
- end
494
+ did_load = nil
724
495
 
725
- ##########################################
726
- # self.parse_enable_disable_expression #
727
- ##########################################
496
+ # if our path ends with an extension we are not requiring a gem and thus not responsible for managing it
497
+ if ::File.extname( gem_name_or_path ).empty?
728
498
 
729
- ###
730
- # Parse expression string that has been determined as a enable/disable expression.
731
- #
732
- # @param expression_string
733
- #
734
- # String describing enable/disable expression.
735
- #
736
- # @return [Object] Self.
737
- #
738
- def self.parse_enable_disable_expression( expression_string )
739
-
740
- # !enable
741
- # !disable
742
- # !enable gem_or_set_name[,] ...
743
- # !disable gem_or_set_name[,] ...
744
-
745
- # enable or disable
746
- enable_or_disable = parse_base_action_from_expression_string( expression_string )
747
-
748
- gems = nil
749
- unless expression_string.empty?
750
- gems = { }
751
- parse_gem_names_from_expression_string( gems, expression_string )
752
- end
753
-
754
- case enable_or_disable = enable_or_disable.to_sym
499
+ gem_directory_name = gem_name_or_path.to_s.gsub( '/', '-' )
500
+ gem_require_name = gem_name_or_path.to_s.gsub( '-', '/' )
501
+
502
+ gem_reference_name = gem_directory_name.to_sym
755
503
 
756
- when :enable
504
+ if @loaded_gems.has_key?( gem_reference_name )
757
505
 
758
- if gems
759
- gems.each do |this_gem_or_gemset, true_value|
760
- if gemset = @gemsets[ this_gem_or_gemset ]
761
- gemset.each do |this_gem, true_value|
762
- @enabled_gems[ this_gem ] = true
763
- @disabled_gems.delete( this_gem )
764
- end
765
- else
766
- this_gem = this_gem_or_gemset
767
- @enabled_gems[ this_gem ] = true
768
- @disabled_gems.delete( this_gem )
769
- end
770
- end
771
- else
772
- @disabled_gems.delete_if do |this_gem, true_value|
773
- @enabled_gems[ this_gem ] = true
774
- true
506
+ did_load = false
507
+
508
+ else
509
+
510
+ # look for gem name in enabled gems/gemsets
511
+ if gem_instance = @gems[ gem_reference_name ]
512
+
513
+ if gem_instance.enabled?
514
+ load_gem_instance( gem_instance, gem_directory_name, gem_require_name )
515
+ did_load = true
516
+ elsif @enable_for_all && ! gem_instance.disabled?
517
+ did_load = attempt_load_from_general_load_paths( gem_directory_name, gem_require_name )
775
518
  end
776
- @enable_for_all = true
519
+
520
+ # otherwise see if we perform general loading
777
521
  end
778
522
 
779
- when :disable
780
-
781
- if gems
782
- gems.each do |this_gem_or_gemset, true_value|
783
- if gemset = @gemsets[ this_gem_or_gemset ]
784
- gemset.each do |this_gem, true_value|
785
- @disabled_gems[ this_gem ] = true
786
- @enabled_gems.delete( this_gem )
787
- end
788
- else
789
- this_gem = this_gem_or_gemset
790
- @disabled_gems[ this_gem ] = true
791
- @enabled_gems.delete( this_gem )
792
- end
793
- end
794
- else
795
- @enabled_gems.delete_if do |this_gem, true_value|
796
- @disabled_gems[ this_gem ] = true
797
- true
798
- end
799
- @enable_for_all = false
523
+ if ! did_load and @enable_for_all
524
+ attempt_load_from_general_load_paths( gem_directory_name, gem_require_name )
800
525
  end
801
526
 
527
+ end
528
+
802
529
  end
803
530
 
804
- # do we have gems?
805
-
806
- return self
531
+ return did_load
807
532
 
808
533
  end
809
-
810
- #############################################
811
- # self.parse_general_load_path_expression #
812
- #############################################
813
-
534
+
535
+ ############################
536
+ # self.load_gem_instance #
537
+ ############################
538
+
814
539
  ###
815
- # Parse expression string that has been determined as a general directory expression.
540
+ # Load gem using configuration information provides by gem instance.
816
541
  #
817
- # @param expression_string
542
+ # @param gem_instance
818
543
  #
819
- # String describing general directory expression.
544
+ # Gem instance.
820
545
  #
821
- # @return [Object] Self.
546
+ # @param gem_directory_name
822
547
  #
823
- def self.parse_general_load_path_expression( expression_string )
824
-
825
- # path/to/directory, ~/path/to/directory, /path/to/directory
826
- # +directory_name/path/from/directory
827
-
828
- case expression_string[ 0 ]
829
-
830
- when '@'
831
-
832
- path_parts = expression_string.split( '/' )
833
- named_directory = path_parts.shift
834
- named_directory.slice!( 0, 1 )
835
- named_directory = named_directory.to_sym
836
- expression_string = ::File.expand_path( ::File.join( directory( named_directory ), path_parts ) )
837
-
838
- end
839
-
840
- @general_load_paths.push( ::File.expand_path( expression_string ) )
841
-
842
- return self
843
-
844
- end
845
-
846
- ####################################################
847
- # self.parse_remove_general_load_path_expression #
848
- ####################################################
849
-
850
- ###
851
- # Parse expression string that has been determined as a remove-general-directory expression.
548
+ # Gem directory in hyphenated gem-subgem format.
852
549
  #
853
- # @param expression_string
550
+ # @param gem_require_name
854
551
  #
855
- # String describing remove general directory expression.
552
+ # Gem name in slashed gem/subgem format.
856
553
  #
857
- # @return [Object] Self.
554
+ # @return [::Development] Self.
858
555
  #
859
- def self.parse_remove_general_load_path_expression( expression_string )
556
+ def self.load_gem_instance( gem_instance, gem_directory_name, gem_require_name )
860
557
 
861
- # -path/to/directory, -~/path/to/directory, -/path/to/directory
862
-
863
- expression_string.slice!( 0, 1 )
864
- path_string = expression_string.dup
865
- expression_string.clear
558
+ gem_location = gem_instance.directory.path
559
+
560
+ if path_is_gem_directory?( gem_location, gem_require_name )
561
+ # already set
562
+ elsif path_contains_gem_directory?( gem_location, gem_directory_name, gem_require_name )
563
+ gem_location = ::File.join( gem_location, gem_directory_name )
564
+ end
866
565
 
867
- @general_load_paths.delete( ::File.expand_path( path_string ) )
566
+ load_gem_in_path( gem_location, gem_directory_name )
567
+ @loaded_gems[ gem_require_name.to_sym ] = true
868
568
 
869
569
  return self
870
570
 
871
571
  end
872
-
873
- ##################
874
- # self.require #
875
- ##################
572
+
573
+ ###############################################
574
+ # self.attempt_load_from_general_load_paths #
575
+ ###############################################
876
576
 
877
577
  ###
878
- # Filters requires to match configuration specifications for loading development paths instead of production gems.
578
+ # Attempt to load gem from general load paths if any are provided.
879
579
  #
880
- # @param gem_name_or_path
580
+ # @param gem_directory_name
881
581
  #
882
- # Gem name or path to file passed to {::Object#require}.
582
+ # Gem directory in hyphenated gem-subgem format.
883
583
  #
884
- # @return [true,false] Whether Development handled gem_name_or_path (true) or processing should continue (false).
584
+ # @param gem_require_name
885
585
  #
886
- def self.require( gem_name_or_path )
586
+ # Gem name in slashed gem/subgem format.
587
+ #
588
+ # @return [::Development] Self.
589
+ #
590
+ def self.attempt_load_from_general_load_paths( gem_directory_name, gem_require_name )
887
591
 
888
- did_load = nil
592
+ gem_require_name = gem_directory_name.to_sym
593
+
594
+ did_load = false
595
+
596
+ # look in each path for gem - use first to match
597
+ @general_load_paths.each do |this_load_path|
889
598
 
890
- # if our path ends with an extension we are not requiring a gem and thus not responsible for managing it
891
- if ::File.extname( gem_name_or_path ).empty?
599
+ if path_is_gem_directory?( this_load_path, gem_require_name )
892
600
 
893
- gem_name = gem_name_or_path.to_s
601
+ load_gem_in_path( this_load_path, gem_directory_name )
602
+ @loaded_gems[ gem_require_name ] = true
603
+ did_load = true
604
+ break
894
605
 
895
- if @loaded_gems.has_key?( gem_name.to_sym )
896
- did_load = false
897
- else
898
- # ensure we have 'gem-subname' rather than 'gem/subname'
899
- # we really just need one or the other consistently
900
- gem_name = gem_name.gsub( '/', '-' )
901
- gem_directory_name = gem_name.gsub( '/', '-' )
606
+ elsif path_contains_gem_directory?( this_load_path, gem_directory_name, gem_require_name )
902
607
 
903
- # look for gem name in enabled gems/gemsets
904
- if @enabled_gems.include?( gem_name.to_sym ) or
905
- @enable_for_all && ! @disabled_gems.include?( gem_name.to_sym )
906
-
907
- if directory_name = @gem_locations[ gem_name.to_sym ]
908
-
909
- load_path = directory( directory_name )
910
-
911
- if gem_name_in_load_path?( load_path, gem_directory_name )
912
-
913
- load_gem_in_path( load_path, gem_directory_name )
914
- @loaded_gems[ gem_name.to_sym ] = true
915
- did_load = true
916
-
917
- elsif gem_name_at_load_path?( load_path, gem_directory_name )
918
-
919
- load_gem_at_path( load_path, gem_directory_name )
920
- @loaded_gems[ gem_name.to_sym ] = true
921
- did_load = true
922
-
923
- end
924
-
925
- end
926
-
927
- unless did_load
928
-
929
- # look in each path for gem - use first to match
930
- @general_load_paths.each do |this_load_path|
608
+ gem_location = ::File.join( this_load_path, gem_directory_name )
931
609
 
932
- # look for gem name at load path
933
- if gem_name_at_load_path?( this_load_path, gem_name )
934
- load_gem_at_path( this_load_path, gem_name )
935
- @loaded_gems[ gem_name.to_sym ] = true
936
- did_load = true
937
- end
610
+ load_gem_in_path( gem_location, gem_directory_name )
611
+ @loaded_gems[ gem_require_name ] = true
612
+ did_load = true
613
+ break
938
614
 
939
- end
940
-
941
- end
942
-
943
- end
944
-
945
615
  end
946
-
616
+
947
617
  end
948
618
 
949
619
  return did_load
@@ -951,7 +621,7 @@ module ::Development
951
621
  end
952
622
 
953
623
  #################################
954
- # self.gem_name_in_load_path? #
624
+ # self.path_is_gem_directory? #
955
625
  #################################
956
626
 
957
627
  ###
@@ -961,33 +631,29 @@ module ::Development
961
631
  #
962
632
  # Path where gem directory might be located.
963
633
  #
964
- # @param gem_directory_name
634
+ # @param gem_require_name
965
635
  #
966
636
  # Name of gem. Assumes gem-subname is used rather than gem/subname.
967
637
  #
968
638
  # @return [true,false] Whether gem name is present.
969
639
  #
970
- def self.gem_name_in_load_path?( gem_path, gem_directory_name, require_gem_at_path = false )
640
+ def self.path_is_gem_directory?( load_path, gem_require_name )
971
641
 
972
642
  exists_at_load_path = false
973
643
 
974
- gem_name = gem_directory_name.gsub( '-', '/' )
975
-
976
- gem_require_file = ::File.join( gem_path, 'lib', gem_name ) + '.rb'
977
-
644
+ gem_require_file = ::File.join( load_path, 'lib', gem_require_name ) + '.rb'
645
+
978
646
  if ::File.exist?( ::File.expand_path( gem_require_file ) )
979
-
980
647
  exists_at_load_path = true
981
-
982
648
  end
983
649
 
984
650
  return exists_at_load_path
985
651
 
986
652
  end
987
653
 
988
- #################################
989
- # self.gem_name_at_load_path? #
990
- #################################
654
+ #######################################
655
+ # self.path_contains_gem_directory? #
656
+ #######################################
991
657
 
992
658
  ###
993
659
  # Query whether gem name is present at load path, meaning load path specifies the directory holding gem directory.
@@ -1000,17 +666,20 @@ module ::Development
1000
666
  #
1001
667
  # Name of gem. Assumes gem-subname is used rather than gem/subname.
1002
668
  #
669
+ # @param gem_require_name
670
+ #
671
+ # Name of gem. Assumes gem/subname is used rather than gem-subname.
672
+ #
1003
673
  # @return [true,false] Whether gem name is present.
1004
674
  #
1005
- def self.gem_name_at_load_path?( load_path, gem_directory_name, require_gem_at_path = false )
675
+ def self.path_contains_gem_directory?( load_path, gem_directory_name, gem_require_name )
1006
676
 
1007
677
  exists_at_load_path = false
1008
678
 
1009
- gem_name = gem_directory_name.gsub( '-', '/' )
1010
679
  gem_path = ::File.join( load_path, gem_directory_name )
1011
680
 
1012
- gem_require_file = ::File.join( gem_path, 'lib', gem_name ) + '.rb'
1013
-
681
+ gem_require_file = ::File.join( gem_path, 'lib', gem_require_name ) + '.rb'
682
+
1014
683
  if ::Dir.exist?( ::File.expand_path( gem_path ) ) and
1015
684
  ::File.exist?( ::File.expand_path( gem_require_file ) )
1016
685
 
@@ -1039,69 +708,45 @@ module ::Development
1039
708
  #
1040
709
  # @return [true,false] Whether gem name is present.
1041
710
  #
1042
- def self.load_gem_in_path( gem_path, gem_directory_name )
711
+ def self.load_gem_in_path( load_path, gem_directory_name )
1043
712
 
1044
- gem_name = gem_directory_name.gsub( '-', '/' )
1045
-
1046
- gem_require_file = ::File.join( gem_path, 'lib', gem_name ) + '.rb'
713
+ gem_require_file = ::File.join( load_path, 'lib', gem_directory_name ) + '.rb'
1047
714
  require_relative( ::File.expand_path( gem_require_file ) )
1048
715
 
1049
716
  end
1050
-
1051
- ###########################
1052
- # self.load_gem_at_path #
1053
- ###########################
717
+
718
+ ##################################
719
+ # self.load_configuration_file #
720
+ ##################################
1054
721
 
1055
722
  ###
1056
- # Load gem from path to directory holding gem directory. Assumes gem is present at path.
1057
- #
1058
- # @param load_path
723
+ # Load Development configuration file.
1059
724
  #
1060
- # Path where gem directory might be located.
1061
- #
1062
- # @param gem_directory_name
725
+ # @param path
1063
726
  #
1064
- # Name of gem. Assumes gem-subname is used rather than gem/subname.
727
+ # Location of configuration file.
1065
728
  #
1066
- # @return [true,false] Whether gem name is present.
729
+ # @return [::Development] Self.
1067
730
  #
1068
- def self.load_gem_at_path( load_path, gem_directory_name )
1069
-
1070
- gem_name = gem_directory_name.gsub( '-', '/' )
1071
- gem_path = ::File.join( load_path, gem_directory_name )
731
+ def self.load_configuration_file( path )
1072
732
 
1073
- gem_require_file = ::File.join( gem_path, 'lib', gem_name ) + '.rb'
733
+ absolute_path = ::File.expand_path( path )
1074
734
 
1075
- require_relative( ::File.expand_path( gem_require_file ) )
735
+ if ::File.exists?( absolute_path )
736
+ ::Development::ConfigurationInterface.module_eval do
737
+ alias_method :gem, :gem_method
738
+ end
739
+ load( absolute_path )
740
+ ::Development::ConfigurationInterface.module_eval do
741
+ remove_method :gem
742
+ end
743
+ end
744
+
745
+ return self
1076
746
 
1077
747
  end
1078
748
 
1079
749
  end
1080
750
 
1081
- require_relative 'development/require.rb'
1082
-
1083
- require_relative 'development/exception/expression_error.rb'
1084
- require_relative 'development/exception/expression_error/unknown_directory_name.rb'
1085
- require_relative 'development/exception/expression_error/unknown_gem_or_gemset_name.rb'
1086
-
1087
- require_relative 'development/exception/malformed_expression.rb'
1088
- require_relative 'development/exception/malformed_expression/malformed_named_directory_expression.rb'
1089
- require_relative 'development/exception/malformed_expression/malformed_gemset_expression.rb'
1090
- require_relative 'development/exception/malformed_expression/malformed_location_expression.rb'
1091
- require_relative 'development/exception/malformed_expression/malformed_enable_disable_expression.rb'
1092
- require_relative 'development/exception/malformed_expression/malformed_general_directory_expression.rb'
1093
- require_relative 'development/exception/malformed_expression/malformed_remove_general_directory_expression.rb'
1094
-
1095
- ###
1096
- # Object is enabled with Development require functionality.
1097
- #
1098
- class ::Object
1099
- include ::Development::Require
1100
- extend ::Development::Require
1101
- end
1102
-
1103
- if defined?( ::Bundler )
1104
- ::Development::Require::BundlerSupport.call
1105
- end
1106
-
1107
- ::Development.load_configuration_file( ::File.join( '~', ::Development::ConfigurationFileName ) )
751
+ # post-load setup
752
+ require_relative './setup.rb'