engineyard 2.0.0.pre1 → 2.0.0.pre2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. data/README.rdoc +39 -136
  2. data/bin/ey_perftools +12 -0
  3. data/lib/engineyard.rb +0 -2
  4. data/lib/engineyard/cli.rb +3 -4
  5. data/lib/engineyard/cli/api.rb +3 -2
  6. data/lib/engineyard/commands/deploy.rb +0 -0
  7. data/lib/engineyard/thor.rb +7 -3
  8. data/lib/engineyard/version.rb +1 -1
  9. data/spec/engineyard/cli/api_spec.rb +6 -0
  10. data/spec/ey/deploy_spec.rb +6 -0
  11. data/spec/ey/ssh_spec.rb +6 -6
  12. metadata +24 -37
  13. data/lib/vendor/thor/LICENSE.md +0 -20
  14. data/lib/vendor/thor/README.md +0 -26
  15. data/lib/vendor/thor/lib/thor.rb +0 -379
  16. data/lib/vendor/thor/lib/thor/actions.rb +0 -318
  17. data/lib/vendor/thor/lib/thor/actions/create_file.rb +0 -105
  18. data/lib/vendor/thor/lib/thor/actions/create_link.rb +0 -57
  19. data/lib/vendor/thor/lib/thor/actions/directory.rb +0 -97
  20. data/lib/vendor/thor/lib/thor/actions/empty_directory.rb +0 -153
  21. data/lib/vendor/thor/lib/thor/actions/file_manipulation.rb +0 -308
  22. data/lib/vendor/thor/lib/thor/actions/inject_into_file.rb +0 -109
  23. data/lib/vendor/thor/lib/thor/base.rb +0 -611
  24. data/lib/vendor/thor/lib/thor/core_ext/file_binary_read.rb +0 -9
  25. data/lib/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +0 -75
  26. data/lib/vendor/thor/lib/thor/core_ext/ordered_hash.rb +0 -100
  27. data/lib/vendor/thor/lib/thor/error.rb +0 -35
  28. data/lib/vendor/thor/lib/thor/group.rb +0 -285
  29. data/lib/vendor/thor/lib/thor/invocation.rb +0 -170
  30. data/lib/vendor/thor/lib/thor/parser.rb +0 -4
  31. data/lib/vendor/thor/lib/thor/parser/argument.rb +0 -67
  32. data/lib/vendor/thor/lib/thor/parser/arguments.rb +0 -165
  33. data/lib/vendor/thor/lib/thor/parser/option.rb +0 -121
  34. data/lib/vendor/thor/lib/thor/parser/options.rb +0 -181
  35. data/lib/vendor/thor/lib/thor/rake_compat.rb +0 -71
  36. data/lib/vendor/thor/lib/thor/runner.rb +0 -321
  37. data/lib/vendor/thor/lib/thor/shell.rb +0 -88
  38. data/lib/vendor/thor/lib/thor/shell/basic.rb +0 -331
  39. data/lib/vendor/thor/lib/thor/shell/color.rb +0 -108
  40. data/lib/vendor/thor/lib/thor/shell/html.rb +0 -121
  41. data/lib/vendor/thor/lib/thor/task.rb +0 -132
  42. data/lib/vendor/thor/lib/thor/util.rb +0 -248
  43. data/lib/vendor/thor/lib/thor/version.rb +0 -3
data/README.rdoc CHANGED
@@ -28,9 +28,12 @@ The ey.yml file allows options to be saved for each environment to which an appl
28
28
  copy_exclude: # don't rsync the following dirs
29
29
  - .git
30
30
  verbose: true # always run verbose deploy (unless overriden on command line)
31
+ maintenance_on_restart: false # show maintenance page during app restart (default: false except for glassfish and mongrel)
32
+ maintenance_on_migrate: false # show maintenance page during migrations (default: true)
33
+ precompile_assets: true # enables rails assets precompilation (default: inferred using app/assets and config/application.rb)
34
+ ignore_database_adapter_warning: true # hide database adapter warning if you don't use MySQL or PostgreSQL (default: false)
31
35
 
32
-
33
- This ey.yml file will turn off default migrations, set the default command to "rake fancy:migrate" and set the default deploy branch to "deploy".
36
+ Many of the options in ey.yml will only work if the file is committed to your application repository. Make sure to commit this file.
34
37
 
35
38
  == Commands
36
39
 
@@ -38,34 +41,39 @@ Command:
38
41
  ey deploy
39
42
 
