legionio 0.3.2 → 0.3.3
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
- metadata +4 -94
- data/.circleci/config.yml +0 -119
- data/.gitignore +0 -14
- data/.rspec +0 -2
- data/.rubocop.yml +0 -89
- data/CHANGELOG.md +0 -16
- data/Gemfile +0 -3
- data/LICENSE.txt +0 -21
- data/README.md +0 -49
- data/Rakefile +0 -38
- data/bin/console +0 -16
- data/bin/legion +0 -49
- data/bin/setup +0 -8
- data/bin/test +0 -32
- data/bitbucket-pipelines.yml +0 -55
- data/docs/Makefile +0 -20
- data/docs/_build/doctrees/environment.pickle +0 -0
- data/docs/_build/doctrees/index.doctree +0 -0
- data/docs/_build/doctrees/overview.doctree +0 -0
- data/docs/_build/html/.buildinfo +0 -4
- data/docs/_build/html/_sources/index.rst.txt +0 -28
- data/docs/_build/html/_sources/overview.rst.txt +0 -0
- data/docs/_build/html/_static/alabaster.css +0 -701
- data/docs/_build/html/_static/basic.css +0 -855
- data/docs/_build/html/_static/custom.css +0 -1
- data/docs/_build/html/_static/doctools.js +0 -315
- data/docs/_build/html/_static/documentation_options.js +0 -12
- data/docs/_build/html/_static/file.png +0 -0
- data/docs/_build/html/_static/jquery-3.5.1.js +0 -10872
- data/docs/_build/html/_static/jquery.js +0 -2
- data/docs/_build/html/_static/language_data.js +0 -297
- data/docs/_build/html/_static/minus.png +0 -0
- data/docs/_build/html/_static/plus.png +0 -0
- data/docs/_build/html/_static/pygments.css +0 -82
- data/docs/_build/html/_static/searchtools.js +0 -514
- data/docs/_build/html/_static/underscore-1.3.1.js +0 -999
- data/docs/_build/html/_static/underscore.js +0 -31
- data/docs/_build/html/genindex.html +0 -101
- data/docs/_build/html/index.html +0 -117
- data/docs/_build/html/objects.inv +0 -6
- data/docs/_build/html/overview.html +0 -98
- data/docs/_build/html/search.html +0 -110
- data/docs/_build/html/searchindex.js +0 -1
- data/docs/conf.py +0 -54
- data/docs/index.rst +0 -28
- data/docs/make.bat +0 -35
- data/exe/legion +0 -52
- data/legion.gemspec +0 -59
- data/lib/legion.rb +0 -21
- data/lib/legion/exceptions/handled_task.rb +0 -6
- data/lib/legion/exceptions/invalidjson.rb +0 -5
- data/lib/legion/exceptions/missingargument.rb +0 -6
- data/lib/legion/exceptions/wrongtype.rb +0 -10
- data/lib/legion/exceptions/wrongtypes/array.rb +0 -8
- data/lib/legion/exceptions/wrongtypes/hash.rb +0 -8
- data/lib/legion/exceptions/wrongtypes/integer.rb +0 -8
- data/lib/legion/exceptions/wrongtypes/string.rb +0 -8
- data/lib/legion/extensions.rb +0 -185
- data/lib/legion/extensions/actors/base.rb +0 -49
- data/lib/legion/extensions/actors/every.rb +0 -48
- data/lib/legion/extensions/actors/loop.rb +0 -32
- data/lib/legion/extensions/actors/nothing.rb +0 -15
- data/lib/legion/extensions/actors/once.rb +0 -40
- data/lib/legion/extensions/actors/poll.rb +0 -88
- data/lib/legion/extensions/actors/subscription.rb +0 -138
- data/lib/legion/extensions/builders/actors.rb +0 -61
- data/lib/legion/extensions/builders/base.rb +0 -36
- data/lib/legion/extensions/builders/helpers.rb +0 -24
- data/lib/legion/extensions/builders/runners.rb +0 -58
- data/lib/legion/extensions/core.rb +0 -126
- data/lib/legion/extensions/data.rb +0 -58
- data/lib/legion/extensions/data/migrator.rb +0 -28
- data/lib/legion/extensions/data/model.rb +0 -8
- data/lib/legion/extensions/helpers/base.rb +0 -82
- data/lib/legion/extensions/helpers/cache.rb +0 -23
- data/lib/legion/extensions/helpers/core.rb +0 -41
- data/lib/legion/extensions/helpers/data.rb +0 -23
- data/lib/legion/extensions/helpers/lex.rb +0 -48
- data/lib/legion/extensions/helpers/logger.rb +0 -47
- data/lib/legion/extensions/helpers/task.rb +0 -60
- data/lib/legion/extensions/helpers/transport.rb +0 -44
- data/lib/legion/extensions/transport.rb +0 -159
- data/lib/legion/process.rb +0 -124
- data/lib/legion/runner.rb +0 -55
- data/lib/legion/runner/log.rb +0 -10
- data/lib/legion/runner/status.rb +0 -69
- data/lib/legion/service.rb +0 -99
- data/lib/legion/supervision.rb +0 -15
- data/lib/legion/version.rb +0 -3
@@ -1,36 +0,0 @@
|
|
1
|
-
module Legion
|
2
|
-
module Extensions
|
3
|
-
module Builder
|
4
|
-
module Base
|
5
|
-
def find_files(name, path = extension_path)
|
6
|
-
files = []
|
7
|
-
return files unless Dir.exist? "#{path}/#{name}"
|
8
|
-
|
9
|
-
Dir["#{path}/#{name}/*.rb"].each do |file|
|
10
|
-
files.push(file)
|
11
|
-
end
|
12
|
-
files
|
13
|
-
end
|
14
|
-
|
15
|
-
def require_files(files)
|
16
|
-
files.each { |file| require file }
|
17
|
-
end
|
18
|
-
|
19
|
-
def const_defined_two?(item, root = Kernel)
|
20
|
-
root.const_defined?(item.to_s)
|
21
|
-
end
|
22
|
-
|
23
|
-
def define_constant_two(item, root: Kernel, type: Module)
|
24
|
-
return true if const_defined?(item, root: root)
|
25
|
-
|
26
|
-
root.const_set(item.to_s, type.new)
|
27
|
-
end
|
28
|
-
|
29
|
-
def define_get(item, root: Kernel, type: Module)
|
30
|
-
define_constant_two(item, root: root, type: type) if const_defined_two?(item, root: root)
|
31
|
-
root.const_get(item)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
require_relative 'base'
|
2
|
-
|
3
|
-
module Legion
|
4
|
-
module Extensions
|
5
|
-
module Builder
|
6
|
-
module Helpers
|
7
|
-
include Legion::Extensions::Builder::Base
|
8
|
-
|
9
|
-
def build_helpers
|
10
|
-
@helpers ||= []
|
11
|
-
@helpers.push(require_files(helper_files))
|
12
|
-
end
|
13
|
-
|
14
|
-
def helper_files
|
15
|
-
@helper_files ||= find_files('helpers')
|
16
|
-
end
|
17
|
-
|
18
|
-
def helpers
|
19
|
-
@helpers
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
@@ -1,58 +0,0 @@
|
|
1
|
-
require_relative 'base'
|
2
|
-
|
3
|
-
module Legion
|
4
|
-
module Extensions
|
5
|
-
module Builder
|
6
|
-
module Runners
|
7
|
-
include Legion::Extensions::Builder::Base
|
8
|
-
|
9
|
-
attr_reader :runners
|
10
|
-
|
11
|
-
def build_runners
|
12
|
-
@runners = {}
|
13
|
-
lex_class.const_set('Runners', Module.new) unless lex_class.const_defined?('Runners')
|
14
|
-
require_files(runner_files)
|
15
|
-
build_runner_list
|
16
|
-
end
|
17
|
-
|
18
|
-
def build_runner_list
|
19
|
-
runner_files.each do |file|
|
20
|
-
runner_name = file.split('/').last.sub('.rb', '')
|
21
|
-
runner_class = "#{lex_class}::Runners::#{runner_name.split('_').collect(&:capitalize).join}"
|
22
|
-
loaded_runner = Kernel.const_get(runner_class)
|
23
|
-
|
24
|
-
@runners[runner_name.to_sym] = {
|
25
|
-
extension: lex_class.to_s.downcase,
|
26
|
-
extension_name: extension_name,
|
27
|
-
extension_class: lex_class,
|
28
|
-
runner_name: runner_name,
|
29
|
-
runner_class: runner_class,
|
30
|
-
runner_path: file,
|
31
|
-
class_methods: {}
|
32
|
-
}
|
33
|
-
|
34
|
-
if settings.key?(:runners) && settings[:runners].key?(runner_name.to_sym)
|
35
|
-
@runners[runner_name.to_sym][:desc] = settings[:runners][runner_name.to_sym][:desc]
|
36
|
-
end
|
37
|
-
|
38
|
-
loaded_runner.public_instance_methods(false).each do |runner_method|
|
39
|
-
@runners[runner_name.to_sym][:class_methods][runner_method] = {
|
40
|
-
args: loaded_runner.instance_method(runner_method).parameters
|
41
|
-
}
|
42
|
-
end
|
43
|
-
|
44
|
-
loaded_runner.methods(false).each do |runner_method|
|
45
|
-
@runners[runner_name.to_sym][:class_methods][runner_method] = {
|
46
|
-
args: loaded_runner.method(runner_method).parameters
|
47
|
-
}
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
def runner_files
|
53
|
-
@runner_files ||= find_files('runners')
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
@@ -1,126 +0,0 @@
|
|
1
|
-
require_relative 'builders/actors'
|
2
|
-
require_relative 'builders/helpers'
|
3
|
-
require_relative 'builders/runners'
|
4
|
-
|
5
|
-
require_relative 'helpers/core'
|
6
|
-
require_relative 'helpers/task'
|
7
|
-
require_relative 'helpers/logger'
|
8
|
-
require_relative 'helpers/lex'
|
9
|
-
require_relative 'helpers/transport'
|
10
|
-
require_relative 'helpers/data'
|
11
|
-
require_relative 'helpers/cache'
|
12
|
-
|
13
|
-
require_relative 'actors/base'
|
14
|
-
require_relative 'actors/every'
|
15
|
-
require_relative 'actors/loop'
|
16
|
-
require_relative 'actors/once'
|
17
|
-
require_relative 'actors/poll'
|
18
|
-
require_relative 'actors/subscription'
|
19
|
-
require_relative 'actors/nothing'
|
20
|
-
|
21
|
-
module Legion
|
22
|
-
module Extensions
|
23
|
-
module Core
|
24
|
-
include Legion::Extensions::Helpers::Transport
|
25
|
-
include Legion::Extensions::Helpers::Lex
|
26
|
-
|
27
|
-
include Legion::Extensions::Builder::Runners
|
28
|
-
include Legion::Extensions::Builder::Helpers
|
29
|
-
include Legion::Extensions::Builder::Actors
|
30
|
-
|
31
|
-
def autobuild
|
32
|
-
@actors = {}
|
33
|
-
@meta_actors = {}
|
34
|
-
@runners = {}
|
35
|
-
@helpers = []
|
36
|
-
|
37
|
-
@queues = {}
|
38
|
-
@exchanges = {}
|
39
|
-
@messages = {}
|
40
|
-
build_settings
|
41
|
-
build_transport
|
42
|
-
build_data
|
43
|
-
build_helpers
|
44
|
-
build_runners
|
45
|
-
build_actors
|
46
|
-
end
|
47
|
-
|
48
|
-
def data_required?
|
49
|
-
false
|
50
|
-
end
|
51
|
-
|
52
|
-
def transport_required?
|
53
|
-
true
|
54
|
-
end
|
55
|
-
|
56
|
-
def cache_required?
|
57
|
-
false
|
58
|
-
end
|
59
|
-
|
60
|
-
def crypt_required?
|
61
|
-
false
|
62
|
-
end
|
63
|
-
|
64
|
-
def build_data
|
65
|
-
auto_generate_data
|
66
|
-
extension_class::Data.build
|
67
|
-
end
|
68
|
-
|
69
|
-
def build_transport
|
70
|
-
if File.exist? "#{extension_path}/transport/autobuild.rb"
|
71
|
-
require "#{extension_path}/transport/autobuild"
|
72
|
-
extension_class::Transport::AutoBuild.build
|
73
|
-
log.warn 'still using transport::autobuild, please upgrade'
|
74
|
-
elsif File.exist? "#{extension_path}/transport.rb"
|
75
|
-
require "#{extension_path}/transport"
|
76
|
-
extension_class::Transport.build
|
77
|
-
else
|
78
|
-
auto_generate_transport
|
79
|
-
extension_class::Transport.build
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
def build_settings # rubocop:disable Metrics/AbcSize
|
84
|
-
if Legion::Settings[:extensions].key?(lex_name.to_sym)
|
85
|
-
Legion::Settings[:default_extension_settings].each do |key, value|
|
86
|
-
Legion::Settings[:extensions][lex_name.to_sym][key.to_sym] = if Legion::Settings[:extensions][lex_name.to_sym].key?(key.to_sym)
|
87
|
-
value.merge(Legion::Settings[:extensions][lex_name.to_sym][key.to_sym])
|
88
|
-
else
|
89
|
-
value
|
90
|
-
end
|
91
|
-
end
|
92
|
-
else
|
93
|
-
Legion::Settings[:extensions][lex_name.to_sym] = Legion::Settings[:default_extension_settings]
|
94
|
-
end
|
95
|
-
|
96
|
-
default_settings.each do |key, value|
|
97
|
-
Legion::Settings[:extensions][lex_name.to_sym][key.to_sym] = if Legion::Settings[:extensions][lex_name.to_sym].key?(key.to_sym)
|
98
|
-
value.merge(Legion::Settings[:extensions][lex_name.to_sym][key.to_sym])
|
99
|
-
else
|
100
|
-
value
|
101
|
-
end
|
102
|
-
end
|
103
|
-
end
|
104
|
-
|
105
|
-
def default_settings
|
106
|
-
{}
|
107
|
-
end
|
108
|
-
|
109
|
-
def auto_generate_transport
|
110
|
-
require 'legion/extensions/transport'
|
111
|
-
log.debug 'running meta magic to generate a transport base class'
|
112
|
-
return if Kernel.const_defined? "#{lex_class}::Transport"
|
113
|
-
|
114
|
-
Kernel.const_get(lex_class.to_s).const_set('Transport', Module.new { extend Legion::Extensions::Transport })
|
115
|
-
end
|
116
|
-
|
117
|
-
def auto_generate_data
|
118
|
-
require 'legion/extensions/data'
|
119
|
-
log.debug 'running meta magic to generate a data base class'
|
120
|
-
return if Kernel.const_defined? "#{lex_class}::Data"
|
121
|
-
|
122
|
-
Kernel.const_get(lex_class.to_s).const_set('Data', Module.new { extend Legion::Extensions::Data })
|
123
|
-
end
|
124
|
-
end
|
125
|
-
end
|
126
|
-
end
|
@@ -1,58 +0,0 @@
|
|
1
|
-
require 'legion/extensions/data/migrator'
|
2
|
-
require 'legion/extensions/data/model'
|
3
|
-
|
4
|
-
module Legion
|
5
|
-
module Extensions
|
6
|
-
module Data
|
7
|
-
include Legion::Extensions::Helpers::Data
|
8
|
-
include Legion::Extensions::Helpers::Logger
|
9
|
-
|
10
|
-
def build
|
11
|
-
@models = []
|
12
|
-
@migrations = []
|
13
|
-
if Dir[File.expand_path("#{data_path}/migrations/*.rb")].count.positive?
|
14
|
-
log.debug('Has migrations, checking status')
|
15
|
-
run
|
16
|
-
end
|
17
|
-
|
18
|
-
models = Dir[File.expand_path("#{data_path}/models/*.rb")]
|
19
|
-
if models.count.positive?
|
20
|
-
log.debug('Including LEX models')
|
21
|
-
models.each do |file|
|
22
|
-
require file
|
23
|
-
end
|
24
|
-
|
25
|
-
models_class.constants.select do |model|
|
26
|
-
models_class.const_get(model).extend Legion::Extensions::Data::Model
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
true
|
31
|
-
end
|
32
|
-
|
33
|
-
def extension_model
|
34
|
-
Legion::Data::Model::Extension[namespace: lex_class.to_s]
|
35
|
-
end
|
36
|
-
|
37
|
-
def schema_version
|
38
|
-
extension_model.values[:schema_version]
|
39
|
-
end
|
40
|
-
|
41
|
-
def migrations_path
|
42
|
-
"#{data_path}/migrations/"
|
43
|
-
end
|
44
|
-
|
45
|
-
def migrate_class
|
46
|
-
@migrate_class ||= Legion::Extensions::Data::Migrator.new(migrations_path, lex_class.to_s)
|
47
|
-
end
|
48
|
-
|
49
|
-
def run
|
50
|
-
return true if migrate_class.is_current?
|
51
|
-
|
52
|
-
log.debug('Running LEX schema migrator')
|
53
|
-
results = migrate_class.run
|
54
|
-
extension_model.update(schema_version: results)
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
@@ -1,28 +0,0 @@
|
|
1
|
-
require 'sequel/extensions/migration'
|
2
|
-
|
3
|
-
module Legion
|
4
|
-
module Extensions
|
5
|
-
module Data
|
6
|
-
class Migrator < Sequel::IntegerMigrator
|
7
|
-
def initialize(path, extension, **)
|
8
|
-
@path = path
|
9
|
-
@extension = extension
|
10
|
-
super(Legion::Data::Connection.sequel, path)
|
11
|
-
end
|
12
|
-
|
13
|
-
def default_schema_column
|
14
|
-
:schema_version
|
15
|
-
end
|
16
|
-
|
17
|
-
def default_schema_table
|
18
|
-
:extensions
|
19
|
-
end
|
20
|
-
|
21
|
-
def schema_dataset
|
22
|
-
Legion::Data::Connection.sequel.from(default_schema_table).where(namespace: @extension)
|
23
|
-
end
|
24
|
-
alias ds schema_dataset
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
@@ -1,82 +0,0 @@
|
|
1
|
-
module Legion
|
2
|
-
module Extensions
|
3
|
-
module Helpers
|
4
|
-
module Base
|
5
|
-
def lex_class
|
6
|
-
@lex_class ||= Kernel.const_get(calling_class_array[0..2].join('::'))
|
7
|
-
end
|
8
|
-
alias extension_class lex_class
|
9
|
-
|
10
|
-
def lex_name
|
11
|
-
@lex_name ||= calling_class_array[2].gsub(/(?<!^)[A-Z]/) { "_#{$&}" }.downcase
|
12
|
-
end
|
13
|
-
alias extension_name lex_name
|
14
|
-
alias lex_filename lex_name
|
15
|
-
|
16
|
-
def lex_const
|
17
|
-
@lex_const ||= calling_class_array[2]
|
18
|
-
end
|
19
|
-
|
20
|
-
def calling_class
|
21
|
-
@calling_class ||= respond_to?(:ancestors) ? ancestors.first : self.class
|
22
|
-
end
|
23
|
-
|
24
|
-
def calling_class_array
|
25
|
-
@calling_class_array ||= calling_class.to_s.split('::')
|
26
|
-
end
|
27
|
-
|
28
|
-
def actor_class
|
29
|
-
calling_class
|
30
|
-
end
|
31
|
-
|
32
|
-
def actor_name
|
33
|
-
@actor_name ||= calling_class_array.last.gsub(/(?<!^)[A-Z]/) { "_#{$&}" }.downcase
|
34
|
-
end
|
35
|
-
|
36
|
-
def actor_const
|
37
|
-
@actor_const ||= calling_class_array.last
|
38
|
-
end
|
39
|
-
|
40
|
-
def runner_class
|
41
|
-
@runner_class ||= Kernel.const_get(actor_class.to_s.sub!('Actor', 'Runners'))
|
42
|
-
end
|
43
|
-
|
44
|
-
def runner_name
|
45
|
-
@runner_name ||= runner_class.to_s.split('::').last.gsub(/(?<!^)[A-Z]/) { "_#{$&}" }.downcase
|
46
|
-
end
|
47
|
-
|
48
|
-
def runner_const
|
49
|
-
@runner_const ||= runner_class.to_s.split('::').last
|
50
|
-
end
|
51
|
-
|
52
|
-
def full_path
|
53
|
-
@full_path ||= "#{Gem::Specification.find_by_name("lex-#{lex_name}").gem_dir}/lib/legion/extensions/#{lex_filename}"
|
54
|
-
end
|
55
|
-
alias extension_path full_path
|
56
|
-
|
57
|
-
def from_json(string)
|
58
|
-
Legion::JSON.load(string)
|
59
|
-
end
|
60
|
-
|
61
|
-
def normalize(thing)
|
62
|
-
if thing.is_a? String
|
63
|
-
to_json(from_json(thing))
|
64
|
-
else
|
65
|
-
from_json(to_json(thing))
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
def to_dotted_hash(hash, recursive_key = '')
|
70
|
-
hash.each_with_object({}) do |(k, v), ret|
|
71
|
-
key = recursive_key + k.to_s
|
72
|
-
if v.is_a? Hash
|
73
|
-
ret.merge! to_dotted_hash(v, "#{key}.")
|
74
|
-
else
|
75
|
-
ret[key.to_sym] = v
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
require 'legion/extensions/helpers/base'
|
2
|
-
|
3
|
-
module Legion
|
4
|
-
module Extensions
|
5
|
-
module Helpers
|
6
|
-
module Cache
|
7
|
-
include Legion::Extensions::Helpers::Base
|
8
|
-
|
9
|
-
def cache_namespace
|
10
|
-
@cache_namespace ||= lex_name
|
11
|
-
end
|
12
|
-
|
13
|
-
def cache_set(key, value, ttl: 60, **)
|
14
|
-
Legion::Cache.set(cache_namespace + key, value, ttl: ttl)
|
15
|
-
end
|
16
|
-
|
17
|
-
def cache_get(key)
|
18
|
-
Legion::Cache.get(cache_namespace + key)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|