crazycode-cap-recipes 0.3.37

Sign up to get free protection for your applications and to get access to all the features.
Files changed (86) hide show
  1. data/LICENSE +20 -0
  2. data/README.textile +586 -0
  3. data/Rakefile +57 -0
  4. data/VERSION.yml +5 -0
  5. data/bin/cap-recipes +4 -0
  6. data/cap-recipes.gemspec +128 -0
  7. data/examples/advanced/deploy.rb +39 -0
  8. data/examples/advanced/deploy/experimental.rb +14 -0
  9. data/examples/advanced/deploy/production.rb +20 -0
  10. data/examples/simple/deploy.rb +36 -0
  11. data/lib/cap_recipes.rb +1 -0
  12. data/lib/cap_recipes/tasks/apache.rb +1 -0
  13. data/lib/cap_recipes/tasks/apache/install.rb +16 -0
  14. data/lib/cap_recipes/tasks/apache/manage.rb +26 -0
  15. data/lib/cap_recipes/tasks/aptitude.rb +1 -0
  16. data/lib/cap_recipes/tasks/aptitude/manage.rb +32 -0
  17. data/lib/cap_recipes/tasks/backgroundrb.rb +1 -0
  18. data/lib/cap_recipes/tasks/backgroundrb/hooks.rb +5 -0
  19. data/lib/cap_recipes/tasks/backgroundrb/manage.rb +64 -0
  20. data/lib/cap_recipes/tasks/bundler.rb +1 -0
  21. data/lib/cap_recipes/tasks/bundler/manage.rb +31 -0
  22. data/lib/cap_recipes/tasks/delayed_job.rb +1 -0
  23. data/lib/cap_recipes/tasks/delayed_job/hooks.rb +5 -0
  24. data/lib/cap_recipes/tasks/delayed_job/manage.rb +34 -0
  25. data/lib/cap_recipes/tasks/ec2/install.rb +32 -0
  26. data/lib/cap_recipes/tasks/ec2/manage.rb +32 -0
  27. data/lib/cap_recipes/tasks/gitosis.rb +1 -0
  28. data/lib/cap_recipes/tasks/gitosis/install.rb +58 -0
  29. data/lib/cap_recipes/tasks/gitosis/manage.rb +3 -0
  30. data/lib/cap_recipes/tasks/hudson.rb +1 -0
  31. data/lib/cap_recipes/tasks/hudson/manage.rb +33 -0
  32. data/lib/cap_recipes/tasks/jetty.rb +1 -0
  33. data/lib/cap_recipes/tasks/jetty/install.rb +33 -0
  34. data/lib/cap_recipes/tasks/jetty/manage.rb +34 -0
  35. data/lib/cap_recipes/tasks/jetty/web.rb +98 -0
  36. data/lib/cap_recipes/tasks/juggernaut.rb +3 -0
  37. data/lib/cap_recipes/tasks/juggernaut/hooks.rb +4 -0
  38. data/lib/cap_recipes/tasks/juggernaut/manage.rb +56 -0
  39. data/lib/cap_recipes/tasks/maven.rb +85 -0
  40. data/lib/cap_recipes/tasks/memcache.rb +3 -0
  41. data/lib/cap_recipes/tasks/memcache/hooks.rb +5 -0
  42. data/lib/cap_recipes/tasks/memcache/install.rb +15 -0
  43. data/lib/cap_recipes/tasks/memcache/manage.rb +37 -0
  44. data/lib/cap_recipes/tasks/mongodb.rb +1 -0
  45. data/lib/cap_recipes/tasks/mongodb/install.rb +137 -0
  46. data/lib/cap_recipes/tasks/mongodb/manage.rb +27 -0
  47. data/lib/cap_recipes/tasks/passenger.rb +1 -0
  48. data/lib/cap_recipes/tasks/passenger/install.rb +72 -0
  49. data/lib/cap_recipes/tasks/passenger/manage.rb +23 -0
  50. data/lib/cap_recipes/tasks/rails.rb +1 -0
  51. data/lib/cap_recipes/tasks/rails/hooks.rb +6 -0
  52. data/lib/cap_recipes/tasks/rails/manage.rb +51 -0
  53. data/lib/cap_recipes/tasks/ruby.rb +1 -0
  54. data/lib/cap_recipes/tasks/ruby/install.rb +16 -0
  55. data/lib/cap_recipes/tasks/rubygems.rb +1 -0
  56. data/lib/cap_recipes/tasks/rubygems/install.rb +22 -0
  57. data/lib/cap_recipes/tasks/rubygems/manage.rb +43 -0
  58. data/lib/cap_recipes/tasks/templates/hudson.erb +85 -0
  59. data/lib/cap_recipes/tasks/templates/mongod.conf.erb +89 -0
  60. data/lib/cap_recipes/tasks/templates/mongodb.init.erb +73 -0
  61. data/lib/cap_recipes/tasks/templates/mongodb.repo.erb +4 -0
  62. data/lib/cap_recipes/tasks/templates/mongos.init.erb +69 -0
  63. data/lib/cap_recipes/tasks/templates/tomcat.erb +95 -0
  64. data/lib/cap_recipes/tasks/thinking_sphinx.rb +1 -0
  65. data/lib/cap_recipes/tasks/thinking_sphinx/hooks.rb +4 -0
  66. data/lib/cap_recipes/tasks/thinking_sphinx/install.rb +17 -0
  67. data/lib/cap_recipes/tasks/thinking_sphinx/manage.rb +65 -0
  68. data/lib/cap_recipes/tasks/tomcat.rb +1 -0
  69. data/lib/cap_recipes/tasks/tomcat/install.rb +43 -0
  70. data/lib/cap_recipes/tasks/tomcat/manage.rb +34 -0
  71. data/lib/cap_recipes/tasks/tomcat/war.rb +98 -0
  72. data/lib/cap_recipes/tasks/utilities.rb +172 -0
  73. data/lib/cap_recipes/tasks/whenever.rb +1 -0
  74. data/lib/cap_recipes/tasks/whenever/hooks.rb +5 -0
  75. data/lib/cap_recipes/tasks/whenever/manage.rb +8 -0
  76. data/lib/cap_recipes/tasks/yum.rb +1 -0
  77. data/lib/cap_recipes/tasks/yum/manage.rb +30 -0
  78. data/lib/capify.rb +35 -0
  79. data/lib/templates/Capfile.tt +4 -0
  80. data/lib/templates/deploy.rb.tt +30 -0
  81. data/spec/cap/all/Capfile +2 -0
  82. data/spec/cap/helper.rb +3 -0
  83. data/spec/cap_recipes_spec.rb +56 -0
  84. data/spec/spec_helper.rb +37 -0
  85. data/specs.watchr +35 -0
  86. metadata +155 -0