40
43
  Options:
41
- -r, --branch, --tag, [--ref=REF] # Git ref to deploy. May be a branch, a tag, or a SHA.
42
- [--ignore-bad-master] # Force a deploy even if the master is in a bad state
43
- -v, [--verbose] # Be verbose
44
+ -r, [--ref=REF] [--branch=] [--tag=] # Git ref to deploy. May be a branch, a tag, or a SHA.
45
+ -c, [--account=ACCOUNT] # Name of the account in which the environment can be found
44
46
  -a, [--app=APP] # Name of the application to deploy
47
+ -e, [--environment=ENVIRONMENT] # Environment in which to deploy this application
45
48
  -m, [--migrate=MIGRATE] # Run migrations via [MIGRATE], defaults to 'rake db:migrate'; use --no-migrate to avoid running migrations
49
+ -v, [--verbose] # Be verbose
46
50
  [--ignore-default-branch] # Force a deploy of the specified branch even if a default is set
47
- -e, [--environment=ENVIRONMENT] # Environment in which to deploy this application
48
- -c, [--account=ACCOUNT] # Name of the account in which the environment can be found
51
+ [--ignore-bad-master] # Force a deploy even if the master is in a bad state
49
52
  [--extra-deploy-hook-options key:val] # Additional options to be made available in deploy hooks (in the 'config' hash)
53
+ # Add more keys as follows: --extra-deploy-hook-options key1:val1 key2:val2
50
54
 
51
55
 
52
56
  Description:
53
- This command must be run with the current directory containing the app to be
57
+ This command must be run within the current directory containing the app to be
54
58
  deployed. If ey.yml specifies a default branch then the ref parameter can be
55
59
  omitted. Furthermore, if a default branch is specified but a different
56
60
  command is supplied the deploy will fail unless --ignore-default-branch
57
61
  is used.
58
62
 
59
- Migrations are run by default with 'rake db:migrate'. A different command
60
- can be specified via --migrate "ruby do_migrations.rb". Migrations can also
61
- be skipped entirely by using --no-migrate.
63
+ If ey.yml does not specify a default migrate choice, you will be prompted to
64
+ specify a migration choice. A different command can later be specified via
65
+ --migrate "ruby do_migrations.rb". Migrations can also be skipped entirely
66
+ by using --no-migrate.
62
67
 
63
68
  Command:
64
69
  ey environments
65
70
 
66
71
  Options:
67
- -s, [--simple]
68
- -a, [--all]
72
+ -c, [--account=ACCOUNT] # Name of the account in which the environment can be found
73
+ -a, [--app=APP] # Name of the application containing the environments
74
+ -e, [--environment=ENVIRONMENT] # Show only environments matching named environment
75
+ -s, [--simple] # Print each environment name on its own on a new line
76
+ -a, [--all] # Show all environments, not just ones associated with this application.
69
77
 
70
78
  Description:
71
79
  By default, environments for this app are displayed. The --all option will display all environments, including those for this app.
@@ -162,8 +170,11 @@ Command:
162
170
  The maintenance page is taken from the app currently being deployed. This means that you can customize maintenance pages to tell users the reason for downtime on every
163
171
  particular deploy.
164
172
 
165
- Maintenance pages searched for in order of decreasing priority: * public/maintenance.html.custom * public/maintenance.html.tmp * public/maintenance.html *
166
- public/system/maintenance.html.default
173
+ Maintenance pages searched for in order of decreasing priority:
174
+ * public/maintenance.html.custom
175
+ * public/maintenance.html.tmp
176
+ * public/maintenance.html
177
+ * public/system/maintenance.html.default
167
178
 
168
179
  Command:
169
180
  ey ssh
@@ -217,129 +228,21 @@ Command:
217
228
 
218
229
  == API Client
219
230
 
