ree 1.0.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.
Files changed (140) hide show
  1. checksums.yaml +7 -0
  2. data/.rspec +3 -0
  3. data/.rubocop.yml +13 -0
  4. data/.ruby-version +1 -0
  5. data/CHANGELOG.md +5 -0
  6. data/CODE_OF_CONDUCT.md +84 -0
  7. data/Gemfile +9 -0
  8. data/Gemfile.lock +41 -0
  9. data/LICENSE.txt +21 -0
  10. data/README.md +474 -0
  11. data/Rakefile +8 -0
  12. data/bin/console +8 -0
  13. data/bin/setup +8 -0
  14. data/exe/ree +264 -0
  15. data/lib/ree/args.rb +34 -0
  16. data/lib/ree/bean_dsl.rb +24 -0
  17. data/lib/ree/cli/generate_package.rb +18 -0
  18. data/lib/ree/cli/generate_package_schema.rb +54 -0
  19. data/lib/ree/cli/generate_packages_schema.rb +17 -0
  20. data/lib/ree/cli/generate_template.rb +20 -0
  21. data/lib/ree/cli/init.rb +22 -0
  22. data/lib/ree/cli/spec_runner.rb +184 -0
  23. data/lib/ree/cli.rb +12 -0
  24. data/lib/ree/container.rb +67 -0
  25. data/lib/ree/contracts/arg_contracts/any.rb +15 -0
  26. data/lib/ree/contracts/arg_contracts/array_of.rb +52 -0
  27. data/lib/ree/contracts/arg_contracts/block.rb +15 -0
  28. data/lib/ree/contracts/arg_contracts/bool.rb +21 -0
  29. data/lib/ree/contracts/arg_contracts/eq.rb +28 -0
  30. data/lib/ree/contracts/arg_contracts/exactly.rb +28 -0
  31. data/lib/ree/contracts/arg_contracts/hash_of.rb +59 -0
  32. data/lib/ree/contracts/arg_contracts/ksplat.rb +141 -0
  33. data/lib/ree/contracts/arg_contracts/kwargs.rb +22 -0
  34. data/lib/ree/contracts/arg_contracts/nilor.rb +16 -0
  35. data/lib/ree/contracts/arg_contracts/none.rb +15 -0
  36. data/lib/ree/contracts/arg_contracts/optblock.rb +11 -0
  37. data/lib/ree/contracts/arg_contracts/or.rb +30 -0
  38. data/lib/ree/contracts/arg_contracts/range_of.rb +51 -0
  39. data/lib/ree/contracts/arg_contracts/set_of.rb +54 -0
  40. data/lib/ree/contracts/arg_contracts/splat.rb +297 -0
  41. data/lib/ree/contracts/arg_contracts/splat_of.rb +64 -0
  42. data/lib/ree/contracts/arg_contracts/squarable.rb +11 -0
  43. data/lib/ree/contracts/arg_contracts/subclass_of.rb +28 -0
  44. data/lib/ree/contracts/arg_contracts.rb +29 -0
  45. data/lib/ree/contracts/called_args_validator.rb +291 -0
  46. data/lib/ree/contracts/contract_definition.rb +142 -0
  47. data/lib/ree/contracts/contractable.rb +34 -0
  48. data/lib/ree/contracts/core.rb +17 -0
  49. data/lib/ree/contracts/engine.rb +71 -0
  50. data/lib/ree/contracts/engine_proxy.rb +13 -0
  51. data/lib/ree/contracts/errors/bad_contract_error.rb +4 -0
  52. data/lib/ree/contracts/errors/contract_error.rb +4 -0
  53. data/lib/ree/contracts/errors/error.rb +4 -0
  54. data/lib/ree/contracts/errors/return_contract_error.rb +4 -0
  55. data/lib/ree/contracts/method_decorator.rb +158 -0
  56. data/lib/ree/contracts/truncatable.rb +9 -0
  57. data/lib/ree/contracts/utils.rb +9 -0
  58. data/lib/ree/contracts/validators/array_validator.rb +51 -0
  59. data/lib/ree/contracts/validators/base_validator.rb +27 -0
  60. data/lib/ree/contracts/validators/class_validator.rb +17 -0
  61. data/lib/ree/contracts/validators/default_validator.rb +20 -0
  62. data/lib/ree/contracts/validators/hash_validator.rb +100 -0
  63. data/lib/ree/contracts/validators/proc_validator.rb +17 -0
  64. data/lib/ree/contracts/validators/range_validator.rb +17 -0
  65. data/lib/ree/contracts/validators/regexp_validator.rb +17 -0
  66. data/lib/ree/contracts/validators/valid_validator.rb +28 -0
  67. data/lib/ree/contracts/validators.rb +42 -0
  68. data/lib/ree/contracts.rb +45 -0
  69. data/lib/ree/core/link_validator.rb +42 -0
  70. data/lib/ree/core/object.rb +132 -0
  71. data/lib/ree/core/object_error.rb +9 -0
  72. data/lib/ree/core/object_link.rb +21 -0
  73. data/lib/ree/core/object_schema.rb +47 -0
  74. data/lib/ree/core/object_schema_builder.rb +110 -0
  75. data/lib/ree/core/package.rb +177 -0
  76. data/lib/ree/core/package_dep.rb +9 -0
  77. data/lib/ree/core/package_env_var.rb +12 -0
  78. data/lib/ree/core/package_loader.rb +95 -0
  79. data/lib/ree/core/package_schema.rb +27 -0
  80. data/lib/ree/core/package_schema_builder.rb +53 -0
  81. data/lib/ree/core/package_schema_loader.rb +170 -0
  82. data/lib/ree/core/packages_detector.rb +43 -0
  83. data/lib/ree/core/packages_schema.rb +19 -0
  84. data/lib/ree/core/packages_schema_builder.rb +50 -0
  85. data/lib/ree/core/packages_schema_loader.rb +95 -0
  86. data/lib/ree/core/packages_schema_locator.rb +27 -0
  87. data/lib/ree/core/packages_store.rb +32 -0
  88. data/lib/ree/core/path_helper.rb +104 -0
  89. data/lib/ree/dsl/build_package_dsl.rb +155 -0
  90. data/lib/ree/dsl/domain_error.rb +4 -0
  91. data/lib/ree/dsl/error_builder.rb +39 -0
  92. data/lib/ree/dsl/error_dsl.rb +27 -0
  93. data/lib/ree/dsl/import_dsl.rb +106 -0
  94. data/lib/ree/dsl/link_import_builder.rb +66 -0
  95. data/lib/ree/dsl/object_dsl.rb +319 -0
  96. data/lib/ree/dsl/object_hooks.rb +6 -0
  97. data/lib/ree/dsl/package_require.rb +44 -0
  98. data/lib/ree/error.rb +11 -0
  99. data/lib/ree/facades/packages_facade.rb +197 -0
  100. data/lib/ree/fn_dsl.rb +24 -0
  101. data/lib/ree/gen/init.rb +64 -0
  102. data/lib/ree/gen/package.rb +56 -0
  103. data/lib/ree/gen.rb +8 -0
  104. data/lib/ree/handlers/template_handler.rb +118 -0
  105. data/lib/ree/link_dsl.rb +175 -0
  106. data/lib/ree/object_compiler.rb +149 -0
  107. data/lib/ree/package_dsl.rb +34 -0
  108. data/lib/ree/rspec_link_dsl.rb +19 -0
  109. data/lib/ree/spec_runner/command_generator.rb +49 -0
  110. data/lib/ree/spec_runner/command_params.rb +9 -0
  111. data/lib/ree/spec_runner/runner.rb +200 -0
  112. data/lib/ree/spec_runner/spec_filename_matcher.rb +27 -0
  113. data/lib/ree/spec_runner/view.rb +30 -0
  114. data/lib/ree/spec_runner.rb +11 -0
  115. data/lib/ree/templates/init/.gitignore +1 -0
  116. data/lib/ree/templates/init/.irbrc +13 -0
  117. data/lib/ree/templates/init/.rspec +3 -0
  118. data/lib/ree/templates/init/.ruby-version +1 -0
  119. data/lib/ree/templates/init/Gemfile +7 -0
  120. data/lib/ree/templates/init/Packages.schema.json +1 -0
  121. data/lib/ree/templates/init/bin/console +5 -0
  122. data/lib/ree/templates/init/readme.md +2 -0
  123. data/lib/ree/templates/init/ree.setup.rb +21 -0
  124. data/lib/ree/templates/init/spec.init.rb +7 -0
  125. data/lib/ree/templates/package/.gitignore +0 -0
  126. data/lib/ree/templates/package/.rspec +2 -0
  127. data/lib/ree/templates/package/<%=package_subdir_name%>/<%=package_name%>/.gitkeep +0 -0
  128. data/lib/ree/templates/package/<%=package_subdir_name%>/<%=package_name%>.rb +15 -0
  129. data/lib/ree/templates/package/Package.schema.json +0 -0
  130. data/lib/ree/templates/package/bin/console +5 -0
  131. data/lib/ree/templates/package/spec/package_schema_spec.rb +14 -0
  132. data/lib/ree/templates/package/spec/spec_helper.rb +3 -0
  133. data/lib/ree/templates/template_detector.rb +35 -0
  134. data/lib/ree/templates/template_renderer.rb +55 -0
  135. data/lib/ree/utils/render_utils.rb +20 -0
  136. data/lib/ree/utils/string_utils.rb +29 -0
  137. data/lib/ree/version.rb +5 -0
  138. data/lib/ree.rb +279 -0
  139. data/sig/ree.rbs +4 -0
  140. 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
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Ree
4
+ VERSION = "1.0.0"
5
+ end
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
@@ -0,0 +1,4 @@
1
+ module Ree
2
+ VERSION: String
3
+ # See the writing guide of rbs: https://github.com/ruby/rbs#guides
4
+ end
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: []