Module: Ree

Extended by:
Args
Defined in:
lib/ree.rb,
lib/ree/cli.rb,
lib/ree/gen.rb,
lib/ree/version.rb,
lib/ree/cli/init.rb,
lib/ree/gen/init.rb,
lib/ree/gen/package.rb,
lib/ree/spec_runner.rb,
lib/ree/cli/indexing.rb,
lib/ree/cli/spec_runner.rb,
lib/ree/licensing/decryptor.rb,
lib/ree/licensing/encryptor.rb,
lib/ree/cli/generate_package.rb,
lib/ree/licensing/obfuscator.rb,
lib/ree/cli/generate_template.rb,
lib/ree/licensing/client_store.rb,
lib/ree/cli/indexing/index_file.rb,
lib/ree/cli/licensing/obfuscate.rb,
lib/ree/cli/indexing/index_package.rb,
lib/ree/cli/indexing/index_project.rb,
lib/ree/cli/licensing/renew_license.rb,
lib/ree/licensing/bytecode_compiler.rb,
lib/ree/licensing/license_generator.rb,
lib/ree/cli/generate_packages_schema.rb,
lib/ree/cli/licensing/register_client.rb,
sig/ree.rbs

Defined Under Namespace

Modules: Args, BeanDSL, CLI, Contracts, FnDSL, Gen, Inspectable, Licensing, LinkDSL, MethodAddedHook, ObjectSchema, PackageDSL, PackagesSchema, RSpecLinkDSL, SpecRunner Classes: BenchmarkMethodPlugin, BenchmarkTracer, BuildPackageDsl, Container, DomainError, Error, ErrorDsl, ImportDsl, LinkImportBuilder, LinkValidator, Object, ObjectCompiler, ObjectDsl, ObjectError, ObjectLink, Package, PackageDep, PackageEnvVar, PackageFileStructureLoader, PackageLoader, PackagesDetector, PackagesFacade, PackagesSchemaBuilder, PackagesSchemaLoader, PackagesSchemaLocator, PackagesStore, PathHelper, ReeGem, RenderUtils, StringUtils, TemplateDetector, TemplateHandler, TemplateRenderer

Constant Summary collapse

PACKAGE =
'package'
SCHEMAS =
'schemas'
SCHEMA =
'schema'
REE_SETUP =
'ree.setup.rb'
PACKAGES_SCHEMA_FILE =
'Packages.schema.json'
ROOT_DIR_MESSAGE =
'Ree.root_dir is not set. Use Ree.init(DIR) to set project dir'
VERSION =
"1.3.5"

Class Method Summary collapse

Class Method Details

.benchmark_mode?Boolean



132
133
134
# File 'lib/ree.rb', line 132

def benchmark_mode?
  !!@benchmark_mode
end

.containerObject



89
90
91
# File 'lib/ree.rb', line 89

def container
  Container.instance
end

.db_load_performance_mode?Boolean



164
165
166
# File 'lib/ree.rb', line 164

def db_load_performance_mode?
  !!@db_load_performance_mode
end

.disable_benchmark_modeObject



128
129
130
# File 'lib/ree.rb', line 128

def disable_benchmark_mode
  @benchmark_mode = false
end

.disable_contractsObject



112
113
114
# File 'lib/ree.rb', line 112

def disable_contracts
  ENV['NO_CONTRACTS'] = 'true'
end

.disable_db_load_performance_modeObject



160
161
162
# File 'lib/ree.rb', line 160

def disable_db_load_performance_mode
  @db_load_performance_mode = false
end

.disable_irb_modeObject



108
109
110
# File 'lib/ree.rb', line 108

def disable_irb_mode
  @irb_mode = false
end

.enable_benchmark_modeObject



124
125
126
# File 'lib/ree.rb', line 124

def enable_benchmark_mode
  @benchmark_mode = true
end

.enable_contractsObject



116
117
118
# File 'lib/ree.rb', line 116

def enable_contracts
  ENV['NO_CONTRACTS'] = nil
end

.enable_db_load_performance_modeObject

Mappers built while this mode is on compile a specialized :db_load method that trusts DB values already typecast by the driver: primitive fields skip casting behind a cheap type guard, and dto construction avoids intermediate allocations. Read at mapper build time, so enable it in ree.setup.rb before any DAO/mapper is loaded.



156
157
158
# File 'lib/ree.rb', line 156

def enable_db_load_performance_mode
  @db_load_performance_mode = true
end

.enable_irb_modeObject

Switches Ree into irb mode that allows to declare ree objects inside IRB



104
105
106
# File 'lib/ree.rb', line 104

def enable_irb_mode
  @irb_mode = true
end

.gem(name) ⇒ Nilor[Ree::ReeGem]



235
236
237
238
# File 'lib/ree.rb', line 235

def gem(name)
  check_arg(name, :name, Symbol)
  gems.detect { _1.name == name }
end

.gemsObject



240
241
242
243
# File 'lib/ree.rb', line 240

def gems
  @gems ||= []
  @gems
end

.hide_internal_swagger_endpointsObject

Routes declared as visibility :internal are excluded from generated swagger documents. Enable this for public-facing deployments and leave it off internally, so the same codebase yields a public and a full document.



139
140
141
# File 'lib/ree.rb', line 139