220
- This library also contains a Ruby ey_api library to the Engine Yard Cloud API.
221
-
222
- Setup:
223
-
224
- token = EY::CloudClient.authenticate("your@email.com", "password")
225
- ey_api = EY::CloudClient.new(token)
226
-
227
- Current User:
228
-
229
- user = ey_api.current_user
230
- user.class # => EY::CloudClient::User
231
- user.name # => "Your Name"
232
- user.email # => "your@email.com"
233
-
234
- Apps:
235
-
236
- apps = ey_api.apps # loads all your app data at once; caches result
237
-
238
- app = apps.find {|app| app.name == 'myapp'}
239
- app.class # => EY::CloudClient::App
240
- app.name # => 'myapp'
241
- app.id # => 123
242
- app.repository_uri # => git@github.com:myaccount/myapp.git
243
-
244
- app.account.class # => EY::CloudClient::Account
245
-
246
- app.app_environments.first.class # => EY::CloudClient::AppEnvironment
247
- app.app_environments.map {|e| e.environment.name} # => ['myapp_production', 'myapp_staging']
248
-
249
- Create a new application (to be booted within Environments):
250
-
251
- account = EY::CloudClient::Account.new(ey_api, {:id => 4212, :name => 'drnic'})
252
- app = EY::CloudClient::App.create(ey_api,
253
- "account" => account
254
- "name" => "myapp",
255
- "repository_uri" => "git@github.com:mycompany/myapp.git",
256
- "app_type_id" => "rails3",
257
- })
258
-
259
- Valid `app_type_id` are: `rack, rails2, rails3, rails4, sinatra, nodejs`. For some your account may require an early access feature to be enabled.
260
-
261
- Accounts:
262
-
263
- account = app.account
264
- account.class # => EY::CloudClient::Account
265
- account.id # => 1234
266
- account.name # => 'myaccount'
267
-
268
- Keypairs:
269
-
270
- Upload your SSH public keys before you create Environments.
271
-
272
- keypair = EY::CloudClient::Keypair.create(ey_api, {
273
- "name" => 'laptop',
274
- "public_key" => "ssh-rsa OTHERKEYPAIR"
275
- })
276
-
277
- Environments:
278
-
279
- envs = ey_api.environments # loads all your environment data at once; caches result
280
-
281
- env = envs.find {|e| e.name == 'myapp_production'}
282
- env.class # => EY::CloudClient::Environment
283
- env.name # => 'myapp_production'
284
- env.id # => 2345
285
- env.framework_env # => "production"
286
- env.app_server_stack_name # => "nginx_thin"
287
- env.deployment_configurations # => {"myapp"=>{"name"=>"myapp", "uri"=>nil, "migrate"=>{"command"=>"rake db:migrate", "perform"=>false}, "repository_uri"=>"git@github.com:myaccount/myapp.git", "id"=>123, "domain_name"=>"_"}}
288
- env.load_balancer_ip_address # => "1.2.3.4"
289
-
290
- # if environment isn't booted
291
- env.instances_count # => 0
292
- env.app_master # => nil
293
- env.instances.count # => []
294
-
295
- # if environment is booted
296
- env.instances_count # => 1
297
- env.app_master.class # => EY::CloudClient::Instance
298
- env.instances.first.class # => EY::CloudClient::Instance
299
-
300
- Create a new environment (for a given App):
301
-
302
- app = EY::CloudClient::App.new(ey_api, {:id => 4212, :name => 'drnic'})
303
- env = EY::CloudClient::Environment.create(ey_api,
304
- "app" => app,
305
- "name" => 'myapp_production',
306
- "app_server_stack_name" => 'nginx_thin', # default: nginx_passenger3
307
- "region" => 'us-west-1', # default: us-east-1
308
- "framework_env" => 'staging' # default: production
309
- })
310
-
311
-
312
- Valid `app_server_stack_name` values: `nginx_unicorn, nginx_passenger3, nginx_nodejs, nginx_thin, nginx_puma`. For some your account may require an early access feature to be enabled.
313
-
314
- Instances:
315
-
316
- instance = env.instances.first
317
- instance.class # => EY::CloudClient::Instance
318
- instance.id # => 12345
319
- instance.role # => "solo"
320
- instance.status # => "running"
321
- instance.amazon_id # => "i-abcdefg"
322
- instance.hostname # => "ec2-1-2-3-4.compute-1.amazonaws.com"
323
- instance.public_hostname # => "ec2-1-2-3-4.compute-1.amazonaws.com" # alias of hostname
324
-
325
- Debugging:
326
-
327
- Setup for debugging:
231
+ See https://github.com/engineyard/engineyard-cloud-client for the API client library.
328
232
 
329
- ENV['DEBUG']='1'
330
- require 'engineyard/cli'
331
- EY.ui = EY::CLI::UI.new
233
+ == DEBUG
332
234
 
333
- The API commands will print internal information:
235
+ The API commands will print internal information if $DEBUG is set:
334
236
 
335
- app = EY::CloudClient::App.create(ey_api, account, 'myapp2', 'git@github.com:myaccount/myapp2.git', 'rails3')
237
+ DEBUG=1 ey environments --all
336
238
  Token YOURTOKEN
