mona 0.2.3 → 0.4.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.
Potentially problematic release.
This version of mona might be problematic. Click here for more details.
- data/.document +5 -0
- data/.rspec +0 -2
- data/.travis.yml +3 -0
- data/Gemfile +9 -0
- data/LICENSE.txt +17 -18
- data/README.md +2 -192
- data/Rakefile +46 -5
- data/VERSION +1 -0
- data/lib/mona/board.rb +50 -0
- data/lib/mona/client.rb +10 -0
- data/lib/mona/response.rb +27 -0
- data/lib/mona/thread.rb +64 -0
- data/lib/mona.rb +22 -105
- data/mona.gemspec +66 -47
- data/spec/board_spec.rb +27 -0
- data/spec/client_spec.rb +15 -0
- data/spec/mona_spec.rb +5 -0
- data/spec/response_spec.rb +39 -0
- data/spec/spec_helper.rb +12 -0
- data/spec/test_data/dat.txt +119 -0
- data/spec/test_data/subject.txt +2 -0
- data/spec/thread_spec.rb +68 -0
- metadata +75 -219
- checksums.yaml +0 -7
- data/.ruby-version +0 -1
- data/.standard.yml +0 -3
- data/CHANGELOG.md +0 -5
- data/CODE_OF_CONDUCT.md +0 -84
- data/example/Gemfile +0 -1
- data/example/Gemfile.lock +0 -51
- data/example/Monafile.rb +0 -16
- data/example/bounded_contexts/cart/cart_app/Package.rb +0 -11
- data/example/bounded_contexts/cart/cart_app/bin/console +0 -11
- data/example/bounded_contexts/cart/cart_app/package/cart_app.rb +0 -2
- data/example/bounded_contexts/cart/cart_core/Package.rb +0 -12
- data/example/bounded_contexts/cart/cart_core/bin/console +0 -9
- data/example/bounded_contexts/cart/cart_core/package/cart_core.rb +0 -2
- data/example/bounded_contexts/cart/cart_datasets/Package.rb +0 -10
- data/example/bounded_contexts/cart/cart_datasets/bin/console +0 -9
- data/example/bounded_contexts/cart/cart_datasets/package/cart_datasets.rb +0 -2
- data/example/bounded_contexts/orders/orders_app/Package.rb +0 -12
- data/example/bounded_contexts/orders/orders_app/bin/console +0 -9
- data/example/bounded_contexts/orders/orders_app/package/orders_app.rb +0 -2
- data/example/bounded_contexts/orders/orders_core/Package.rb +0 -13
- data/example/bounded_contexts/orders/orders_core/bin/console +0 -9
- data/example/bounded_contexts/orders/orders_core/package/orders_core.rb +0 -2
- data/example/bounded_contexts/orders/orders_datasets/Package.rb +0 -11
- data/example/bounded_contexts/orders/orders_datasets/bin/console +0 -9
- data/example/bounded_contexts/orders/orders_datasets/package/orders_datasets.rb +0 -2
- data/example/bounded_contexts/orders/orders_query_api/Package.rb +0 -13
- data/example/bounded_contexts/orders/orders_query_api/bin/console +0 -9
- data/example/bounded_contexts/orders/orders_query_api/package/cart_query_api.rb +0 -2
- data/example/bounded_contexts/orders/paypal_client/Package.rb +0 -9
- data/example/bounded_contexts/orders/paypal_client/bin/console +0 -9
- data/example/bounded_contexts/orders/paypal_client/package/paypal_client.rb +0 -2
- data/example/bounded_contexts/shared/db_connection/Package.rb +0 -10
- data/example/bounded_contexts/shared/db_connection/bin/console +0 -9
- data/example/bounded_contexts/shared/db_connection/package/db_connection.rb +0 -2
- data/example/bounded_contexts/shared/test_utils/Package.rb +0 -9
- data/example/bounded_contexts/shared/test_utils/bin/console +0 -9
- data/example/bounded_contexts/shared/test_utils/package/test_utils.rb +0 -2
- data/example/bounded_contexts/storefront/storefront_app/Package.rb +0 -11
- data/example/bounded_contexts/storefront/storefront_app/bin/console +0 -9
- data/example/bounded_contexts/storefront/storefront_app/package/storefront_app.rb +0 -2
- data/example/bounded_contexts/storefront/storefront_core/Package.rb +0 -11
- data/example/bounded_contexts/storefront/storefront_core/bin/console +0 -9
- data/example/bounded_contexts/storefront/storefront_core/package/storefront_core.rb +0 -2
- data/example/bounded_contexts/storefront/storefront_datasets/Package.rb +0 -11
- data/example/bounded_contexts/storefront/storefront_datasets/bin/console +0 -9
- data/example/bounded_contexts/storefront/storefront_datasets/package/storefront_datasets.rb +0 -2
- data/example/configs/cart_app/default.yml +0 -4
- data/example/configs/cart_app/test.yml +0 -3
- data/example/configs/orders_app/default.yml +0 -4
- data/example/configs/orders_app/test.yml +0 -2
- data/exe/mona +0 -15
- data/lib/mona/config/loader.rb +0 -74
- data/lib/mona/config/manager.rb +0 -20
- data/lib/mona/config.rb +0 -23
- data/lib/mona/loaders/base.rb +0 -63
- data/lib/mona/loaders/zeitwerk.rb +0 -77
- data/lib/mona/package/builder.rb +0 -27
- data/lib/mona/package/dependency_bypasser.rb +0 -43
- data/lib/mona/package/factory.rb +0 -95
- data/lib/mona/package/find_root.rb +0 -33
- data/lib/mona/package/indexer.rb +0 -30
- data/lib/mona/package/initializer.rb +0 -46
- data/lib/mona/package/list.rb +0 -10
- data/lib/mona/package/repo.rb +0 -63
- data/lib/mona/package.rb +0 -51
- data/lib/mona/project/builder.rb +0 -20
- data/lib/mona/project/factory.rb +0 -115
- data/lib/mona/project/find_root.rb +0 -31
- data/lib/mona/project/initializer.rb +0 -26
- data/lib/mona/project.rb +0 -43
- data/lib/mona/task/manager.rb +0 -36
- data/lib/mona/task.rb +0 -21
- data/lib/mona/version.rb +0 -5
- data/sig/mona.rbs +0 -4
data/exe/mona
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
require "bundler/setup"
|
5
|
-
require "mona"
|
6
|
-
require "thor"
|
7
|
-
|
8
|
-
class MonaCli < Thor
|
9
|
-
desc "mona cd PACKAGE", "go to PACKAGE"
|
10
|
-
def cd(package)
|
11
|
-
puts "cd #{Mona.packages(File.expand_path(".")).find(package.to_sym).root_path}"
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
MonaCli.start(ARGV)
|
data/lib/mona/config/loader.rb
DELETED
@@ -1,74 +0,0 @@
|
|
1
|
-
require 'yaml'
|
2
|
-
require 'erb'
|
3
|
-
require 'ostruct'
|
4
|
-
|
5
|
-
class Mona::Config::Loader
|
6
|
-
include Mona::Mixins
|
7
|
-
|
8
|
-
DEFAULT_CONFIG_FILENAME = 'default.yml'
|
9
|
-
|
10
|
-
sig do
|
11
|
-
params(
|
12
|
-
config_name: T.any(String, Symbol),
|
13
|
-
)
|
14
|
-
.returns(Mona::Config)
|
15
|
-
end
|
16
|
-
def call(config_name)
|
17
|
-
config_name = config_name.to_s
|
18
|
-
config = Mona::Config.new
|
19
|
-
|
20
|
-
default_config_filename = File.join(
|
21
|
-
Mona.current_project.root_path,
|
22
|
-
Mona.current_project.configs_dir,
|
23
|
-
config_name,
|
24
|
-
DEFAULT_CONFIG_FILENAME
|
25
|
-
)
|
26
|
-
|
27
|
-
unless File.exist?(default_config_filename)
|
28
|
-
raise StandardError.new("Config '#{config_name}' was not found. Add it to '#{default_config_filename}'")
|
29
|
-
end
|
30
|
-
|
31
|
-
hash =
|
32
|
-
begin
|
33
|
-
YAML.load( ERB.new(File.read(default_config_filename)).result )
|
34
|
-
rescue => e
|
35
|
-
puts ERB.new(File.read(default_config_filename)).result.inspect
|
36
|
-
end
|
37
|
-
|
38
|
-
hash_to_config(
|
39
|
-
hash: hash,
|
40
|
-
config: config
|
41
|
-
)
|
42
|
-
|
43
|
-
env_config_filename = File.join(
|
44
|
-
Mona.current_project.root_path,
|
45
|
-
Mona.current_project.configs_dir,
|
46
|
-
config_name,
|
47
|
-
"#{Mona.current_project.env}.yml"
|
48
|
-
)
|
49
|
-
|
50
|
-
hash_to_config(
|
51
|
-
hash: YAML.load( ERB.new(File.read(env_config_filename)).result ),
|
52
|
-
config: config
|
53
|
-
) if File.exist?(env_config_filename)
|
54
|
-
|
55
|
-
config.send(config_name)
|
56
|
-
end
|
57
|
-
|
58
|
-
private
|
59
|
-
|
60
|
-
def hash_to_config(hash:, config:)
|
61
|
-
hash.each do |key, value|
|
62
|
-
if value.is_a?(Hash)
|
63
|
-
nested_config = config.read_attribute(key)
|
64
|
-
if nested_config.nil? || !nested_config.is_a?(Mona::Config)
|
65
|
-
nested_config = Mona::Config.new
|
66
|
-
end
|
67
|
-
hash_to_config(hash: value, config: nested_config)
|
68
|
-
config.write_attribute(key, nested_config)
|
69
|
-
else
|
70
|
-
config.write_attribute(key, value)
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
data/lib/mona/config/manager.rb
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
class Mona::Config::Manager
|
2
|
-
include Mona::Mixins
|
3
|
-
|
4
|
-
Inject = Mona::Deps[
|
5
|
-
config_loader: "config.loader"
|
6
|
-
]
|
7
|
-
|
8
|
-
include Inject
|
9
|
-
|
10
|
-
sig do
|
11
|
-
params(
|
12
|
-
method_name: Symbol,
|
13
|
-
args: T.anything
|
14
|
-
)
|
15
|
-
.returns(Mona::Config)
|
16
|
-
end
|
17
|
-
def method_missing(method_name, *args)
|
18
|
-
config_loader.call(method_name)
|
19
|
-
end
|
20
|
-
end
|
data/lib/mona/config.rb
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
class Mona::Config
|
2
|
-
def initialize(attributes = {})
|
3
|
-
@attributes = attributes
|
4
|
-
end
|
5
|
-
|
6
|
-
def read_attribute(key)
|
7
|
-
@attributes[key.to_s]
|
8
|
-
end
|
9
|
-
|
10
|
-
def write_attribute(key, value)
|
11
|
-
@attributes[key.to_s] = value
|
12
|
-
end
|
13
|
-
|
14
|
-
def method_missing(method_name, *_args)
|
15
|
-
read_attribute(method_name)
|
16
|
-
end
|
17
|
-
|
18
|
-
def to_h
|
19
|
-
@attributes.each_with_object({}) do |(k, v), h|
|
20
|
-
h[k] = self.class === v ? v.to_h : v
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
data/lib/mona/loaders/base.rb
DELETED
@@ -1,63 +0,0 @@
|
|
1
|
-
class Mona::Loaders::Base
|
2
|
-
include Mona::Mixins
|
3
|
-
|
4
|
-
class << self
|
5
|
-
def registry
|
6
|
-
@registry ||= {}
|
7
|
-
end
|
8
|
-
|
9
|
-
def inherited(subclass)
|
10
|
-
name = subclass.to_s.split("::").last.downcase.to_sym
|
11
|
-
|
12
|
-
registry[name] = subclass
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
attr_reader :overwriters, :inflections, :ignore_dirs, :autoload_dirs, :loader, :root_path
|
17
|
-
|
18
|
-
def initialize(root_path, &block)
|
19
|
-
@root_path = root_path
|
20
|
-
@overwriters = []
|
21
|
-
@inflections = {}
|
22
|
-
@ignore_dirs = []
|
23
|
-
@autoload_dirs = []
|
24
|
-
|
25
|
-
instance_exec(&block) if block_given?
|
26
|
-
end
|
27
|
-
|
28
|
-
def push_dir(dir)
|
29
|
-
@autoload_dirs.push(dir)
|
30
|
-
end
|
31
|
-
|
32
|
-
def setup
|
33
|
-
raise StandardError.new('not implemented')
|
34
|
-
end
|
35
|
-
|
36
|
-
def reload
|
37
|
-
raise StandardError.new('not implemented')
|
38
|
-
end
|
39
|
-
|
40
|
-
def eager_load
|
41
|
-
raise StandardError.new('not implemented')
|
42
|
-
end
|
43
|
-
|
44
|
-
def check_classes
|
45
|
-
raise StandardError.new('not implemented')
|
46
|
-
end
|
47
|
-
|
48
|
-
module SetupDsl
|
49
|
-
def inflect(hash)
|
50
|
-
@inflections.merge!(hash)
|
51
|
-
end
|
52
|
-
|
53
|
-
def overwrite(proc)
|
54
|
-
overwriters.push(proc)
|
55
|
-
end
|
56
|
-
|
57
|
-
def ignore(glob)
|
58
|
-
@ignore_dirs.push(glob)
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
include SetupDsl
|
63
|
-
end
|
@@ -1,77 +0,0 @@
|
|
1
|
-
require 'zeitwerk'
|
2
|
-
require 'benchmark'
|
3
|
-
|
4
|
-
class Mona::Loaders::Zeitwerk < Mona::Loaders::Base
|
5
|
-
include Mona::Mixins
|
6
|
-
|
7
|
-
ERROR_MESSAGE_REGEX = /expected file (?<path>[\w\/]+.rb) to define constant (?<klass>[\w:]+)/
|
8
|
-
|
9
|
-
def initialize(...)
|
10
|
-
@loader = Zeitwerk::Loader.new
|
11
|
-
@loader.inflector = Class.new(Zeitwerk::Inflector).new
|
12
|
-
|
13
|
-
super(...)
|
14
|
-
end
|
15
|
-
|
16
|
-
def setup
|
17
|
-
apply_rules_for(@loader)
|
18
|
-
@loader.setup
|
19
|
-
end
|
20
|
-
|
21
|
-
def eager_load
|
22
|
-
time = Benchmark.realtime do
|
23
|
-
@loader.eager_load
|
24
|
-
end
|
25
|
-
|
26
|
-
puts "eager_load dependencies in #{'%.2f' % time} seconds"
|
27
|
-
end
|
28
|
-
|
29
|
-
def check_classes
|
30
|
-
check_classes_loader = @loader.dup
|
31
|
-
check_classes_loader.on_load { |cpath, value, abspath| puts value }
|
32
|
-
|
33
|
-
errors = []
|
34
|
-
|
35
|
-
begin
|
36
|
-
check_classes_loader.eager_load
|
37
|
-
rescue Zeitwerk::NameError => e
|
38
|
-
match = e.message.match(ERROR_MESSAGE_REGEX)
|
39
|
-
|
40
|
-
raise e if match.nil?
|
41
|
-
|
42
|
-
# TODO: use logger
|
43
|
-
errors << "#{match[:path]} => #{match[:klass]}"
|
44
|
-
check_classes_loader.ignore(match[:path])
|
45
|
-
retry
|
46
|
-
end
|
47
|
-
|
48
|
-
puts errors
|
49
|
-
raise StandardError.new("loader fails with #{errors.count} errors") if errors.any?
|
50
|
-
|
51
|
-
nil
|
52
|
-
end
|
53
|
-
|
54
|
-
def apply_rules_for(entity)
|
55
|
-
@autoload_dirs.uniq.each { entity.push_dir(_1) }
|
56
|
-
@ignore_dirs.uniq
|
57
|
-
.map { File.join(Mona.current_project.root_path, _1) }
|
58
|
-
.each { entity.ignore( _1 ) }
|
59
|
-
|
60
|
-
entity.inflector.inflect(@inflections)
|
61
|
-
|
62
|
-
result_overwriter = ->(kname) { @overwriters.each { |o| kname = o.call(kname) }; kname }
|
63
|
-
entity.inflector.define_singleton_method(:camelize) do |basename, abspath|
|
64
|
-
result_overwriter.call( super(basename, abspath) )
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
def ignore(glob)
|
69
|
-
super(glob)
|
70
|
-
|
71
|
-
# TODO: if loader.setup is true => push dir directly to the @loader
|
72
|
-
@ignore_dirs
|
73
|
-
.uniq
|
74
|
-
.map { File.join(root_path, _1) }
|
75
|
-
.each { @loader.ignore( _1 ) }
|
76
|
-
end
|
77
|
-
end
|
data/lib/mona/package/builder.rb
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
class Mona::Package::Builder
|
2
|
-
include Mona::Mixins
|
3
|
-
|
4
|
-
Inject = Mona::Deps[
|
5
|
-
"package.find_root",
|
6
|
-
"package.factory"
|
7
|
-
]
|
8
|
-
|
9
|
-
include Inject
|
10
|
-
|
11
|
-
sig do
|
12
|
-
params(
|
13
|
-
package_path: String,
|
14
|
-
project_root: String,
|
15
|
-
package_dirname: String
|
16
|
-
)
|
17
|
-
.returns(Mona::Package)
|
18
|
-
end
|
19
|
-
def call(package_path, project_root, package_dirname)
|
20
|
-
package_root_path = find_root.call(package_path, project_root)
|
21
|
-
package_file_path = "#{package_root_path}/#{Mona::PACKAGE_FILENAME}"
|
22
|
-
|
23
|
-
package_init_proc = proc { instance_eval(File.read(package_file_path)) }
|
24
|
-
|
25
|
-
package = factory.call(package_root_path, package_dirname, init_proc: package_init_proc)
|
26
|
-
end
|
27
|
-
end
|
@@ -1,43 +0,0 @@
|
|
1
|
-
require 'set'
|
2
|
-
|
3
|
-
class Mona::Package::DependencyBypasser
|
4
|
-
include Mona::Mixins
|
5
|
-
|
6
|
-
Inject = Mona::Deps[
|
7
|
-
packages_repo: "package.repo"
|
8
|
-
]
|
9
|
-
|
10
|
-
include Inject
|
11
|
-
|
12
|
-
sig do
|
13
|
-
params(
|
14
|
-
package_name: Symbol,
|
15
|
-
env: Symbol,
|
16
|
-
)
|
17
|
-
.returns(T::Array[Symbol])
|
18
|
-
end
|
19
|
-
def call(package_name:, env:)
|
20
|
-
walk(package_name: package_name, env: env, imported: Set.new)
|
21
|
-
end
|
22
|
-
|
23
|
-
private
|
24
|
-
|
25
|
-
def walk(package_name:, env:, imported:, packages_order: [])
|
26
|
-
package = packages_repo.find!(package_name)
|
27
|
-
|
28
|
-
return if !imported.add?(package_name)
|
29
|
-
|
30
|
-
package_dependencies = package.get_dependencies(env)
|
31
|
-
|
32
|
-
package_dependencies.each do |name|
|
33
|
-
walk(
|
34
|
-
package_name: name,
|
35
|
-
imported: imported,
|
36
|
-
packages_order: packages_order,
|
37
|
-
env: Mona::Package::DEFAULT_ENV,
|
38
|
-
)
|
39
|
-
end
|
40
|
-
|
41
|
-
packages_order.push(package_name)
|
42
|
-
end
|
43
|
-
end
|