ree 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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: []