dpl 1.8.48.travis.2486.5 → 1.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (135) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +2 -0
  3. data/.travis.yml +42 -21
  4. data/Gemfile +3 -98
  5. data/README.md +5 -16
  6. data/Rakefile +160 -1
  7. data/dpl-anynines.gemspec +3 -0
  8. data/dpl-atlas.gemspec +3 -0
  9. data/dpl-azure_webapps.gemspec +3 -0
  10. data/dpl-bintray.gemspec +3 -0
  11. data/dpl-bitballoon.gemspec +3 -0
  12. data/dpl-bluemix_cloud_foundry.gemspec +3 -0
  13. data/dpl-boxfuse.gemspec +3 -0
  14. data/dpl-catalyze.gemspec +3 -0
  15. data/dpl-chef_supermarket.gemspec +8 -0
  16. data/dpl-cloud66.gemspec +3 -0
  17. data/dpl-cloud_files.gemspec +3 -0
  18. data/dpl-cloud_foundry.gemspec +3 -0
  19. data/dpl-code_deploy.gemspec +3 -0
  20. data/dpl-deis.gemspec +3 -0
  21. data/dpl-divshot.gemspec +3 -0
  22. data/dpl-elastic_beanstalk.gemspec +3 -0
  23. data/dpl-engine_yard.gemspec +3 -0
  24. data/dpl-firebase.gemspec +3 -0
  25. data/dpl-gae.gemspec +3 -0
  26. data/dpl-gcs.gemspec +3 -0
  27. data/dpl-hackage.gemspec +3 -0
  28. data/dpl-heroku.gemspec +3 -0
  29. data/dpl-lambda.gemspec +3 -0
  30. data/dpl-launchpad.gemspec +3 -0
  31. data/dpl-modulus.gemspec +3 -0
  32. data/dpl-npm.gemspec +3 -0
  33. data/dpl-openshift.gemspec +3 -0
  34. data/dpl-ops_works.gemspec +3 -0
  35. data/dpl-packagecloud.gemspec +3 -0
  36. data/dpl-pages.gemspec +3 -0
  37. data/dpl-puppet_forge.gemspec +3 -0
  38. data/dpl-pypi.gemspec +3 -0
  39. data/dpl-releases.gemspec +3 -0
  40. data/dpl-rubygems.gemspec +3 -0
  41. data/dpl-s3.gemspec +3 -0
  42. data/dpl-scalingo.gemspec +3 -0
  43. data/dpl-script.gemspec +3 -0
  44. data/dpl-surge.gemspec +3 -0
  45. data/dpl-testfairy.gemspec +3 -0
  46. data/dpl-transifex.gemspec +3 -0
  47. data/dpl.gemspec +2 -31
  48. data/gemspec_helper.rb +49 -0
  49. data/lib/dpl/provider.rb +101 -58
  50. data/lib/dpl/version.rb +1 -1
  51. data/spec/provider_spec.rb +15 -34
  52. metadata +76 -107
  53. data/lib/dpl/provider/anynines.rb +0 -13
  54. data/lib/dpl/provider/appfog.rb +0 -21
  55. data/lib/dpl/provider/atlas.rb +0 -108
  56. data/lib/dpl/provider/azure_webapps.rb +0 -48
  57. data/lib/dpl/provider/bintray.rb +0 -509
  58. data/lib/dpl/provider/bitballoon.rb +0 -22
  59. data/lib/dpl/provider/bluemix_cloud_foundry.rb +0 -23
  60. data/lib/dpl/provider/boxfuse.rb +0 -57
  61. data/lib/dpl/provider/catalyze.rb +0 -49
  62. data/lib/dpl/provider/chef_supermarket.rb +0 -85
  63. data/lib/dpl/provider/cloud66.rb +0 -38
  64. data/lib/dpl/provider/cloud_files.rb +0 -38
  65. data/lib/dpl/provider/cloud_foundry.rb +0 -43
  66. data/lib/dpl/provider/code_deploy.rb +0 -154
  67. data/lib/dpl/provider/deis.rb +0 -128
  68. data/lib/dpl/provider/divshot.rb +0 -23
  69. data/lib/dpl/provider/elastic_beanstalk.rb +0 -195
  70. data/lib/dpl/provider/engine_yard.rb +0 -90
  71. data/lib/dpl/provider/firebase.rb +0 -27
  72. data/lib/dpl/provider/gae.rb +0 -97
  73. data/lib/dpl/provider/gcs.rb +0 -59
  74. data/lib/dpl/provider/hackage.rb +0 -29
  75. data/lib/dpl/provider/heroku.rb +0 -18
  76. data/lib/dpl/provider/heroku/api.rb +0 -98
  77. data/lib/dpl/provider/heroku/generic.rb +0 -94
  78. data/lib/dpl/provider/heroku/git.rb +0 -28
  79. data/lib/dpl/provider/lambda.rb +0 -236
  80. data/lib/dpl/provider/launchpad.rb +0 -48
  81. data/lib/dpl/provider/modulus.rb +0 -23
  82. data/lib/dpl/provider/npm.rb +0 -64
  83. data/lib/dpl/provider/openshift.rb +0 -59
  84. data/lib/dpl/provider/ops_works.rb +0 -132
  85. data/lib/dpl/provider/packagecloud.rb +0 -144
  86. data/lib/dpl/provider/pages.rb +0 -212
  87. data/lib/dpl/provider/puppet_forge.rb +0 -43
  88. data/lib/dpl/provider/pypi.rb +0 -103
  89. data/lib/dpl/provider/releases.rb +0 -139
  90. data/lib/dpl/provider/rubygems.rb +0 -51
  91. data/lib/dpl/provider/s3.rb +0 -123
  92. data/lib/dpl/provider/scalingo.rb +0 -97
  93. data/lib/dpl/provider/script.rb +0 -29
  94. data/lib/dpl/provider/surge.rb +0 -33
  95. data/lib/dpl/provider/testfairy.rb +0 -111
  96. data/lib/dpl/provider/transifex.rb +0 -45
  97. data/spec/provider/anynines_spec.rb +0 -20
  98. data/spec/provider/appfog_spec.rb +0 -35
  99. data/spec/provider/atlas_spec.rb +0 -99
  100. data/spec/provider/azure_webapps_spec.rb +0 -95
  101. data/spec/provider/bintray_spec.rb +0 -259
  102. data/spec/provider/bitballoon_spec.rb +0 -32
  103. data/spec/provider/bluemixcloudfoundry_spec.rb +0 -23
  104. data/spec/provider/boxfuse_spec.rb +0 -16
  105. data/spec/provider/catalyze_spec.rb +0 -39
  106. data/spec/provider/chef_supermarket_spec.rb +0 -51
  107. data/spec/provider/cloud66_spec.rb +0 -44
  108. data/spec/provider/cloud_files_spec.rb +0 -88
  109. data/spec/provider/cloudfoundry_spec.rb +0 -71
  110. data/spec/provider/code_deploy_spec.rb +0 -366
  111. data/spec/provider/deis_spec.rb +0 -116
  112. data/spec/provider/divshot_spec.rb +0 -28
  113. data/spec/provider/elastic_beanstalk_spec.rb +0 -209
  114. data/spec/provider/firebase_spec.rb +0 -40
  115. data/spec/provider/gae_spec.rb +0 -26
  116. data/spec/provider/gcs_spec.rb +0 -115
  117. data/spec/provider/hackage_spec.rb +0 -47
  118. data/spec/provider/heroku_spec.rb +0 -357
  119. data/spec/provider/lambda_spec.rb +0 -432
  120. data/spec/provider/launchpad_spec.rb +0 -33
  121. data/spec/provider/modulus_spec.rb +0 -29
  122. data/spec/provider/npm_spec.rb +0 -95
  123. data/spec/provider/openshift_spec.rb +0 -91
  124. data/spec/provider/ops_works_spec.rb +0 -127
  125. data/spec/provider/packagecloud_spec.rb +0 -56
  126. data/spec/provider/puppet_forge_spec.rb +0 -60
  127. data/spec/provider/pypi_spec.rb +0 -105
  128. data/spec/provider/releases_spec.rb +0 -303
  129. data/spec/provider/rubygems_spec.rb +0 -106
  130. data/spec/provider/s3_spec.rb +0 -174
  131. data/spec/provider/scalingo_spec.rb +0 -64
  132. data/spec/provider/script_spec.rb +0 -26
  133. data/spec/provider/surge_spec.rb +0 -15
  134. data/spec/provider/testfairy_spec.rb +0 -65
  135. data/spec/provider/transifex_spec.rb +0 -110
