require-magic 0.5.1 → 0.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.textile +186 -0
- data/lib/require-magic.rb +16 -13
- metadata +3 -3
- data/README.rdoc +0 -122
data/README.textile
ADDED
@@ -0,0 +1,186 @@
|
|
1
|
+
h1. Require-Me
|
2
|
+
Includes a DSL for requiring files and folders and some also some static utility functions which can be used in combination.
|
3
|
+
These tools in combination facilitates managing requiring various subfolder structures.
|
4
|
+
|
5
|
+
h2. Require DSL
|
6
|
+
The following example code demonstrates how to use the Require DSL
|
7
|
+
|
8
|
+
<pre>
|
9
|
+
require 'require_me' # include both the static require helpers and the DSL require language
|
10
|
+
require 'require_dsl' # alternatively only include require_dsl (the DSL language)
|
11
|
+
|
12
|
+
# enter subfolder 'mira'
|
13
|
+
Folder.enter 'mira' do |folder|
|
14
|
+
# from new location, enter a subdir
|
15
|
+
folder.enter 'subdir' do |path| # mira/subdir
|
16
|
+
folder.all('**/*.rb').except(/sound\/*.rb/).require
|
17
|
+
end
|
18
|
+
|
19
|
+
# from new location, enter a subdir
|
20
|
+
folder.enter 'another/subdir' do |path|
|
21
|
+
# use file blobs here
|
22
|
+
folder.all('**/*.rb').require
|
23
|
+
end
|
24
|
+
|
25
|
+
# from new location, enter a subdir
|
26
|
+
folder.enter 'a_subdir' do |path|
|
27
|
+
# matching and except are to be used as include and exclude filters
|
28
|
+
# they each take a list containing regular expressions and strings
|
29
|
+
# string arguments are postfixed with .rb internally if not present
|
30
|
+
folder.all('blip/**/*.rb').matching(/_mixin.rb/, /.*\/power/).except(/sound/, /disco/).require
|
31
|
+
|
32
|
+
folder.enter 'sub_a' do |path|
|
33
|
+
folder.enter 'sub_b' do |path| # a_subdir/sub_a/sub_b
|
34
|
+
folder.all('grusch/**/*.rb').require
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
folder.all.require
|
39
|
+
end
|
40
|
+
end
|
41
|
+
</pre>
|
42
|
+
|
43
|
+
If no argument, current path is used as initial folder
|
44
|
+
<pre>
|
45
|
+
# use current path as folder
|
46
|
+
Folder.enter do |folder|
|
47
|
+
folder.all('**/*.rb').require
|
48
|
+
folder.enter 'game' do |path|
|
49
|
+
|
50
|
+
# use static require functions
|
51
|
+
Require.base_path path # set base path to use for Require
|
52
|
+
|
53
|
+
# include .rb files within data1, data2 but not within their subfolders (use recursive instead)
|
54
|
+
Require.folders('data1', 'data2')
|
55
|
+
|
56
|
+
list = path.all('**/*.rb')
|
57
|
+
puts list.matching('sound', 'network').except(/sound/).show_require(:relative)
|
58
|
+
list.matching('sound', 'network').except(/sound/).require
|
59
|
+
end
|
60
|
+
end
|
61
|
+
</pre>
|
62
|
+
|
63
|
+
h2. Static helpers
|
64
|
+
Unit tests demonstrations how to use the static helpers (tests currently broken due to missing data files!):
|
65
|
+
|
66
|
+
h3. Setting the base path
|
67
|
+
|
68
|
+
Setting global base_path
|
69
|
+
<pre>
|
70
|
+
# Set basepath to use for require
|
71
|
+
Require.base_path = File.dirname(__FILE__)
|
72
|
+
</pre>
|
73
|
+
|
74
|
+
Set basepath to use within block
|
75
|
+
<pre>
|
76
|
+
# Set basepath to use within block
|
77
|
+
Require.enter 'sound' do |path|
|
78
|
+
Require.folders 'data' # can be used for any number of folders
|
79
|
+
Require.folder 'data2' # for one folder only
|
80
|
+
end
|
81
|
+
</pre>
|
82
|
+
|
83
|
+
Override base_path
|
84
|
+
<pre>
|
85
|
+
# Override base_path
|
86
|
+
Require.folders 'data', {:base_path => File.dirname(__FILE__) + '/../my/path}
|
87
|
+
</pre>
|
88
|
+
|
89
|
+
h3. Simple usage examples
|
90
|
+
Require .rb files from a folder
|
91
|
+
<pre>
|
92
|
+
# To require .rb files in the folders 'data' and 'data2' (non-recursively)
|
93
|
+
Require.folders 'data', 'data2'
|
94
|
+
|
95
|
+
# Same but recursively (recurse subtrees of folders)
|
96
|
+
Require.recursive 'data', 'data2'
|
97
|
+
</pre>
|
98
|
+
|
99
|
+
h3. Simple debugging
|
100
|
+
Get list of required files
|
101
|
+
<pre>
|
102
|
+
# To require all files within the top level folder 'data' (non-recursively)
|
103
|
+
# The required_files returned is a list of the paths of the files that were required
|
104
|
+
required_files = Require.folder 'data'
|
105
|
+
puts required_files
|
106
|
+
</pre>
|
107
|
+
|
108
|
+
h3. Tracing mode (for debugging)
|
109
|
+
Apply tracing to see output for the process of requiring the files
|
110
|
+
<pre>
|
111
|
+
# turn on tracing globally
|
112
|
+
Require.tracing = :on
|
113
|
+
Require.folder 'data'
|
114
|
+
# turn off tracing globally
|
115
|
+
Require.tracing = :off
|
116
|
+
</pre>
|
117
|
+
|
118
|
+
Alternatively pass tracing as an option
|
119
|
+
<pre>
|
120
|
+
Require.folder 'data', {:tracing => :on}
|
121
|
+
</pre>
|
122
|
+
|
123
|
+
h3. Verbose mode (for detailed debugging)
|
124
|
+
Set verbose mode on to see full path of each required file
|
125
|
+
<pre>
|
126
|
+
# turn on tracing
|
127
|
+
Require.tracing = :on
|
128
|
+
# turn on verbose globally
|
129
|
+
Require.verbose = :on
|
130
|
+
Require.folder 'data'
|
131
|
+
# turn off verbose globally
|
132
|
+
Require.verbose = :off
|
133
|
+
</pre>
|
134
|
+
|
135
|
+
h3. Require.recursive
|
136
|
+
To require all files within the top level folder 'data' recursively
|
137
|
+
<pre>
|
138
|
+
# To require all files within the top level folder 'data' recursively
|
139
|
+
required_files = Require.recursive 'data'
|
140
|
+
</pre>
|
141
|
+
|
142
|
+
To require all files within the top level folders 'data' and 'data2' (non-recursively)
|
143
|
+
<pre>
|
144
|
+
# To require all files within the top level folders 'data' and 'data2' (non-recursively)
|
145
|
+
required_files = Require.recursive 'data', 'data2'
|
146
|
+
</pre>
|
147
|
+
|
148
|
+
To require all files within the top level folders 'data' and 'data2' recursively
|
149
|
+
<pre>
|
150
|
+
# To require all files within the top level folders 'data' and 'data2' recursively
|
151
|
+
required_files = Require.recursive 'data', 'data2'
|
152
|
+
</pre>
|
153
|
+
|
154
|
+
h3. Require.folders
|
155
|
+
To require files within the top level folders 'data' and 'data2' and also files within the subdirectory 'blip' if it exists
|
156
|
+
<pre>
|
157
|
+
# To require files within the top level folders 'data' and 'data2' and also files within the subdirectory 'blip' if it exists
|
158
|
+
required_files = Require.folders 'data', 'data2', {:folders => 'blip'}
|
159
|
+
</pre>
|
160
|
+
|
161
|
+
To require files within 'data/blip' and 'data2/blip' only, NOT including the root files
|
162
|
+
<pre>
|
163
|
+
# To require files within 'data/blip' and 'data2/blip' only, NOT including the root files
|
164
|
+
required_files = Require.folders 'data', 'data2', {:folders => 'blip', :ignore_root_files => true}
|
165
|
+
</pre>
|
166
|
+
|
167
|
+
To require files within 'data' and 'data2' first and then AFTER any files within the subdirectory 'blip' (default order)
|
168
|
+
<pre>
|
169
|
+
# To require files within 'data' and 'data2' first and then AFTER any files within the subdirectory 'blip' (default order)
|
170
|
+
required_files = Require.folders 'data', 'data2', {:folders => 'blip', :root_files => :before}
|
171
|
+
</pre>
|
172
|
+
|
173
|
+
|
174
|
+
To require files within 'data/blip' and 'data2/blip' first and then AFTER any files within 'data' and 'data2' folders (the root files)
|
175
|
+
<pre>
|
176
|
+
required_files = Require.folders(['data', 'data2'], {:folders => 'blip', :root_files => :after})
|
177
|
+
</pre>
|
178
|
+
|
179
|
+
To require files within 'data' and 'data2' (the root files) first (BEFORE) and then any files within the subdirectories 'blip' and blap
|
180
|
+
<pre>
|
181
|
+
required_files = Require.folders(['data', 'data2'], {:folders => ['blip', 'blap'], :root_files => :before})
|
182
|
+
</pre>
|
183
|
+
|
184
|
+
h2. Copyright
|
185
|
+
|
186
|
+
Copyright (c) 2010 Kristian Mandrup. See LICENSE for details.
|
data/lib/require-magic.rb
CHANGED
@@ -26,8 +26,9 @@ module Require
|
|
26
26
|
|
27
27
|
def self.enter(name, options = {}, &block)
|
28
28
|
options[:recursive] = true
|
29
|
-
file
|
30
|
-
|
29
|
+
file = folder(name, options)
|
30
|
+
base_path = File.dirname(file)
|
31
|
+
yield base_path
|
31
32
|
end
|
32
33
|
|
33
34
|
|
@@ -123,18 +124,20 @@ protected
|
|
123
124
|
end
|
124
125
|
end
|
125
126
|
|
126
|
-
def self.match(f, rexp)
|
127
|
-
|
128
|
-
rexp = /#{Regexp.escape(rexp)}/
|
129
|
-
end
|
130
|
-
|
131
|
-
if rexp.kind_of? Array
|
132
|
-
rexp.each{|e| return true if match(f, rexp)}
|
127
|
+
def self.match(f, *rexp)
|
128
|
+
rexp.each{|e| return true if match_single(f, rexp)}
|
133
129
|
false
|
134
|
-
|
135
|
-
|
136
|
-
|
130
|
+
end
|
131
|
+
|
132
|
+
def self.match_single(f, rexp)
|
133
|
+
if rexp.kind_of? String
|
134
|
+
str = Regexp.escape(str)
|
135
|
+
str.gsub! '\*', '[a-zA-Z0-9\s_-]*'
|
136
|
+
str.gsub! '/', '\/'
|
137
137
|
end
|
138
|
+
if rexp.kind_of? Regexp
|
139
|
+
return f.match(re)
|
140
|
+
end
|
141
|
+
false
|
138
142
|
end
|
139
|
-
|
140
143
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: require-magic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kristian Mandrup
|
@@ -21,13 +21,13 @@ extensions: []
|
|
21
21
|
|
22
22
|
extra_rdoc_files:
|
23
23
|
- LICENSE
|
24
|
-
- README.
|
24
|
+
- README.textile
|
25
25
|
files:
|
26
26
|
- lib/require-dsl.rb
|
27
27
|
- lib/require-magic.rb
|
28
28
|
- lib/util/util.rb
|
29
29
|
- LICENSE
|
30
|
-
- README.
|
30
|
+
- README.textile
|
31
31
|
has_rdoc: true
|
32
32
|
homepage: http://github.com/kristianmandrup/require-magic
|
33
33
|
licenses: []
|
data/README.rdoc
DELETED
@@ -1,122 +0,0 @@
|
|
1
|
-
= require-magic
|
2
|
-
|
3
|
-
Utility functions to facilitate importing (require) ruby files in complex Ruby project, such as gem with complex folder hierarchies.
|
4
|
-
See unit tests in /test directory to see how to use the tools for the best effect.
|
5
|
-
Using this toolset should really simplify your require statements and make your application more flexible to change.
|
6
|
-
|
7
|
-
== USAGE
|
8
|
-
|
9
|
-
<code>
|
10
|
-
require 'require_magic' # include both the old static require helpers and the DSL require language
|
11
|
-
require 'require_dsl' # alternatively only include require_dsl (the DSL language)
|
12
|
-
|
13
|
-
Folder.enter [path relative to current file location] do |folder|
|
14
|
-
# from new location, enter a subdir
|
15
|
-
folder.enter [subdir] do |path|
|
16
|
-
folder.all('**/*.rb').except(/sound\/*.rb/).require
|
17
|
-
end
|
18
|
-
|
19
|
-
# from new location, enter a subdir
|
20
|
-
folder.enter [another subdir] do |path|
|
21
|
-
# use file blobs here
|
22
|
-
folder.all('**/*.rb').require
|
23
|
-
end
|
24
|
-
|
25
|
-
# from new location, enter a subdir
|
26
|
-
folder.enter [yet another subdir] do |path|
|
27
|
-
# matching and except are to be used as include and exclude filters
|
28
|
-
# they each take a list containing regular expressions and strings
|
29
|
-
# string arguments are postfixed with .rb internally if not present
|
30
|
-
folder.all('blip/**/*.rb').matching(/_mixin.rb/, /.*\/power/).except(/sound/, /disco/).require
|
31
|
-
|
32
|
-
folder.enter [subdir] do |path|
|
33
|
-
folder.enter [subdir] do |path|
|
34
|
-
folder.all('grusch/**/*.rb').require
|
35
|
-
end
|
36
|
-
|
37
|
-
end
|
38
|
-
folder.all.require
|
39
|
-
end
|
40
|
-
|
41
|
-
end
|
42
|
-
|
43
|
-
# use current path as folder
|
44
|
-
Folder.enter do |folder|
|
45
|
-
folder.all('**/*.rb').require
|
46
|
-
folder.enter 'game' do |path|
|
47
|
-
list = folder.all('**/*.rb')
|
48
|
-
# puts list.matching('sound', 'network').except(/sound/).show_require(:relative)
|
49
|
-
list.matching('sound', 'network').except(/sound/).require
|
50
|
-
end
|
51
|
-
end
|
52
|
-
</code>
|
53
|
-
|
54
|
-
== Static helpers
|
55
|
-
See unit tests for demonstrations of how to use it:
|
56
|
-
|
57
|
-
# Set basepath to use for require
|
58
|
-
<code>
|
59
|
-
required_files = Require.base_path = File.dirname(__FILE__)
|
60
|
-
</code>
|
61
|
-
|
62
|
-
To require all files within the top level folder 'data' (non-recursively)
|
63
|
-
<code>
|
64
|
-
required_files = Require.folders('data')
|
65
|
-
</code>
|
66
|
-
|
67
|
-
Override base_path
|
68
|
-
<code>
|
69
|
-
required_files = Require.folders('data', {:base_path => File.dirname(__FILE__) + '/../my/path})
|
70
|
-
</code>
|
71
|
-
|
72
|
-
The required_files returned is a list of the paths of the files that were required
|
73
|
-
|
74
|
-
To require all files within the top level folder 'data' (non-recursively) and apply tracing to see output for the process of requiring the files
|
75
|
-
<code>
|
76
|
-
required_files = Require.folder 'data'
|
77
|
-
required_files = Require.folders 'data'
|
78
|
-
</code>
|
79
|
-
|
80
|
-
To require all files within the top level folder 'data' recursively
|
81
|
-
<code>
|
82
|
-
required_files = Require.recursive('data')
|
83
|
-
</code>
|
84
|
-
|
85
|
-
To require all files within the top level folders 'data' and 'data2' (non-recursively)
|
86
|
-
<code>
|
87
|
-
required_files = Require.recursive(['data', 'data2'])
|
88
|
-
</code>
|
89
|
-
|
90
|
-
To require all files within the top level folders 'data' and 'data2' recursively
|
91
|
-
<code>
|
92
|
-
required_files = Require.recursive(['data', 'data2'])
|
93
|
-
</code>
|
94
|
-
|
95
|
-
To require files within the top level folders 'data' and 'data2' and also files within the subdirectory 'blip' if it exists
|
96
|
-
<code>
|
97
|
-
required_files = Require.folders(['data', 'data2'], {:folders => ['blip]})
|
98
|
-
</code>
|
99
|
-
|
100
|
-
To require files within 'data/blip' and 'data2/blip' only, NOT including the root files
|
101
|
-
<code>
|
102
|
-
required_files = Require.folders(['data', 'data2'], {:folders => ['blip], :ignore_root_files => true})
|
103
|
-
</code>
|
104
|
-
|
105
|
-
To require files within 'data' and 'data2' first and then AFTER any files within the subdirectory 'blip' (default order)
|
106
|
-
<code>
|
107
|
-
required_files = Require.folders(['data', 'data2'], {:folders => ['blip], :root_files => :before})
|
108
|
-
</code>
|
109
|
-
|
110
|
-
To require files within 'data/blip' and 'data2/blip' first and then AFTER any files within 'data' and 'data2' folders (the root files)
|
111
|
-
<code>
|
112
|
-
required_files = Require.folders(['data', 'data2'], {:folders => ['blip], :root_files => :after})
|
113
|
-
</code>
|
114
|
-
|
115
|
-
To require files within 'data' and 'data2' (the root files) first (BEFORE) and then any files within the subdirectory 'blip'
|
116
|
-
<code>
|
117
|
-
required_files = Require.folders(['data', 'data2'], {:folders => ['blip], :root_files => :before})
|
118
|
-
</code>
|
119
|
-
|
120
|
-
== Copyright
|
121
|
-
|
122
|
-
Copyright (c) 2010 Kristian Mandrup. See LICENSE for details.
|