Class: Tzispa::Application

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Includes:
Engine
Defined in:
lib/tzispa/app.rb

Constant Summary collapse

@@appmutex =
Mutex.new

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Engine

#rig_routes

Constructor Details

#initialize(appid, engine:, on: nil, &block) ⇒ Application

Returns a new instance of Application.



61
62
63
64
65
66
# File 'lib/tzispa/app.rb', line 61

def initialize(appid, engine:, on: nil, &block)
  @domain = Domain.new(appid)
  @map_path = on
  @engine = engine
  instance_eval(&block) if block
end

Instance Attribute Details

#domainObject (readonly)

Returns the value of attribute domain.



21
22
23
# File 'lib/tzispa/app.rb', line 21

def domain
  @domain
end

#engineObject (readonly)

Returns the value of attribute engine.



21
22
23
# File 'lib/tzispa/app.rb', line 21

def engine
  @engine
end

#loggerObject (readonly)

Returns the value of attribute logger.



21
22
23
# File 'lib/tzispa/app.rb', line 21

def logger
  @logger
end

#map_pathObject (readonly)

Returns the value of attribute map_path.



21
22
23
# File 'lib/tzispa/app.rb', line 21

def map_path
  @map_path
end

#routesObject (readonly)

Returns the value of attribute routes.



21
22
23
# File 'lib/tzispa/app.rb', line 21

def routes
  @routes
end

Class Method Details

.[](name) ⇒ Object



39
40
41
# File 'lib/tzispa/app.rb', line 39

def [](name)
  applications[name]
end

.__new__Object



25
# File 'lib/tzispa/app.rb', line 25

alias __new__ :new

.add(app) ⇒ Object



43
44
45
46
47
48
# File 'lib/tzispa/app.rb', line 43

def add(app)
  synchronize do
    raise DuplicateDomain.new(app.name) if applications.key?(app.name)
    applications[app.name] = app
  end
end

.applicationsObject

rubocop:disable Style/ClassVars



32
33
34
35
36
37
# File 'lib/tzispa/app.rb', line 32

def applications
  return __applications_container if @@appmutex.locked?
  synchronize do
    __applications_container
  end
end

.new(*args, &block) ⇒ Object



27
28
29
# File 'lib/tzispa/app.rb', line 27

def new(*args, &block)
  __new__(*args, &block).tap { |app| add app }
end

.synchronizeObject



50
51
52
# File 'lib/tzispa/app.rb', line 50

def synchronize
  @@appmutex.synchronize { yield }
end

Instance Method Details

#[](domain) ⇒ Object



84
85
86
# File 'lib/tzispa/app.rb', line 84

def [](domain)
  self.class[domain]
end

#call(env) ⇒ Object



68
69
70
# File 'lib/tzispa/app.rb', line 68

def call(env)
  routes.call env
end

#configObject



92
93
94
# File 'lib/tzispa/app.rb', line 92

def config
  @config ||= Config::AppConfig.new(@domain).load!
end

#envObject



88
89
90
# File 'lib/tzispa/app.rb', line 88

def env
  Tzispa::Environment.instance
end

#load!Object



72
73
74
75
76
77
78
79
80
81
82
# File 'lib/tzispa/app.rb', line 72

def load!
  tap do |app|
    app.class.synchronize do
      logging_setup
      locales_setup
      repository&.load!(domain)
      domain.setup
      routes_setup
    end
  end
end

#repositoryObject



96
97
98
99
100
101
# File 'lib/tzispa/app.rb', line 96

def repository
  @repository ||= begin
    dbcfg = Config::DbConfig.new(env.environment)&.to_h
    Data::Repository.new(dbcfg) if dbcfg&.count&.positive?
  end
end