alias2 0.0.1 → 0.1.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 +5 -5
- data/README.md +47 -4
- data/lib/alias2.rb +33 -6
- metadata +3 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: '086b102714da0bad17fa027730bab6e2b5db8ed1dbd76e4813cc94754e0b4324'
|
4
|
+
data.tar.gz: 91c87e7e03ed79033b487cb45d4c0aac9a579f5bccecebe02f3a52fb3dba2a38
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c737a1662da7810bb640f830870a1a23227299dde7ddcf1c7a134ee6275413b517515b70104dbe42dc5b4228649626433c2e37e25f8af9da71ee6841188cb01d
|
7
|
+
data.tar.gz: 2b499f4df51047583bfd0da28377f4e8403fa2f408a7aa4a9f5189891ca9a67f0f0e01f48ee162de849fec0f4c7ae0866f6bcae986285dc01e2d5931d8c69a02
|
data/README.md
CHANGED
@@ -25,6 +25,18 @@ Baz = Some::Very::Long::Name::Here::Baz
|
|
25
25
|
|
26
26
|
The namespace can also be a `String`.
|
27
27
|
|
28
|
+
To alias everything in the namespace to the top-level:
|
29
|
+
```rb
|
30
|
+
alias2 Some::Very::Long::Name::Here, "*"
|
31
|
+
```
|
32
|
+
|
33
|
+
Same as above:
|
34
|
+
```rb
|
35
|
+
Foo = Some::Very::Long::Name::Here::Foo
|
36
|
+
Bar = Some::Very::Long::Name::Here::Bar
|
37
|
+
Baz = Some::Very::Long::Name::Here::Baz
|
38
|
+
```
|
39
|
+
|
28
40
|
If you'd like to alias them using a different name you can:
|
29
41
|
```rb
|
30
42
|
alias2 Some::Very::Long::Name::Here, :Foo => "FooHoo", :Bar => "BarHar", :Baz => "Bazzzz"
|
@@ -34,12 +46,42 @@ Same as:
|
|
34
46
|
```rb
|
35
47
|
FooHoo = Some::Very::Long::Name::Here::Foo
|
36
48
|
BarHar = Some::Very::Long::Name::Here::Bar
|
37
|
-
Bazzzz = Some::Very::Long::Name::Here::
|
49
|
+
Bazzzz = Some::Very::Long::Name::Here::Baz
|
38
50
|
```
|
39
51
|
|
40
52
|
Keys can also be `String`s.
|
41
53
|
|
42
|
-
|
54
|
+
You can filter the classes/modules to alias:
|
55
|
+
```rb
|
56
|
+
alias2 Some::Very::Long::Name::Here, "*" do |klass|
|
57
|
+
klass < ActiveRecord::Base
|
58
|
+
end
|
59
|
+
```
|
60
|
+
|
61
|
+
The above is the same as:
|
62
|
+
```rb
|
63
|
+
Foo = Some::Very::Long::Name::Here::Foo if Some::Very::Long::Name::Here::Foo.is_a?(ActiveRecord::Base)
|
64
|
+
Bar = Some::Very::Long::Name::Here::Bar if Some::Very::Long::Name::Here::Bar.is_a?(ActiveRecord::Base)
|
65
|
+
Baz = Some::Very::Long::Name::Here::Baz if Some::Very::Long::Name::Here::Baz.is_a?(ActiveRecord::Base)
|
66
|
+
```
|
67
|
+
|
68
|
+
When a block is given you can omit the alias. It will default to `"*"`.
|
69
|
+
|
70
|
+
The block can also return an alias:
|
71
|
+
```rb
|
72
|
+
alias2 Some::Very::Long::Name::Here do |klass|
|
73
|
+
klass.name.end_with?("Foo") ? "Foo_X" : klass.name.split("::")[-1]
|
74
|
+
end
|
75
|
+
```
|
76
|
+
|
77
|
+
This is the same as:
|
78
|
+
```rb
|
79
|
+
Foo_X = Some::Very::Long::Name::Here::Foo if Some::Very::Long::Name::Here::Foo.name.end_with?("Foo")
|
80
|
+
Bar = Some::Very::Long::Name::Here::Bar
|
81
|
+
Baz = Some::Very::Long::Name::Here::Baz
|
82
|
+
```
|
83
|
+
|
84
|
+
An alias' target can also be a namespace you want created:
|
43
85
|
```rb
|
44
86
|
alias2 Some::Very::Long::Name::Here, :Foo => "New::Namespace::SameFoo", :Bar => "BarHar"
|
45
87
|
```
|
@@ -70,12 +112,13 @@ In all cases the original namespace is not modified and remains in scope.
|
|
70
112
|
|
71
113
|
### Errors
|
72
114
|
|
73
|
-
|
115
|
+
- `NameError` - raised when a constant cannot be found or when a constant is already defined
|
116
|
+
- `ArgumentError` - raised when an alias list or block is not provided
|
74
117
|
|
75
118
|
## See Also
|
76
119
|
|
77
120
|
* [aliased](https://metacpan.org/pod/aliased) - The Perl module that served as inspiration
|
78
|
-
* [
|
121
|
+
* [require3](https://github.com/sshaw/require3) - `Kernel#require` something and make it accessible via a different namespace
|
79
122
|
* [class2](https://github.com/sshaw/class2) - Easily create hierarchies that support nested attributes, type conversion, serialization and more
|
80
123
|
|
81
124
|
## Author
|
data/lib/alias2.rb
CHANGED
@@ -1,13 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Alias2
|
2
|
-
VERSION = "0.0
|
4
|
+
VERSION = "0.1.0".freeze
|
3
5
|
|
4
6
|
class << self
|
5
|
-
def alias(namespace, aliases)
|
7
|
+
def alias(namespace, aliases = nil)
|
8
|
+
raise ArgumentError, "you must provide an alias or a block" if aliases.nil? && !block_given?
|
9
|
+
|
6
10
|
namespace = constant(namespace)
|
11
|
+
aliases = find_names(namespace) if aliases.nil? || aliases == "*"
|
12
|
+
|
7
13
|
if aliases.is_a?(String)
|
8
14
|
set(namespace, aliases)
|
9
|
-
|
10
|
-
|
15
|
+
return
|
16
|
+
end
|
17
|
+
|
18
|
+
aliases.each do |target, alias_as|
|
19
|
+
klass = namespace.const_get(target)
|
20
|
+
if block_given?
|
21
|
+
keep_or_alias = yield klass
|
22
|
+
next unless keep_or_alias
|
23
|
+
# Block returned a new alias
|
24
|
+
alias_as = keep_or_alias if keep_or_alias != true
|
25
|
+
end
|
26
|
+
|
27
|
+
set(klass, (alias_as || target).to_s)
|
11
28
|
end
|
12
29
|
|
13
30
|
nil
|
@@ -20,6 +37,16 @@ module Alias2
|
|
20
37
|
Object.const_get(namespace)
|
21
38
|
end
|
22
39
|
|
40
|
+
def find_names(namespace)
|
41
|
+
names = []
|
42
|
+
namespace.constants.each do |name|
|
43
|
+
const = namespace.const_get(name)
|
44
|
+
names << name if const.is_a?(Module)
|
45
|
+
end
|
46
|
+
|
47
|
+
names
|
48
|
+
end
|
49
|
+
|
23
50
|
# Stolen from class2: https://github.com/sshaw/class2
|
24
51
|
def find_and_or_create_namespace(str)
|
25
52
|
parts = str.split("::")
|
@@ -51,7 +78,7 @@ module Alias2
|
|
51
78
|
end
|
52
79
|
|
53
80
|
unless %w[true 1].include?(ENV["ALIAS2_NO_EXPORT"])
|
54
|
-
def alias2(target, alias_as)
|
55
|
-
Alias2.alias(target, alias_as)
|
81
|
+
def alias2(target, alias_as = nil, &block)
|
82
|
+
Alias2.alias(target, alias_as, &block)
|
56
83
|
end
|
57
84
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: alias2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Skye Shaw
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-05-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -85,8 +85,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
85
85
|
- !ruby/object:Gem::Version
|
86
86
|
version: '0'
|
87
87
|
requirements: []
|
88
|
-
|
89
|
-
rubygems_version: 2.6.14
|
88
|
+
rubygems_version: 3.0.3
|
90
89
|
signing_key:
|
91
90
|
specification_version: 4
|
92
91
|
summary: Make classes, modules, and constants accessible via a different namespace
|