modulation 0.6 → 0.7

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 (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'