@@ -0,0 +1,3 @@
1
+ require './gemspec_helper'
2
+
3
+ gemspec_for 'boxfuse'
@@ -0,0 +1,3 @@
1
+ require './gemspec_helper'
2
+
3
+ gemspec_for 'catalyze'
@@ -0,0 +1,8 @@
1
+ require './gemspec_helper'
2
+
3
+ if Gem::Version.new(RUBY_VERSION) < Gem::Version.new("2.3.0")
4
+ gemspec_for 'chef_supermarket', [['rack'], ['mime-types'], ['chef', '~> 12.0']]
5
+ else
6
+ gemspec_for 'chef_supermarket', [['rack'], ['mime-types'], ['chef']]
7
+ end
8
+
@@ -0,0 +1,3 @@
1
+ require './gemspec_helper'
2
+
3
+ gemspec_for 'cloud66'
@@ -0,0 +1,3 @@
1
+ require './gemspec_helper'
2
+
3
+ gemspec_for 'cloud_files', [['net-ssh'], ['mime-types'], ['nokogiri'], ['fog-rackspace']]
@@ -0,0 +1,3 @@
1
+ require './gemspec_helper'
2
+
3
+ gemspec_for 'cloud_foundry'
@@ -0,0 +1,3 @@
1
+ require './gemspec_helper'
2
+
3
+ gemspec_for 'code_deploy', [['aws-sdk', '~> 2.0']]
@@ -0,0 +1,3 @@
1
+ require './gemspec_helper'
2
+
3
+ gemspec_for 'deis'
@@ -0,0 +1,3 @@
1
+ require './gemspec_helper'
2
+
3
+ gemspec_for 'divshot'
@@ -0,0 +1,3 @@
1
+ require './gemspec_helper'
2
+
3
+ gemspec_for 'elastic_beanstalk', [['aws-sdk', '~> 2.0'], ['rubyzip']]
@@ -0,0 +1,3 @@
1
+ require './gemspec_helper'
2
+
3
+ gemspec_for 'engine_yard', [['engineyard-cloud-client']]
@@ -0,0 +1,3 @@
1
+ require './gemspec_helper'
2
+
3
+ gemspec_for 'firebase'
@@ -0,0 +1,3 @@
1
+ require './gemspec_helper'
2
+
3
+ gemspec_for 'gae'
@@ -0,0 +1,3 @@
1
+ require './gemspec_helper'
2
+
3
+ gemspec_for 'gcs', [['gstore'], ['mime-types', '~> 2.0']]
@@ -0,0 +1,3 @@
1
+ require './gemspec_helper'
2
+
3
+ gemspec_for 'hackage'
@@ -0,0 +1,3 @@
1
+ require './gemspec_helper'
2
+
3
+ gemspec_for 'heroku', [['faraday'], ['rendezvous'], ['netrc']]
@@ -0,0 +1,3 @@
1
+ require './gemspec_helper'
2
+
3
+ gemspec_for 'lambda', [['aws-sdk', '~> 2.0'], ['rubyzip']]
@@ -0,0 +1,3 @@
1
+ require './gemspec_helper'
2
+
3
+ gemspec_for 'launchpad'
@@ -0,0 +1,3 @@
1
+ require './gemspec_helper'
2
+
3
+ gemspec_for 'modulus'
@@ -0,0 +1,3 @@
1
+ require './gemspec_helper'
2
+
3
+ gemspec_for 'npm'
@@ -0,0 +1,3 @@
1
+ require './gemspec_helper'
2
+
3
+ gemspec_for 'openshift', [['httpclient', '~> 2.4.0'], ['net-ssh'], ['net-ssh-gateway'], ['rhc']]
@@ -0,0 +1,3 @@
1
+ require './gemspec_helper'
2
+
3
+ gemspec_for 'ops_works', [['aws-sdk', '~> 2.0']]
@@ -0,0 +1,3 @@
1
+ require './gemspec_helper'
2
+
3
+ gemspec_for 'packagecloud', [['packagecloud-ruby', '1.0.5']]
@@ -0,0 +1,3 @@
1
+ require './gemspec_helper'
2
+
3
+ gemspec_for 'pages', [['octokit', '~> 4.6.2']]
@@ -0,0 +1,3 @@
1
+ require './gemspec_helper'
2
+
3
+ gemspec_for 'puppet_forge', [['puppet'], ['puppet-blacksmith']]
@@ -0,0 +1,3 @@
1
+ require './gemspec_helper'
2
+
3
+ gemspec_for 'pypi'
@@ -0,0 +1,3 @@
1
+ require './gemspec_helper'
2
+
3
+ gemspec_for 'releases', [['octokit', '~> 4.6.2'], ['mime-types', '~> 2.0']]
@@ -0,0 +1,3 @@
1
+ require './gemspec_helper'
2
+
3
+ gemspec_for 'rubygems', [['gems', '>= 1.1.0']]
@@ -0,0 +1,3 @@
1
+ require './gemspec_helper'
2
+
3
+ gemspec_for 's3', [['aws-sdk', '~> 2.0'], ['mime-types', '~> 2.0']]
@@ -0,0 +1,3 @@
1
+ require './gemspec_helper'
2
+
3
+ gemspec_for 'scalingo'
@@ -0,0 +1,3 @@
1
+ require './gemspec_helper'
2
+
3
+ gemspec_for 'script'
@@ -0,0 +1,3 @@
1
+ require './gemspec_helper'
2
+
3
+ gemspec_for 'surge'
@@ -0,0 +1,3 @@
1
+ require './gemspec_helper'
2
+
3
+ gemspec_for 'testfairy', [['multipart-post', '2.0.0']]
@@ -0,0 +1,3 @@
1
+ require './gemspec_helper'
2
+
3
+ gemspec_for 'transifex'
@@ -1,32 +1,3 @@
1
- $:.unshift File.expand_path("../lib", __FILE__)
2
- require "dpl/version"
1
+ require './gemspec_helper'
3
2
 
