tsrails 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. data/LICENSE +674 -0
  2. data/README.md +137 -0
  3. data/Rakefile +83 -0
  4. data/bin/tsrails +34 -0
  5. data/lib/constants.rb +29 -0
  6. data/lib/create.rb +68 -0
  7. data/lib/errors.rb +12 -0
  8. data/lib/helpers.rb +93 -0
  9. data/template/files/Gem.gemfile +56 -0
  10. data/template/files/Guardfile +36 -0
  11. data/template/files/Termfile +37 -0
  12. data/template/files/_flashes.html.haml +3 -0
  13. data/template/files/_footer.html.haml +8 -0
  14. data/template/files/_javascript.html.haml +1 -0
  15. data/template/files/_sidebar.html.haml +3 -0
  16. data/template/files/_sign_in_out.html.haml +4 -0
  17. data/template/files/apache_config.conf +18 -0
  18. data/template/files/app_config.yml +11 -0
  19. data/template/files/application.html.haml +21 -0
  20. data/template/files/application_helper.rb +6 -0
  21. data/template/files/backtrace_silencers.rb +10 -0
  22. data/template/files/clearance.rb +7 -0
  23. data/template/files/cucumber.yml +8 -0
  24. data/template/files/debug_steps.rb +18 -0
  25. data/template/files/env.rb +58 -0
  26. data/template/files/factory_girl_steps.rb +1 -0
  27. data/template/files/haml_options.rb +3 -0
  28. data/template/files/jquery.rb +12 -0
  29. data/template/files/mailer_macros.rb +11 -0
  30. data/template/files/mongrel_cluster.yml +7 -0
  31. data/template/files/noisy_attr_accessible.rb +5 -0
  32. data/template/files/prefilled_input.js +59 -0
  33. data/template/files/rcov.opts +2 -0
  34. data/template/files/requires.rb +7 -0
  35. data/template/files/spec.opts +4 -0
  36. data/template/files/spec_helper.rb +37 -0
  37. data/template/files/tiny_mce.yml +16 -0
  38. data/template/tsrails_3_2.rb +233 -0
  39. data/tsrails.gemspec +72 -0
  40. metadata +110 -0
