modspace 0.1.0 → 0.2.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.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -3
- data/README.md +39 -1
- data/examples/simple_example.rb +15 -4
- data/lib/modspace.rb +8 -1
- data/lib/modspace/version.rb +1 -1
- data/modspace.gemspec +0 -1
- metadata +3 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 95e3764e4a780cee8b92285aa671e446427ba71fa0ce412f093ea0ac8703359d
|
4
|
+
data.tar.gz: 8be8b893403b4db6eac524f133ff4b757d6c458c3669eddd5470172ba1d651a5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8ecbd9b92e35b7376b9750bba5a7618d16d157c75cabe512e5024a26e59dccf3e09cbc25cdb9a3842c42148ad25aeca951f510776cf34915813aa2578633b869
|
7
|
+
data.tar.gz: 75fe9c045adf2ad4923f48277da8706ac76d92c4033b65db63873996c86873781549629eb812bd9c189e7cd084f011bca9e60e82703dc1a3ba898d95f8e48f16
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -77,7 +77,7 @@ Define a new namespace (ie. nested module), such as `Foo::Bar::Zoo` in one line.
|
|
77
77
|
Modspace.def_mod('Foo', 'Bar', 'Zoo')
|
78
78
|
# Note: This creates the namespace Foo::Bar::Zoo
|
79
79
|
|
80
|
-
#
|
80
|
+
# Implement the module you want with the methods you want...
|
81
81
|
module Foo::Bar::Zoo::Shoe
|
82
82
|
def some_funct
|
83
83
|
puts "Eek"
|
@@ -87,6 +87,44 @@ Define a new namespace (ie. nested module), such as `Foo::Bar::Zoo` in one line.
|
|
87
87
|
__Note: You only need to define the parent namespace. For example, we
|
88
88
|
omit "Shoe" from the initial namespace definition above.__
|
89
89
|
|
90
|
+
You can also use a shortcut syntax that looks more like the nested
|
91
|
+
module syntax in Ruby...
|
92
|
+
|
93
|
+
require 'modspace'
|
94
|
+
|
95
|
+
# Define parent namespace
|
96
|
+
Modspace.def_mod('Foo::Bar::Zoo')
|
97
|
+
# Note: This creates the namespace Foo::Bar::Zoo
|
98
|
+
|
99
|
+
# Same as before, implement the module you want with the methods you want...
|
100
|
+
module Foo::Bar::Zoo::Shoe
|
101
|
+
def some_funct
|
102
|
+
puts "Eek"
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
All this is quite handle if you are doing functional programming or
|
107
|
+
modular programming in Ruby...
|
108
|
+
|
109
|
+
require 'modspace'
|
110
|
+
|
111
|
+
# Define parent namespace
|
112
|
+
Modspace.def_mod('Foo::Bar::Zoo')
|
113
|
+
# Note: This creates the namespace Foo::Bar::Zoo
|
114
|
+
|
115
|
+
# Same as before, implement the module you want with the methods you want...
|
116
|
+
module Foo::Bar::Zoo::Shoe
|
117
|
+
class << self
|
118
|
+
def some_funct
|
119
|
+
puts "Eek"
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
# Call you neatly scoped module!
|
125
|
+
Foo::Bar::Zoo::Shoe.some_funct
|
126
|
+
# => "Eek"
|
127
|
+
|
90
128
|
For more examples, see the `examples/` directory.
|
91
129
|
|
92
130
|
## Contributing
|
data/examples/simple_example.rb
CHANGED
@@ -17,7 +17,7 @@ end
|
|
17
17
|
|
18
18
|
# ^ Note: Defaults to defining the namespace within "Object", as that is the top-level namespace within Ruby programs
|
19
19
|
|
20
|
-
# 2) Create a new namespace
|
20
|
+
# 2) Create a new namespace and assign it to a variable...
|
21
21
|
zoo2_module = Modspace.def_mod('Foo', 'Bar', 'Zoo2')
|
22
22
|
|
23
23
|
if zoo2_module == Foo::Bar::Zoo2
|
@@ -26,7 +26,7 @@ else
|
|
26
26
|
raise StandardError
|
27
27
|
end
|
28
28
|
|
29
|
-
# 3) Create a new namespace
|
29
|
+
# 3) Create a new namespace within a class...
|
30
30
|
class SomeClass; end
|
31
31
|
|
32
32
|
zoo3_module = Modspace.def_mod('Foo', 'Bar', 'Zoo3', in_namespace: SomeClass)
|
@@ -37,7 +37,7 @@ else
|
|
37
37
|
raise StandardError
|
38
38
|
end
|
39
39
|
|
40
|
-
# 4) Create a new namespace
|
40
|
+
# 4) Create a new namespace within a class given an instance...
|
41
41
|
|
42
42
|
an_instance_of_some_class = SomeClass.new
|
43
43
|
|
@@ -49,7 +49,7 @@ else
|
|
49
49
|
raise StandardError
|
50
50
|
end
|
51
51
|
|
52
|
-
# 5) Create a new namespace
|
52
|
+
# 5) Create a new namespace within a module...
|
53
53
|
module SomeModule; end
|
54
54
|
|
55
55
|
zoo5_module = Modspace.def_mod('Foo', 'Bar', 'Zoo5', in_namespace: SomeModule)
|
@@ -59,3 +59,14 @@ if zoo5_module == SomeModule::Foo::Bar::Zoo5
|
|
59
59
|
else
|
60
60
|
raise StandardError
|
61
61
|
end
|
62
|
+
|
63
|
+
# 6) Create a new namespace within a module using the shortcut syntax...
|
64
|
+
module SomeModule; end
|
65
|
+
|
66
|
+
zoo6_module = Modspace.def_mod('Foo::Bar::Zoo6', in_namespace: SomeModule)
|
67
|
+
|
68
|
+
if zoo6_module == SomeModule::Foo::Bar::Zoo6
|
69
|
+
puts "6) We have defined a nested module Foo::Bar::Zoo5 within an explicit module using shortcut syntax"
|
70
|
+
else
|
71
|
+
raise StandardError
|
72
|
+
end
|
data/lib/modspace.rb
CHANGED
@@ -10,6 +10,8 @@ module Modspace
|
|
10
10
|
# for our purposes.
|
11
11
|
|
12
12
|
def def_mod(*args, in_namespace: Object, in_class_of_instance: nil)
|
13
|
+
normalised_args = expand_any_double_colon_namespace_args(args)
|
14
|
+
|
13
15
|
parent_namespace = if !in_class_of_instance.nil?
|
14
16
|
in_class_of_instance.class
|
15
17
|
elsif !in_namespace.nil? # :in_namespace can be a module or class
|
@@ -18,7 +20,7 @@ module Modspace
|
|
18
20
|
raise ArgumentError, "If in_class or for_instance non-nil is specified they must be non-nil."
|
19
21
|
end
|
20
22
|
|
21
|
-
defp_class_mod(parent_namespace, *
|
23
|
+
defp_class_mod(parent_namespace, *normalised_args)
|
22
24
|
end
|
23
25
|
|
24
26
|
private
|
@@ -45,5 +47,10 @@ module Modspace
|
|
45
47
|
|
46
48
|
defp_class_mod(desired_nested_module, *nesting_list)
|
47
49
|
end
|
50
|
+
|
51
|
+
# This method takes args like ["Foo::Bar::Zoo"] and turns them into ["Foo", "Bar", "Zoo"]
|
52
|
+
def expand_any_double_colon_namespace_args(args_arr)
|
53
|
+
args_arr.map{|arg| arg.split('::') }.flatten
|
54
|
+
end
|
48
55
|
end
|
49
56
|
end
|
data/lib/modspace/version.rb
CHANGED
data/modspace.gemspec
CHANGED
metadata
CHANGED
@@ -1,29 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: modspace
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- declan@weuseopensource.com
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-07-
|
12
|
-
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: byebug
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 11.1.3
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: 11.1.3
|
11
|
+
date: 2020-07-20 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
27
13
|
description: Modspace is a small library to allow the easy definition and management
|
28
14
|
of namespaces and nested modules in Ruby.
|
29
15
|
email:
|