4
- Gem::Specification.new do |s|
5
- s.name = "dpl"
6
- s.version = DPL::VERSION
7
- s.author = "Konstantin Haase"
8
- s.email = "konstantin.mailinglists@googlemail.com"
9
- s.homepage = "https://github.com/travis-ci/dpl"
10
- s.summary = %q{deploy tool}
11
- s.description = %q{deploy tool abstraction for clients}
12
- s.license = 'MIT'
13
- s.files = `git ls-files`.split("\n")
14
- s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
15
- s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
16
- s.require_path = 'lib'
17
- s.required_ruby_version = '>= 1.9.3'
18
-
19
- s.add_development_dependency 'rspec', '~> 3.0.0'
20
- s.add_development_dependency 'rspec-its'
21
- s.add_development_dependency 'rake'
22
- s.add_development_dependency 'json', '1.8.3'
23
- s.add_development_dependency 'tins', '~> 1.6.0', '>= 1.6.0'
24
- s.add_development_dependency 'coveralls'
25
-
26
- # prereleases from Travis CI
27
- if ENV['CI']
28
- digits = s.version.to_s.split '.'
29
- digits[-1] = digits[-1].to_s.succ
30
- s.version = digits.join('.') + ".travis.#{ENV['TRAVIS_JOB_NUMBER']}"
31
- end
32
- end
3
+ gemspec_for
@@ -0,0 +1,49 @@
1
+ $:.unshift File.expand_path("../lib", __FILE__)
2
+ require "dpl/version"
3
+
4
+ def gemspec_for(provider_name=nil, runtime_dependencies=[])
5
+ Gem::Specification.new do |s|
6
+
7
+ s.name = ["dpl", provider_name].compact.join("-")
8
+ s.author = "Konstantin Haase"
9
+ s.email = "konstantin.mailinglists@googlemail.com"
10
+ s.homepage = "https://github.com/travis-ci/dpl"
11
+ s.summary = %q{deploy tool}
12
+ s.description = %q{deploy tool abstraction for clients}
13
+ s.license = 'MIT'
14
+
15
+ s.require_path = 'lib'
16
+ s.required_ruby_version = '>= 2.2'
17
+
18
+ # set up version
19
+ s.version = ENV['DPL_VERSION'] || DPL::VERSION
20
+
21
+ # dependencies
22
+ if provider_name
23
+ s.add_runtime_dependency 'dpl', s.version
24
+ end
25
+
26
+ runtime_dependencies.each do |part|
27
+ s.add_runtime_dependency *part
28
+ end
29
+
30
+ s.add_development_dependency 'rspec'
31
+ s.add_development_dependency 'rspec-its'
32
+ s.add_development_dependency 'rake'
33
+ s.add_development_dependency 'json_pure'
34
+ s.add_development_dependency 'tins'
35
+ s.add_development_dependency 'coveralls'
36
+ s.add_development_dependency 'highline'
37
+
38
+ # set up files
39
+ if provider_name
40
+ s.files = `git ls-files`.split("\n").grep(Regexp.new provider_name.to_s)
41
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n").grep(Regexp.new provider_name.to_s)
42
+ else
43
+ s.files = `git ls-files`.split("\n").reject {|f| f =~ Regexp.new("provider/")}
44
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n").reject {|f| f =~ Regexp.new("provider/")}
45
+ end
46
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }.grep(Regexp.new provider_name.to_s)
47
+
48
+ end
49
+ end
@@ -6,58 +6,105 @@ module DPL
6
6
  class Provider
