modspace 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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:
|