Class: Docman::Application

Inherits:
Command
  • Object
show all
Includes:
Context, Singleton
Defined in:
lib/application.rb

Instance Attribute Summary collapse

Attributes inherited from Command

#type

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Context

#describe

Methods included from Logging

#log, logger, #logger, #prefix, #properties_info, #with_logging

Methods inherited from Command

#add_action, #add_actions, create, #describe, #perform, #prefix, register_command, #replace_placeholder, #run_actions, #run_with_hooks

Constructor Details

#initializeApplication

Returns a new instance of Application.



41
42
43
44
45
46
# File 'lib/application.rb', line 41

def initialize
  # TODO: Define workspace properly
  @workspace_dir = Dir.pwd
  @config = Docman::Config.new(File.join(Pathname(__FILE__).dirname.parent, 'config', 'config.yaml'))
  @force = false
end

Instance Attribute Details

#configObject (readonly)

Returns the value of attribute config.



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

def config
  @config
end

#deploy_targetObject

Returns the value of attribute deploy_target.



36
37
38
# File 'lib/application.rb', line 36

def deploy_target
  @deploy_target
end

#docroot_configObject (readonly)

Returns the value of attribute docroot_config.



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

def docroot_config
  @docroot_config
end

#forceObject

Returns the value of attribute force.



36
37
38
# File 'lib/application.rb', line 36

def force
  @force
end

#optionsObject

Returns the value of attribute options.



36
37
38
# File 'lib/application.rb', line 36

def options
  @options
end

Class Method Details

.binObject



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

def self.bin
  File.join root, 'bin'
end

.libObject



103
104
105
# File 'lib/application.rb', line 103

def self.lib
  File.join root, 'lib'
end

.rootObject



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

def self.root
  Pathname(__FILE__).dirname.parent
end

Instance Method Details

#build(deploy_target_name, state, options = false) ⇒ Object



52
53
54
55
56
57
58
# File 'lib/application.rb', line 52

def build(deploy_target_name, state, options = false)
  @options = options
  @deploy_target = @config['deploy_targets'][deploy_target_name]
  @deploy_target['name'] = deploy_target_name
  @docroot_config = DocrootConfig.new(@workspace_dir, deploy_target)
  execute('build', state, nil, options['tag'])
end

#deploy(deploy_target_name, name, type, version, options = false) ⇒ Object



60
61
62
63
64
65
66
67
68
69
# File 'lib/application.rb', line 60

def deploy(deploy_target_name, name, type, version, options = false)
  @options = options
  @deploy_target = @config['deploy_targets'][deploy_target_name]
  raise "Wrong deploy target: #{deploy_target_name}" if @deploy_target.nil?
  @deploy_target['name'] = deploy_target_name
  @docroot_config = DocrootConfig.new(@workspace_dir, deploy_target)
  @docroot_config.states_dependin_on(name, version).keys.each do |state|
    execute('deploy', state, name)
  end
end

#execute(action, state, name = nil, tag = nil) ⇒ Object



71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/application.rb', line 71

def execute(action, state, name = nil, tag = nil)
  params = Marshal.load(Marshal.dump(@deploy_target))
  failed_filepath = File.join(@workspace_dir, 'failed')
  if File.file?(failed_filepath)
    log 'Last operation failed, forced rebuild mode'
    FileUtils.rm_f failed_filepath
    @force = true
  end
  params['state'] = state
  params['action'] = action
  params['name'] = name
  params['tag'] = tag
  params['environment'] = @config['environments'][@deploy_target['states'][state]]
  params['environment_name'] = @deploy_target['states'][state]
  Docman::Deployers::Deployer.create(params, nil, self).perform
rescue Exception => e
  log "Operation failed: #{e.message}", 'error'
  File.open(failed_filepath, 'w') {|f| f.write('Failed!') }
end

#force?Boolean

Returns:

  • (Boolean)


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

def force?
  @force or @options[:force]
end

#init(name, repo) ⇒ Object



48
49
50
# File 'lib/application.rb', line 48

def init(name, repo)
  `mkdir #{name} && cd #{name} && git clone #{repo} config`
end