7
7
  include FileUtils
8
8
 
9
- autoload :Anynines, 'dpl/provider/anynines'
10
- autoload :Appfog, 'dpl/provider/appfog'
11
- autoload :Atlas, 'dpl/provider/atlas'
12
- autoload :AzureWebApps, 'dpl/provider/azure_webapps'
13
- autoload :Bintray, 'dpl/provider/bintray'
14
- autoload :BitBalloon, 'dpl/provider/bitballoon'
15
- autoload :BluemixCloudFoundry, 'dpl/provider/bluemix_cloud_foundry'
16
- autoload :Boxfuse, 'dpl/provider/boxfuse'
17
- autoload :Catalyze, 'dpl/provider/catalyze'
18
- autoload :ChefSupermarket, 'dpl/provider/chef_supermarket'
19
- autoload :Cloud66, 'dpl/provider/cloud66'
20
- autoload :CloudFiles, 'dpl/provider/cloud_files'
21
- autoload :CloudFoundry, 'dpl/provider/cloud_foundry'
22
- autoload :CodeDeploy, 'dpl/provider/code_deploy'
23
- autoload :Deis, 'dpl/provider/deis'
24
- autoload :Divshot, 'dpl/provider/divshot'
25
- autoload :ElasticBeanstalk, 'dpl/provider/elastic_beanstalk'
26
- autoload :EngineYard, 'dpl/provider/engine_yard'
27
- autoload :Firebase, 'dpl/provider/firebase'
28
- autoload :GAE, 'dpl/provider/gae'
29
- autoload :GCS, 'dpl/provider/gcs'
30
- autoload :Hackage, 'dpl/provider/hackage'
31
- autoload :Heroku, 'dpl/provider/heroku'
32
- autoload :Lambda, 'dpl/provider/lambda'
33
- autoload :Launchpad, 'dpl/provider/launchpad'
34
- autoload :Modulus, 'dpl/provider/modulus'
35
- autoload :Nodejitsu, 'dpl/provider/nodejitsu'
36
- autoload :NPM, 'dpl/provider/npm'
37
- autoload :Openshift, 'dpl/provider/openshift'
38
- autoload :OpsWorks, 'dpl/provider/ops_works'
39
- autoload :Packagecloud, 'dpl/provider/packagecloud'
40
- autoload :Pages, 'dpl/provider/pages'
41
- autoload :PuppetForge, 'dpl/provider/puppet_forge'
42
- autoload :PyPI, 'dpl/provider/pypi'
43
- autoload :Releases, 'dpl/provider/releases'
44
- autoload :RubyGems, 'dpl/provider/rubygems'
45
- autoload :S3, 'dpl/provider/s3'
46
- autoload :Scalingo, 'dpl/provider/scalingo'
47
- autoload :Script, 'dpl/provider/script'
48
- autoload :Surge, 'dpl/provider/surge'
49
- autoload :TestFairy, 'dpl/provider/testfairy'
50
- autoload :Transifex, 'dpl/provider/transifex'
51
-
9
+ # map of DPL provider class name constants to their corresponding
10
+ # file names. There is no simple rule to map them automatically
11
+ # (camel-cases, snake-cases, call-caps, etc.), so we need an explicit
12
+ # map.
13
+ GEM_NAME_OF = {
14
+ 'Anynines' => 'anynines',
15
+ 'Appfog' => 'appfog',
16
+ 'Atlas' => 'atlas',
17
+ 'AzureWebApps' => 'azure_webapps',
18
+ 'Bintray' => 'bintray',
19
+ 'BitBalloon' => 'bitballoon',
20
+ 'BluemixCloudFoundry' => 'bluemix_cloud_foundry',
21
+ 'Boxfuse' => 'boxfuse',
22
+ 'Catalyze' => 'catalyze',
23
+ 'ChefSupermarket' => 'chef_supermarket',
24
+ 'Cloud66' => 'cloud66',
25
+ 'CloudFiles' => 'cloud_files',
26
+ 'CloudFoundry' => 'cloud_foundry',
27
+ 'CodeDeploy' => 'code_deploy',
28
+ 'Deis' => 'deis',
29
+ 'Divshot' => 'divshot',
30
+ 'ElasticBeanstalk' => 'elastic_beanstalk',
31
+ 'EngineYard' => 'engine_yard',
32
+ 'Firebase' => 'firebase',
33
+ 'GAE' => 'gae',
34
+ 'GCS' => 'gcs',
35
+ 'Hackage' => 'hackage',
36
+ 'Heroku' => 'heroku',
37
+ 'Lambda' => 'lambda',
38
+ 'Launchpad' => 'launchpad',
39
+ 'Modulus' => 'modulus',
40
+ 'Nodejitsu' => 'nodejitsu',
41
+ 'NPM' => 'npm',
42
+ 'Openshift' => 'openshift',
43
+ 'OpsWorks' => 'ops_works',
44
+ 'Packagecloud' => 'packagecloud',
45
+ 'Pages' => 'pages',
46
+ 'PuppetForge' => 'puppet_forge',
47
+ 'PyPI' => 'pypi',
48
+ 'Releases' => 'releases',
49
+ 'RubyGems' => 'rubygems',
50
+ 'S3' => 's3',
51
+ 'Scalingo' => 'scalingo',
52
+ 'Script' => 'script',
53
+ 'Surge' => 'surge',
54
+ 'TestFairy' => 'testfairy',
55
+ 'Transifex' => 'transifex',
56
+ }
52
57
 
