modulation 0.19 → 0.20
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/README.md +34 -25
- data/lib/modulation/core.rb +11 -0
- data/lib/modulation/ext.rb +10 -2
- data/lib/modulation/paths.rb +12 -0
- data/lib/modulation/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e540dd13f308e46a50219db2bafb9b72c692dfc04a43404dcddc85c6117c5f7b
|
4
|
+
data.tar.gz: 64de165287b53651385fb6e520f15d493e360599afb85c90ca90b91af1aa49e8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3b36c16543e39b4f00afe5129e80f430b56f757258b49785c7a22b6abed52896951b43a6fdc97397807bc95da188829622ff398dfbdcf7ea0e48e701aaa4ece6
|
7
|
+
data.tar.gz: ff3a3c843a5c2f5e2401fb55c16f19b39281d05acf71c4e1a9d5b7838e7de571be4c4e41657db438724709c768909a077a43d3aaac826689fa485c2ac05a65c3
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -82,6 +82,7 @@ easy to understand.
|
|
82
82
|
- Can be used to [write gems](#writing-gems-using-modulation).
|
83
83
|
- Facilitates [unit-testing](#unit-testing-modules) of private methods and
|
84
84
|
constants.
|
85
|
+
- Can load all source files in directory at once.
|
85
86
|
|
86
87
|
## Installing Modulation
|
87
88
|
|
@@ -171,6 +172,39 @@ user = User.new(...)
|
|
171
172
|
> **Note about paths**: module paths are always relative to the file
|
172
173
|
> calling the `import` method, just like `require_relative`.
|
173
174
|
|
175
|
+
### Importing all source files in a directory
|
176
|
+
|
177
|
+
To load all source files in a directory you can use `import_all`:
|
178
|
+
|
179
|
+
```ruby
|
180
|
+
import_all('./ext') # will load ./ext/kernel, ./ext/socket etc
|
181
|
+
```
|
182
|
+
|
183
|
+
### Importing methods into classes and modules
|
184
|
+
|
185
|
+
Modulation provides the `extend_from` and `include_from` methods to include
|
186
|
+
imported methods in classes and modules:
|
187
|
+
|
188
|
+
```ruby
|
189
|
+
module Sequences
|
190
|
+
extend_from('./seq.rb')
|
191
|
+
end
|
192
|
+
|
193
|
+
Sequences.fib(5)
|
194
|
+
|
195
|
+
# extend integers
|
196
|
+
require 'modulation'
|
197
|
+
class Integer
|
198
|
+
include_from('./seq.rb')
|
199
|
+
|
200
|
+
def seq(kind)
|
201
|
+
send(kind, self)
|
202
|
+
end
|
203
|
+
end
|
204
|
+
|
205
|
+
5.seq(:fib)
|
206
|
+
```
|
207
|
+
|
174
208
|
### Default exports
|
175
209
|
|
176
210
|
A module may wish to expose just a single class or constant, in which case it
|
@@ -210,31 +244,6 @@ config = import('./config')
|
|
210
244
|
db.connect(config[:host], config[:port])
|
211
245
|
```
|
212
246
|
|
213
|
-
### Importing methods into classes and modules
|
214
|
-
|
215
|
-
Modulation provides the `extend_from` and `include_from` methods to include
|
216
|
-
imported methods in classes and modules:
|
217
|
-
|
218
|
-
```ruby
|
219
|
-
module Sequences
|
220
|
-
extend_from('./seq.rb')
|
221
|
-
end
|
222
|
-
|
223
|
-
Sequences.fib(5)
|
224
|
-
|
225
|
-
# extend integers
|
226
|
-
require 'modulation'
|
227
|
-
class Integer
|
228
|
-
include_from('./seq.rb')
|
229
|
-
|
230
|
-
def seq(kind)
|
231
|
-
send(kind, self)
|
232
|
-
end
|
233
|
-
end
|
234
|
-
|
235
|
-
5.seq(:fib)
|
236
|
-
```
|
237
|
-
|
238
247
|
### Accessing a module's root namespace from nested modules within itself
|
239
248
|
|
240
249
|
The special constant `MODULE` allows you to access the containing module from
|
data/lib/modulation/core.rb
CHANGED
@@ -45,6 +45,17 @@ module Modulation
|
|
45
45
|
end
|
46
46
|
end
|
47
47
|
|
48
|
+
# Imports all source files in given directory
|
49
|
+
# @ param path [String] relative directory path
|
50
|
+
# @param caller_location [String] caller location
|
51
|
+
# @return [Array] array of module objects
|
52
|
+
def import_all(path, caller_location = caller(1..1).first)
|
53
|
+
abs_path = Paths.absolute_dir_path(path, caller_location)
|
54
|
+
Dir["#{abs_path}/**/*.rb"].map do |fn|
|
55
|
+
@loaded_modules[fn] || create_module_from_file(fn)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
48
59
|
# Creates a new module from a source file
|
49
60
|
# @param path [String] source file name
|
50
61
|
# @return [Module] module
|
data/lib/modulation/ext.rb
CHANGED
@@ -2,13 +2,21 @@
|
|
2
2
|
|
3
3
|
# Kernel extensions
|
4
4
|
module Kernel
|
5
|
-
#
|
5
|
+
# Imports a module
|
6
6
|
# @param path [String] module file name
|
7
7
|
# @param caller_location [String] caller location
|
8
|
-
# @return [
|
8
|
+
# @return [Module] module object
|
9
9
|
def import(path, caller_location = caller(1..1).first)
|
10
10
|
Modulation.import(path, caller_location)
|
11
11
|
end
|
12
|
+
|
13
|
+
# Imports all modules in given directory
|
14
|
+
# @param path [String] directory path
|
15
|
+
# @param caller_location [String] caller location
|
16
|
+
# @return [Array] array of module objects
|
17
|
+
def import_all(path, caller_location = caller(1..1).first)
|
18
|
+
Modulation.import_all(path, caller_location)
|
19
|
+
end
|
12
20
|
end
|
13
21
|
|
14
22
|
# Module extensions
|
data/lib/modulation/paths.rb
CHANGED
@@ -20,6 +20,18 @@ module Modulation
|
|
20
20
|
check_path(path)
|
21
21
|
end
|
22
22
|
|
23
|
+
# Computes and verifies the absolute directory path
|
24
|
+
# @param path String] unqualified path
|
25
|
+
# @param caller_location [String] caller location
|
26
|
+
# @return [String] absolute directory path
|
27
|
+
def absolute_dir_path(path, caller_location)
|
28
|
+
caller_file = caller_location[CALLER_FILE_REGEXP, 1]
|
29
|
+
return nil unless caller_file
|
30
|
+
|
31
|
+
path = File.expand_path(path, File.dirname(caller_file))
|
32
|
+
File.directory?(path) ? path : (raise "Invalid directory #{path}")
|
33
|
+
end
|
34
|
+
|
23
35
|
# Checks that the given path references an existing file, adding the .rb
|
24
36
|
# extension if needed
|
25
37
|
# @param path [String] absolute file path (with/without .rb extension)
|
data/lib/modulation/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: modulation
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0.
|
4
|
+
version: '0.20'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sharon Rosner
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-01-
|
11
|
+
date: 2019-01-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: minitest
|