Module: Etna::Application

Included in:
EtnaApp
Defined in:
lib/etna/application.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#loggerObject (readonly)

the application logger is available globally



70
71
72
# File 'lib/etna/application.rb', line 70

def logger
  @logger
end

Class Method Details

.find(klass) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/etna/application.rb', line 21

def self.find(klass)
  namespace = klass.name.split('::').first
  if (namespace_klass = Kernel.const_get(namespace)) && (namespace_klass.respond_to? :instance)
    return namespace_klass.instance
  end

  if @@application
    return @@application.instance
  end

  raise "Could not find application instance from #{namespace}, and not subclass of Application found."
end

.included(other) ⇒ Object



13
14
15
16
17
18
19
# File 'lib/etna/application.rb', line 13

def self.included(other)
  other.include Singleton
  other.include Etna::CommandExecutor
  @@application = other

  other.const_set(:GenerateCompletionScript, Class.new(Etna::GenerateCompletionScript))
end

.instanceObject



38
39
40
# File 'lib/etna/application.rb', line 38

def self.instance
  @instance
end

.register(app) ⇒ Object



34
35
36
# File 'lib/etna/application.rb', line 34

def self.register(app)
  @instance = app
end

Instance Method Details

#config(type, env = environment) ⇒ Object



72
73
74
75
76
77
# File 'lib/etna/application.rb', line 72

def config(type, env = environment)
  return nil if @config.nil?
  return nil if @config[env].nil?
  return nil unless @config[env].is_a?(Hash)
  @config[env][type]
end

#configure(opts) ⇒ Object



46
47
48
49
50
51
52
53
54
# File 'lib/etna/application.rb', line 46

def configure(opts)
  @config = opts

  if (rollbar_config = config(:rollbar)) && rollbar_config[:access_token]
    Rollbar.configure do |config|
      config.access_token = rollbar_config[:access_token]
    end
  end
end

#env_config(env = environment) ⇒ Object



79
80
81
82
83
84
# File 'lib/etna/application.rb', line 79

def env_config(env = environment)
  return nil if @config.nil?
  return nil if @config[env].nil?
  return nil unless @config[env].is_a?(Hash)
  @config[env]
end

#environmentObject



90
91
92
# File 'lib/etna/application.rb', line 90

def environment
  (ENV["#{self.class.name.upcase}_ENV"] || :development).to_sym
end

#find_descendents(klass) ⇒ Object



98
99
100
101
102
# File 'lib/etna/application.rb', line 98

def find_descendents(klass)
  ObjectSpace.each_object(Class).select do |k|
    k < klass
  end
end

#idObject



94
95
96
# File 'lib/etna/application.rb', line 94

def id
  ENV["APP_NAME"] || self.class.name.snake_case.split(/::/).last
end

#initializeObject



42
43
44
# File 'lib/etna/application.rb', line 42

def initialize
  Etna::Application.register(self)
end

#run_command(config, *args, &block) ⇒ Object



104
105
106
107
108
109
110
111
112
113
114
115
116
# File 'lib/etna/application.rb', line 104

def run_command(config, *args, &block)
  cmd, cmd_args, cmd_kwds = find_command(*args)
  cmd.setup(config)

  if block_given?
    return unless yield [cmd, cmd_args]
  end

  cmd.execute(*cmd.fill_in_missing_params(cmd_args), **cmd_kwds)
rescue => e
  Rollbar.error(e)
  raise
end

#setup_loggerObject



56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/etna/application.rb', line 56

def setup_logger
  @logger = Etna::Logger.new(
    # The name of the log_file, required.
    config(:log_file),
    # Number of old copies of the log to keep.
    config(:log_copies) || 5,
    # How large the log can get before overturning.
    config(:log_size) || 1048576,
  )
  log_level = (config(:log_level) || 'warn').upcase.to_sym
  @logger.level = Logger.const_defined?(log_level) ? Logger.const_get(log_level) : Logger::WARN
end

#signObject



86
87
88
# File 'lib/etna/application.rb', line 86

def sign
  @sign ||= Etna::SignService.new(self)
end