337
- Request POST https://cloud.engineyard.com/api/v2/accounts/1234/apps
338
- Params {"app"=>{"name"=>"myapp2", "app_type_id"=>"rails3", "repository_uri"=>"git@github.com:myaccount/myapp2.git"}}
239
+ Request GET https://cloud.engineyard.com/api/v2/apps
240
+ Params {}
339
241
  Response
340
- {"app"=>
341
- {"environments"=>[],
342
- "name"=>"myapp2",
343
- "repository_uri"=>"git@github.com:myaccount/myapp2.git",
344
- "account"=>{"name"=>"myaccount", "id"=>1234},
345
- "id"=>12345}}
242
+ {"apps"=>
243
+ [{"environments"=>[],
244
+ "name"=>"myapp",
245
+ "repository_uri"=>"git@github.com:myaccount/myapp.git",
246
+ "app_type_id"=>"rails3",
247
+ "account"=>{"name"=>"myaccount", "id"=>1234},
248
+ "id"=>12345}]}
data/bin/ey_perftools ADDED
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env ruby
2
+ require 'perftools'
3
+ PerfTools::CpuProfiler.start("/Users/martinemde/p/ey/engineyard/status_profile")
4
+ $:.unshift(File.expand_path('../../lib', __FILE__))
5
+ require 'engineyard/cli'
6
+
7
+ begin
8
+ EY::CLI.start
9
+ rescue
10
+ exit(1)
11
+ end
12
+ PerfTools::CpuProfiler.stop
data/lib/engineyard.rb CHANGED
@@ -1,5 +1,3 @@
1
- thor_lib = File.expand_path(File.join(File.dirname(__FILE__), 'vendor', 'thor', 'lib'))
2
- $:.unshift thor_lib
3
1
  require 'engineyard-cloud-client'
4
2
 
5
3
  module EY
@@ -32,6 +32,8 @@ module EY
32
32
  raise
33
33
  end
34
34
 
35
+ class_option :api_token, :type => :string, :desc => "Use API-TOKEN to authenticate this command"
36
+
35
37
  desc "deploy [--environment ENVIRONMENT] [--ref GIT-REF]",
36
38
  "Deploy specified branch, tag, or sha to specified environment."
37
39
  long_desc <<-DESC
@@ -70,10 +72,7 @@ module EY
70
72
  method_option :extra_deploy_hook_options, :type => :hash, :default => {},
71
73
  :desc => "Additional options to be made available in deploy hooks (in the 'config' hash)"
72
74
  def deploy
73
- ui.info "Loading application data from EY Cloud..."
74
-
75
75
  app_env = fetch_app_environment(options[:app], options[:environment], options[:account])
76
- app_env.environment.ignore_bad_bridge = options[:ignore_bad_master]
77
76
 
78
77
  env_config = config.environment_config(app_env.environment_name)
79
78
  deploy_config = EY::DeployConfig.new(options, env_config, repo, ui)
@@ -85,7 +84,7 @@ module EY
85
84
  :extra_config => deploy_config.extra_config,
86
85
  })
87
86
 
88
- runner = serverside_runner(app_env, deploy_config.verbose)
87
+ runner = serverside_runner(app_env, deploy_config.verbose, options[:ignore_bad_master])
89
88
 
90
89
  out = EY::CLI::UI::Tee.new(ui.out, deployment.out)
91
90
  err = EY::CLI::UI::Tee.new(ui.err, deployment.err)
@@ -21,11 +21,12 @@ module EY
21
21
 
22
22
  attr_reader :token
23
23
 
24
- def initialize(endpoint, ui)
24
+ def initialize(endpoint, ui, token = nil)
25
25
  @ui = ui
26
26
  EY::CloudClient.endpoint = endpoint
27
27
 
28
- @token = ENV['ENGINEYARD_API_TOKEN'] if ENV['ENGINEYARD_API_TOKEN']
28
+ @token = token # specified on command line
29
+ @token ||= ENV['ENGINEYARD_API_TOKEN'] if ENV['ENGINEYARD_API_TOKEN']
29
30
  @token ||= EY::EYRC.load.api_token
30
31
  @token ||= self.class.authenticate(ui)
31
32
 
File without changes
@@ -4,7 +4,7 @@ module EY
4
4
  module UtilityMethods
5
5
  protected
6
6
  def api