@@ -0,0 +1 @@
1
+ Dir[File.join(File.dirname(__FILE__), 'whenever/*.rb')].sort.each { |lib| require lib }
@@ -0,0 +1,5 @@
1
+ Capistrano::Configuration.instance(true).load do
2
+
3
+ after "deploy:symlink", "whenever:update_crontab" # update crontab after symlink
4
+
5
+ end
@@ -0,0 +1,8 @@
1
+ Capistrano::Configuration.instance(true).load do
2
+ namespace :whenever do
3
+ desc "Update the crontab file"
4
+ task :update_crontab, :roles => :db do
5
+ run "cd #{release_path} && whenever --update-crontab #{application}"
6
+ end
7
+ end
8
+ end
@@ -0,0 +1 @@
1
+ Dir[File.join(File.dirname(__FILE__), 'yum/*.rb')].sort.each { |lib| require lib }
@@ -0,0 +1,30 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../utilities')
2
+
3
+ Capistrano::Configuration.instance(true).load do
4
+ namespace :yum do
5
+ desc "Updates all installed packages on yum package system"
6
+ task :updates do
7
+ utilities.yum_update
8
+ end
9
+
10
+ desc "Installs a specified yum package"
11
+ task :install do
12
+ yum_pkg_name = utilities.ask "Enter name of the package(s) you wish to install:"
13
+ raise "Please specify yum_pkg_name" if yum_pkg_name == ''
14
+ logger.info "Updating packages..."
15
+ sudo "yum update"
16
+ logger.info "Installing #{yum_pkg_name}..."
17
+ utilities.yum_install yum_pkg_name
18
+ end
19
+
20
+ desc "Removes a specified yum package"
21
+ task :remove do
22
+ yum_pkg_name = utilities.ask "Enter name of the package(s) you wish to remove:"
23
+ raise "Please specify yum_pkg_name" if yum_pkg_name == ''
24
+ logger.info "Updating packages..."
25
+ sudo "yum update"
26
+ logger.info "Removing #{yum_pkg_name}..."
27
+ utilities.sudo_with_input "yum erase -y #{yum_pkg_name}", /^Do you want to continue\?/
28
+ end
29
+ end
30
+ end
data/lib/capify.rb ADDED
@@ -0,0 +1,35 @@
1
+ require 'rubygems'
2
+ require 'thor/group'
3
+ # require File.dirname(__FILE__) + "/../lib/templates"
4
+
5
+ class CapRecipes < Thor::Group
6
+ include Thor::Actions
7
+
8
+ def self.source_root; File.expand_path(File.dirname(__FILE__)); end
9
+ def self.banner; "cap-recipes [path] task task2 task3"; end
10
+
11
+ desc "Description: Generate deploy.rb file with desired tasks!"
12
+
13
+ argument :path, :desc => "path to capify", :type => :string, :default => '.'
14
+ argument :requires, :desc => "list of tasks to require", :type => :array, :default => []
15
+ class_option :list, :desc => "list all recipes", :aliases => '-l', :type => :boolean, :default => false
16
+
17
+ def capify
18
+ unless options[:list]
19
+ capfile_temp = "templates/Capfile.tt"
20
+ deploy_temp = "templates/deploy.rb.tt"
21
+ @recipes = requires.collect { |task| "require 'cap_recipes/tasks/#{task}'" }.join("\n")
22
+ template capfile_temp, File.join(path,'/Capfile')
23
+ template deploy_temp, File.join(path,'/config/deploy.rb')
24
+ else
25
+ folders = Dir.glob( File.dirname(__FILE__) + "/../lib/cap_recipes/tasks/*.rb").inject({}) do |packages,file|
26
+ desc = IO.readlines(file).first
27
+ packages[File.basename(file, ".rb")] = ((desc =~ /#/) ? desc : "No description")
28
+ packages
29
+ end
30
+ puts "Available Recipes:\n"
31
+ puts folders.collect { |folder,desc| "\t* #{folder} - #{desc}"}.join("\n")
32
+ end
33
+ end
34
+
35
+ end
@@ -0,0 +1,4 @@
1
+ load 'deploy' if respond_to?(:namespace) # cap2 differentiator
2
+ Dir['vendor/plugins/*/recipes/*.rb'].each { |plugin| load(plugin) }
3
+
4
+ load 'config/deploy' # remove this line to skip loading any of the default tasks
@@ -0,0 +1,30 @@
1
+ # =============================================================================
2
+ # GENERAL SETTINGS
3
+ # =============================================================================
4
+
5
+ role :web, "demo.app.com"
6
+ role :app, "demo.app.com"
7
+ role :db, "demo.app.com", :primary => true
8
+
9
+ set :application, "demo"
10
+ set :deploy_to, "/var/apps/#{application}"
11
+ set :deploy_via, :remote_cache
12
+ set :scm, :git
13
+ set :repository, "deploy@dev.demo.com:/home/demo.git"
14
+ set :git_enable_submodules, 1
15
+ set :keep_releases, 3
16
+ set :user, "deploy"
17
+ set :runner, "deploy"
18
+ set :password, "demo567"
19
+ set :use_sudo, true
20
+ set :branch, "master"
21
+
22
+ ssh_options[:paranoid] = false
23
+ default_run_options[:pty] = true
24
+
25
+ # =============================================================================
26
+ # RECIPE INCLUDES
27
+ # =============================================================================
28
+
29
+ require 'rubygems'
30
+ <%= @recipes %>
@@ -0,0 +1,2 @@
1
+ require File.join(File.dirname(__FILE__),'..','helper')
2
+ require 'cap_recipes'
@@ -0,0 +1,3 @@
1
+ $LOAD_PATH << File.join(File.dirname(__FILE__),'..','..','lib')
2
+ $LOAD_PATH << File.join(File.dirname(__FILE__),'..','..','bin')
3
+ def current_path;end
@@ -0,0 +1,56 @@
1
+ require File.expand_path("spec_helper", File.dirname(__FILE__))
2
+ require File.dirname(__FILE__) + '/../lib/capify'
3
+
4
+ describe 'loading everything' do
5
+ def run_cap(folder,task)
6
+ folder = File.join(File.dirname(__FILE__),'cap',folder)
7
+ `cd #{folder} && #{task}`
8
+ end
9
+
10
+ it "finds all tasks" do
11
+ tasks = run_cap 'all', 'cap -T'
12
+ tasks.split("\n").size.should >= 20
13
+ end
14
+ end
15
+
16
+ describe "cap-recipes command" do
17
+
18
+ before(:all) do
19
+ @test_path = 'test/'
20
+ @cap_recipes = CapRecipes.dup
21
+ @cap_file = File.join @test_path, 'Capfile'
22
+ @deploy_file = File.join @test_path, 'config/deploy.rb'
23
+ end
24
+
25
+ after(:each) do
26
+ `rm -rf #{@test_path}`
27
+ end
28
+
29
+ it "should show the description on --help" do
30
+ capture(:stdout) { @cap_recipes.start(['--help']) }.should match(/Usage/)
31
+ end
32
+
33
+ it "should show the list of recipes" do
34
+ capture(:stdout) { @cap_recipes.start(['--list']) }.should match(/Available Recipes/)
35
+ end
36
+
37
+ it "should generate Capfile and config/deploy.rb" do
38
+ capture(:stdout) { @cap_recipes.start([@test_path]) }.should match(/create/)
39
+ File.exists?(@cap_file).should be_true
40
+ File.exists?(@deploy_file).should be_true
41
+ end
42
+
43
+ it "should generate deploy.rb with apache" do
44
+ capture(:stdout) { @cap_recipes.start([@test_path,'apache']) }.should match(/create/)
45
+ File.open(@deploy_file).read.should match(/require \'cap_recipes\/tasks\/apache\'/)
46
+ end
47
+
48
+ it "should generate deploy.rb with passenger and gitosis" do
49
+ capture(:stdout) { @cap_recipes.start([@test_path,"passenger","gitosis"]) }.should match(/create/)
50
+ response = File.open(@deploy_file).read
51
+ response.should match(/require \'cap_recipes\/tasks\/passenger\'/)
52
+ response.should match(/require \'cap_recipes\/tasks\/gitosis\'/)
53
+ end
54
+
55
+
56
+ end
@@ -0,0 +1,37 @@
1
+ # ---- requirements
2
+ require 'rubygems'
3
+ require 'spec'
4
+ require 'redgreen'
5
+
6
+ $LOAD_PATH << File.expand_path("../lib", File.dirname(__FILE__))
7
+ $LOAD_PATH << File.join(File.dirname(__FILE__),'..','..','bin')
8
+ # ---- bugfix
9
+ #`exit?': undefined method `run?' for Test::Unit:Module (NoMethodError)
10
+ #can be solved with require test/unit but this will result in extra test-output
11
+ module Test
12
+ module Unit
13
+ def self.run?
14
+ true
15
+ end
16
+ end
17
+ end
18
+
19
+ Spec::Runner.configure do |config|
20
+ config.mock_with :rr
21
+
22
+ def capture(stream)
23
+ begin
24
+ stream = stream.to_s
25
+ eval "$#{stream} = StringIO.new"
26
+ yield
27
+ result = eval("$#{stream}").string
28
+ ensure
29
+ eval("$#{stream} = #{stream.upcase}")
30
+ end
31
+
32
+ result
33
+ end
34
+
35
+ def fake; end
36
+
37
+ end
data/specs.watchr ADDED
@@ -0,0 +1,35 @@
1
+ # Run me with:
2
+ #
3
+ # $ watchr specs.watchr
4
+
5
+ # --------------------------------------------------
6
+ # Helpers
7
+ # --------------------------------------------------
8
+ def run(cmd)
9
+ puts(cmd)
10
+ system(cmd)
11
+ end
12
+
13
+ def run_all_tests
14
+ # see Rakefile for the definition of the test:all task
15
+ system( "rake spec VERBOSE=true" )
16
+ end
17
+
18
+ # --------------------------------------------------
19
+ # Watchr Rules
20
+ # --------------------------------------------------
21
+ watch("^lib/(.*)\.rb") { |m| run("spec spec/cap_recipes_spec.rb -c") }
22
+ watch("spec.*/spec_helper\.rb") { run_all_tests }
23
+ watch('^spec.*/(.*)_spec\.rb') { |m| run("spec spec/#{m[1]}_spec.rb -c")}
24
+
25
+ # --------------------------------------------------
26
+ # Signal Handling
27
+ # --------------------------------------------------
28
+ # Ctrl-\
29
+ Signal.trap('QUIT') do
30
+ puts " --- Running all tests ---\n\n"
31
+ run_all_tests
32
+ end
33
+
34
+ # Ctrl-C
35
+ Signal.trap('INT') { abort("\n") }
metadata ADDED
@@ -0,0 +1,155 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: crazycode-cap-recipes
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 3
8
+ - 37
9
+ version: 0.3.37
10
+ platform: ruby
11
+ authors:
12
+ - crazycode
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2011-04-22 00:00:00 +08:00
18
+ default_executable: cap-recipes
19
+ dependencies: []
20
+
21
+ description: Battle-tested capistrano recipes for debian, passenger, apache, hudson, delayed_job, juggernaut, rubygems, backgroundrb, rails and more
22
+ email: crazycode@gmail.com
23
+ executables:
24
+ - cap-recipes
25
+ extensions: []
26
+
27
+ extra_rdoc_files:
28
+ - LICENSE
29
+ - README.textile
30
+ files:
31
+ - LICENSE
32
+ - README.textile
33
+ - Rakefile
34
+ - VERSION.yml
35
+ - bin/cap-recipes
36
+ - cap-recipes.gemspec
37
+ - examples/advanced/deploy.rb
38
+ - examples/advanced/deploy/experimental.rb
39
+ - examples/advanced/deploy/production.rb
40
+ - examples/simple/deploy.rb
41
+ - lib/cap_recipes.rb
42
+ - lib/cap_recipes/tasks/apache.rb
43
+ - lib/cap_recipes/tasks/apache/install.rb
44
+ - lib/cap_recipes/tasks/apache/manage.rb
45
+ - lib/cap_recipes/tasks/aptitude.rb
46
+ - lib/cap_recipes/tasks/aptitude/manage.rb
47
+ - lib/cap_recipes/tasks/backgroundrb.rb
48
+ - lib/cap_recipes/tasks/backgroundrb/hooks.rb
49
+ - lib/cap_recipes/tasks/backgroundrb/manage.rb
50
+ - lib/cap_recipes/tasks/bundler.rb
51
+ - lib/cap_recipes/tasks/bundler/manage.rb
52
+ - lib/cap_recipes/tasks/delayed_job.rb
53
+ - lib/cap_recipes/tasks/delayed_job/hooks.rb
54
+ - lib/cap_recipes/tasks/delayed_job/manage.rb
55
+ - lib/cap_recipes/tasks/ec2/install.rb
56
+ - lib/cap_recipes/tasks/ec2/manage.rb
57
+ - lib/cap_recipes/tasks/gitosis.rb
58
+ - lib/cap_recipes/tasks/gitosis/install.rb
59
+ - lib/cap_recipes/tasks/gitosis/manage.rb
60
+ - lib/cap_recipes/tasks/hudson.rb
61
+ - lib/cap_recipes/tasks/hudson/manage.rb
62
+ - lib/cap_recipes/tasks/jetty.rb
63
+ - lib/cap_recipes/tasks/jetty/install.rb
64
+ - lib/cap_recipes/tasks/jetty/manage.rb
65
+ - lib/cap_recipes/tasks/jetty/web.rb
66
+ - lib/cap_recipes/tasks/juggernaut.rb
67
+ - lib/cap_recipes/tasks/juggernaut/hooks.rb
68
+ - lib/cap_recipes/tasks/juggernaut/manage.rb
69
+ - lib/cap_recipes/tasks/maven.rb
70
+ - lib/cap_recipes/tasks/memcache.rb
71
+ - lib/cap_recipes/tasks/memcache/hooks.rb
72
+ - lib/cap_recipes/tasks/memcache/install.rb
73
+ - lib/cap_recipes/tasks/memcache/manage.rb
74
+ - lib/cap_recipes/tasks/mongodb.rb
75
+ - lib/cap_recipes/tasks/mongodb/install.rb
76
+ - lib/cap_recipes/tasks/mongodb/manage.rb
77
+ - lib/cap_recipes/tasks/passenger.rb
78
+ - lib/cap_recipes/tasks/passenger/install.rb
79
+ - lib/cap_recipes/tasks/passenger/manage.rb
80
+ - lib/cap_recipes/tasks/rails.rb
81
+ - lib/cap_recipes/tasks/rails/hooks.rb
82
+ - lib/cap_recipes/tasks/rails/manage.rb
83
+ - lib/cap_recipes/tasks/ruby.rb
84
+ - lib/cap_recipes/tasks/ruby/install.rb
85
+ - lib/cap_recipes/tasks/rubygems.rb
86
+ - lib/cap_recipes/tasks/rubygems/install.rb
87
+ - lib/cap_recipes/tasks/rubygems/manage.rb
88
+ - lib/cap_recipes/tasks/templates/hudson.erb
89
+ - lib/cap_recipes/tasks/templates/mongod.conf.erb
90
+ - lib/cap_recipes/tasks/templates/mongodb.init.erb
91
+ - lib/cap_recipes/tasks/templates/mongodb.repo.erb
92
+ - lib/cap_recipes/tasks/templates/mongos.init.erb
93
+ - lib/cap_recipes/tasks/templates/tomcat.erb
94
+ - lib/cap_recipes/tasks/thinking_sphinx.rb
95
+ - lib/cap_recipes/tasks/thinking_sphinx/hooks.rb
96
+ - lib/cap_recipes/tasks/thinking_sphinx/install.rb
97
+ - lib/cap_recipes/tasks/thinking_sphinx/manage.rb
98
+ - lib/cap_recipes/tasks/tomcat.rb
99
+ - lib/cap_recipes/tasks/tomcat/install.rb
100
+ - lib/cap_recipes/tasks/tomcat/manage.rb
101
+ - lib/cap_recipes/tasks/tomcat/war.rb
102
+ - lib/cap_recipes/tasks/utilities.rb
103
+ - lib/cap_recipes/tasks/whenever.rb
104
+ - lib/cap_recipes/tasks/whenever/hooks.rb
105
+ - lib/cap_recipes/tasks/whenever/manage.rb
106
+ - lib/cap_recipes/tasks/yum.rb
107
+ - lib/cap_recipes/tasks/yum/manage.rb
108
+ - lib/capify.rb
109
+ - lib/templates/Capfile.tt
110
+ - lib/templates/deploy.rb.tt
111
+ - spec/cap/all/Capfile
112
+ - spec/cap/helper.rb
113
+ - spec/cap_recipes_spec.rb
114
+ - spec/spec_helper.rb
115
+ - specs.watchr
116
+ has_rdoc: true
117
+ homepage: http://github.com/crazycode/cap-recipes
118
+ licenses: []
119
+
120
+ post_install_message:
121
+ rdoc_options: []
122
+
123
+ require_paths:
124
+ - lib
125
+ required_ruby_version: !ruby/object:Gem::Requirement
126
+ none: false
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ segments:
131
+ - 0
132
+ version: "0"
133
+ required_rubygems_version: !ruby/object:Gem::Requirement
134
+ none: false
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ segments:
139
+ - 0
140
+ version: "0"
141
+ requirements: []
142
+
143
+ rubyforge_project: crazycode-cap-recipes
144
+ rubygems_version: 1.3.7
145
+ signing_key:
146
+ specification_version: 3
147
+ summary: Battle-tested capistrano recipes for passenger, delayed_job, and more
148
+ test_files:
149
+ - examples/advanced/deploy.rb
150
+ - examples/advanced/deploy/experimental.rb
151
+ - examples/advanced/deploy/production.rb
152
+ - examples/simple/deploy.rb
153
+ - spec/cap/helper.rb
154
+ - spec/cap_recipes_spec.rb
155
+ - spec/spec_helper.rb