53
58
  def self.new(context, options)
54
59
  return super if self < Provider
55
60
 
61
+ # when requiring the file corresponding to the provider name
62
+ # given in the options, the general strategy is to normalize
63
+ # the option to lower-case alphanumeric, then
64
+ # use that key to find the file name using the GEM_NAME_OF map.
65
+
56
66
  context.fold("Installing deploy dependencies") do
57
- name = super.option(:provider).to_s.downcase.gsub(/[^a-z0-9]/, '')
58
- raise Error, 'could not find provider %p' % options[:provider] unless name = constants.detect { |c| c.to_s.downcase == name }
59
- provider = const_get(name).new(context, options)
60
- provider.install_deploy_dependencies if provider.respond_to?(:install_deploy_dependencies)
67
+ begin
68
+ opt_lower = super.option(:provider).to_s.downcase
69
+ opt = opt_lower.gsub(/[^a-z0-9]/, '')
70
+ class_name = class_of(opt)
71
+ raise Error, "could not find provider %p" % opt unless class_name
72
+ require "dpl/provider/#{GEM_NAME_OF[class_name]}"
73
+ provider = const_get(class_name).new(context, options)
74
+ rescue NameError, LoadError => e
75
+ if /uninitialized constant DPL::Provider::(?<provider_wanted>\S+)/ =~ e.message
76
+ provider_gem_name = GEM_NAME_OF[provider_wanted]
77
+ elsif %r(cannot load such file -- dpl/provider/(?<provider_file_name>\S+)) =~ e.message
78
+ provider_gem_name = GEM_NAME_OF[class_name]
79
+ else
80
+ # don't know what to do with this error
81
+ raise e
82
+ end
83
+ install_cmd = "gem install dpl-#{provider_gem_name || opt} -v #{ENV['DPL_VERSION'] || DPL::VERSION}"
84
+
85
+ if File.exist?(local_gem = File.join(Dir.pwd, "dpl-#{GEM_NAME_OF[provider_gem_name] || opt_lower}-#{ENV['DPL_VERSION'] || DPL::VERSION}.gem"))
86
+ install_cmd = "gem install #{local_gem}"
87
+ end
88
+
89
+ context.shell(install_cmd)
90
+ Gem.clear_paths
91
+
92
+ require "dpl/provider/#{GEM_NAME_OF[class_name]}"
93
+ provider = const_get(class_name).new(context, options)
94
+ rescue DPL::Error
95
+ if opt_lower
96
+ provider = const_get(opt.capitalize).new(context, options)
97
+ else
98
+ raise Error, 'missing provider'
99
+ end
100
+ end
101
+
102
+ if options[:no_deploy]
103
+ def provider.deploy; end
104
+ else
105
+ provider.install_deploy_dependencies if provider.respond_to? :install_deploy_dependencies
106
+ end
107
+
61
108
  provider
