ree 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.rspec +3 -0
- data/.rubocop.yml +13 -0
- data/.ruby-version +1 -0
- data/CHANGELOG.md +5 -0
- data/CODE_OF_CONDUCT.md +84 -0
- data/Gemfile +9 -0
- data/Gemfile.lock +41 -0
- data/LICENSE.txt +21 -0
- data/README.md +474 -0
- data/Rakefile +8 -0
- data/bin/console +8 -0
- data/bin/setup +8 -0
- data/exe/ree +264 -0
- data/lib/ree/args.rb +34 -0
- data/lib/ree/bean_dsl.rb +24 -0
- data/lib/ree/cli/generate_package.rb +18 -0
- data/lib/ree/cli/generate_package_schema.rb +54 -0
- data/lib/ree/cli/generate_packages_schema.rb +17 -0
- data/lib/ree/cli/generate_template.rb +20 -0
- data/lib/ree/cli/init.rb +22 -0
- data/lib/ree/cli/spec_runner.rb +184 -0
- data/lib/ree/cli.rb +12 -0
- data/lib/ree/container.rb +67 -0
- data/lib/ree/contracts/arg_contracts/any.rb +15 -0
- data/lib/ree/contracts/arg_contracts/array_of.rb +52 -0
- data/lib/ree/contracts/arg_contracts/block.rb +15 -0
- data/lib/ree/contracts/arg_contracts/bool.rb +21 -0
- data/lib/ree/contracts/arg_contracts/eq.rb +28 -0
- data/lib/ree/contracts/arg_contracts/exactly.rb +28 -0
- data/lib/ree/contracts/arg_contracts/hash_of.rb +59 -0
- data/lib/ree/contracts/arg_contracts/ksplat.rb +141 -0
- data/lib/ree/contracts/arg_contracts/kwargs.rb +22 -0
- data/lib/ree/contracts/arg_contracts/nilor.rb +16 -0
- data/lib/ree/contracts/arg_contracts/none.rb +15 -0
- data/lib/ree/contracts/arg_contracts/optblock.rb +11 -0
- data/lib/ree/contracts/arg_contracts/or.rb +30 -0
- data/lib/ree/contracts/arg_contracts/range_of.rb +51 -0
- data/lib/ree/contracts/arg_contracts/set_of.rb +54 -0
- data/lib/ree/contracts/arg_contracts/splat.rb +297 -0
- data/lib/ree/contracts/arg_contracts/splat_of.rb +64 -0
- data/lib/ree/contracts/arg_contracts/squarable.rb +11 -0
- data/lib/ree/contracts/arg_contracts/subclass_of.rb +28 -0
- data/lib/ree/contracts/arg_contracts.rb +29 -0
- data/lib/ree/contracts/called_args_validator.rb +291 -0
- data/lib/ree/contracts/contract_definition.rb +142 -0
- data/lib/ree/contracts/contractable.rb +34 -0
- data/lib/ree/contracts/core.rb +17 -0
- data/lib/ree/contracts/engine.rb +71 -0
- data/lib/ree/contracts/engine_proxy.rb +13 -0
- data/lib/ree/contracts/errors/bad_contract_error.rb +4 -0
- data/lib/ree/contracts/errors/contract_error.rb +4 -0
- data/lib/ree/contracts/errors/error.rb +4 -0
- data/lib/ree/contracts/errors/return_contract_error.rb +4 -0
- data/lib/ree/contracts/method_decorator.rb +158 -0
- data/lib/ree/contracts/truncatable.rb +9 -0
- data/lib/ree/contracts/utils.rb +9 -0
- data/lib/ree/contracts/validators/array_validator.rb +51 -0
- data/lib/ree/contracts/validators/base_validator.rb +27 -0
- data/lib/ree/contracts/validators/class_validator.rb +17 -0
- data/lib/ree/contracts/validators/default_validator.rb +20 -0
- data/lib/ree/contracts/validators/hash_validator.rb +100 -0
- data/lib/ree/contracts/validators/proc_validator.rb +17 -0
- data/lib/ree/contracts/validators/range_validator.rb +17 -0
- data/lib/ree/contracts/validators/regexp_validator.rb +17 -0
- data/lib/ree/contracts/validators/valid_validator.rb +28 -0
- data/lib/ree/contracts/validators.rb +42 -0
- data/lib/ree/contracts.rb +45 -0
- data/lib/ree/core/link_validator.rb +42 -0
- data/lib/ree/core/object.rb +132 -0
- data/lib/ree/core/object_error.rb +9 -0
- data/lib/ree/core/object_link.rb +21 -0
- data/lib/ree/core/object_schema.rb +47 -0
- data/lib/ree/core/object_schema_builder.rb +110 -0
- data/lib/ree/core/package.rb +177 -0
- data/lib/ree/core/package_dep.rb +9 -0
- data/lib/ree/core/package_env_var.rb +12 -0
- data/lib/ree/core/package_loader.rb +95 -0
- data/lib/ree/core/package_schema.rb +27 -0
- data/lib/ree/core/package_schema_builder.rb +53 -0
- data/lib/ree/core/package_schema_loader.rb +170 -0
- data/lib/ree/core/packages_detector.rb +43 -0
- data/lib/ree/core/packages_schema.rb +19 -0
- data/lib/ree/core/packages_schema_builder.rb +50 -0
- data/lib/ree/core/packages_schema_loader.rb +95 -0
- data/lib/ree/core/packages_schema_locator.rb +27 -0
- data/lib/ree/core/packages_store.rb +32 -0
- data/lib/ree/core/path_helper.rb +104 -0
- data/lib/ree/dsl/build_package_dsl.rb +155 -0
- data/lib/ree/dsl/domain_error.rb +4 -0
- data/lib/ree/dsl/error_builder.rb +39 -0
- data/lib/ree/dsl/error_dsl.rb +27 -0
- data/lib/ree/dsl/import_dsl.rb +106 -0
- data/lib/ree/dsl/link_import_builder.rb +66 -0
- data/lib/ree/dsl/object_dsl.rb +319 -0
- data/lib/ree/dsl/object_hooks.rb +6 -0
- data/lib/ree/dsl/package_require.rb +44 -0
- data/lib/ree/error.rb +11 -0
- data/lib/ree/facades/packages_facade.rb +197 -0
- data/lib/ree/fn_dsl.rb +24 -0
- data/lib/ree/gen/init.rb +64 -0
- data/lib/ree/gen/package.rb +56 -0
- data/lib/ree/gen.rb +8 -0
- data/lib/ree/handlers/template_handler.rb +118 -0
- data/lib/ree/link_dsl.rb +175 -0
- data/lib/ree/object_compiler.rb +149 -0
- data/lib/ree/package_dsl.rb +34 -0
- data/lib/ree/rspec_link_dsl.rb +19 -0
- data/lib/ree/spec_runner/command_generator.rb +49 -0
- data/lib/ree/spec_runner/command_params.rb +9 -0
- data/lib/ree/spec_runner/runner.rb +200 -0
- data/lib/ree/spec_runner/spec_filename_matcher.rb +27 -0
- data/lib/ree/spec_runner/view.rb +30 -0
- data/lib/ree/spec_runner.rb +11 -0
- data/lib/ree/templates/init/.gitignore +1 -0
- data/lib/ree/templates/init/.irbrc +13 -0
- data/lib/ree/templates/init/.rspec +3 -0
- data/lib/ree/templates/init/.ruby-version +1 -0
- data/lib/ree/templates/init/Gemfile +7 -0
- data/lib/ree/templates/init/Packages.schema.json +1 -0
- data/lib/ree/templates/init/bin/console +5 -0
- data/lib/ree/templates/init/readme.md +2 -0
- data/lib/ree/templates/init/ree.setup.rb +21 -0
- data/lib/ree/templates/init/spec.init.rb +7 -0
- data/lib/ree/templates/package/.gitignore +0 -0
- data/lib/ree/templates/package/.rspec +2 -0
- data/lib/ree/templates/package/<%=package_subdir_name%>/<%=package_name%>/.gitkeep +0 -0
- data/lib/ree/templates/package/<%=package_subdir_name%>/<%=package_name%>.rb +15 -0
- data/lib/ree/templates/package/Package.schema.json +0 -0
- data/lib/ree/templates/package/bin/console +5 -0
- data/lib/ree/templates/package/spec/package_schema_spec.rb +14 -0
- data/lib/ree/templates/package/spec/spec_helper.rb +3 -0
- data/lib/ree/templates/template_detector.rb +35 -0
- data/lib/ree/templates/template_renderer.rb +55 -0
- data/lib/ree/utils/render_utils.rb +20 -0
- data/lib/ree/utils/string_utils.rb +29 -0
- data/lib/ree/version.rb +5 -0
- data/lib/ree.rb +279 -0
- data/sig/ree.rbs +4 -0
- metadata +199 -0
@@ -0,0 +1,35 @@
|
|
1
|
+
class Ree::TemplateDetector
|
2
|
+
DEFAULT_TEMPLATES_DIRECTORY = File.expand_path(__dir__)
|
3
|
+
|
4
|
+
def initialize(project_path)
|
5
|
+
@all_templates_directory ||= File.join(project_path, ".ree", "templates")
|
6
|
+
end
|
7
|
+
|
8
|
+
def detect_template_folder(template_name)
|
9
|
+
template_path = [@all_templates_directory, DEFAULT_TEMPLATES_DIRECTORY]
|
10
|
+
.map {|dir| File.join(dir, template_name.to_s)}
|
11
|
+
.detect {|dir| Dir.exist?(dir)}
|
12
|
+
|
13
|
+
raise Ree::Error.new('Template does not exist') if template_path.nil?
|
14
|
+
|
15
|
+
template_path
|
16
|
+
end
|
17
|
+
|
18
|
+
def gem_template_folder(template_name)
|
19
|
+
File.join(DEFAULT_TEMPLATES_DIRECTORY, template_name.to_s)
|
20
|
+
end
|
21
|
+
|
22
|
+
def project_template_folder(template_name)
|
23
|
+
File.join(@all_templates_directory, template_name.to_s)
|
24
|
+
end
|
25
|
+
|
26
|
+
def template_file_path(template_name, relative_path)
|
27
|
+
file_path = [detect_template_folder(template_name), DEFAULT_TEMPLATES_DIRECTORY]
|
28
|
+
.map {|folder| File.join(folder, relative_path)}
|
29
|
+
.detect {|file| File.exists?(file)}
|
30
|
+
|
31
|
+
raise Ree::Error.new('Template does not exist') if file_path.nil?
|
32
|
+
|
33
|
+
file_path
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
class Ree::TemplateRenderer
|
2
|
+
TEMPLATE_VARIABLE = /<%=\s*([\w\d-]+)\s*%>/i
|
3
|
+
|
4
|
+
class << self
|
5
|
+
def handle(template, locals = {})
|
6
|
+
Ree::TemplateRenderer.new(template, locals).handle
|
7
|
+
end
|
8
|
+
|
9
|
+
def get_undefined_variables(template, locals = {})
|
10
|
+
Ree::TemplateRenderer.new(template, locals).get_undefined_variables
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def initialize(template, locals)
|
15
|
+
@template = template
|
16
|
+
@locals = locals
|
17
|
+
@undefined_variables = []
|
18
|
+
end
|
19
|
+
|
20
|
+
def handle
|
21
|
+
raise Ree::Error.new("Template variable not defined: #{get_undefined_variables.map(&:to_s).join(';')}") if get_undefined_variables.any?
|
22
|
+
|
23
|
+
Ree::RenderUtils.render(@template, @locals)
|
24
|
+
end
|
25
|
+
|
26
|
+
def get_undefined_variables
|
27
|
+
Ree::RenderUtils.render(@template, @locals)
|
28
|
+
|
29
|
+
@undefined_variables
|
30
|
+
rescue NameError => e
|
31
|
+
raise NoMethodError, "Undefined method for template. Please, add :#{e.name} method to .ree/helpers/render_helper.rb file!" if @undefined_variables.include?(e.name)
|
32
|
+
|
33
|
+
@locals[e.name] = e.name.to_s
|
34
|
+
@undefined_variables.push(e.name)
|
35
|
+
|
36
|
+
retry
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
def get_template_variables
|
42
|
+
Ree::RenderUtils.render(@template, {})
|
43
|
+
rescue NameError => e
|
44
|
+
@locals
|
45
|
+
|
46
|
+
get_template_variables(@template, fake_locals, undefined_variables)
|
47
|
+
end
|
48
|
+
|
49
|
+
def get_passed_variables
|
50
|
+
@locals
|
51
|
+
.keys
|
52
|
+
.uniq
|
53
|
+
.map(&:intern)
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal = true
|
2
|
+
|
3
|
+
require 'erb'
|
4
|
+
|
5
|
+
class Ree::RenderUtils
|
6
|
+
def self.render(template, locals)
|
7
|
+
new(locals).render(template)
|
8
|
+
end
|
9
|
+
|
10
|
+
def initialize(locals = {})
|
11
|
+
@render_binding = binding
|
12
|
+
@locals = locals
|
13
|
+
end
|
14
|
+
|
15
|
+
def render(template)
|
16
|
+
@locals.each { |variable, value| @render_binding.local_variable_set(variable, value) }
|
17
|
+
|
18
|
+
ERB.new(template).result(@render_binding)
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal = true
|
2
|
+
|
3
|
+
class Ree::StringUtils
|
4
|
+
class << self
|
5
|
+
def truncate(str, limit = 80)
|
6
|
+
str.length > limit ? "#{str[0..limit]}..." : str
|
7
|
+
end
|
8
|
+
|
9
|
+
def underscore(camel_cased_word)
|
10
|
+
return camel_cased_word unless /[A-Z-]|::/.match?(camel_cased_word)
|
11
|
+
word = camel_cased_word.to_s.gsub("::".freeze, "/".freeze)
|
12
|
+
word.gsub!(/([A-Z\d]+)([A-Z][a-z])/, '\1_\2'.freeze)
|
13
|
+
word.gsub!(/([a-z\d])([A-Z])/, '\1_\2'.freeze)
|
14
|
+
word.tr!("-".freeze, "_".freeze)
|
15
|
+
word.downcase!
|
16
|
+
word
|
17
|
+
end
|
18
|
+
|
19
|
+
def camelize(string, uppercase_first_letter = true)
|
20
|
+
if uppercase_first_letter
|
21
|
+
string = string.sub(/^[a-z\d]*/) { |match| match.capitalize }
|
22
|
+
else
|
23
|
+
string = string.sub(/^(?:(?=\b|[A-Z_])|\w)/) { |match| match.downcase }
|
24
|
+
end
|
25
|
+
|
26
|
+
string.gsub(/(?:_|(\/))([a-z\d]*)/) { "#{$1}#{$2.capitalize}" }.gsub("/", "::")
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/lib/ree/version.rb
ADDED
data/lib/ree.rb
ADDED
@@ -0,0 +1,279 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'logger'
|
4
|
+
require 'pathname'
|
5
|
+
require_relative 'ree/version'
|
6
|
+
require 'fileutils'
|
7
|
+
|
8
|
+
module Ree
|
9
|
+
autoload :Args, 'ree/args'
|
10
|
+
autoload :BeanDSL, 'ree/bean_dsl'
|
11
|
+
autoload :CLI, 'ree/cli'
|
12
|
+
autoload :Container, 'ree/container'
|
13
|
+
autoload :Contracts, 'ree/contracts'
|
14
|
+
autoload :DomainError, 'ree/dsl/domain_error'
|
15
|
+
autoload :Error, 'ree/error'
|
16
|
+
autoload :ErrorBuilder, 'ree/dsl/error_builder'
|
17
|
+
autoload :ErrorDsl, 'ree/dsl/error_dsl'
|
18
|
+
autoload :FnDSL, 'ree/fn_dsl'
|
19
|
+
autoload :Gen, 'ree/gen'
|
20
|
+
autoload :ImportDsl, 'ree/dsl/import_dsl'
|
21
|
+
autoload :LinkDSL, 'ree/link_dsl'
|
22
|
+
autoload :LinkImportBuilder, 'ree/dsl/link_import_builder'
|
23
|
+
autoload :LinkValidator, 'ree/core/link_validator'
|
24
|
+
autoload :Object, 'ree/core/object'
|
25
|
+
autoload :ObjectCompiler, 'ree/object_compiler'
|
26
|
+
autoload :ObjectDsl, 'ree/dsl/object_dsl'
|
27
|
+
autoload :ObjectError, 'ree/core/object_error'
|
28
|
+
autoload :ObjectLink, 'ree/core/object_link'
|
29
|
+
autoload :ObjectSchema, 'ree/core/object_schema'
|
30
|
+
autoload :ObjectSchemaBuilder, 'ree/core/object_schema_builder'
|
31
|
+
autoload :Package, 'ree/core/package'
|
32
|
+
autoload :PackageDep, 'ree/core/package_dep'
|
33
|
+
autoload :BuildPackageDsl, 'ree/dsl/build_package_dsl'
|
34
|
+
autoload :PackageDSL, 'ree/package_dsl'
|
35
|
+
autoload :PackageEnvVar, 'ree/core/package_env_var'
|
36
|
+
autoload :PackageLoader, 'ree/core/package_loader'
|
37
|
+
autoload :PackageSchema, 'ree/core/package_schema'
|
38
|
+
autoload :PackageSchemaBuilder, 'ree/core/package_schema_builder'
|
39
|
+
autoload :PackageSchemaLoader, 'ree/core/package_schema_loader'
|
40
|
+
autoload :PackagesDetector, 'ree/core/packages_detector'
|
41
|
+
autoload :PackagesFacade, 'ree/facades/packages_facade'
|
42
|
+
autoload :PackagesSchema, 'ree/core/packages_schema'
|
43
|
+
autoload :PackagesSchemaBuilder, 'ree/core/packages_schema_builder'
|
44
|
+
autoload :PackagesSchemaLoader, 'ree/core/packages_schema_loader'
|
45
|
+
autoload :PackagesSchemaLocator, 'ree/core/packages_schema_locator'
|
46
|
+
autoload :PackagesStore, 'ree/core/packages_store'
|
47
|
+
autoload :PathHelper, 'ree/core/path_helper'
|
48
|
+
autoload :RenderUtils, 'ree/utils/render_utils'
|
49
|
+
autoload :RSpecLinkDSL, 'ree/rspec_link_dsl'
|
50
|
+
autoload :SpecRunner, 'ree/spec_runner'
|
51
|
+
autoload :StringUtils, 'ree/utils/string_utils'
|
52
|
+
autoload :TemplateDetector, 'ree/templates/template_detector'
|
53
|
+
autoload :TemplateHandler, 'ree/handlers/template_handler'
|
54
|
+
autoload :TemplateRenderer, 'ree/templates/template_renderer'
|
55
|
+
|
56
|
+
PACKAGE = 'package'
|
57
|
+
SCHEMAS = 'schemas'
|
58
|
+
SCHEMA = 'schema'
|
59
|
+
REE_SETUP = 'ree.setup.rb'
|
60
|
+
PACKAGE_SCHEMA_FILE = 'Package.schema.json'
|
61
|
+
PACKAGES_SCHEMA_FILE = 'Packages.schema.json'
|
62
|
+
ROOT_DIR_MESSAGE = 'Ree.root_dir is not set. Use Ree.init(DIR) to set project dir'
|
63
|
+
|
64
|
+
class ReeGem
|
65
|
+
include Ree::Args
|
66
|
+
|
67
|
+
attr_reader :name, :dir, :packages_schema_path
|
68
|
+
|
69
|
+
def initialize(name, dir, packages_schema_path)
|
70
|
+
check_arg(name, :name, Symbol)
|
71
|
+
check_arg(dir, :dir, String)
|
72
|
+
@name = name
|
73
|
+
@dir = dir
|
74
|
+
@packages_schema_path = packages_schema_path
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
class << self
|
79
|
+
include Ree::Args
|
80
|
+
|
81
|
+
def container
|
82
|
+
Container.instance
|
83
|
+
end
|
84
|
+
|
85
|
+
def logger
|
86
|
+
@logger ||= begin
|
87
|
+
logger = Logger.new(STDOUT)
|
88
|
+
logger.level = Logger::WARN
|
89
|
+
logger
|
90
|
+
end
|
91
|
+
|
92
|
+
@logger
|
93
|
+
end
|
94
|
+
|
95
|
+
# Switches Ree into irb mode that allows to declare ree objects inside IRB
|
96
|
+
def enable_irb_mode
|
97
|
+
@irb_mode = true
|
98
|
+
end
|
99
|
+
|
100
|
+
def disable_irb_mode
|
101
|
+
@irb_mode = false
|
102
|
+
end
|
103
|
+
|
104
|
+
def disable_contracts
|
105
|
+
ENV['NO_CONTRACTS'] = 'true'
|
106
|
+
end
|
107
|
+
|
108
|
+
def enable_contracts
|
109
|
+
ENV['NO_CONTRACTS'] = nil
|
110
|
+
end
|
111
|
+
|
112
|
+
def irb_mode?
|
113
|
+
!!@irb_mode
|
114
|
+
end
|
115
|
+
|
116
|
+
def set_logger_debug
|
117
|
+
logger.level = Logger::DEBUG
|
118
|
+
end
|
119
|
+
|
120
|
+
# Ree will use schema files to load packages and registered objects
|
121
|
+
def set_performance_mode
|
122
|
+
@performance_mode = true
|
123
|
+
end
|
124
|
+
|
125
|
+
def set_dev_mode
|
126
|
+
@performance_mode = false
|
127
|
+
end
|
128
|
+
|
129
|
+
def performance_mode?
|
130
|
+
!!@performance_mode
|
131
|
+
end
|
132
|
+
|
133
|
+
# Define preload context for registered objects
|
134
|
+
def preload_for(env)
|
135
|
+
check_arg(env, :env, Symbol)
|
136
|
+
@prelaod_for = env
|
137
|
+
end
|
138
|
+
|
139
|
+
def preload_for?(env)
|
140
|
+
check_arg(env, :env, Symbol)
|
141
|
+
@prelaod_for == env
|
142
|
+
end
|
143
|
+
|
144
|
+
def init(dir, irb: false)
|
145
|
+
check_arg(dir, :dir, String)
|
146
|
+
|
147
|
+
if !Dir.exists?(dir)
|
148
|
+
raise Ree::Error.new("Dir does not exist: #{dir}", :invalid_root_dir)
|
149
|
+
end
|
150
|
+
|
151
|
+
@packages_schema_path = locate_packages_schema(dir)
|
152
|
+
@root_dir = Pathname.new(@packages_schema_path).dirname.to_s
|
153
|
+
|
154
|
+
ree_setup_path = File.join(@root_dir, REE_SETUP)
|
155
|
+
|
156
|
+
if File.exists?(ree_setup_path)
|
157
|
+
require(ree_setup_path)
|
158
|
+
end
|
159
|
+
|
160
|
+
if irb
|
161
|
+
require('irb')
|
162
|
+
enable_irb_mode
|
163
|
+
|
164
|
+
FileUtils.cd(@root_dir) do
|
165
|
+
IRB.start(@root_dir)
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
@root_dir
|
170
|
+
end
|
171
|
+
|
172
|
+
# @param [Symbol] name
|
173
|
+
# @return [Nilor[Ree::ReeGem]]
|
174
|
+
def gem(name)
|
175
|
+
check_arg(name, :name, Symbol)
|
176
|
+
gems.detect { _1.name == name }
|
177
|
+
end
|
178
|
+
|
179
|
+
def gems
|
180
|
+
@gems ||= []
|
181
|
+
@gems
|
182
|
+
end
|
183
|
+
|
184
|
+
# @param [Symbol] name
|
185
|
+
# @param [String] dir
|
186
|
+
# @return [Ree::ReeGem]]
|
187
|
+
def register_gem(gem_name, dir)
|
188
|
+
check_arg(gem_name, :gem_name, Symbol)
|
189
|
+
check_arg(dir, :dir, String)
|
190
|
+
|
191
|
+
if gem(gem_name)
|
192
|
+
raise Ree::Error.new("Ree already registered gem `#{name}`", :duplicate_gem)
|
193
|
+
end
|
194
|
+
|
195
|
+
if !Dir.exists?(dir)
|
196
|
+
raise Ree::Error.new("Dir does not exist: #{dir}", :invalid_gem_dir)
|
197
|
+
end
|
198
|
+
|
199
|
+
dir = File.expand_path(dir)
|
200
|
+
packages_schema_path = locate_packages_schema(dir)
|
201
|
+
gem_dir = Pathname.new(packages_schema_path).dirname.to_s
|
202
|
+
ree_setup_path = File.join(gem_dir, REE_SETUP)
|
203
|
+
|
204
|
+
if File.exists?(ree_setup_path)
|
205
|
+
require(ree_setup_path)
|
206
|
+
end
|
207
|
+
|
208
|
+
gem = ReeGem.new(gem_name, gem_dir, packages_schema_path)
|
209
|
+
@gems.push(gem)
|
210
|
+
|
211
|
+
gem
|
212
|
+
end
|
213
|
+
|
214
|
+
def load_package(name)
|
215
|
+
check_arg(name, :name, Symbol)
|
216
|
+
container.load_package(name)
|
217
|
+
end
|
218
|
+
|
219
|
+
def locate_packages_schema(path)
|
220
|
+
check_arg(path, :path, String)
|
221
|
+
Ree.logger.debug("locate_packages_schema: #{path}")
|
222
|
+
Ree::PackagesSchemaLocator.new.call(path)
|
223
|
+
end
|
224
|
+
|
225
|
+
def packages_schema_path
|
226
|
+
@packages_schema_path || (raise Ree::Error.new(ROOT_DIR_MESSAGE, :invalid_root_dir))
|
227
|
+
end
|
228
|
+
|
229
|
+
def root_dir
|
230
|
+
@root_dir || (raise Ree::Error.new(ROOT_DIR_MESSAGE, :invalid_root_dir))
|
231
|
+
end
|
232
|
+
|
233
|
+
def write_object_schema(package_name, object_name)
|
234
|
+
check_arg(package_name, :package_name, Symbol)
|
235
|
+
check_arg(object_name, :object_name, Symbol)
|
236
|
+
container.packages_facade.write_object_schema(package_name, object_name)
|
237
|
+
end
|
238
|
+
|
239
|
+
def generate_schemas_for_all_packages(silence = false)
|
240
|
+
Ree.logger.debug("generate_schemas_for_all_packages") if !silence
|
241
|
+
facade = container.packages_facade
|
242
|
+
|
243
|
+
facade.class.write_packages_schema
|
244
|
+
facade.load_packages_schema
|
245
|
+
|
246
|
+
facade.packages_store.packages.each do |package|
|
247
|
+
puts("Generating Package.schema.json for :#{package.name} package") if !silence
|
248
|
+
|
249
|
+
facade.load_entire_package(package.name)
|
250
|
+
facade.write_package_schema(package.name)
|
251
|
+
|
252
|
+
schemas_path = Ree::PathHelper.abs_package_object_schemas_path(package)
|
253
|
+
|
254
|
+
FileUtils.rm_rf(schemas_path)
|
255
|
+
FileUtils.mkdir_p(schemas_path)
|
256
|
+
|
257
|
+
package.objects.each do |object|
|
258
|
+
next if !object.schema_rpath
|
259
|
+
write_object_schema(package.name, object.name)
|
260
|
+
end
|
261
|
+
end
|
262
|
+
end
|
263
|
+
|
264
|
+
def error_types
|
265
|
+
@error_types ||= []
|
266
|
+
end
|
267
|
+
|
268
|
+
def add_error_types(*args)
|
269
|
+
args.each do |arg|
|
270
|
+
check_arg(arg, :error, Symbol)
|
271
|
+
end
|
272
|
+
|
273
|
+
@error_types = (error_types + args).uniq
|
274
|
+
end
|
275
|
+
end
|
276
|
+
end
|
277
|
+
|
278
|
+
require_relative 'ree/dsl/object_hooks'
|
279
|
+
require_relative 'ree/dsl/package_require'
|
data/sig/ree.rbs
ADDED
metadata
ADDED
@@ -0,0 +1,199 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ree
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Ruslan Gatiyatov
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2022-07-23 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: commander
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 4.6.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 4.6.0
|
27
|
+
description: Ree makes your ruby life happier
|
28
|
+
email:
|
29
|
+
- ruslan.gatiyatov@gmail.com
|
30
|
+
executables:
|
31
|
+
- ree
|
32
|
+
extensions: []
|
33
|
+
extra_rdoc_files: []
|
34
|
+
files:
|
35
|
+
- ".rspec"
|
36
|
+
- ".rubocop.yml"
|
37
|
+
- ".ruby-version"
|
38
|
+
- CHANGELOG.md
|
39
|
+
- CODE_OF_CONDUCT.md
|
40
|
+
- Gemfile
|
41
|
+
- Gemfile.lock
|
42
|
+
- LICENSE.txt
|
43
|
+
- README.md
|
44
|
+
- Rakefile
|
45
|
+
- bin/console
|
46
|
+
- bin/setup
|
47
|
+
- exe/ree
|
48
|
+
- lib/ree.rb
|
49
|
+
- lib/ree/args.rb
|
50
|
+
- lib/ree/bean_dsl.rb
|
51
|
+
- lib/ree/cli.rb
|
52
|
+
- lib/ree/cli/generate_package.rb
|
53
|
+
- lib/ree/cli/generate_package_schema.rb
|
54
|
+
- lib/ree/cli/generate_packages_schema.rb
|
55
|
+
- lib/ree/cli/generate_template.rb
|
56
|
+
- lib/ree/cli/init.rb
|
57
|
+
- lib/ree/cli/spec_runner.rb
|
58
|
+
- lib/ree/container.rb
|
59
|
+
- lib/ree/contracts.rb
|
60
|
+
- lib/ree/contracts/arg_contracts.rb
|
61
|
+
- lib/ree/contracts/arg_contracts/any.rb
|
62
|
+
- lib/ree/contracts/arg_contracts/array_of.rb
|
63
|
+
- lib/ree/contracts/arg_contracts/block.rb
|
64
|
+
- lib/ree/contracts/arg_contracts/bool.rb
|
65
|
+
- lib/ree/contracts/arg_contracts/eq.rb
|
66
|
+
- lib/ree/contracts/arg_contracts/exactly.rb
|
67
|
+
- lib/ree/contracts/arg_contracts/hash_of.rb
|
68
|
+
- lib/ree/contracts/arg_contracts/ksplat.rb
|
69
|
+
- lib/ree/contracts/arg_contracts/kwargs.rb
|
70
|
+
- lib/ree/contracts/arg_contracts/nilor.rb
|
71
|
+
- lib/ree/contracts/arg_contracts/none.rb
|
72
|
+
- lib/ree/contracts/arg_contracts/optblock.rb
|
73
|
+
- lib/ree/contracts/arg_contracts/or.rb
|
74
|
+
- lib/ree/contracts/arg_contracts/range_of.rb
|
75
|
+
- lib/ree/contracts/arg_contracts/set_of.rb
|
76
|
+
- lib/ree/contracts/arg_contracts/splat.rb
|
77
|
+
- lib/ree/contracts/arg_contracts/splat_of.rb
|
78
|
+
- lib/ree/contracts/arg_contracts/squarable.rb
|
79
|
+
- lib/ree/contracts/arg_contracts/subclass_of.rb
|
80
|
+
- lib/ree/contracts/called_args_validator.rb
|
81
|
+
- lib/ree/contracts/contract_definition.rb
|
82
|
+
- lib/ree/contracts/contractable.rb
|
83
|
+
- lib/ree/contracts/core.rb
|
84
|
+
- lib/ree/contracts/engine.rb
|
85
|
+
- lib/ree/contracts/engine_proxy.rb
|
86
|
+
- lib/ree/contracts/errors/bad_contract_error.rb
|
87
|
+
- lib/ree/contracts/errors/contract_error.rb
|
88
|
+
- lib/ree/contracts/errors/error.rb
|
89
|
+
- lib/ree/contracts/errors/return_contract_error.rb
|
90
|
+
- lib/ree/contracts/method_decorator.rb
|
91
|
+
- lib/ree/contracts/truncatable.rb
|
92
|
+
- lib/ree/contracts/utils.rb
|
93
|
+
- lib/ree/contracts/validators.rb
|
94
|
+
- lib/ree/contracts/validators/array_validator.rb
|
95
|
+
- lib/ree/contracts/validators/base_validator.rb
|
96
|
+
- lib/ree/contracts/validators/class_validator.rb
|
97
|
+
- lib/ree/contracts/validators/default_validator.rb
|
98
|
+
- lib/ree/contracts/validators/hash_validator.rb
|
99
|
+
- lib/ree/contracts/validators/proc_validator.rb
|
100
|
+
- lib/ree/contracts/validators/range_validator.rb
|
101
|
+
- lib/ree/contracts/validators/regexp_validator.rb
|
102
|
+
- lib/ree/contracts/validators/valid_validator.rb
|
103
|
+
- lib/ree/core/link_validator.rb
|
104
|
+
- lib/ree/core/object.rb
|
105
|
+
- lib/ree/core/object_error.rb
|
106
|
+
- lib/ree/core/object_link.rb
|
107
|
+
- lib/ree/core/object_schema.rb
|
108
|
+
- lib/ree/core/object_schema_builder.rb
|
109
|
+
- lib/ree/core/package.rb
|
110
|
+
- lib/ree/core/package_dep.rb
|
111
|
+
- lib/ree/core/package_env_var.rb
|
112
|
+
- lib/ree/core/package_loader.rb
|
113
|
+
- lib/ree/core/package_schema.rb
|
114
|
+
- lib/ree/core/package_schema_builder.rb
|
115
|
+
- lib/ree/core/package_schema_loader.rb
|
116
|
+
- lib/ree/core/packages_detector.rb
|
117
|
+
- lib/ree/core/packages_schema.rb
|
118
|
+
- lib/ree/core/packages_schema_builder.rb
|
119
|
+
- lib/ree/core/packages_schema_loader.rb
|
120
|
+
- lib/ree/core/packages_schema_locator.rb
|
121
|
+
- lib/ree/core/packages_store.rb
|
122
|
+
- lib/ree/core/path_helper.rb
|
123
|
+
- lib/ree/dsl/build_package_dsl.rb
|
124
|
+
- lib/ree/dsl/domain_error.rb
|
125
|
+
- lib/ree/dsl/error_builder.rb
|
126
|
+
- lib/ree/dsl/error_dsl.rb
|
127
|
+
- lib/ree/dsl/import_dsl.rb
|
128
|
+
- lib/ree/dsl/link_import_builder.rb
|
129
|
+
- lib/ree/dsl/object_dsl.rb
|
130
|
+
- lib/ree/dsl/object_hooks.rb
|
131
|
+
- lib/ree/dsl/package_require.rb
|
132
|
+
- lib/ree/error.rb
|
133
|
+
- lib/ree/facades/packages_facade.rb
|
134
|
+
- lib/ree/fn_dsl.rb
|
135
|
+
- lib/ree/gen.rb
|
136
|
+
- lib/ree/gen/init.rb
|
137
|
+
- lib/ree/gen/package.rb
|
138
|
+
- lib/ree/handlers/template_handler.rb
|
139
|
+
- lib/ree/link_dsl.rb
|
140
|
+
- lib/ree/object_compiler.rb
|
141
|
+
- lib/ree/package_dsl.rb
|
142
|
+
- lib/ree/rspec_link_dsl.rb
|
143
|
+
- lib/ree/spec_runner.rb
|
144
|
+
- lib/ree/spec_runner/command_generator.rb
|
145
|
+
- lib/ree/spec_runner/command_params.rb
|
146
|
+
- lib/ree/spec_runner/runner.rb
|
147
|
+
- lib/ree/spec_runner/spec_filename_matcher.rb
|
148
|
+
- lib/ree/spec_runner/view.rb
|
149
|
+
- lib/ree/templates/init/.gitignore
|
150
|
+
- lib/ree/templates/init/.irbrc
|
151
|
+
- lib/ree/templates/init/.rspec
|
152
|
+
- lib/ree/templates/init/.ruby-version
|
153
|
+
- lib/ree/templates/init/Gemfile
|
154
|
+
- lib/ree/templates/init/Packages.schema.json
|
155
|
+
- lib/ree/templates/init/bin/console
|
156
|
+
- lib/ree/templates/init/readme.md
|
157
|
+
- lib/ree/templates/init/ree.setup.rb
|
158
|
+
- lib/ree/templates/init/spec.init.rb
|
159
|
+
- lib/ree/templates/package/.gitignore
|
160
|
+
- lib/ree/templates/package/.rspec
|
161
|
+
- lib/ree/templates/package/<%=package_subdir_name%>/<%=package_name%>.rb
|
162
|
+
- lib/ree/templates/package/<%=package_subdir_name%>/<%=package_name%>/.gitkeep
|
163
|
+
- lib/ree/templates/package/Package.schema.json
|
164
|
+
- lib/ree/templates/package/bin/console
|
165
|
+
- lib/ree/templates/package/spec/package_schema_spec.rb
|
166
|
+
- lib/ree/templates/package/spec/spec_helper.rb
|
167
|
+
- lib/ree/templates/template_detector.rb
|
168
|
+
- lib/ree/templates/template_renderer.rb
|
169
|
+
- lib/ree/utils/render_utils.rb
|
170
|
+
- lib/ree/utils/string_utils.rb
|
171
|
+
- lib/ree/version.rb
|
172
|
+
- sig/ree.rbs
|
173
|
+
homepage: https://github.com/glabix/ree/ree
|
174
|
+
licenses:
|
175
|
+
- MIT
|
176
|
+
metadata:
|
177
|
+
homepage_uri: https://github.com/glabix/ree/ree
|
178
|
+
source_code_uri: https://github.com/glabix/ree/ree
|
179
|
+
changelog_uri: https://github.com/glabix/ree/ree/CHANGELOG.md
|
180
|
+
post_install_message:
|
181
|
+
rdoc_options: []
|
182
|
+
require_paths:
|
183
|
+
- lib
|
184
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
185
|
+
requirements:
|
186
|
+
- - ">="
|
187
|
+
- !ruby/object:Gem::Version
|
188
|
+
version: '3.1'
|
189
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
190
|
+
requirements:
|
191
|
+
- - ">="
|
192
|
+
- !ruby/object:Gem::Version
|
193
|
+
version: '0'
|
194
|
+
requirements: []
|
195
|
+
rubygems_version: 3.3.7
|
196
|
+
signing_key:
|
197
|
+
specification_version: 4
|
198
|
+
summary: Ruby framework to create modular applications
|
199
|
+
test_files: []
|