7
- @api ||= EY::CLI::API.new(config.endpoint, ui)
7
+ @api ||= EY::CLI::API.new(config.endpoint, ui, options[:api_token])
8
8
  end
9
9
 
10
10
  def config
@@ -28,8 +28,8 @@ module EY
28
28
  @repo ||= EY::Repo.new
29
29
  end
30
30
 
31
- def serverside_runner(app_env, verbose)
32
- ServersideRunner.new(app_env.environment.bridge!.hostname, app_env.app, app_env.environment, verbose)
31
+ def serverside_runner(app_env, verbose, ignore_bad_bridge = false)
32
+ ServersideRunner.new(app_env.environment.bridge!(ignore_bad_bridge).hostname, app_env.app, app_env.environment, verbose)
33
33
  end
34
34
 
35
35
  def use_default_environment
@@ -40,6 +40,8 @@ module EY
40
40
  end
41
41
 
42
42
  def fetch_environment(environment_name, account_name)
43
+ ui.info "Loading application data from EY Cloud..."
44
+
43
45
  environment_name ||= use_default_environment
44
46
  remotes = repo.remotes if in_repo?
45
47
  constraints = {
@@ -70,6 +72,8 @@ module EY
70
72
  end
71
73
 
72
74
  def fetch_app_environment(app_name, environment_name, account_name)
75
+ ui.info "Loading application data from EY Cloud..."
76
+
73
77
  environment_name ||= use_default_environment
74
78
  remotes = repo.remotes if in_repo?
75
79
  constraints = {
@@ -1,3 +1,3 @@
1
1
  module EY
2
- VERSION = '2.0.0.pre1'
2
+ VERSION = '2.0.0.pre2'
3
3
  end
@@ -8,6 +8,12 @@ describe EY::CLI::API do
8
8
  clean_eyrc
9
9
  end
10
10
 
11
+ it "uses the token specified token over the ENV token if passed" do
12
+ ENV['ENGINEYARD_API_TOKEN'] = 'envtoken'
13
+ EY::CLI::API.new('http://fake.local', EY::CLI::UI.new, 'specifiedtoken').token.should == 'specifiedtoken'
14
+ ENV.delete('ENGINEYARD_API_TOKEN')
15
+ end
16
+
11
17
  it "uses the token from $ENGINEYARD_API_TOKEN if set" do
12
18
  ENV['ENGINEYARD_API_TOKEN'] = 'envtoken'
13
19
  EY::CLI::API.new('http://fake.local', EY::CLI::UI.new).token.should == 'envtoken'
@@ -18,6 +18,12 @@ describe "ey deploy without an eyrc file" do
18
18
 
19
19
  read_eyrc.should == {"api_token" => scenario_api_token}
20
20
  end
21
+
22
+ it "uses the token on the command line" do
23
+ api_scenario "one app, one environment"
24
+ ey(%w[deploy --no-migrate --api-token] + [scenario_api_token])
25
+ @ssh_commands.should_not be_empty
26
+ end
21
27
  end
22
28
 
23
29
 
data/spec/ey/ssh_spec.rb CHANGED
@@ -153,12 +153,12 @@ end
153
153
  describe "ey ssh --all" do
154
154
  before do
155
155
  @ssh_flag = %w[--all]
156
- @hosts = %w(app_hostname
157
- app_master_hostname
158
- util_fluffy_hostname
159
- util_rocky_hostname
160
- db_master_hostname
161
- db_slave_1_hostname
156
+ @hosts = %w(app_hostname
157
+ app_master_hostname
158
+ util_fluffy_hostname
159
+ util_rocky_hostname
160
+ db_master_hostname
161
+ db_slave_1_hostname
162
162
  db_slave_2_hostname)
163
163
  end
164
164
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: engineyard
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.pre1
4
+ version: 2.0.0.pre2
5
5
  prerelease: 6
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-22 00:00:00.000000000 Z
12
+ date: 2012-05-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rest-client
@@ -27,6 +27,22 @@ dependencies:
27
27
  - - ~>
28
28
  - !ruby/object:Gem::Version
29
29
  version: 1.6.0
30
+ - !ruby/object:Gem::Dependency
31
+ name: thor
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: 0.15.2
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 0.15.2
30
46
  - !ruby/object:Gem::Dependency
31
47
  name: highline
32
48
  requirement: !ruby/object:Gem::Requirement
@@ -82,7 +98,7 @@ dependencies:
82
98
  requirements:
83
99
  - - '='
84
100
  - !ruby/object:Gem::Version
85
- version: 2.0.0.pre1
101
+ version: 2.0.0.pre2
86
102
  type: :runtime
87
103
  prerelease: false
88
104
  version_requirements: !ruby/object:Gem::Requirement
@@ -90,7 +106,7 @@ dependencies:
90
106
  requirements:
91
107
  - - '='
92
108
  - !ruby/object:Gem::Version
93
- version: 2.0.0.pre1
109
+ version: 2.0.0.pre2
94
110
  - !ruby/object:Gem::Dependency
95
111
  name: engineyard-cloud-client
96
112
  requirement: !ruby/object:Gem::Requirement
@@ -98,7 +114,7 @@ dependencies:
98
114
  requirements:
99
115
  - - ~>
100
116
  - !ruby/object:Gem::Version
101
- version: 1.0.1
117
+ version: 1.0.2
102
118
  type: :runtime
103
119
  prerelease: false
104
120
  version_requirements: !ruby/object:Gem::Requirement
@@ -106,7 +122,7 @@ dependencies:
106
122
  requirements:
107
123
  - - ~>
108
124
  - !ruby/object:Gem::Version
109
- version: 1.0.1
125
+ version: 1.0.2
110
126
  - !ruby/object:Gem::Dependency
111
127
  name: net-ssh
112
128
  requirement: !ruby/object:Gem::Requirement
@@ -308,11 +324,13 @@ extensions: []
308
324
  extra_rdoc_files: []
309
325
  files:
310
326
  - bin/ey
327
+ - bin/ey_perftools
311
328
  - lib/engineyard/cli/api.rb
312
329
  - lib/engineyard/cli/recipes.rb
313
330
  - lib/engineyard/cli/ui.rb
314
331
  - lib/engineyard/cli/web.rb
315
332
  - lib/engineyard/cli.rb
333
+ - lib/engineyard/commands/deploy.rb
316
334
  - lib/engineyard/config.rb
317
335
  - lib/engineyard/deploy_config/migrate.rb
318
336
  - lib/engineyard/deploy_config/ref.rb
@@ -324,37 +342,6 @@ files:
324
342
  - lib/engineyard/thor.rb
325
343
  - lib/engineyard/version.rb
326
344
  - lib/engineyard.rb
327
- - lib/vendor/thor/lib/thor/actions/create_file.rb
328
- - lib/vendor/thor/lib/thor/actions/create_link.rb
329
- - lib/vendor/thor/lib/thor/actions/directory.rb
330
- - lib/vendor/thor/lib/thor/actions/empty_directory.rb
331
- - lib/vendor/thor/lib/thor/actions/file_manipulation.rb
332
- - lib/vendor/thor/lib/thor/actions/inject_into_file.rb
333
- - lib/vendor/thor/lib/thor/actions.rb
334
- - lib/vendor/thor/lib/thor/base.rb
335
- - lib/vendor/thor/lib/thor/core_ext/file_binary_read.rb
336
- - lib/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb
337
- - lib/vendor/thor/lib/thor/core_ext/ordered_hash.rb
338
- - lib/vendor/thor/lib/thor/error.rb
339
- - lib/vendor/thor/lib/thor/group.rb
340
- - lib/vendor/thor/lib/thor/invocation.rb
341
- - lib/vendor/thor/lib/thor/parser/argument.rb
342
- - lib/vendor/thor/lib/thor/parser/arguments.rb
343
- - lib/vendor/thor/lib/thor/parser/option.rb
344
- - lib/vendor/thor/lib/thor/parser/options.rb
345
- - lib/vendor/thor/lib/thor/parser.rb
346
- - lib/vendor/thor/lib/thor/rake_compat.rb
347
- - lib/vendor/thor/lib/thor/runner.rb
348
- - lib/vendor/thor/lib/thor/shell/basic.rb
349
- - lib/vendor/thor/lib/thor/shell/color.rb
350
- - lib/vendor/thor/lib/thor/shell/html.rb
351
- - lib/vendor/thor/lib/thor/shell.rb
352
- - lib/vendor/thor/lib/thor/task.rb
353
- - lib/vendor/thor/lib/thor/util.rb
354
- - lib/vendor/thor/lib/thor/version.rb
355
- - lib/vendor/thor/lib/thor.rb
356
- - lib/vendor/thor/LICENSE.md
357
- - lib/vendor/thor/README.md
358
345
  - LICENSE
359
346
  - README.rdoc
360
347
  - spec/engineyard/cli/api_spec.rb