62
109
  end
63
110
  end
@@ -74,17 +121,6 @@ module DPL
74
121
  puts ''
75
122
  end
76
123
 
77
- def self.requires(name, options = {})
78
- version = options[:version] || '> 0'
79
- load = options[:load] || name
80
- gem(name, version)
81
- rescue LoadError
82
- context.shell("gem install %s -v %p --no-ri --no-rdoc #{'--pre' if options[:pre]}" % [name, version], retry: true)
83
- Gem.clear_paths
84
- ensure
85
- require load
86
- end
87
-
88
124
  def self.context
89
125
  self
90
126
  end
@@ -113,6 +149,10 @@ module DPL
113
149
  context.shell("npm install -g #{name}", retry: true) if `which #{command}`.chop.empty?
114
150
  end
115
151
 
152
+ def self.class_of(filename)
153
+ GEM_NAME_OF.keys.detect { |p| p.to_s.downcase == filename }
154
+ end
155
+
116
156
  attr_reader :context, :options
117
157
 
118
158
  def initialize(context, options)
@@ -231,6 +271,9 @@ module DPL
231
271
  options[:default_text_charset].downcase
232
272
  end
233
273
 
274
+ def install_deploy_dependencies
275
+ end
276
+
234
277
  def encoding_for(path)
235
278
  file_cmd_output = `file '#{path}'`
236
279
  case file_cmd_output