data/README.md ADDED
@@ -0,0 +1,137 @@
1
+ **TSRails** is a base Rails project that you can upgrade. It is used by
2
+ [Taylored Software][] as a foundation for their Rails development
3
+ efforts.
4
+
5
+ **TSRails** is based upon the excellent [suspenders][] gem from
6
+ [thoughtbot][], extended and modified to include other setup tasks commonly
7
+ performed in Taylored Software's Rails environment.
8
+
9
+ Using TSRails
10
+ -------------
11
+
12
+ To create a new project first install tsrails:
13
+
14
+ gem install tsrails
15
+
16
+ Then run:
17
+
18
+ tsrails create projectname
19
+
20
+ or:
21
+
22
+ tsrails new projectname
23
+
24
+ This will create a project in `projectname`, and will check it into version
25
+ control (Git) using the settings specified in the configuration file (see
26
+ below.)
27
+
28
+ Configuration
29
+ =============
30
+
31
+ The **TSRails** gem requires several configuration options which define things
32
+ like the staging server, Git username, etc. THese are defined in a
33
+ configuration file, ~/.tsrails.yml, which is automatically generated if it
34
+ is not present.
35
+
36
+ The configuration file should contain the following keys:
37
+
38
+ - **staging_server** - The hostname of the Git/staging Web server
39
+ - **staging_ssh_user** - The ssh user to use for accessing the remote server
40
+ - **remote_git_dir** - The root of the Git directory tree on the remote server
41
+ - **remote_apache_dir** - The root of the Apache directory tree on the remote
42
+ server
43
+ - **test_app_domain** - The domain of the remote server (used for generating
44
+ an Apache/mod_passenger configuration for the test site.
45
+
46
+ As mentioned above, this configuration file is automatically generated if it's
47
+ not present when `tsrails` runs. However, the generated configuration file is
48
+ almost certainly incorrect, so tsrails will abort after generating a new
49
+ configuration file to allow you to edit it.
50
+
51
+ About TSRails
52
+ -------------
53
+
54
+ **TSRails** was created for use at [Taylored Software][] as a baseline application
55
+ setup, with reasonable default plugins that the majority (if not all) of our
56
+ applications used, as well as best-practice configuration options.
57
+
58
+ Although **TSRails** has been packaged as a general-purpose gem, it does (at
59
+ present) make several assumptions that are specific to Taylored Software's
60
+ server configuration and which may not be what you want:
61
+
62
+ - The Git repository and Web server live on the same server
63
+ - The Web site is to be deployed with Apache 2.2/mod_passenger and
64
+ with Ruby Enterprise Edition installed in /opt/ree
65
+
66
+ Included Gems
67
+ -------------
68
+
69
+ TSRails includes the following gems in the generated application along with
70
+ their associated configuration files:
71
+
72
+ - **User Login and Authentication**
73
+ - Clearance
74
+ - **Template and Markup Processing**
75
+ - HAML
76
+ - RedCloth
77
+ - **Form Enhancements**
78
+ - Paperclip
79
+ - tiny_mce
80
+ - flutie
81
+ - formtastic
82
+ - **View Enhancements**
83
+ - WillPaginate
84
+ - **Application Infrastructure**
85
+ - Hpricot
86
+ - exception_notification
87
+ - Nokogiri
88
+ - Ryan Bates's `nifty-generators`
89
+ - **Database Adapters**
90
+ - SQLite3 (development and test environments)
91
+ - MySQL (production environment)
92
+ - **Deployment**
93
+ - Capistrano
94
+ - Heroku
95
+ - Mongrel and mongrel_cluster
96
+
97
+ TSRails also includes the following BDD/testing tools:
98
+
99
+ - factory_girl
100
+ - RSpec
101
+ - Shoulda
102
+ - capybara
103
+ - Timecop
104
+
105
+ Initializers (in config/initializers)
106
+ -------------------------------------
107
+
108
+ - `backtrace_silencers.rb`: Configured to silence backtraces from Shoulda and
109
+ factory_girl
110
+ - `app_config.rb`: Loads application settings from config/app_config.yml
111
+ - `clearance.rb`: Configuration for Clearance
112
+ - `haml_options.rb`: Configures HAML options
113
+ - `jquery.rb`: Substitutes jQuery for Prototype.JS
114
+ - `noisy_attr_accessible.rb`: Logs protected attribute assignments
115
+ - `requires.rb`: Autoloads libraries in `lib/` and `lib/extensions`
116
+
117
+ Version History
118
+ ---------------
119
+
120
+ - 2.0.0 - 2012 Jan 30 - Updated for Rails 3.2
121
+ - 1.2.2 - 2011 Jan 11 - Using jquery-rails gem instead of doing the heavy lifting ourselves
122
+ - 1.2.1 - 2010 Dec 19 - Replaced RVM Ruby 1.9.2-head with REE 1.8.7-head
123
+ - 1.2.0 - 2010 Dec 11 - Replaced `defined_app_name` with `@app_name` throughout,
124
+ added `ask_with_default` helper, various fixes for Ruby 1.9.2 compatibility
125
+ - 1.1.2 - 2010 Nov 19 - Change .rvmrc template to use Rails 1.9.2-head, and
126
+ update a few things in the Gemfile
127
+ - 1.1.1 - 2010 Nov 11 - Prepare test DB after installing Clearance, change `RAILS_ROOT` to
128
+ `::Rails.root.to_s`
129
+ - 1.1.0 - 2010 Nov 11 - Fixed various bugs in the code generation
130
+ - 1.0.6 - 2010 Nov 10 - Fixed a bug with autotest failing
131
+ - 1.0.5 - 2010 Nov 10 - Fixed a template bug and updated the readme
132
+ - 1.0.4 - 2010 Nov 10 - Added configuration file
133
+ - 1.0.3 - 2010 Nov 10 - Initial public version
134
+
135
+ [Taylored Software]: http://www.taylored-software.com/
136
+ [thoughtbot]: http://www.thoughtbot.com/
137
+ [suspenders]: https://github.com/thoughtbot/suspenders
data/Rakefile ADDED
@@ -0,0 +1,83 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'date'
4
+
5
+ TSRAILS_GEM_VERSION = '2.0.0'
6
+
7
+ #############################################################################
8
+ # Helper functions
9
+ #############################################################################
10
+
11
+ def name
12
+ @name ||= Dir['*.gemspec'].first.split('.').first
13
+ end
14
+
15
+ def version
16
+ TSRAILS_GEM_VERSION
17
+ end
18
+
19
+ def date
20
+ Date.today.to_s
21
+ end
22
+
23
+ def gemspec_file
24
+ "#{name}.gemspec"
25
+ end
26
+
27
+ def gem_file
28
+ "#{name}-#{version}.gem"
29
+ end
30
+
31
+ def replace_header(head, header_name)
32
+ head.sub!(/(\.#{header_name}\s*= ').*'/) { "#{$1}#{send(header_name)}'"}
33
+ end
34
+
35
+ #############################################################################
36
+ # Packaging tasks
37
+ #############################################################################
38
+
39
+ task :release => :build do
40
+ unless `git branch` =~ /^\* master$/
41
+ puts "You must be on the master branch to release!"
42
+ exit!
43
+ end
44
+ sh "git commit --allow-empty -a -m 'Release #{version}'"
45
+ sh "git tag v#{version}"
46
+ sh "git push origin master"
47
+ sh "git push --tags"
48
+ sh "gem push pkg/#{name}-#{version}.gem"
49
+ end
50
+
51
+ task :build => :gemspec do
52
+ sh "mkdir -p pkg"
53
+ sh "gem build #{gemspec_file}"
54
+ sh "mv #{gem_file} pkg"
55
+ end
56
+
57
+ task :gemspec do
58
+ # read spec file and split out manifest section
59
+ spec = File.read(gemspec_file)
60
+ head, manifest, tail = spec.split(" # = MANIFEST =\n")
61
+
62
+ # replace name version and date
63
+ replace_header(head, :name)
64
+ replace_header(head, :version)
65
+ replace_header(head, :date)
66
+
67
+ # determine file list from git ls-files
68
+ files = `git ls-files`.
69
+ split("\n").
70
+ sort.
71
+ reject { |file| file =~ /^\./ }.
72
+ reject { |file| file =~ /^(rdoc|pkg)/ }.
73
+ map { |file| " #{file}" }.
74
+ join("\n")
75
+
76
+ # piece file back together and write
77
+ manifest = " s.files = %w[\n#{files}\n ]\n"
78
+ spec = [head, manifest, tail].join(" # = MANIFEST =\n")
79
+ File.open(gemspec_file, 'w') { |io| io.write(spec) }
80
+ puts "Updated #{gemspec_file}"
81
+ end
82
+
83
+ task :default => :build
data/bin/tsrails ADDED
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.expand_path(File.dirname(__FILE__) + "/../lib/create")
4
+ require File.expand_path(File.dirname(__FILE__) + "/../lib/constants")
5
+ require File.expand_path(File.dirname(__FILE__) + "/../lib/errors")
6
+
7
+ require 'rubygems'
8
+ require 'rails'
9
+ require 'colored'
10
+ require 'net/http'
11
+ require 'net/ssh'
12
+
13
+ include TSRails::Errors
14
+
15
+ def usage
16
+ "Usage: #{File.basename(__FILE__)} create new_project_name"
17
+ end
18
+
19
+ case ARGV[0]
20
+ when 'create', '--create', 'new', '--new'
21
+ if ARGV[1].nil?
22
+ puts usage
23
+ else
24
+ begin
25
+ TSRails::Create.run!(ARGV[1])
26
+ rescue TSRails::InvalidInput => e
27
+ error_with_message(e.message)
28
+ end
29
+ end
30
+ when 'help', '--help'
31
+ puts usage
32
+ else
33
+ error_with_message "Unknown subcommand: #{ARGV[0]}\n#{usage}"
34
+ end
data/lib/constants.rb ADDED
@@ -0,0 +1,29 @@
1
+ require 'rubygems'
2
+ require 'yaml'
3
+ require 'erb'
4
+ require 'etc'
5
+
6
+ module TSRails
7
+ class Constants
8
+ def self.get(var_name)
9
+ tsrails_config = File.expand_path(File.join("~", ".tsrails.yml"))
10
+
11
+ unless File.exist?(tsrails_config)
12
+ File.open(tsrails_config, 'w') do |f|
13
+ f.printf "# Configuration for the TSRails gem - EDIT THIS!\n"
14
+ f.printf "staging_server: staging.server.com\n"
15
+ f.printf "staging_ssh_user: %s\n", Etc.getlogin
16
+ f.printf "remote_git_dir: /var/git\n"
17
+ f.printf "remote_apache_dir: /var/sites\n"
18
+ f.printf "test_app_domain: example.com\n"
19
+ end
20
+ puts "A tsrails configuration file was generated as "
21
+ puts " #{tsrails_config}"
22
+ puts "Please edit it as appropriate and rerun the tsrails command."
23
+ exit 1
24
+ end
25
+ tsrails_config = YAML.load_file(tsrails_config)
26
+ tsrails_config[var_name.to_s]
27
+ end
28
+ end
29
+ end
data/lib/create.rb ADDED
@@ -0,0 +1,68 @@
1
+ # Methods needed to create a project.
2
+
3
+ require 'rubygems'
4
+ require File.expand_path(File.dirname(__FILE__) + "/errors")
5
+ require File.expand_path(File.dirname(__FILE__) + "/constants.rb")
6
+ require File.expand_path(File.dirname(__FILE__) + "/helpers.rb")
7
+
8
+ require 'rubygems'
9
+ require 'rails'
10
+ require 'colored'
11
+ require 'net/http'
12
+ require 'net/ssh'
13
+
14
+ module TSRails
15
+ class Create
16
+ attr_accessor :project_path
17
+
18
+ def self.run!(project_path)
19
+ creator = self.new(project_path)
20
+ creator.create_project!
21
+ end
22
+
23
+ def initialize(project_path)
24
+ self.project_path = project_path
25
+ validate_project_path
26
+ validate_project_name
27
+ end
28
+
29
+ def create_project!
30
+ exec(<<-COMMAND)
31
+ rails new #{project_path} \
32
+ --template=#{template} \
33
+ --skip-prototype \
34
+ --skip-test-unit
35
+ COMMAND
36
+ end
37
+
38
+ private
39
+
40
+ def validate_project_name
41
+ project_name = File.basename(project_path)
42
+ unless project_name =~ /^[a-z0-9_]+$/
43
+ raise InvalidInput.new("Project name must only contain [a-z0-9_]")
44
+ end
45
+ if git_name_taken?(project_name)
46
+ raise InvalidInput.new("Project name \"#{project_name}\" already taken in Git")
47
+ end
48
+ if apache_name_taken?(project_name)
49
+ raise InvalidInput.new("Project name \"#{project_name}\" already taken in Apache")
50
+ end
51
+ end
52
+
53
+ def validate_project_path
54
+ base_directory = Dir.pwd
55
+ full_path = File.join(base_directory, project_path)
56
+
57
+ # This is for the common case for the user's convenience; the race
58
+ # condition can still occur.
59
+ if File.exists?(full_path)
60
+ raise InvalidInput.new("Project directory (#{project_path}) already exists")
61
+ end
62
+ end
63
+
64
+ def template
65
+ File.expand_path(File.join(File.dirname(__FILE__), "..", "template", "tsrails_3_2.rb"))
66
+ end
67
+ end
68
+ end
data/lib/errors.rb ADDED
@@ -0,0 +1,12 @@
1
+ # User errors
2
+
3
+ module TSRails
4
+ class InvalidInput < Exception; end
5
+
6
+ module Errors
7
+ def error_with_message(msg)
8
+ STDERR.puts msg
9
+ exit 1
10
+ end
11
+ end
12
+ end
data/lib/helpers.rb ADDED
@@ -0,0 +1,93 @@
1
+ require 'rubygems'
2
+ require 'rails'
3
+ require 'colored'
4
+ require 'net/http'
5
+ require 'net/ssh'
6
+
7
+ #============================================================================
8
+ # Helper functions
9
+ #============================================================================
10
+
11
+ def get_file(http_location, file)
12
+ uri = URI.parse(http_location)
13
+ contents = Net::HTTP.get(uri)
14
+ File.open(file, "w") { |f| f.write(contents) }
15
+ end
16
+
17
+ def msg(message)
18
+ msg :info, message
19
+ end
20
+
21
+ def ask_with_default(prompt, default_value)
22
+ msg = "#{prompt} [#{default_value}]"
23
+ result = ask(msg)
24
+ if result.nil?
25
+ result = default_value
26
+ end
27
+ result
28
+ end
29
+
30
+ def msg(mtype, message)
31
+ printf "[".white.bold
32
+ if (mtype.nil?)
33
+ printf "message".green
34
+ elsif (mtype.to_s.blank?)
35
+ printf "message".green
36
+ elsif (mtype.to_s.downcase == "info")
37
+ printf "info".cyan
38
+ elsif (mtype.to_s.downcase == "warning")
39
+ printf "warning".red
40
+ else
41
+ printf "message".green
42
+ end
43
+ printf "] ".white.bold
44
+ printf "#{message}\n"
45
+ end
46
+
47
+ def remote_dir_exists?(hostname, username, dir_path)
48
+ output = ""
49
+ Net::SSH.start(hostname, username) do |ssh|
50
+ output = ssh.exec!("ls -d #{dir_path} 2>/dev/null | wc -l").chomp.strip
51
+ end
52
+ output == "1"
53
+ end
54
+
55
+ def git_name_taken?(project_name)
56
+ remote_dir_exists?(TSRails::Constants.get(:staging_server), TSRails::Constants.get(:staging_ssh_user), "#{TSRails::Constants.get(:remote_git_dir)}/#{project_name}.git")
57
+ end
58
+
59
+ def apache_name_taken?(project_name)
60
+ remote_dir_exists?(TSRails::Constants.get(:staging_server), TSRails::Constants.get(:staging_ssh_user), "#{TSRails::Constants.get(:remote_apache_dir)}/#{project_name}.taylored-software.com")
61
+ end
62
+
63
+ def concat_file(source, destination)
64
+ contents = IO.read(find_in_source_paths(source))
65
+ append_file destination, contents
66
+ end
67
+
68
+ def replace_in_file(relative_path, find, replace)
69
+ path = File.join(destination_root, relative_path)
70
+ contents = IO.read(path)
71
+ unless contents.gsub!(find, replace)
72
+ raise "#{find.inspect} not found in #{relative_path}"
73
+ end
74
+ File.open(path, "w") { |file| file.write(contents) }
75
+ end
76
+
77
+ def action_mailer_host(rails_env, host)
78
+ inject_into_file(
79
+ "config/environments/#{rails_env}.rb",
80
+ "\n\n config.action_mailer.default_url_options = { :host => '#{host}' }",
81
+ :before => "\nend"
82
+ )
83
+ end
84
+
85
+ def section(descr)
86
+ printf "\n"
87
+ msg :info, descr
88
+ end
89
+
90
+ def replace_file (filename, content)
91
+ remove_file filename
92
+ file filename, content
93
+ end
@@ -0,0 +1,56 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gem 'rake', '0.9.2'
4
+
5
+ gem 'rails', '3.2.1'
6
+ gem 'sqlite3'
7
+ gem 'bcrypt-ruby', '~> 3.0.0'
8
+ gem 'meta_search', '>= 1.1.0.pre'
9
+ gem 'clearance'
10
+ gem 'therubyracer'
11
+
12
+ gem 'kaminari'
13
+ gem 'haml'
14
+ gem 'haml-rails', :group => :development
15
+ gem 'simple_form'
16
+ gem 'jquery-rails'
17
+ gem 'prawn'
18
+ gem 'activemerchant'
19
+ gem 'draper'
20
+
21
+ group :development do
22
+ gem 'growl'
23
+ gem 'thin'
24
+ end
25
+
26
+ group :development, :test do
27
+ gem 'rb-fsevent', :require => false if RUBY_PLATFORM =~ /darwin/i
28
+ gem 'rails3-generators'
29
+ gem 'annotate'
30
+ gem 'spork', '>= 0.9.0.rc'
31
+ gem 'guard'
32
+ gem 'guard-bundler'
33
+ gem 'guard-coffeescript'
34
+ gem 'guard-rspec'
35
+ gem 'guard-sass'
36
+ gem 'guard-spork'
37
+ gem 'guard-rails'
38
+ gem 'guard-annotate'
39
+ gem 'simplecov', :require => false
40
+ end
41
+
42
+ group :test do
43
+ gem 'database_cleaner'
44
+ gem 'rails3-generators' #mainly for factory_girl & simple_form at this point
45
+ gem 'rspec-rails'
46
+ gem 'factory_girl_rails'
47
+ gem 'capybara'
48
+ gem 'launchy'
49
+ gem 'shoulda', '>= 3.0.0.beta'
50
+ end
51
+
52
+ group :assets do
53
+ gem 'sass-rails', " ~> 3.2.3"
54
+ gem 'coffee-rails', "~> 3.2.1"
55
+ gem 'uglifier', '>= 1.0.3'
56
+ end
@@ -0,0 +1,36 @@
1
+ guard 'bundler' do
2
+ watch('Gemfile')
3
+ end
4
+
5
+ guard 'spork', cucumber_env: { 'RAILS_ENV' => 'test' }, rspec_env: { 'RAILS_ENV' => 'test' }, wait: 120 do
6
+ watch('config/application.rb')
7
+ watch('config/environment.rb')
8
+ watch(%r{^config/environments/.+\.rb$})
9
+ watch(%r{^config/initializers/.+\.rb$})
10
+
11
+ watch('Gemfile')
12
+ watch('Gemfile.lock')
13
+
14
+ watch('spec/spec_helper.rb') { :rspec }
15
+ watch(%r{features/support/}) { :cucumber }
16
+ watch(%r{^spec/support/.+\.rb$})
17
+ end
18
+
19
+ guard 'rspec', version: 2, cli: '--drb', all_on_start: false, all_after_pass: false do
20
+ watch(%r{^spec/.+_spec\.rb$})
21
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
22
+ watch('spec/spec_helper.rb') { "spec" }
23
+
24
+ # Rails example
25
+ watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
26
+ watch(%r{^app/(.*)(\.erb|\.haml)$}) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
27
+ watch(%r{^app/controllers/(.+)_(controller)\.rb$}) { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
28
+ watch(%r{^spec/requests/.+_spec\.rb$}) { "spec/requests"}
29
+ watch(%r{^spec/support/(.+)\.rb$}) { "spec" }
30
+ watch('config/routes.rb') { "spec/routing" }
31
+ watch('app/controllers/application_controller.rb') { "spec/controllers" }
32
+ watch(%r{^app/views/(.+)/}) { |m| "spec/requests/#{m[1]}_spec.rb" }
33
+
34
+ # Capybara request specs
35
+ watch(%r{^app/views/(.+)/.*\.(erb|haml)$}) { |m| "spec/requests/#{m[1]}_spec.rb" }
36
+ end
@@ -0,0 +1,37 @@
1
+ FILE_BASE = "/Users/tlcravit/code/<%= @app_name %>"
2
+
3
+ window do
4
+ before { run "cd #{FILE_BASE}" }
5
+
6
+ run "mate ."
7
+ run "tab_title 'shell (bash)'"
8
+
9
+ tab "server" do
10
+ run "tab_title 'server (thin)'"
11
+ run "bundle exec thin start"
12
+ end
13
+
14
+ if File.exist?("#{FILE_BASE}/Guardfile")
15
+ tab "guard" do
16
+ run "tab_title 'guard'"
17
+ run "guard"
18
+ end
19
+ end
20
+
21
+ if File.exist?("#{FILE_BASE}/logs/development.log")
22
+ tab "log" do
23
+ run "tab_title 'development log'"
24
+ run "tail -f \"#{FILE_BASE}/logs/development.log\""
25
+ end
26
+ end
27
+
28
+ tab "console" do
29
+ run "tab_title 'console (pry)'"
30
+ run "pry -r ./config/environment"
31
+ end
32
+
33
+ tab "shell" do
34
+ run "tab_title 'shell (bash)'"
35
+ run "/usr/local/bin/bash --login"
36
+ end
37
+ end
@@ -0,0 +1,3 @@
1
+ #flashes
2
+ - flash.each do |key, value|
3
+ %div{:class => key}= h(value)
@@ -0,0 +1,8 @@
1
+ #footer
2
+ Copyright &copy;
3
+ = Time.now.year
4
+ ,
5
+ = "#{APP_CONFIG[:client_name]}."
6
+ All rights reserved. Web development by
7
+ %a{:href => "http://www.taylored-software.com", :target => "_blank"}
8
+ Taylored Software.
@@ -0,0 +1 @@
1
+ = yield :javascript
@@ -0,0 +1,3 @@
1
+ %ul
2
+ %li
3
+ = render :partial => 'shared/sign_in_out'
@@ -0,0 +1,4 @@
1
+ - if signed_in?
2
+ = link_to "Sign out", sign_out_path, :method => :delete
3
+ - else
4
+ = link_to "Sign in", sign_in_path
@@ -0,0 +1,18 @@
1
+ <VirtualHost *:80>
2
+ ServerName <%= @app_name %>.<%= TSRails::Constants.get(:test_app_domain) %>
3
+ DocumentRoot <%= TSRails::Constants.get(:remote_apache_dir) %>/<%= @app_name %>.<%= TSRails::Constants.get(:test_app_domain) %>/current/public
4
+
5
+ ErrorLog <%= TSRails::Constants.get(:remote_apache_dir) %>/<%= @app_name %>.<%= TSRails::Constants.get(:test_app_domain) %>/current/log/apache_error_log
6
+
7
+ RailsSpawnMethod smart
8
+ PassengerMaxRequests 5000
9
+ PassengerStatThrottleRate 5
10
+ RailsAppSpawnerIdleTime 0
11
+ RailsFrameworkSpawnerIdleTime 0
12
+ PassengerPoolIdleTime 1000
13
+
14
+ <Directory "<%= TSRails::Constants.get(:remote_apache_dir) %>/<%= @app_name %>.<%= TSRails::Constants.get(:test_app_domain) %>/current/public">
15
+ Allow from all
16
+ Options -MultiViews
17
+ </Directory>
18
+ </VirtualHost>
@@ -0,0 +1,11 @@
1
+ development:
2
+ domain: localhost:3000
3
+ client_name: <%= @client_name %>
4
+
5
+ test:
6
+ domain: test.host
7
+ client_name: <%= @client_name %>
8
+
9
+ production:
10
+ domain: <%= @app_name %>.taylored-software.com
11
+ client_name: <%= @client_name %>
@@ -0,0 +1,21 @@
1
+ !!!
2
+ %html
3
+ %head
4
+ %meta{"http-equiv" => "Content-type", :content => "text/html; charset=utf-8"}
5
+ %title= @page_title || "Page Title"
6
+ = stylesheet_link_tag "application"
7
+ = javascript_include_tag "application"
8
+ = csrf_meta_tags
9
+ = yield :head
10
+ %body.bp.two-col
11
+ #container
12
+ #header
13
+ Web Site
14
+ #sidebar
15
+ = render :partial => 'shared/sidebar'
16
+ #content
17
+ = render :partial => 'shared/flashes'
18
+ = yield
19
+ = render :partial => 'shared/javascript'
20
+ #footer
21
+ = render :partial => 'shared/footer'
@@ -0,0 +1,6 @@
1
+ module ApplicationHelper
2
+ def body_class
3
+ qualified_controller_name = controller.controller_path.gsub('/','-')
4
+ "#{qualified_controller_name} #{qualified_controller_name}-#{controller.action_name}"
5
+ end
6
+ end