modulation 0.6 → 0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +24 -0
  3. data/lib/modulation.rb +4 -0
  4. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 920b7e8e5d77f1c94944970aec2cda441f7dfadb
4
- data.tar.gz: e7422d6abea4eb6b88c4435f6fd4a1dab1e86018
2
+ SHA256:
3
+ metadata.gz: bfae406a29f60f3ae5a7611d2202a25cc1868599f083a8b465bf85a45a417a7c
4
+ data.tar.gz: 1caabf00cd4bed47694bfff8e107287244cf3f49bef02edfa7d218a8c5301706
5
5
  SHA512:
6
- metadata.gz: 70a95296ebf8feecbbe2361cbd8e021145d8cbad9fb6e7651acf72001bcf50f26dc33ee27fe309c04a711f050e2cd96ade41f5d0416c10b8c845b91eee7c5615
7
- data.tar.gz: 85774eec2d3b3b34f48fffacad087ef2cd15dca5e346e3402732f9bfb7866237ba47991119138119eefe8250833331abbe7f6def0d9799f6dd29aec8d133f263
6
+ metadata.gz: a6f7609ceb7d64e2c64e7be0c47bdfd8df5b5e3e528818c15cf70adf03aec9f1ff22e550359b6c5591ce080a8fdf36d2d2f6fa8d98d0ed8f4592c80bdbf4e73b
7
+ data.tar.gz: acd4250f81de4a1cb15abd6c4ee6b1d777ce9e19b461271ac2207b6302e9d414d39168a9e83835be44e5fff69ce22771c42d3db98d7c25da021078da9d2c5f00
data/README.md CHANGED
@@ -195,6 +195,30 @@ end
195
195
  5.seq(:fib)
196
196
  ```
197
197
 
198
+ ### Accessing a module from nested namespaces within itself
199
+
200
+ The special constant `MODULE` allows you to access the containing module from
201
+ nested namespaces. This lets you call methods defined in the module's root
202
+ namespace, or otherwise introspect the module.
203
+
204
+ ```ruby
205
+ export :await, :MyServer
206
+
207
+ # Await a promise-like callable
208
+ def await
209
+ calling_fiber = Fiber.current
210
+ p = ->(v = nil) {calling_fiber.resume v}
211
+ yield p
212
+ Fiber.yield
213
+ end
214
+
215
+ class MyServer < SuperSecretTCPServer
216
+ def async_read
217
+ MODULE.await {|p| on_read {|data| p.(data)}}
218
+ end
219
+ end
220
+ ```
221
+
198
222
  ### Accessing the global namespace
199
223
 
200
224
  If you need to access the global namespace inside a module just prefix the
data/lib/modulation.rb CHANGED
@@ -78,6 +78,9 @@ class Modulation
78
78
 
79
79
  def self.lookup_gem(name)
80
80
  spec = Gem::Specification.find_by_name(name)
81
+ unless(spec.dependencies.map(&:name)).include?('modulation')
82
+ raise NameError, "Cannot import gem not based on modulation"
83
+ end
81
84
  fn = File.join(spec.full_require_paths, "#{name}.rb")
82
85
  File.file?(fn) ? fn : nil
83
86
  rescue Gem::MissingSpecError
@@ -138,6 +141,7 @@ class Modulation
138
141
  m.extend(ModuleMethods)
139
142
  m.metaclass.include(ModuleMetaclassMethods)
140
143
  m.__export_default_block = export_default_block
144
+ m.metaclass.const_set(:MODULE, m)
141
145
  end
142
146
  end
143
147
 
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.6'
4
+ version: '0.7'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sharon Rosner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-07-23 00:00:00.000000000 Z
11
+ date: 2018-07-29 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: "Modulation provides an alternative way to organize Ruby code. Instead
14
14
  of \nlittering the global namespace with classes and modules, Modulation lets\nyou
@@ -51,7 +51,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
51
51
  version: '0'
52
52
  requirements: []
53
53
  rubyforge_project:
54
- rubygems_version: 2.6.13
54
+ rubygems_version: 2.7.3
55
55
  signing_key:
56
56
  specification_version: 4
57
57
  summary: 'Modulation: explicit dependencies for Ruby'