railshoster 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/.travis.yml ADDED
@@ -0,0 +1,6 @@
1
+ gemfile: gemfiles/Gemfile.ci
2
+ rvm:
3
+ - 1.8.7 # (current default)
4
+ - 1.9.2
5
+ - 1.9.3
6
+ - ree
data/CHANGELOG.markdown CHANGED
@@ -11,3 +11,10 @@ h2. 0.0.2
11
11
 
12
12
  * deploy.rb now creates a symlink to database.yml with -f (force) and overwrites an eventually existing database.yml from the customer's repository.
13
13
 
14
+ h3. 0.0.3
15
+
16
+ * Added travis testing meta data.
17
+ * Added RSpec tests for basic functionality.
18
+ * Fixed a Ruby 1.9.x issue.
19
+ * Enhanced error messages for invalid application tokens.
20
+ * Initial README.
data/README.markdown CHANGED
@@ -1,11 +1,41 @@
1
1
  h1. RailsHoster Deployment Suite
2
2
 
3
- INTRDUCTON TEXT. TO BE DONE.
3
+ The RailsHoster Deployment gem helps you to easily get your Rails app runing at RailsHoster.com. Check it out.
4
+
5
+ h2. Travis Status of the current dev branch
6
+
7
+ [![Build Status](https://secure.travis-ci.org/[railshoster]/[railshoster].png)](http://travis-ci.org/[railshoster]/[railshoster])
8
+
9
+ h2. Requirements
10
+
11
+ This is what you need on your client to run the RailsHoster gem to deploy your app:
12
+
13
+ * Ruby
14
+ * Ruby gems
15
+ * Shell (e.g. Bash)
16
+ * SSH Shell
17
+ * Git
4
18
 
5
19
  h2. Installation
6
20
 
7
- TO BE DONE.
21
+ gem install railshoster
8
22
 
9
23
  h2. Usage
24
+
25
+ Simply go to your project's git folder and invoke the following command to initialize your app and *make it deployment ready*.
26
+
27
+ railshoster init -a 'your application token' .
28
+
29
+ Regarding to your *application token* please refer to your account information you have received after signing up at [RailsHoster.com](http://www.railshoster.com/).
30
+
31
+ You can then either use *capistrano* to deploy or invoke
32
+
33
+ railshoster deploy
34
+
35
+ It's as easy as this. Refer to the RailsHoster.com Support if any problems raise. We are happy to help you.
36
+
37
+ h2. Debug
38
+
39
+ In order to receive full stack traces when exceptions occure just pass a environment variable like this
10
40
 
11
- TO BE DONE.
41
+ RAILSHOSTER_DEV=1 railshoster
data/ROADMAP.markdown CHANGED
@@ -11,4 +11,5 @@ h2. 2.0.0
11
11
 
12
12
  h3. General TODOs
13
13
 
14
- * Railshoster::InitCommand - Check wether it is possible to replace "system" call with a pure ruby version possibly by using the capistrano gem directly via ruby.
14
+ * Railshoster::InitCommand - Check wether it is possible to replace "system" call with a pure ruby version possibly by using the capistrano gem directly via ruby.
15
+ * Test bin/railshoster
data/Rakefile CHANGED
@@ -1 +1,6 @@
1
1
  require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
data/bin/railshoster CHANGED
@@ -7,10 +7,10 @@ gem "json"
7
7
  gem "git"
8
8
  gem 'erubis'
9
9
  gem "gli"
10
-
11
- require File.join(File.dirname(__FILE__), '..', 'lib', 'railshoster')
12
10
  require 'fileutils'
13
11
 
12
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib', 'railshoster'))
13
+
14
14
  require 'gli'
15
15
  include GLI
16
16
 
@@ -26,14 +26,15 @@ command [:init] do |c|
26
26
  c.desc "Use the RailsHoster application_token pass your account credentials."
27
27
  c.flag [:a, :apptoken]
28
28
 
29
- c.action do |global_options,options,args|
30
-
31
- raise "Argument 'dir_name' is required for the 'init' command." if args.empty?
32
- raise "Option '-a' or '--apptoken' is require for the 'init' comannd" unless options[:a]
33
-
34
- project_git_dir_name = args[0]
29
+ c.action do |global_options,options,args|
30
+
31
+ raise "Option '-a' or '--apptoken' is require for the 'init' command. How else should I know where you want to deploy to?" unless options[:a]
32
+
33
+ cwd = FileUtils.pwd
34
+ ask_for_project_dir(cwd) if args.empty?
35
+ project_git_dir_name = args[0] || cwd
35
36
 
36
- init_command = RailsHoster::InitCommand.new(project_git_dir_name)
37
+ init_command = Railshoster::InitCommand.new(project_git_dir_name)
37
38
  init_command.run_by_application_token(options[:a])
38
39
  end
39
40
  end
@@ -44,7 +45,7 @@ long_desc "Use this command to deploy your application to RailsHoster.com after
44
45
  command [:deploy] do |c|
45
46
  c.action do |global_options,options,args|
46
47
  project_git_dir_name = args[0] || FileUtils.pwd
47
- RailsHoster::DeployCommand.new(project_git_dir_name).deploy
48
+ Railshoster::DeployCommand.new(project_git_dir_name).deploy
48
49
  end
49
50
  end
50
51
 
@@ -59,7 +60,18 @@ post do |global,command,options,args|
59
60
  # Post logic here
60
61
  end
61
62
 
62
- on_error do |exception|
63
+ # Invoke the app like this RAILSHOSTER_DEV=1 ~/git/railshoster/bin/railshoster
64
+ # in order to receive a full stack trace in case of errors.
65
+ on_error do |exception|
66
+ ret = true
67
+ ret = print_error(exception) if ENV["RAILSHOSTER_DEV"]
68
+ ret
69
+ end
70
+
71
+ #### Helper methods
72
+
73
+ def print_error(exception)
74
+
63
75
  puts "\n"
64
76
  puts "-" * 50
65
77
  puts "Sorry. An Exception has occured. Don't worry I try to explain what happened:"
@@ -73,10 +85,17 @@ on_error do |exception|
73
85
  puts "-" * 50
74
86
  puts "If this does not help write to support@railshoster.com."
75
87
  puts "Please provide the command you invoked, in which directory as well as information about your runtime environment (Ruby Version, OS, ...)."
76
-
77
- # Error logic here
78
- # return false to skip default error handling
79
88
  false
80
89
  end
81
90
 
91
+ def ask_for_project_dir(current_working_dir)
92
+ puts "You have not specified your local project folder to be deployed.\n" +
93
+ "I assume you want to use your current working directory: #{current_working_dir}.\n"
94
+ print "Correct? (y/n) [n]: "
95
+ decision = STDIN.getc
96
+ if decision !~ /y/i then
97
+ exit_now!("Initialization aborted.", -1)
98
+ end
99
+ end
100
+
82
101
  exit GLI.run(ARGV)
@@ -0,0 +1,14 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gem "rake"
4
+ gem "capistrano"
5
+ gem "capistrano-ext"
6
+ gem "gli", ">= 1.2.5"
7
+ gem "json"
8
+ gem "git"
9
+ gem 'erubis'
10
+
11
+ group :test do
12
+ gem 'rspec'
13
+ gem 'fakefs'
14
+ end
@@ -0,0 +1,5 @@
1
+ module Railshoster
2
+ class BadApplicationJSONHashError < ArgumentError
3
+ include Railshoster::Error
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ module Railshoster
2
+ class BadApplicationTokenError < ArgumentError
3
+ include Railshoster::Error
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ module Railshoster
2
+ class CapifyProjectFailedError < StandardError
3
+ include Railshoster::Error
4
+ end
5
+ end
@@ -1,4 +1,4 @@
1
- module RailsHoster
1
+ module Railshoster
2
2
 
3
3
  # This action class helps to setup a new rails applicaton
4
4
  class Command
@@ -1,4 +1,4 @@
1
- module RailsHoster
1
+ module Railshoster
2
2
 
3
3
  # This action class helps to setup a new rails applicaton
4
4
  class DeployCommand < Command
@@ -0,0 +1,7 @@
1
+ module Railshoster
2
+
3
+ # This module will be included in all custom railshoster error classes.
4
+ # Using a module we don't enforce a certain superclass.
5
+ module Error
6
+ end
7
+ end
@@ -3,9 +3,9 @@ require 'json'
3
3
  require 'git'
4
4
  require 'fileutils'
5
5
 
6
- require File.join(File.dirname(__FILE__), '/capistrano/h')
6
+ require File.expand_path(File.join(File.dirname(__FILE__), '/capistrano/h'))
7
7
 
8
- module RailsHoster
8
+ module Railshoster
9
9
 
10
10
  # This action class helps to setup a new rails applicaton
11
11
  class InitCommand < Command
@@ -16,7 +16,16 @@ module RailsHoster
16
16
 
17
17
  def run_by_application_token(application_token)
18
18
  decoded_token = decode_token(application_token)
19
- run_by_application_hash(decoded_token)
19
+
20
+ begin
21
+ run_by_application_hash(decoded_token)
22
+ rescue BadApplicationJSONHashError => e
23
+ msg = "Please verify your application_token. It did not decode to a valid application hash.\n" +
24
+ "This is how your application token looked like:\n\n#{application_token.inspect}\n\n" +
25
+ "Please compare your application token char by char with your account information mail and try again!\n" +
26
+ "Here is what the application hash parser said:\n\n"
27
+ raise BadApplicationTokenError.new(msg + e.message)
28
+ end
20
29
  end
21
30
 
22
31
  def run_by_application_hash(application_hash_as_json_string)
@@ -47,18 +56,23 @@ module RailsHoster
47
56
 
48
57
  # Decodoes token to get the JSON hash back.
49
58
  # gQkUSMakKRPhm0EIaer => {"key":"value"}
50
- def decode_token(token)
59
+ def decode_token(token)
51
60
  Base64.decode64(token)
52
61
  end
53
62
 
54
63
  def parse_application_json_hash(app_hash_as_json_string)
55
- ruby_app_hash = ::JSON.parse(app_hash_as_json_string)
64
+ begin
65
+ ruby_app_hash = ::JSON.parse(app_hash_as_json_string)
66
+ rescue JSON::ParserError => e
67
+ msg = "The application hash you have passed is malformed. It could not be parsed as regular JSON. It looked like this:\n\n #{app_hash_as_json_string.inspect}\n"
68
+ raise BadApplicationJSONHashError.new(msg + "\nHere is what the JSON parse said:\n\n" + e.message)
69
+ end
56
70
  end
57
71
 
58
72
  def get_git_remote_url_from_git_config
59
73
 
60
74
  #TODO Error management: what if there is not remote url (local repo)?
61
- @git.config('remote.origin.url')
75
+ @git.config['remote.origin.url']
62
76
  end
63
77
 
64
78
  def write_deploy_rb(deployrb_str)
@@ -66,26 +80,12 @@ module RailsHoster
66
80
  FileUtils.mkdir_p(deployrb_basepath)
67
81
 
68
82
  deployrb_path = File.join(deployrb_basepath, "deploy.rb")
69
- backup_file(deployrb_path) if File.exists?(deployrb_path)
83
+ Railshoster::Utilities.backup_file(deployrb_path) if File.exists?(deployrb_path)
70
84
 
71
85
  File.open(deployrb_path, "w+") do |f|
72
86
  f << deployrb_str
73
87
  end
74
- end
75
-
76
- # Creates a backup of a file.
77
- # If there is already a backup
78
- #TODO Test
79
- def backup_file(path)
80
- backup_path = path + ".bak"
81
-
82
- if File.exists?(backup_path) then
83
- # There is already a backup, so we need to backup the backup first.
84
- backup_file(backup_path)
85
- end
86
-
87
- FileUtils.cp(path, backup_path)
88
- end
88
+ end
89
89
 
90
90
  def capify_project
91
91
  puts "\n\tWarning: You are initializing a project with an existing Capfile.\n" if capfile_exists?
@@ -99,13 +99,4 @@ module RailsHoster
99
99
  puts "Alternatively, you can use capistrano commands such as 'cap deploy' and 'cap shell'."
100
100
  end
101
101
  end
102
-
103
- class PossiblyNotAGitRepoError < ArgumentError
104
- end
105
-
106
- class UnsupportedApplicationTypeError < StandardError
107
- end
108
-
109
- class CapifyProjectFailedError < StandardError
110
- end
111
102
  end
@@ -0,0 +1,5 @@
1
+ module Railshoster
2
+ class PossiblyNotAGitRepoError < ArgumentError
3
+ include Railshoster::Error
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ module Railshoster
2
+ class UnsupportedApplicationTypeError < StandardError
3
+ include Railshoster::Error
4
+ end
5
+ end
@@ -0,0 +1,25 @@
1
+ require 'fileutils'
2
+
3
+ module Railshoster
4
+ class Utilities
5
+
6
+ # Creates a backup of a file.
7
+ # Since this is a recursive method you'll never loose a file. it also creates backups of backups of ...
8
+ # == Examples
9
+ # myfile -> myfile.bak
10
+ # if there is already a myfile.bak:
11
+ # myfile.bak -> myfile.bak.bak
12
+ # myfile -> myfile.bak
13
+ # ...
14
+ def self.backup_file(path)
15
+ backup_path = path + ".bak"
16
+
17
+ if File.exists?(backup_path) then
18
+ # There is already a backup, so we need to backup the backup first.
19
+ backup_file(backup_path)
20
+ end
21
+
22
+ FileUtils.cp(path, backup_path)
23
+ end
24
+ end
25
+ end
@@ -1,3 +1,3 @@
1
1
  module Railshoster
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
data/lib/railshoster.rb CHANGED
@@ -1,8 +1,14 @@
1
1
  require File.join(File.dirname(__FILE__), 'railshoster/version')
2
+ require File.join(File.dirname(__FILE__), 'railshoster/error')
3
+ require File.join(File.dirname(__FILE__), 'railshoster/utilities')
2
4
  require File.join(File.dirname(__FILE__), 'railshoster/command')
5
+ require File.join(File.dirname(__FILE__), 'railshoster/possibly_not_a_git_repo_error')
6
+ require File.join(File.dirname(__FILE__), 'railshoster/unsupported_application_type_error')
7
+ require File.join(File.dirname(__FILE__), 'railshoster/capify_project_failed_error')
8
+ require File.join(File.dirname(__FILE__), 'railshoster/bad_application_json_hash_error')
9
+ require File.join(File.dirname(__FILE__), 'railshoster/bad_appliction_token_error')
3
10
  require File.join(File.dirname(__FILE__), 'railshoster/init_command')
4
11
  require File.join(File.dirname(__FILE__), 'railshoster/deploy_command')
5
12
 
6
13
  module Railshoster
7
- # Your code goes here...
8
14
  end
data/railshoster.gemspec CHANGED
@@ -24,4 +24,7 @@ Gem::Specification.new do |s|
24
24
  s.add_dependency "json"
25
25
  s.add_dependency "git"
26
26
  s.add_dependency 'erubis'
27
+
28
+ s.add_development_dependency('rspec')
29
+ s.add_development_dependency('fakefs')
27
30
  end
@@ -0,0 +1,19 @@
1
+ require File.join(File.dirname(__FILE__), "..", "..", "spec_helper.rb")
2
+
3
+ describe Railshoster::Command do
4
+ describe "#Basics" do
5
+ it "should instanciate a Command instance also initializing the project git repo" do
6
+
7
+ # We use the gem's dir as this should be a valid git repo
8
+ git_dir = File.join(File.dirname(__FILE__), "..", "..", "..")
9
+ expect { c = Railshoster::Command.new(git_dir) }.to_not raise_error(Railshoster::PossiblyNotAGitRepoError)
10
+ end
11
+
12
+ it "should fail to instanciate a Command for a non-git project dir" do
13
+
14
+ # The spec folder is part of a but not a git repo
15
+ non_git_dir = File.dirname(__FILE__)
16
+ expect { c = Railshoster::Command.new(non_git_dir) }.to raise_error(Railshoster::PossiblyNotAGitRepoError)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,49 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "spec_helper.rb"))
2
+
3
+ describe Railshoster::InitCommand do
4
+
5
+ before do
6
+ # We use the gem's dir as this should be a valid git repo
7
+ git_dir = File.join(File.dirname(__FILE__), "..", "..", "..")
8
+ @init = Railshoster::InitCommand.new(git_dir)
9
+ end
10
+
11
+ describe "#Git" do
12
+ it "should read the git repo url" do
13
+ @init.send(:get_git_remote_url_from_git_config).should =~ /railshoster/
14
+ end
15
+
16
+ #TODO
17
+ it "should do sth useful if the given project dir has no remote url" do
18
+ pending("handle this situation in code an spec.")
19
+ end
20
+ end
21
+
22
+ describe "#run_by_application_hash" do
23
+ it "should create a deploy rb and capify the project" do
24
+ pending("use fakefs to test this.")
25
+ end
26
+
27
+ it "should deny to run for a non-git project dir" do
28
+ pending("not git -> no repo url -> no deploy rb -> fail")
29
+ end
30
+
31
+ it "should gracefully die for a git project dir without a remote origin" do
32
+ pending("no remote origin -> no repo url -> no deploy rb -> fail")
33
+ end
34
+
35
+ it "should raise an BadApplicationJSONHashError error for an invalid incoming JSON hash" do
36
+ expect { @init.send(:parse_application_json_hash, "") }.to raise_error(Railshoster::BadApplicationJSONHashError)
37
+ end
38
+ end
39
+
40
+ describe "#run_by_application_token" do
41
+ it "should create a deploy rb and capify the project" do
42
+ pending("use fakefs to test this.")
43
+ end
44
+
45
+ it "should raise an BadApplicationTokenError error for an invalid incoming application token" do
46
+ expect { @init.send(:run_by_application_token, "abab") }.to raise_error(Railshoster::BadApplicationTokenError)
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,49 @@
1
+ require File.join(File.dirname(__FILE__), "..", "..", "spec_helper.rb")
2
+
3
+ describe Railshoster::Utilities do
4
+
5
+ before do
6
+ FakeFS.activate!
7
+ end
8
+
9
+ describe "#Backup" do
10
+ include FakeFS::SpecHelpers
11
+
12
+ it "should create a backup file" do
13
+ File.new("myfile.txt", "w+")
14
+ File.exists?("myfile.txt").should be_true
15
+ expect { Railshoster::Utilities.backup_file("myfile.txt") }.to_not raise_error
16
+ File.exists?("myfile.txt").should be_true
17
+ File.exists?("myfile.txt.bak").should be_true
18
+ end
19
+
20
+ it "should create a backup of a backup file and then backup the file" do
21
+
22
+ # File to be backed up
23
+ File.open("myfile.txt", "w+") do |f|
24
+ f << "1"
25
+ end
26
+
27
+ # We assume there is already an older backup
28
+ File.open("myfile.txt.bak", "w+") do |f|
29
+ f << "2"
30
+ end
31
+ expect { Railshoster::Utilities.backup_file("myfile.txt") }.to_not raise_error
32
+ File.exists?("myfile.txt").should be_true
33
+ File.exists?("myfile.txt.bak").should be_true
34
+ File.exists?("myfile.txt.bak.bak").should be_true
35
+
36
+ File.open("myfile.txt").read.should eql("1")
37
+
38
+ # .bak after backing up is the newest backup
39
+ File.open("myfile.txt.bak").read.should eql("1")
40
+
41
+ # But the old backup is still there - being moved to .bak.bak.
42
+ File.open("myfile.txt.bak.bak").read.should eql("2")
43
+ end
44
+ end
45
+
46
+ after do
47
+ FakeFS.deactivate!
48
+ end
49
+ end
@@ -0,0 +1,15 @@
1
+ require 'rspec'
2
+ require 'fakefs/safe'
3
+ require 'fakefs/spec_helpers'
4
+
5
+ # https://github.com/defunkt/fakefs
6
+ # Turn FakeFS on and off in a given example group
7
+ # describe "my spec" do
8
+ # include FakeFS::SpecHelpers
9
+ # end
10
+
11
+ require File.join(File.dirname(__FILE__), '..', 'lib', 'railshoster')
12
+
13
+ #RSpec.configure do |c|
14
+ # c.mock_with :rspec
15
+ #end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: railshoster
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 25
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 2
10
- version: 0.0.2
9
+ - 3
10
+ version: 0.0.3
11
11
  platform: ruby
12
12
  authors:
13
13
  - Julian Fischer
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-11-04 00:00:00 Z
18
+ date: 2011-11-05 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: capistrano
@@ -103,6 +103,34 @@ dependencies:
103
103
  version: "0"
104
104
  type: :runtime
105
105
  version_requirements: *id006
106
+ - !ruby/object:Gem::Dependency
107
+ name: rspec
108
+ prerelease: false
109
+ requirement: &id007 !ruby/object:Gem::Requirement
110
+ none: false
111
+ requirements:
112
+ - - ">="
113
+ - !ruby/object:Gem::Version
114
+ hash: 3
115
+ segments:
116
+ - 0
117
+ version: "0"
118
+ type: :development
119
+ version_requirements: *id007
120
+ - !ruby/object:Gem::Dependency
121
+ name: fakefs
122
+ prerelease: false
123
+ requirement: &id008 !ruby/object:Gem::Requirement
124
+ none: false
125
+ requirements:
126
+ - - ">="
127
+ - !ruby/object:Gem::Version
128
+ hash: 3
129
+ segments:
130
+ - 0
131
+ version: "0"
132
+ type: :development
133
+ version_requirements: *id008
106
134
  description: Easily deploy your Rails app to RailsHoster.com by using this gem.
107
135
  email:
108
136
  - fischer@enterprise-rails.de
@@ -114,6 +142,7 @@ extra_rdoc_files: []
114
142
 
115
143
  files:
116
144
  - .gitignore
145
+ - .travis.yml
117
146
  - CHANGELOG.markdown
118
147
  - CONTRIB.txt
119
148
  - LICENSE
@@ -121,14 +150,26 @@ files:
121
150
  - ROADMAP.markdown
122
151
  - Rakefile
123
152
  - bin/railshoster
153
+ - gemfiles/Gemfile.ci
124
154
  - lib/railshoster.rb
155
+ - lib/railshoster/bad_application_json_hash_error.rb
156
+ - lib/railshoster/bad_appliction_token_error.rb
157
+ - lib/railshoster/capify_project_failed_error.rb
125
158
  - lib/railshoster/capistrano/h.rb
126
159
  - lib/railshoster/capistrano/v.rb
127
160
  - lib/railshoster/command.rb
128
161
  - lib/railshoster/deploy_command.rb
162
+ - lib/railshoster/error.rb
129
163
  - lib/railshoster/init_command.rb
164
+ - lib/railshoster/possibly_not_a_git_repo_error.rb
165
+ - lib/railshoster/unsupported_application_type_error.rb
166
+ - lib/railshoster/utilities.rb
130
167
  - lib/railshoster/version.rb
131
168
  - railshoster.gemspec
169
+ - spec/lib/railshoster/command_spec.rb
170
+ - spec/lib/railshoster/init_command_spec.rb
171
+ - spec/lib/railshoster/utilities_spec.rb
172
+ - spec/spec_helper.rb
132
173
  - templates/h/deploy.rb.erb
133
174
  homepage: http://www.railshoster.com
134
175
  licenses: []
@@ -163,5 +204,8 @@ rubygems_version: 1.8.6
163
204
  signing_key:
164
205
  specification_version: 3
165
206
  summary: RailsHoster Applicatoin Deployment Suite
166
- test_files: []
167
-
207
+ test_files:
208
+ - spec/lib/railshoster/command_spec.rb
209
+ - spec/lib/railshoster/init_command_spec.rb
210
+ - spec/lib/railshoster/utilities_spec.rb
211
+ - spec/spec_helper.rb