evt-reflect 0.0.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 1381ac92991e6aafc877e6812e0baf2c77c7b6519345e0c23d6e7fd28832ef95
4
+ data.tar.gz: 00c084d9fc282dae0140555bf4a86611541b4e27deaadfc18cfd4199303e8659
5
+ SHA512:
6
+ metadata.gz: 18b3ab2ac9cf473ce165335ae03040daca0407daabdff9fffa31d2da42d8f193190492f1ef7e20b8ebefe9d2fad00e35ccade44ebc376aa5767c36ca117c0d92
7
+ data.tar.gz: b87b09a92bddc35bf7d75ac6381af84bf8ededd17af7a2dc6a78d17f7515f006c15bc0224c19b353848018901a094fbce61c3cdc5c6f4b26df635da10b348a79
@@ -0,0 +1,11 @@
1
+ module Reflect
2
+ module Controls
3
+ module Namespace
4
+ module Random
5
+ def self.get
6
+ :"X#{SecureRandom.hex}"
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,30 @@
1
+ module Reflect
2
+ module Controls
3
+ module Subject
4
+ def self.example
5
+ Example.new
6
+ end
7
+
8
+ class Example
9
+ module SomeConstant
10
+ def self.some_accessor
11
+ SomeInnerConstant
12
+ end
13
+
14
+ def self.some_object_accessor
15
+ SomeInnerClass.new
16
+ end
17
+
18
+ module SomeInnerConstant
19
+ end
20
+
21
+ class SomeInnerClass
22
+ end
23
+ end
24
+
25
+ module ConstantWithoutAccessor
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,4 @@
1
+ require 'securerandom'
2
+
3
+ require 'reflect/controls/namespace'
4
+ require 'reflect/controls/subject'
@@ -0,0 +1,35 @@
1
+ module Reflect
2
+ Error = Class.new(RuntimeError)
3
+
4
+ def self.call(subject, constant_name, strict: nil)
5
+ Reflection.build(subject, constant_name, strict: strict)
6
+ end
7
+
8
+ def self.subject_constant(subject)
9
+ [Module, Class].include?(subject.class) ? subject : subject.class
10
+ end
11
+
12
+ def self.get_constant(subject_constant, constant_name, strict: nil)
13
+ strict = Reflection::Default.strict if strict.nil?
14
+
15
+ constant = nil
16
+
17
+ if constant?(subject_constant, constant_name)
18
+ constant = get_constant!(subject_constant, constant_name)
19
+ end
20
+
21
+ if constant.nil? && strict
22
+ raise Reflect::Error, "Namespace #{constant_name} is not defined in #{subject_constant.name}"
23
+ end
24
+
25
+ constant
26
+ end
27
+
28
+ def self.get_constant!(subject_constant, constant_name)
29
+ subject_constant.const_get(constant_name, false)
30
+ end
31
+
32
+ def self.constant?(subject_constant, constant_name)
33
+ subject_constant.const_defined?(constant_name, false)
34
+ end
35
+ end
@@ -0,0 +1,62 @@
1
+ module Reflect
2
+ class Reflection
3
+ attr_reader :subject
4
+ attr_reader :constant
5
+ attr_reader :strict
6
+
7
+ def subject_constant
8
+ @subject_constant ||= Reflect.subject_constant(subject)
9
+ end
10
+
11
+ def initialize(subject, constant, strict)
12
+ @subject = subject
13
+ @constant = constant
14
+ @strict = strict
15
+ end
16
+
17
+ def self.call(subject, constant_name, strict: nil)
18
+ build(subject, constant_name, strict: strict)
19
+ end
20
+
21
+ def self.build(subject, constant_name, strict: nil)
22
+ strict = Default.strict if strict.nil?
23
+
24
+ subject_constant = Reflect.subject_constant(subject)
25
+
26
+ constant = Reflect.get_constant(subject_constant, constant_name, strict: strict)
27
+ return nil if constant.nil?
28
+
29
+ instance = new(subject, constant, strict)
30
+ end
31
+
32
+ def constant_accessor?(name)
33
+ constant.respond_to?(name)
34
+ end
35
+
36
+ def get(accessor_name)
37
+ result = get_constant(accessor_name)
38
+ return nil if result.nil?
39
+
40
+ constant = Reflect.subject_constant(result)
41
+ self.class.new(subject, constant, strict)
42
+ end
43
+
44
+ def get_constant(accessor_name)
45
+ if !constant_accessor?(accessor_name)
46
+ if strict
47
+ raise Reflect::Error, "Constant #{constant.name} does not have accessor #{accessor_name}"
48
+ else
49
+ return nil
50
+ end
51
+ end
52
+
53
+ constant.send(accessor_name)
54
+ end
55
+
56
+ module Default
57
+ def self.strict
58
+ true
59
+ end
60
+ end
61
+ end
62
+ end
data/lib/reflect.rb ADDED
@@ -0,0 +1,2 @@
1
+ require 'reflect/reflection'
2
+ require 'reflect/reflect'
metadata ADDED
@@ -0,0 +1,63 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: evt-reflect
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - The Eventide Project
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-04-02 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: test_bench
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ description: " "
28
+ email: opensource@eventide-project.org
29
+ executables: []
30
+ extensions: []
31
+ extra_rdoc_files: []
32
+ files:
33
+ - lib/reflect.rb
34
+ - lib/reflect/controls.rb
35
+ - lib/reflect/controls/namespace.rb
36
+ - lib/reflect/controls/subject.rb
37
+ - lib/reflect/reflect.rb
38
+ - lib/reflect/reflection.rb
39
+ homepage: https://github.com/eventide-project/reflect
40
+ licenses:
41
+ - MIT
42
+ metadata: {}
43
+ post_install_message:
44
+ rdoc_options: []
45
+ require_paths:
46
+ - lib
47
+ required_ruby_version: !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ version: 2.3.3
52
+ required_rubygems_version: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ requirements: []
58
+ rubyforge_project:
59
+ rubygems_version: 2.7.3
60
+ signing_key:
61
+ specification_version: 4
62
+ summary: Reflection of inner namespaces used for protocol discovery
63
+ test_files: []