Class: EY::Serverside::Deploy::Configuration

Inherits:
Object
  • Object
show all
Defined in:
lib/engineyard-serverside/configuration.rb

Constant Summary collapse

DEFAULT_CONFIG =
Thor::CoreExt::HashWithIndifferentAccess.new({
  "branch"       => "master",
  "strategy"     => "Git",
})

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(opts = {}) ⇒ Configuration

Returns a new instance of Configuration.



17
18
19
20
21
# File 'lib/engineyard-serverside/configuration.rb', line 17

def initialize(opts={})
  @release_path = opts[:release_path]
  config = JSON.parse(opts["config"] || "{}")
  @configuration = DEFAULT_CONFIG.merge(config).merge(opts)
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(meth, *args, &blk) ⇒ Object

Delegate to the configuration objects



24
25
26
# File 'lib/engineyard-serverside/configuration.rb', line 24

def method_missing(meth, *args, &blk)
  c.key?(meth.to_s) ? c[meth.to_s] : super
end

Instance Attribute Details

#configurationObject (readonly) Also known as: c

Returns the value of attribute configuration.



12
13
14
# File 'lib/engineyard-serverside/configuration.rb', line 12

def configuration
  @configuration
end

#release_pathObject



137
138
139
# File 'lib/engineyard-serverside/configuration.rb', line 137

def release_path
  @release_path ||= File.join(release_dir, Time.now.utc.strftime("%Y%m%d%H%M%S"))
end

Instance Method Details

#[](key) ⇒ Object



32
33
34
35
36
37
38
# File 'lib/engineyard-serverside/configuration.rb', line 32

def [](key)
  if respond_to?(key.to_sym)
    send(key.to_sym)
  else
    c[key]
  end
end

#all_releasesObject



113
114
115
# File 'lib/engineyard-serverside/configuration.rb', line 113

def all_releases
  Dir.glob("#{release_dir}/*").sort
end

#binstubs_pathObject



117
118
119
# File 'lib/engineyard-serverside/configuration.rb', line 117

def binstubs_path
  release_path + '/ey_bundler_binstubs'
end

#copy_excludeObject



92
93
94
# File 'lib/engineyard-serverside/configuration.rb', line 92

def copy_exclude
  @copy_exclude ||= Array(configuration.fetch("copy_exclude", []))
end

#current_pathObject



125
126
127
# File 'lib/engineyard-serverside/configuration.rb', line 125

def current_path
  File.join(deploy_to, "current")
end

#current_roleObject



88
89
90
# File 'lib/engineyard-serverside/configuration.rb', line 88

def current_role
  current_roles.first
end

#deploy_toObject



64
65
66
# File 'lib/engineyard-serverside/configuration.rb', line 64

def deploy_to
  configuration['deploy_to'] || "/data/#{app}"
end

#environmentObject



96
97
98
# File 'lib/engineyard-serverside/configuration.rb', line 96

def environment
  configuration['framework_env']
end

#exclusionsObject



141
142
143
# File 'lib/engineyard-serverside/configuration.rb', line 141

def exclusions
  copy_exclude.map { |e| %|--exclude="#{e}"| }.join(' ')
end

#framework_envsObject



121
122
123
# File 'lib/engineyard-serverside/configuration.rb', line 121

def framework_envs
  "RAILS_ENV=#{environment} RACK_ENV=#{environment} MERB_ENV=#{environment}"
end

#groupObject



80
81
82
# File 'lib/engineyard-serverside/configuration.rb', line 80

def group
  configuration['group'] || user
end

#has_key?(key) ⇒ Boolean

Returns:

  • (Boolean)


40
41
42
43
44
45
46
# File 'lib/engineyard-serverside/configuration.rb', line 40

def has_key?(key)
  if respond_to?(key.to_sym)
    true
  else
    c.has_key?(key)
  end
end

#latest_releaseObject



100
101
102
# File 'lib/engineyard-serverside/configuration.rb', line 100

def latest_release
  all_releases.last
end

#migrate?Boolean

Returns:

  • (Boolean)


68
69
70
# File 'lib/engineyard-serverside/configuration.rb', line 68

def migrate?
  !!configuration['migrate']
end

#migration_commandObject



72
73
74
# File 'lib/engineyard-serverside/configuration.rb', line 72

def migration_command
  configuration['migrate'] == "migrate" ? DEFAULT_CONFIG["migrate"] : configuration['migrate']
end

#nodeObject



52
53
54
# File 'lib/engineyard-serverside/configuration.rb', line 52

def node
  EY::Serverside.node
end

#oldest_releaseObject



109
110
111
# File 'lib/engineyard-serverside/configuration.rb', line 109

def oldest_release
  all_releases.first
end

#previous_release(current = latest_release) ⇒ Object



104
105
106
107
# File 'lib/engineyard-serverside/configuration.rb', line 104

def previous_release(current=latest_release)
  index = all_releases.index(current)
  all_releases[index-1]
end

#release_dirObject



133
134
135
# File 'lib/engineyard-serverside/configuration.rb', line 133

def release_dir
  File.join(deploy_to, "releases")
end

#repository_cacheObject



60
61
62
# File 'lib/engineyard-serverside/configuration.rb', line 60

def repository_cache
  configuration['repository_cache'] || File.join(deploy_to, "/shared/cached-copy")
end

#respond_to?(meth, include_private = false) ⇒ Boolean

Returns:

  • (Boolean)


28
29
30
# File 'lib/engineyard-serverside/configuration.rb', line 28

def respond_to?(meth, include_private=false)
  c.key?(meth.to_s) ? true : super
end

#revisionObject



56
57
58
# File 'lib/engineyard-serverside/configuration.rb', line 56

def revision
  IO.read(File.join(latest_release, 'REVISION'))
end

#roleObject



84
85
86
# File 'lib/engineyard-serverside/configuration.rb', line 84

def role
  node['instance_role']
end

#shared_pathObject



129
130
131
# File 'lib/engineyard-serverside/configuration.rb', line 129

def shared_path
  File.join(deploy_to, "shared")
end

#to_jsonObject



48
49
50
# File 'lib/engineyard-serverside/configuration.rb', line 48

def to_json
  configuration.to_json
end

#userObject



76
77
78
# File 'lib/engineyard-serverside/configuration.rb', line 76

def user
  configuration['user'] || ENV['USER']
end