Module: Engine2

Defined in:
lib/engine2/core.rb,
lib/engine2/meta.rb,
lib/engine2/model.rb,
lib/engine2/action.rb,
lib/engine2/scheme.rb,
lib/engine2/handler.rb,
lib/engine2/version.rb,
lib/engine2/templates.rb,
lib/engine2/type_info.rb,
lib/engine2/models/Files.rb,
lib/engine2/meta/form_meta.rb,
lib/engine2/meta/link_meta.rb,
lib/engine2/meta/list_meta.rb,
lib/engine2/meta/save_meta.rb,
lib/engine2/meta/view_meta.rb,
lib/engine2/meta/infra_meta.rb,
lib/engine2/models/UserInfo.rb,
lib/engine2/meta/decode_meta.rb,
lib/engine2/meta/delete_meta.rb

Defined Under Namespace

Modules: BlobSupportMeta, MemoryModel, MetaAPISupport, MetaAngularSupport, MetaApproveSupport, MetaBulkDeleteSupport, MetaDeleteSupport, MetaListSupport, MetaMenuSupport, MetaModelSupport, MetaOnChangeSupport, MetaPanelSupport, MetaQuerySupport, MetaTabSupport, MetaViewSupport, Model Classes: Action, ActionBundle, ActionMenuBuilder, BlobStoreMeta, BulkDeleteMeta, ConfirmMeta, CreateMeta, DecodeEntryMeta, DecodeListMeta, DecodeMeta, DeleteMeta, DeleteMetaBase, DownloadBlobStoreMeta, DownloadFileStoreMeta, DownloadForeignBlobStoreMeta, DummyMeta, E2Error, E2Files, FileStoreMeta, ForeignBlobStoreMeta, FormMeta, Handler, InsertMeta, ListMeta, LoginFormMeta, LoginMeta, LogoutFormMeta, LogoutMeta, ManyToOneListMeta, MenuBuilder, MenuMeta, Meta, ModifyMeta, SaveMeta, Schemes, SearchTemplates, StarToManyBulkUnlinkMeta, StarToManyFieldLinkListMeta, StarToManyFieldMeta, StarToManyFieldUnlinkMeta, StarToManyLinkListMeta, StarToManyLinkMeta, StarToManyListMeta, StarToManyUnlinkMeta, StarToManyUnlinkMetaBase, Templates, TypeAheadMeta, TypeInfo, UpdateMeta, UploadBlobStoreMeta, UploadFileStoreMeta, UserInfo, ViewMeta

Constant Summary collapse

VERSION =
[MAJOR, MINOR, TINY].join('.').freeze

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.appObject (readonly)

Returns the value of attribute app.



438
439
440
# File 'lib/engine2/core.rb', line 438

def app
  @app
end

.core_loadedObject (readonly)

Returns the value of attribute core_loaded.



439
440
441
# File 'lib/engine2/core.rb', line 439

def core_loaded
  @core_loaded
end

.reloadingObject (readonly)

Returns the value of attribute reloading.



438
439
440
# File 'lib/engine2/core.rb', line 438

def reloading
  @reloading
end

Class Method Details

.boot(&blk) ⇒ Object



450
451
452
# File 'lib/engine2/core.rb', line 450

def boot &blk
    @boot_blk = blk
end

.bootstrap(app, opts = {}) ⇒ Object



493
494
495
496
497
498
499
500
501
# File 'lib/engine2/core.rb', line 493

def bootstrap app, opts = {}
    @app = app
    @reloading = opts[:reloading]
    bootstrap_e2db

    require 'engine2/pre_bootstrap'
    reload
    require 'engine2/post_bootstrap'
end

.bootstrap_e2dbObject



458
459
460
461
462
463
# File 'lib/engine2/core.rb', line 458

def bootstrap_e2db
    e2_db_file = (defined? JRUBY_VERSION) ? "jdbc:sqlite:#{@app}/engine2.db" : "sqlite://#{@app}/engine2.db"
    Engine2.const_set :E2DB, connect(e2_db_file, loggers: [Logger.new($stdout)], convert_types: false, name: :engine2)
    Engine2.const_set :DUMMYDB, Sequel::Database.new(uri: 'dummy')
    def DUMMYDB.synchronize *args;end
end

.connect(*args) ⇒ Object



445
446
447
448
# File 'lib/engine2/core.rb', line 445

def connect *args
    db = Sequel.connect *args
    db
end

.database(name) ⇒ Object



441
442
443
# File 'lib/engine2/core.rb', line 441

def database name
    Object.const_set(name, yield) unless Object.const_defined?(name)
end

.model_boot(&blk) ⇒ Object



454
455
456
# File 'lib/engine2/core.rb', line 454

def model_boot &blk
    @model_boot_blk = blk
end

.reloadObject



465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
# File 'lib/engine2/core.rb', line 465

def reload
    @core_loaded = true
    t = Time.now
    Action.count = 0
    SCHEMES.user.clear

    Sequel::DATABASES.each do |db|
        db.models.each{|n, m| Object.send(:remove_const, n) if Object.const_defined?(n)} unless db == E2DB || db == DUMMYDB
    end

    load "#{app}/boot.rb"

    Sequel::DATABASES.each &:load_schema_cache_from_file
    @model_boot_blk.() if @model_boot_blk
    load 'engine2/models/Files.rb'
    load 'engine2/models/UserInfo.rb'
    Dir["#{app}/models/*"].each{|m| load m}
    puts "MODELS: #{Sequel::DATABASES.reduce(0){|s, d|s + d.models.size}}, Time: #{Time.now - t}"
    Sequel::DATABASES.each &:dump_schema_cache_to_file

    Engine2.send(:remove_const, :ROOT) if defined? ROOT
    Engine2.const_set(:ROOT, Action.new(nil, :api, DummyMeta, {}))

    @boot_blk.(ROOT)
    ROOT.setup_action_tree
    puts "BOOTSTRAP #{app}, Time: #{Time.new - t}"
end

.versionObject



6
7
8
# File 'lib/engine2/version.rb', line 6

def self.version
    VERSION
end