def hide_internal_swagger_endpoints
  @hide_internal_swagger_endpoints = true
end

.hide_internal_swagger_endpoints?Boolean



147
148
149
# File 'lib/ree.rb', line 147

def hide_internal_swagger_endpoints?
  !!@hide_internal_swagger_endpoints
end

.init(dir, irb: false) ⇒ Object



205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
# File 'lib/ree.rb', line 205

def init(dir, irb: false)
  check_arg(dir, :dir, String)

  if !Dir.exist?(dir)
    raise Ree::Error.new("Dir does not exist: #{dir}", :invalid_root_dir)
  end

  @packages_schema_path = locate_packages_schema(dir)
  @root_dir = Pathname.new(@packages_schema_path).dirname.to_s

  ree_setup_path = File.join(@root_dir, REE_SETUP)

  if File.exist?(ree_setup_path)
    require(ree_setup_path)
  end

  if irb
    require('irb')
    enable_irb_mode

    FileUtils.cd(@root_dir) do
      IRB.start(@root_dir)
    end
  end

  @root_dir
end

.irb_mode?Boolean



120
121
122
# File 'lib/ree.rb', line 120

def irb_mode?
  !!@irb_mode
end

.licenseObject



172
173
174
175
176
# File 'lib/ree.rb', line 172

def license
  @license ||= if obfuscated?
    Ree::Licensing::Decryptor.load_license(ENV['REE_LICENSE_KEY'])
  end
end

.load_entire_package(name) ⇒ Object



280
281
282
283
# File 'lib/ree.rb', line 280

def load_entire_package(name)
  check_arg(name, :name, Symbol)
  container.load_entire_package(name)
end

.load_package(name) ⇒ Object



275
276
277
278
# File 'lib/ree.rb', line 275

def load_package(name)
  check_arg(name, :name, Symbol)
  container.load_package(name)
end

.locate_packages_schema(path) ⇒ Object



285
286
287
288
289
# File 'lib/ree.rb', line 285

def locate_packages_schema(path)
  check_arg(path, :path, String)
  Ree.logger.debug("locate_packages_schema: #{path}")
  Ree::PackagesSchemaLocator.new.call(path)
end

.loggerObject



93
94
95
96
97
98
99
100
101
# File 'lib/ree.rb', line 93

def logger
  @logger ||= begin
    logger = Logger.new(STDOUT)
    logger.level = Logger::WARN
    logger
  end

  @logger
end

.method_added_pluginsObject



182
183
184
# File 'lib/ree.rb', line 182

def method_added_plugins
  @method_added_plugins ||= []
end

.obfuscated?Boolean



168
169
170
# File 'lib/ree.rb', line 168

def obfuscated?
  ENV.has_key?('REE_LICENSE_KEY')
end

.packages_schema_pathObject



291
292
293
# File 'lib/ree.rb', line 291

def packages_schema_path
  @packages_schema_path || (raise Ree::Error.new(ROOT_DIR_MESSAGE, :invalid_root_dir))
end

.preload_for(env) ⇒ Object

Define preload context for registered objects



195
196
197
198
# File 'lib/ree.rb', line 195

def preload_for(env)
  check_arg(env, :env, Symbol)
  @prelaod_for = env
end

.preload_for?(env) ⇒ Boolean



200
201
202
203
# File 'lib/ree.rb', line 200

def preload_for?(env)
  check_arg(env, :env, Symbol)
  @prelaod_for == env
end

.register_gem(gem_name, dir) ⇒ Ree::ReeGem



248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
# File 'lib/ree.rb', line 248

def register_gem(gem_name, dir)
  check_arg(gem_name, :gem_name, Symbol)
  check_arg(dir, :dir, String)

  if gem(gem_name)
    raise Ree::Error.new("Ree already registered gem `#{name}`", :duplicate_gem)
  end

  if !Dir.exist?(dir)
    raise Ree::Error.new("Dir does not exist: #{dir}", :invalid_gem_dir)
  end

  dir = File.expand_path(dir)
  packages_schema_path = locate_packages_schema(dir)
  gem_dir = Pathname.new(packages_schema_path).dirname.to_s
  ree_setup_path = File.join(gem_dir, REE_SETUP)

  if File.exist?(ree_setup_path)
    require(ree_setup_path)
  end

  gem = ReeGem.new(gem_name, gem_dir, packages_schema_path)
  @gems.push(gem)

  gem
end

.register_method_added_plugin(plugin_class) ⇒ Object



186
187
188
# File 'lib/ree.rb', line 186

def register_method_added_plugin(plugin_class)
  method_added_plugins << plugin_class
end

.reset_licenseObject



178
179
180
# File 'lib/ree.rb', line 178

def reset_license
  @license = nil
end

.root_dirObject



295
296
297
# File 'lib/ree.rb', line 295

def root_dir
  @root_dir || (raise Ree::Error.new(ROOT_DIR_MESSAGE, :invalid_root_dir))
end

.set_logger_debugObject



190
191
192
# File 'lib/ree.rb', line 190

def set_logger_debug
  logger.level = Logger::DEBUG
end

.show_internal_swagger_endpointsObject



143
144
145
# File 'lib/ree.rb', line 143

def show_internal_swagger_endpoints
  @hide_internal_swagger_endpoints = false
end