├── .gitignore ├── .rspec ├── .ruby-gemset ├── .tool-versions ├── .travis.yml ├── Gemfile ├── Gemfile.lock ├── Procfile ├── README.md ├── Rakefile ├── app ├── assets │ ├── images │ │ ├── .keep │ │ ├── bg.jpg │ │ ├── bg2.jpg │ │ ├── linux-logo.png │ │ ├── logo-one-month-blue.svg │ │ ├── mac_steps │ │ │ ├── about_this_mac.png │ │ │ ├── apple.png │ │ │ ├── applications_folder.png │ │ │ ├── applications_utilities_terminal.png │ │ │ ├── congrats_sam.png │ │ │ ├── select_about_this_mac.png │ │ │ ├── spotlight_search_for_terminal.png │ │ │ ├── terminal.png │ │ │ ├── xcode_command_line_tool.png │ │ │ └── xcode_preferences.png │ │ ├── microsoft.png │ │ ├── omr_logo.png │ │ ├── sam.png │ │ └── windows │ │ │ ├── install_rails_step1.png │ │ │ ├── install_rails_step2.png │ │ │ ├── install_rails_step3.png │ │ │ └── windows-gitbash.png │ ├── javascripts │ │ ├── application.js │ │ ├── confetti.js │ │ ├── install_steps.js.coffee │ │ ├── segment_io.js.erb │ │ ├── welcome.js │ │ └── welcome.js.coffee │ └── stylesheets │ │ ├── _beaker.scss │ │ ├── _footer.scss │ │ ├── _install_steps.scss │ │ ├── _sidebar.scss │ │ └── application.css.scss ├── controllers │ ├── application_controller.rb │ ├── concerns │ │ └── .keep │ ├── install_steps_controller.rb │ ├── main_controller.rb │ └── sessions_controller.rb ├── helpers │ ├── application_helper.rb │ ├── install_steps_helper.rb │ └── welcome_helper.rb ├── mailers │ └── .keep ├── models │ ├── .keep │ ├── concerns │ │ └── .keep │ └── user.rb └── views │ ├── install_steps │ ├── choose_os.html.erb │ ├── choose_os_version.html.erb │ ├── configure_git.html.erb │ ├── create_ssh_key.html.erb │ ├── create_your_first_app.html.erb │ ├── find_git_bash.html.erb │ ├── find_the_command_line.html.erb │ ├── install_git.html.erb │ ├── install_homebrew.html.erb │ ├── install_rails.html.erb │ ├── install_rvm_and_ruby.html.erb │ ├── install_xcode.html.erb │ ├── rails_for_linux_and_other.html.erb │ ├── railsinstaller_windows.html.erb │ ├── see_it_live.html.erb │ ├── sublime_text.html.erb │ ├── update_rails.html.erb │ └── update_rubygems.html.erb │ ├── layouts │ ├── _development.html.erb │ ├── _disqus.html.erb │ ├── _step_navigation.html.erb │ ├── application.html.erb │ ├── install_steps.html.erb │ └── main.html.erb │ └── main │ ├── congratulations.html.erb │ ├── index.html.erb │ └── test.html.erb ├── bin ├── bundle ├── rails ├── rake └── rspec ├── config.ru ├── config ├── application.rb ├── boot.rb ├── cucumber.yml ├── environment.rb ├── environments │ ├── development.rb │ ├── production.rb │ └── test.rb ├── initializers │ ├── backtrace_silencers.rb │ ├── filter_parameter_logging.rb │ ├── inflections.rb │ ├── mime_types.rb │ ├── secret_token.rb │ ├── session_store.rb │ └── wrap_parameters.rb ├── locales │ └── en.yml ├── routes.rb └── unicorn.rb ├── db └── seeds.rb ├── env.sample ├── features ├── homepage.feature ├── step_definitions │ └── homepage_steps.rb └── support │ └── env.rb ├── lib ├── assets │ ├── .keep │ └── templates │ │ └── basic.rb └── tasks │ ├── .keep │ └── cucumber.rake ├── log └── .keep ├── public ├── 404.html ├── 422.html ├── 500.html ├── favicon.ico ├── robots.txt └── update_rubygems.rb ├── script └── cucumber ├── spec ├── spec_helper.rb └── support │ └── .keep └── vendor └── assets ├── javascripts ├── .keep ├── gmaps.js ├── html5shiv.js └── script.js └── stylesheets └── .keep /.gitignore: -------------------------------------------------------------------------------- 1 | # See http://help.github.com/ignore-files/ for more about ignoring files. 2 | # 3 | # If you find yourself ignoring temporary files generated by your text editor 4 | # or operating system, you probably want to add a global ignore instead: 5 | # git config --global core.excludesfile '~/.gitignore_global' 6 | 7 | # Ignore bundler config. 8 | /.bundle 9 | 10 | # Ignore the default SQLite database. 11 | /db/*.sqlite3 12 | /db/*.sqlite3-journal 13 | 14 | # Ignore all logfiles and tempfiles. 15 | /log/*.log 16 | /tmp 17 | .ruby-version 18 | .DS_Store 19 | .env 20 | -------------------------------------------------------------------------------- /.rspec: -------------------------------------------------------------------------------- 1 | --color 2 | -------------------------------------------------------------------------------- /.ruby-gemset: -------------------------------------------------------------------------------- 1 | install-rails -------------------------------------------------------------------------------- /.tool-versions: -------------------------------------------------------------------------------- 1 | ruby 2.7.6 2 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: ruby 2 | rvm: 3 | - 2.7.6 4 | notifications: 5 | slack: 6 | secure: E77fRRA0ZyDPHi8keWKiIO2fGouqTeOcAWyFHyjsenxJ5VMJ4u/T5oLE59Nv+m3CgTBZ7N2npkTZzy7tcCZe1lbY/+DqW6aJxrH0+GvOqPrkVfDOa+FOtQgmmzBHCxcT9iysvCP792VzLhKNDOiTmjCUfVsDkrHlJ3uSSPT4PxU= 7 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | ruby '2.7.6' 3 | 4 | gem 'rails', '~> 4.2.0' 5 | 6 | group :development do 7 | end 8 | 9 | group :development, :test do 10 | gem 'better_errors' 11 | gem 'binding_of_caller' 12 | gem 'factory_bot_rails' 13 | gem 'pry-rails' 14 | gem 'rspec-rails', '~> 3.6.0' 15 | end 16 | 17 | group :test do 18 | gem 'cucumber-rails', require: false 19 | end 20 | 21 | group :production do 22 | gem 'rails_12factor' 23 | end 24 | 25 | gem 'bootstrap-sass', '~> 3.4.1' 26 | gem 'coffee-rails' 27 | gem 'figaro' 28 | gem 'font-awesome-rails', '~> 3.2.1.2' 29 | gem 'jbuilder', '~> 1.2' 30 | gem 'jquery-rails' 31 | gem 'sass-rails' 32 | gem 'turbolinks' 33 | gem 'uglifier', '>= 1.3.0' 34 | gem 'unicorn', require: false 35 | gem 'wicked', '~> 1.1.0' 36 | gem 'bigdecimal', '1.3.5' 37 | -------------------------------------------------------------------------------- /Gemfile.lock: -------------------------------------------------------------------------------- 1 | GEM 2 | remote: https://rubygems.org/ 3 | specs: 4 | actionmailer (4.2.10) 5 | actionpack (= 4.2.10) 6 | actionview (= 4.2.10) 7 | activejob (= 4.2.10) 8 | mail (~> 2.5, >= 2.5.4) 9 | rails-dom-testing (~> 1.0, >= 1.0.5) 10 | actionpack (4.2.10) 11 | actionview (= 4.2.10) 12 | activesupport (= 4.2.10) 13 | rack (~> 1.6) 14 | rack-test (~> 0.6.2) 15 | rails-dom-testing (~> 1.0, >= 1.0.5) 16 | rails-html-sanitizer (~> 1.0, >= 1.0.2) 17 | actionview (4.2.10) 18 | activesupport (= 4.2.10) 19 | builder (~> 3.1) 20 | erubis (~> 2.7.0) 21 | rails-dom-testing (~> 1.0, >= 1.0.5) 22 | rails-html-sanitizer (~> 1.0, >= 1.0.3) 23 | activejob (4.2.10) 24 | activesupport (= 4.2.10) 25 | globalid (>= 0.3.0) 26 | activemodel (4.2.10) 27 | activesupport (= 4.2.10) 28 | builder (~> 3.1) 29 | activerecord (4.2.10) 30 | activemodel (= 4.2.10) 31 | activesupport (= 4.2.10) 32 | arel (~> 6.0) 33 | activesupport (4.2.10) 34 | i18n (~> 0.7) 35 | minitest (~> 5.1) 36 | thread_safe (~> 0.3, >= 0.3.4) 37 | tzinfo (~> 1.1) 38 | addressable (2.5.2) 39 | public_suffix (>= 2.0.2, < 4.0) 40 | arel (6.0.4) 41 | autoprefixer-rails (9.7.3) 42 | execjs 43 | backports (3.11.4) 44 | better_errors (2.5.0) 45 | coderay (>= 1.0.0) 46 | erubi (>= 1.0.0) 47 | rack (>= 0.9.0) 48 | bigdecimal (1.3.5) 49 | binding_of_caller (0.8.0) 50 | debug_inspector (>= 0.0.1) 51 | bootstrap-sass (3.4.1) 52 | autoprefixer-rails (>= 5.2.1) 53 | sassc (>= 2.0.0) 54 | builder (3.2.3) 55 | capybara (3.8.2) 56 | addressable 57 | mini_mime (>= 0.1.3) 58 | nokogiri (~> 1.8) 59 | rack (>= 1.6.0) 60 | rack-test (>= 0.6.3) 61 | xpath (~> 3.1) 62 | coderay (1.1.2) 63 | coffee-rails (4.2.2) 64 | coffee-script (>= 2.2.0) 65 | railties (>= 4.0.0) 66 | coffee-script (2.4.1) 67 | coffee-script-source 68 | execjs 69 | coffee-script-source (1.12.2) 70 | concurrent-ruby (1.0.5) 71 | crass (1.0.4) 72 | cucumber (3.1.2) 73 | builder (>= 2.1.2) 74 | cucumber-core (~> 3.2.0) 75 | cucumber-expressions (~> 6.0.1) 76 | cucumber-wire (~> 0.0.1) 77 | diff-lcs (~> 1.3) 78 | gherkin (~> 5.1.0) 79 | multi_json (>= 1.7.5, < 2.0) 80 | multi_test (>= 0.1.2) 81 | cucumber-core (3.2.1) 82 | backports (>= 3.8.0) 83 | cucumber-tag_expressions (~> 1.1.0) 84 | gherkin (~> 5.0) 85 | cucumber-expressions (6.0.1) 86 | cucumber-rails (1.6.0) 87 | capybara (>= 1.1.2, < 4) 88 | cucumber (>= 3.0.2, < 4) 89 | mime-types (>= 1.17, < 4) 90 | nokogiri (~> 1.8) 91 | railties (>= 4, < 6) 92 | cucumber-tag_expressions (1.1.1) 93 | cucumber-wire (0.0.1) 94 | debug_inspector (0.0.3) 95 | diff-lcs (1.3) 96 | erubi (1.7.1) 97 | erubis (2.7.0) 98 | execjs (2.7.0) 99 | factory_bot (4.11.1) 100 | activesupport (>= 3.0.0) 101 | factory_bot_rails (4.11.1) 102 | factory_bot (~> 4.11.1) 103 | railties (>= 3.0.0) 104 | ffi (1.11.3) 105 | figaro (1.1.1) 106 | thor (~> 0.14) 107 | font-awesome-rails (3.2.1.3) 108 | railties (>= 3.2, < 5.0) 109 | gherkin (5.1.0) 110 | globalid (0.4.1) 111 | activesupport (>= 4.2.0) 112 | i18n (0.9.5) 113 | concurrent-ruby (~> 1.0) 114 | jbuilder (1.5.3) 115 | activesupport (>= 3.0.0) 116 | multi_json (>= 1.2.0) 117 | jquery-rails (4.3.3) 118 | rails-dom-testing (>= 1, < 3) 119 | railties (>= 4.2.0) 120 | thor (>= 0.14, < 2.0) 121 | kgio (2.11.2) 122 | loofah (2.2.2) 123 | crass (~> 1.0.2) 124 | nokogiri (>= 1.5.9) 125 | mail (2.7.0) 126 | mini_mime (>= 0.1.1) 127 | method_source (0.9.0) 128 | mime-types (3.2.2) 129 | mime-types-data (~> 3.2015) 130 | mime-types-data (3.2018.0812) 131 | mini_mime (1.0.1) 132 | mini_portile2 (2.4.0) 133 | minitest (5.11.3) 134 | multi_json (1.13.1) 135 | multi_test (0.1.2) 136 | nokogiri (1.10.4) 137 | mini_portile2 (~> 2.4.0) 138 | pry (0.11.3) 139 | coderay (~> 1.1.0) 140 | method_source (~> 0.9.0) 141 | pry-rails (0.3.6) 142 | pry (>= 0.10.4) 143 | public_suffix (3.0.3) 144 | rack (1.6.10) 145 | rack-test (0.6.3) 146 | rack (>= 1.0) 147 | rails (4.2.10) 148 | actionmailer (= 4.2.10) 149 | actionpack (= 4.2.10) 150 | actionview (= 4.2.10) 151 | activejob (= 4.2.10) 152 | activemodel (= 4.2.10) 153 | activerecord (= 4.2.10) 154 | activesupport (= 4.2.10) 155 | bundler (>= 1.3.0, < 2.0) 156 | railties (= 4.2.10) 157 | sprockets-rails 158 | rails-deprecated_sanitizer (1.0.3) 159 | activesupport (>= 4.2.0.alpha) 160 | rails-dom-testing (1.0.9) 161 | activesupport (>= 4.2.0, < 5.0) 162 | nokogiri (~> 1.6) 163 | rails-deprecated_sanitizer (>= 1.0.1) 164 | rails-html-sanitizer (1.0.4) 165 | loofah (~> 2.2, >= 2.2.2) 166 | rails_12factor (0.0.3) 167 | rails_serve_static_assets 168 | rails_stdout_logging 169 | rails_serve_static_assets (0.0.5) 170 | rails_stdout_logging (0.0.5) 171 | railties (4.2.10) 172 | actionpack (= 4.2.10) 173 | activesupport (= 4.2.10) 174 | rake (>= 0.8.7) 175 | thor (>= 0.18.1, < 2.0) 176 | raindrops (0.19.0) 177 | rake (12.3.1) 178 | rb-fsevent (0.10.3) 179 | rb-inotify (0.10.1) 180 | ffi (~> 1.0) 181 | rspec-core (3.6.0) 182 | rspec-support (~> 3.6.0) 183 | rspec-expectations (3.6.0) 184 | diff-lcs (>= 1.2.0, < 2.0) 185 | rspec-support (~> 3.6.0) 186 | rspec-mocks (3.6.0) 187 | diff-lcs (>= 1.2.0, < 2.0) 188 | rspec-support (~> 3.6.0) 189 | rspec-rails (3.6.1) 190 | actionpack (>= 3.0) 191 | activesupport (>= 3.0) 192 | railties (>= 3.0) 193 | rspec-core (~> 3.6.0) 194 | rspec-expectations (~> 3.6.0) 195 | rspec-mocks (~> 3.6.0) 196 | rspec-support (~> 3.6.0) 197 | rspec-support (3.6.0) 198 | sass (3.7.4) 199 | sass-listen (~> 4.0.0) 200 | sass-listen (4.0.0) 201 | rb-fsevent (~> 0.9, >= 0.9.4) 202 | rb-inotify (~> 0.9, >= 0.9.7) 203 | sass-rails (5.0.7) 204 | railties (>= 4.0.0, < 6) 205 | sass (~> 3.1) 206 | sprockets (>= 2.8, < 4.0) 207 | sprockets-rails (>= 2.0, < 4.0) 208 | tilt (>= 1.1, < 3) 209 | sassc (2.2.1) 210 | ffi (~> 1.9) 211 | sprockets (3.7.2) 212 | concurrent-ruby (~> 1.0) 213 | rack (> 1, < 3) 214 | sprockets-rails (3.2.1) 215 | actionpack (>= 4.0) 216 | activesupport (>= 4.0) 217 | sprockets (>= 3.0.0) 218 | thor (0.20.0) 219 | thread_safe (0.3.6) 220 | tilt (2.0.8) 221 | turbolinks (5.2.0) 222 | turbolinks-source (~> 5.2) 223 | turbolinks-source (5.2.0) 224 | tzinfo (1.2.5) 225 | thread_safe (~> 0.1) 226 | uglifier (4.1.19) 227 | execjs (>= 0.3.0, < 3) 228 | unicorn (5.4.1) 229 | kgio (~> 2.6) 230 | raindrops (~> 0.7) 231 | wicked (1.1.1) 232 | rails (>= 3.0.7) 233 | xpath (3.1.0) 234 | nokogiri (~> 1.8) 235 | 236 | PLATFORMS 237 | ruby 238 | 239 | DEPENDENCIES 240 | better_errors 241 | bigdecimal (= 1.3.5) 242 | binding_of_caller 243 | bootstrap-sass (~> 3.4.1) 244 | coffee-rails 245 | cucumber-rails 246 | factory_bot_rails 247 | figaro 248 | font-awesome-rails (~> 3.2.1.2) 249 | jbuilder (~> 1.2) 250 | jquery-rails 251 | pry-rails 252 | rails (~> 4.2.0) 253 | rails_12factor 254 | rspec-rails (~> 3.6.0) 255 | sass-rails 256 | turbolinks 257 | uglifier (>= 1.3.0) 258 | unicorn 259 | wicked (~> 1.1.0) 260 | 261 | RUBY VERSION 262 | ruby 2.7.6p219 263 | 264 | BUNDLED WITH 265 | 1.16.5 266 | -------------------------------------------------------------------------------- /Procfile: -------------------------------------------------------------------------------- 1 | web: bundle exec unicorn -p $PORT -E $RACK_ENV 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Install Rails 2 | [![Build Status](https://travis-ci.org/onemonth/install_rails.png?branch=master)](https://travis-ci.org/onemonth/install_rails) 3 | 4 | Patches welcome. 5 | 6 | ## Setup in your local 7 | 8 | 1. After following the instructions on [the site](http://installrails.com), run 9 | 10 | ```bash 11 | rvm install 2.7.6 12 | ``` 13 | 14 | 2. If you don't already have MongoDB, then run: 15 | 16 | ```sh 17 | brew update 18 | brew install mongodb 19 | ``` 20 | 21 | 3. Enter into the project folder with: 22 | 23 | ```sh 24 | cd install_rails 25 | ``` 26 | 27 | 4. Install its dependencies, run: 28 | 29 | ```ruby 30 | gem install bundler 31 | bundle install 32 | ``` 33 | 34 | 5. You're good to go, set it live by running: 35 | 36 | ```ruby 37 | rails server 38 | ``` 39 | 40 | 6. Open `http://localhost:3000` in your browser. 41 | 42 | ## Contributing 43 | 44 | 1. Fork it 45 | 2. Clone to your local (`git clone git@github.com:onemonth/install_rails.git`) 46 | 3. Create your feature branch (`git checkout -b my-new-feature`) 47 | 4. Commit your changes (`git commit -am 'Add some feature'`) 48 | 5. Push to the branch (`git push origin my-new-feature`) 49 | 6. Create new Pull Request 50 | -------------------------------------------------------------------------------- /Rakefile: -------------------------------------------------------------------------------- 1 | # Add your own tasks in files placed in lib/tasks ending in .rake, 2 | # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. 3 | 4 | require File.expand_path('../config/application', __FILE__) 5 | 6 | InstallRails::Application.load_tasks 7 | -------------------------------------------------------------------------------- /app/assets/images/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onemonth/install_rails/eb21694d10c94b1ba1e69e88d8db61d496eac0ed/app/assets/images/.keep -------------------------------------------------------------------------------- /app/assets/images/bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onemonth/install_rails/eb21694d10c94b1ba1e69e88d8db61d496eac0ed/app/assets/images/bg.jpg -------------------------------------------------------------------------------- /app/assets/images/bg2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onemonth/install_rails/eb21694d10c94b1ba1e69e88d8db61d496eac0ed/app/assets/images/bg2.jpg -------------------------------------------------------------------------------- /app/assets/images/linux-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onemonth/install_rails/eb21694d10c94b1ba1e69e88d8db61d496eac0ed/app/assets/images/linux-logo.png -------------------------------------------------------------------------------- /app/assets/images/logo-one-month-blue.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 9 | 11 | 13 | 15 | 17 | 20 | 23 | 25 | 27 | 28 | 30 | 31 | 33 | 34 | 36 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /app/assets/images/mac_steps/about_this_mac.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onemonth/install_rails/eb21694d10c94b1ba1e69e88d8db61d496eac0ed/app/assets/images/mac_steps/about_this_mac.png -------------------------------------------------------------------------------- /app/assets/images/mac_steps/apple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onemonth/install_rails/eb21694d10c94b1ba1e69e88d8db61d496eac0ed/app/assets/images/mac_steps/apple.png -------------------------------------------------------------------------------- /app/assets/images/mac_steps/applications_folder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onemonth/install_rails/eb21694d10c94b1ba1e69e88d8db61d496eac0ed/app/assets/images/mac_steps/applications_folder.png -------------------------------------------------------------------------------- /app/assets/images/mac_steps/applications_utilities_terminal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onemonth/install_rails/eb21694d10c94b1ba1e69e88d8db61d496eac0ed/app/assets/images/mac_steps/applications_utilities_terminal.png -------------------------------------------------------------------------------- /app/assets/images/mac_steps/congrats_sam.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onemonth/install_rails/eb21694d10c94b1ba1e69e88d8db61d496eac0ed/app/assets/images/mac_steps/congrats_sam.png -------------------------------------------------------------------------------- /app/assets/images/mac_steps/select_about_this_mac.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onemonth/install_rails/eb21694d10c94b1ba1e69e88d8db61d496eac0ed/app/assets/images/mac_steps/select_about_this_mac.png -------------------------------------------------------------------------------- /app/assets/images/mac_steps/spotlight_search_for_terminal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onemonth/install_rails/eb21694d10c94b1ba1e69e88d8db61d496eac0ed/app/assets/images/mac_steps/spotlight_search_for_terminal.png -------------------------------------------------------------------------------- /app/assets/images/mac_steps/terminal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onemonth/install_rails/eb21694d10c94b1ba1e69e88d8db61d496eac0ed/app/assets/images/mac_steps/terminal.png -------------------------------------------------------------------------------- /app/assets/images/mac_steps/xcode_command_line_tool.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onemonth/install_rails/eb21694d10c94b1ba1e69e88d8db61d496eac0ed/app/assets/images/mac_steps/xcode_command_line_tool.png -------------------------------------------------------------------------------- /app/assets/images/mac_steps/xcode_preferences.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onemonth/install_rails/eb21694d10c94b1ba1e69e88d8db61d496eac0ed/app/assets/images/mac_steps/xcode_preferences.png -------------------------------------------------------------------------------- /app/assets/images/microsoft.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onemonth/install_rails/eb21694d10c94b1ba1e69e88d8db61d496eac0ed/app/assets/images/microsoft.png -------------------------------------------------------------------------------- /app/assets/images/omr_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onemonth/install_rails/eb21694d10c94b1ba1e69e88d8db61d496eac0ed/app/assets/images/omr_logo.png -------------------------------------------------------------------------------- /app/assets/images/sam.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onemonth/install_rails/eb21694d10c94b1ba1e69e88d8db61d496eac0ed/app/assets/images/sam.png -------------------------------------------------------------------------------- /app/assets/images/windows/install_rails_step1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onemonth/install_rails/eb21694d10c94b1ba1e69e88d8db61d496eac0ed/app/assets/images/windows/install_rails_step1.png -------------------------------------------------------------------------------- /app/assets/images/windows/install_rails_step2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onemonth/install_rails/eb21694d10c94b1ba1e69e88d8db61d496eac0ed/app/assets/images/windows/install_rails_step2.png -------------------------------------------------------------------------------- /app/assets/images/windows/install_rails_step3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onemonth/install_rails/eb21694d10c94b1ba1e69e88d8db61d496eac0ed/app/assets/images/windows/install_rails_step3.png -------------------------------------------------------------------------------- /app/assets/images/windows/windows-gitbash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onemonth/install_rails/eb21694d10c94b1ba1e69e88d8db61d496eac0ed/app/assets/images/windows/windows-gitbash.png -------------------------------------------------------------------------------- /app/assets/javascripts/application.js: -------------------------------------------------------------------------------- 1 | // This is a manifest file that'll be compiled into application.js, which will include all the files 2 | // listed below. 3 | // 4 | // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts, 5 | // or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path. 6 | // 7 | // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the 8 | // compiled file. 9 | // 10 | // Read Sprockets README (https://github.com/sstephenson/sprockets#sprockets-directives) for details 11 | // about supported directives. 12 | // 13 | //= require jquery 14 | //= require jquery_ujs 15 | //= require turbolinks 16 | //= require bootstrap 17 | //= require_tree . 18 | //= require_self 19 | 20 | $(document).ready(function() { 21 | if ($("#confetti").length > 0) 22 | MetervaraConfetti() 23 | }); 24 | -------------------------------------------------------------------------------- /app/assets/javascripts/confetti.js: -------------------------------------------------------------------------------- 1 | /* Copyright 2011 Patrik Svensson (http://metervara.net). All rights reserved. */ 2 | 3 | var initiated = false; 4 | function MetervaraConfetti() 5 | { 6 | 7 | if(initiated) 8 | return; 9 | 10 | initiated = true; 11 | 12 | var contentDivName = "metervara_confetti"; 13 | 14 | var contentDiv = document.createElement('div'); 15 | contentDiv.setAttribute('id', contentDivName); 16 | //document.body.appendChild(contentDiv); 17 | document.body.insertBefore(contentDiv, document.body.firstChild); 18 | 19 | //css 20 | var sheet = document.createElement('style') 21 | sheet.innerHTML = "#"+contentDivName+" {position: fixed; left: 0em; top:0em; z-index: -1; width: 100%; height: 100%; }"; 22 | document.body.appendChild(sheet); 23 | 24 | var frameRate = 30; 25 | var dt = 1.0 / frameRate; 26 | var DEG_TO_RAD = Math.PI / 180; 27 | var RAD_TO_DEG = 180 / Math.PI; 28 | 29 | var confettiCount = 26; 30 | var ribbonCount = 10; 31 | 32 | var colors = 33 | [ 34 | ["#df0049","#660671"], //red 35 | ["#00e857","#005291"], //green/mint 36 | //["#00cc33","#00712d"], //green 37 | //["#d0e0c6","#5e634d"], 38 | ["#2bebbc","#05798a"], //cyan/blue 39 | ["#0018ff","#002369"] // blue 40 | //["#ffd200","#b06c00"] //yellow 41 | ]; 42 | 43 | function Vector2(_x,_y) 44 | { 45 | this.x = _x, this.y = _y; 46 | 47 | //Functions 48 | this.Length = function(){ return Math.sqrt(this.SqrLength()); } 49 | this.SqrLength = function(){ return this.x*this.x + this.y*this.y; } 50 | this.Equals = function(_vec0, _vec1){ return _vec0.x == _vec1.x && _vec0.y == _vec1.y; } 51 | 52 | this.Add = function(_vec) { this.x += _vec.x; this.y += _vec.y; } 53 | this.Sub = function(_vec) { this.x -= _vec.x; this.y -= _vec.y; } 54 | this.Div = function(_f) { this.x /= _f; this.y /= _f; } 55 | this.Mul = function(_f) { this.x *= _f; this.y *= _f; } 56 | 57 | this.Normalize = function() 58 | { 59 | var sqrLen = this.SqrLength(); 60 | if(sqrLen != 0) 61 | { 62 | var factor = 1.0 / Math.sqrt( sqrLen ); 63 | this.x *= factor; 64 | this.y *= factor; 65 | } 66 | } 67 | this.Normalized = function() 68 | { 69 | var sqrLen = this.SqrLength(); 70 | if(sqrLen != 0) 71 | { 72 | var factor = 1.0 / Math.sqrt( sqrLen ); 73 | return new Vector2(this.x*factor, this.y*factor); 74 | } 75 | // 76 | return new Vector2(0,0); 77 | } 78 | 79 | } 80 | 81 | Vector2.Sub = function(_vec0, _vec1) { return new Vector2(_vec0.x -_vec1.x, _vec0.y -_vec1.y, _vec0.z -_vec1.z); } 82 | 83 | function EulerMass(_x,_y, _mass, _drag) 84 | { 85 | this.position = new Vector2(_x, _y); 86 | this.mass = _mass; 87 | this.drag = _drag; 88 | this.force = new Vector2(0,0); 89 | this.velocity = new Vector2(0,0); 90 | 91 | this.AddForce = function(_f) 92 | { 93 | this.force.Add(_f); 94 | } 95 | 96 | this.Integrate = function(_dt) 97 | { 98 | 99 | // compute acceleration 100 | var acc = this.CurrentForce(this.position); 101 | acc.Div(this.mass); 102 | 103 | // compute new position, velocity 104 | var posDelta = new Vector2(this.velocity.x, this.velocity.y); 105 | posDelta.Mul(_dt); 106 | this.position.Add(posDelta); 107 | 108 | acc.Mul(_dt); 109 | this.velocity.Add(acc); 110 | 111 | this.force = new Vector2(0,0); 112 | } 113 | 114 | this.CurrentForce = function(_pos, _vel) 115 | { 116 | var totalForce = new Vector2(this.force.x, this.force.y); 117 | var speed = this.velocity.Length(); 118 | 119 | var dragVel = new Vector2(this.velocity.x, this.velocity.y); 120 | dragVel.Mul(this.drag*this.mass*speed); 121 | totalForce.Sub(dragVel); 122 | 123 | return totalForce; 124 | } 125 | 126 | } 127 | 128 | function ConfettiPaper(_x,_y) 129 | { 130 | this.pos = new Vector2(_x, _y); 131 | this.rotationSpeed = Math.random()*600+800; 132 | 133 | this.angle = DEG_TO_RAD*Math.random()*360; 134 | this.rotation = DEG_TO_RAD*Math.random()*360; 135 | this.cosA = 1.0; 136 | 137 | this.size = 5.0; 138 | 139 | this.oscillationSpeed = Math.random()*1.5+0.5; 140 | this.xSpeed = 40.0; 141 | this.ySpeed = Math.random()*60+50.0; 142 | 143 | this.corners = new Array(); //Vector2[] 144 | 145 | this.time = Math.random(); 146 | 147 | var ci = Math.round(Math.random()*(colors.length-1)); 148 | 149 | this.frontColor = colors[ci][0]; 150 | this.backColor = colors[ci][1]; 151 | 152 | for(var i=0;i<4;i++) 153 | { 154 | var dx = Math.cos(this.angle+DEG_TO_RAD*(i*90+45)); 155 | var dy = Math.sin(this.angle+DEG_TO_RAD*(i*90+45)); 156 | this.corners[i] = new Vector2(dx,dy); 157 | } 158 | 159 | this.Update = function(_dt) 160 | { 161 | this.time += _dt; 162 | 163 | this.rotation += this.rotationSpeed * _dt; 164 | this.cosA = Math.cos(DEG_TO_RAD * this.rotation); 165 | 166 | this.pos.x += Math.cos(this.time*this.oscillationSpeed) * this.xSpeed * _dt 167 | this.pos.y += this.ySpeed * _dt; 168 | 169 | //wrap 170 | if(this.pos.y>ConfettiPaper.bounds.y) 171 | { 172 | this.pos.x = Math.random()*ConfettiPaper.bounds.x; 173 | this.pos.y = 0; 174 | } 175 | 176 | } 177 | 178 | this.Draw = function(_g) 179 | { 180 | if(this.cosA >0) 181 | { 182 | _g.fillStyle = this.frontColor; 183 | } 184 | else 185 | { 186 | _g.fillStyle = this.backColor; 187 | } 188 | _g.beginPath(); 189 | 190 | _g.moveTo(this.pos.x + this.corners[0].x*this.size, this.pos.y + this.corners[0].y*this.size * this.cosA); 191 | for(var i=1;i<4;i++) 192 | { 193 | _g.lineTo(this.pos.x + this.corners[i].x*this.size, this.pos.y + this.corners[i].y*this.size * this.cosA); 194 | } 195 | 196 | _g.closePath(); 197 | _g.fill(); 198 | } 199 | } 200 | 201 | ConfettiPaper.bounds = new Vector2(0,0); 202 | 203 | function ConfettiRibbon(_x, _y, _count, _dist, _thickness, _angle, _mass, _drag) 204 | { 205 | this.particleDist = _dist; 206 | this.particleCount = _count; 207 | this.particleMass = _mass; 208 | this.particleDrag = _drag; 209 | 210 | this.particles = new Array(); 211 | 212 | var ci = Math.round(Math.random()*(colors.length-1)); 213 | 214 | this.frontColor = colors[ci][0]; 215 | this.backColor = colors[ci][1]; 216 | 217 | this.xOff = Math.cos(DEG_TO_RAD * _angle) * _thickness; 218 | this.yOff = Math.sin(DEG_TO_RAD * _angle) * _thickness; 219 | 220 | this.position = new Vector2(_x, _y); 221 | this.prevPosition = new Vector2(_x, _y); 222 | 223 | this.velocityInherit = Math.random()*2+4; 224 | 225 | this.time = Math.random()*100; 226 | this.oscillationSpeed = Math.random()*2 + 2; 227 | this.oscillationDistance = Math.random()*40+40; 228 | 229 | this.ySpeed = Math.random()*40+80; 230 | 231 | for(var i=0;i ConfettiRibbon.bounds.y + this.particleDist*this.particleCount) 281 | { 282 | this.Reset(); 283 | 284 | } 285 | 286 | } 287 | this.Reset = function() 288 | { 289 | this.position.y = -Math.random()*ConfettiRibbon.bounds.y; 290 | this.position.x = Math.random()*ConfettiRibbon.bounds.x; 291 | this.prevPosition = new Vector2(this.position.x, this.position.y); 292 | 293 | this.velocityInherit = Math.random()*2+4; 294 | 295 | this.time = Math.random()*100; 296 | this.oscillationSpeed = Math.random()*2.0 + 1.5; 297 | this.oscillationDistance = Math.random()*40+40; 298 | 299 | this.ySpeed = Math.random()*40+80; 300 | 301 | var ci = Math.round(Math.random()*(colors.length-1)); 302 | 303 | this.frontColor = colors[ci][0]; 304 | this.backColor = colors[ci][1]; 305 | 306 | this.particles = new Array(); 307 | for(var i=0;i 12 | # window.w = canvas.width = window.innerWidth 13 | # window.h = canvas.height = window.innerHeight/2 14 | 15 | # window.addEventListener('resize', resizeWindow, false) 16 | 17 | # window.onload = -> setTimeout resizeWindow, 0 18 | 19 | # range = (a,b) -> (b-a)*Math.random() + a 20 | 21 | # drawCircle = (x,y,r,style) -> 22 | # context.beginPath() 23 | # context.arc(x,y,r,0,PI_2,false) 24 | # context.fillStyle = style 25 | # context.fill() 26 | 27 | # xpos = 0.5 28 | 29 | # document.onmousemove = (e) -> 30 | # xpos = e.pageX/w 31 | 32 | # window.requestAnimationFrame = do -> 33 | # window.requestAnimationFrame || 34 | # window.webkitRequestAnimationFrame || 35 | # window.mozRequestAnimationFrame || 36 | # window.oRequestAnimationFrame || 37 | # window.msRequestAnimationFrame || 38 | # (callback) -> window.setTimeout(callback, 1000 / 60) 39 | 40 | 41 | # class Confetti 42 | # constructor: -> 43 | # @style = COLORS[~~range(0,5)] 44 | # @rgb = "rgba(#{@style[0]},#{@style[1]},#{@style[2]}" 45 | # @r = ~~range(2,6) 46 | # @r2 = 2*@r 47 | # @replace() 48 | 49 | # replace: -> 50 | # @opacity = 0 51 | # @dop = 0.03*range(1,4) 52 | # @x = range(-@r2,w-@r2) 53 | # @y = range(-20,h-@r2) 54 | # @xmax = w-@r 55 | # @ymax = h-@r 56 | # @vx = range(0,2)+8*xpos-5 57 | # @vy = 0.7*@r+range(-1,1) 58 | 59 | # draw: -> 60 | # @x += @vx 61 | # @y += @vy 62 | # @opacity += @dop 63 | # if @opacity > 1 64 | # @opacity = 1 65 | # @dop *= -1 66 | # @replace() if @opacity < 0 or @y > @ymax 67 | # if !(0 < @x < @xmax) 68 | # @x = (@x + @xmax) % @xmax 69 | # drawCircle(~~@x,~~@y,@r,"#{@rgb},#{@opacity})") 70 | 71 | 72 | # confetti = (new Confetti for i in [1..NUM_CONFETTI]) 73 | 74 | # window.step = -> 75 | # requestAnimationFrame(step) 76 | # context.clearRect(0,0,w,h) 77 | # c.draw() for c in confetti 78 | 79 | # step() 80 | -------------------------------------------------------------------------------- /app/assets/javascripts/segment_io.js.erb: -------------------------------------------------------------------------------- 1 | // Create a queue, but don't obliterate an existing one! 2 | var analytics = analytics || []; 3 | 4 | (function () { 5 | 6 | // A list of all the methods we want to generate queueing stubs for. 7 | var methods = [ 8 | 'identify', 'track', 'trackLink', 'trackForm', 'trackClick', 'trackSubmit', 9 | 'page', 'pageview', 'ab', 'alias', 'ready', 'group' 10 | ]; 11 | 12 | // For each of our methods, generate a queueing method that pushes arrays of 13 | // arguments onto our `analytics` queue. The first element of the array 14 | // is always the name of the analytics.js method itself (eg. `track`), so that 15 | // we know where to replay them when analytics.js finally loads. 16 | var factory = function (method) { 17 | return function () { 18 | analytics.push([method].concat(Array.prototype.slice.call(arguments, 0))); 19 | }; 20 | }; 21 | 22 | for (var i = 0; i < methods.length; i++) { 23 | analytics[methods[i]] = factory(methods[i]); 24 | } 25 | 26 | }()); 27 | 28 | // Define a method that will asynchronously load analytics.js from our CDN. 29 | analytics.load = function(apiKey) { 30 | 31 | // Create an async script element for analytics.js based on your API key. 32 | var script = document.createElement('script'); 33 | script.type = 'text/javascript'; 34 | script.async = true; 35 | script.src = ('https:' === document.location.protocol ? 'https://' : 'http://') + 36 | 'd2dq2ahtl5zl1z.cloudfront.net/analytics.js/v1/' + apiKey + '/analytics.min.js'; 37 | 38 | // Find the first script element on the page and insert our script next to it. 39 | var firstScript = document.getElementsByTagName('script')[0]; 40 | firstScript.parentNode.insertBefore(script, firstScript); 41 | }; 42 | 43 | // Load analytics.js with your API key, which will automatically load all of the 44 | // analytics integrations you've turned on for your account. Boosh! 45 | analytics.load("<%= ENV['SEGMENT_IO_KEY'] %>"); 46 | -------------------------------------------------------------------------------- /app/assets/javascripts/welcome.js: -------------------------------------------------------------------------------- 1 | $("#license").mouseover(function() { 2 | $("#hidden_div").css("visibility: show;"); 3 | $(this).mouseout(function() { 4 | $("#hidden_div").css("visibility: hidden;"); 5 | }); 6 | }); -------------------------------------------------------------------------------- /app/assets/javascripts/welcome.js.coffee: -------------------------------------------------------------------------------- 1 | # Place all the behaviors and hooks related to the matching controller here. 2 | # All this logic will automatically be available in application.js. 3 | # You can use CoffeeScript in this file: http://coffeescript.org/ 4 | 5 | -------------------------------------------------------------------------------- /app/assets/stylesheets/_beaker.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Beaker - Responsive Landing Page - V.1.0 3 | * Author: Shy Design 4 | * Author URL: http://wrapbootstrap.com/user/shydesign 5 | * All Right Reserved 6 | * Credits: 7 | * * http://twitter.github.com/bootstrap/ 8 | * * http://fortawesome.github.com/Font-Awesome/ 9 | **/ 10 | 11 | /************************************************************* 12 | google font 13 | **************************************************************/ 14 | @import url(http://fonts.googleapis.com/css?family=Lato:100,300,400,700); 15 | 16 | /************************************************************* 17 | reset some defaults styles 18 | **************************************************************/ 19 | body { 20 | font-family: Lato; 21 | font-size: 15px; 22 | font-weight: 300; 23 | color: rgb(124, 124, 124); 24 | } 25 | 26 | a { 27 | color: #323232; 28 | -webkit-transition: all 150ms ease; 29 | -moz-transition: all 150ms ease; 30 | -ms-transition: all 150ms ease; 31 | -o-transition: all 150ms ease; 32 | transition: all 150ms ease; 33 | } 34 | 35 | a:hover, a:focus { 36 | // color: rgb(219, 82, 47); 37 | color: #919191; 38 | text-decoration: none; 39 | } 40 | 41 | .carousel-control { 42 | font-size: 210px; 43 | color: #000; 44 | background: transparent; 45 | border: 0; 46 | } 47 | a.carousel-control:hover { 48 | color: rgb(200,200,200); 49 | } 50 | .carousel-control.right { 51 | right: -10px; 52 | left: auto; 53 | } 54 | .carousel-control.left { 55 | left: -35px; 56 | } 57 | a.carousel-control:hover { 58 | color: rgb(219, 82, 47); 59 | } 60 | 61 | 62 | /************************************************************* 63 | layout 64 | **************************************************************/ 65 | #download, #testimonials, #prices, #subscribe, #footer{ 66 | min-height: 20px; 67 | padding: 20px 0; 68 | } 69 | 70 | 71 | 72 | 73 | /************************************************************* 74 | header 75 | **************************************************************/ 76 | .site-header { 77 | background-image: image-url("bg.jpg"); 78 | background-repeat: no-repeat; 79 | -webkit-background-size:cover; 80 | -moz-background-size:cover; 81 | background-size:cover; 82 | width: 100%; 83 | } 84 | 85 | /* logo - icon is from fontawesome font */ 86 | .site-title { 87 | margin-top: 5px; 88 | color: #fff; 89 | font-weight: 300; 90 | font-size: 30px; 91 | display: inline-block; 92 | margin-top: 34px; 93 | } 94 | 95 | /* user login / register */ 96 | .user { 97 | margin-top: 34px; 98 | } 99 | .user a{ 100 | margin-top: 10px; 101 | font-size: 14px; 102 | padding: 10px 15px; 103 | border: 2px solid #fff; 104 | display: inline-block; 105 | color: #fff; 106 | 107 | -webkit-border-radius: 9px; 108 | -moz-border-radius: 9px; 109 | border-radius: 9px; 110 | } 111 | .user a:hover { 112 | background: #fff; 113 | color: rgb(219, 82, 47); 114 | } 115 | 116 | 117 | /* header-description */ 118 | .header-description { 119 | margin: 130px 0 80px; 120 | text-align: center; 121 | } 122 | .header-description h1, .header-description h2 { 123 | font-weight: 100; 124 | font-size: 93px; 125 | line-height: 93px; 126 | color: rgb(255, 255, 255); 127 | text-shadow: 0 0px 12px rgba(36, 36, 36, 0.55); 128 | } 129 | 130 | /* header button - call to action button */ 131 | .header-btn { 132 | color: #fff; 133 | margin-bottom: 30px; 134 | text-transform: uppercase; 135 | font-weight: 300; 136 | font-size: 24px; 137 | padding: 20px 35px; 138 | border: 2px solid rgb(219, 82, 47); 139 | background: rgb(219, 82, 47); 140 | display: inline-block; 141 | 142 | -webkit-border-radius: 9px; 143 | -moz-border-radius: 9px; 144 | border-radius: 9px; 145 | } 146 | .header-btn:hover { 147 | color: #fff; 148 | background: transparent; 149 | } 150 | 151 | /* header features */ 152 | .header-features { 153 | margin: -50px 110px 0 110px; 154 | color: #fff; 155 | display: block; 156 | } 157 | .header-feature{ 158 | padding: 50px; 159 | } 160 | 161 | 162 | /************************************************************* 163 | section#slider 164 | **************************************************************/ 165 | .slider { 166 | background: rgb(246, 246, 246); 167 | padding: 70px 0 0px !important; 168 | position: relative; 169 | overflow: hidden; 170 | } 171 | .carousel { 172 | margin-bottom: 0; 173 | } 174 | .carousel-inner>.item>img, .carousel-inner>.item>a>img { 175 | display: inline-block; 176 | } 177 | 178 | 179 | 180 | /************************************************************* 181 | section#features 182 | **************************************************************/ 183 | .features { 184 | background: rgb(255, 135, 89); 185 | border-top: 1px solid rgba(255, 255, 255, 0.54); 186 | color: #fff; 187 | padding: 20px 0; 188 | } 189 | 190 | .feature { 191 | // border-right: 1px solid rgba(255, 255, 255, 0.3); 192 | border-left: 1px solid rgba(255, 255, 255, 0.3); 193 | padding: 12px 1px 9px 21px; 194 | } 195 | 196 | 197 | /************************************************************* 198 | section#testimonials 199 | **************************************************************/ 200 | .testimonials { 201 | padding: 90px 0 60px !important; 202 | } 203 | blockquote { 204 | padding: 0 0 0 15px; 205 | margin: 0 0 20px; 206 | border-left: 0px solid rgb(238, 238, 238); 207 | } 208 | blockquote > div { 209 | text-align: center; 210 | padding: 0 200px; 211 | } 212 | blockquote p { 213 | margin-top: 30px; 214 | font-size: 24px; 215 | font-weight: 400; 216 | line-height: 1.55; 217 | } 218 | blockquote small { 219 | line-height: 3.5em; 220 | } 221 | .testimonials i { 222 | display: inline-block; 223 | color: rgb(220, 220,220); 224 | font-size: 200px; 225 | border-radius: 100px; 226 | padding: 20px 22px; 227 | -webkit-transition: all 400ms ease; 228 | -moz-transition: all 400ms ease; 229 | -ms-transition: all 400ms ease; 230 | -o-transition: all 400ms ease; 231 | transition: all 400ms ease; 232 | } 233 | blockquote:hover i { 234 | color: rgb(255, 125, 100); 235 | -webkit-transform:rotate(180deg); 236 | -moz-transform:rotate(180deg); 237 | -ms-transform:rotate(180deg); 238 | -o-transform:rotate(180deg); 239 | transform:rotate(180deg); 240 | } 241 | 242 | 243 | /************************************************************* 244 | section#prices 245 | **************************************************************/ 246 | .prices { 247 | background: image-url("bg2.jpg"); 248 | background-repeat: no-repeat; 249 | -webkit-background-size:cover; 250 | -moz-background-size:cover; 251 | background-size:cover; 252 | padding: 100px 0 !important; 253 | } 254 | .prices .container { 255 | max-width: 800px; 256 | } 257 | .plan { 258 | border: 5px solid rgb(244, 244, 244); 259 | background: #fff; 260 | padding: 15px; 261 | 262 | -webkit-border-radius: 5px; 263 | -moz-border-radius: 5px; 264 | border-radius: 5px; 265 | } 266 | .plan-1 { 267 | margin-top: 80px; 268 | } 269 | .plan-2 { 270 | margin-top: 50px; 271 | } 272 | .plan-3 { 273 | margin-top: 30px; 274 | } 275 | .plan-title { 276 | text-align: center; 277 | padding: 0 0 10px 0; 278 | } 279 | .plan-features li { 280 | padding: 5px 0; 281 | } 282 | .plan-features li a{ 283 | padding: 0 0; 284 | } 285 | .plan-features li a:hover { 286 | padding: 0 5px; 287 | } 288 | .plan-price { 289 | border-top: 1px dashed rgb(209, 209, 209); 290 | padding: 14px 0 0 0; 291 | margin: 0; 292 | font-size: 20px; 293 | } 294 | 295 | /************************************************************* 296 | section#contact 297 | **************************************************************/ 298 | .contact { 299 | background: rgb(243, 243, 243); 300 | } 301 | 302 | /* google map */ 303 | #map{ 304 | display: block; 305 | height: 450px; 306 | margin: 0 auto; 307 | } 308 | 309 | /* contact description - feedbacks and questions */ 310 | .contact > div.container { 311 | padding-top: 50px; 312 | } 313 | .contact h2 { 314 | font-weight: 400; 315 | } 316 | .contact i { 317 | color: rgb(68, 68, 68); 318 | } 319 | 320 | /* social icons */ 321 | ul.social { 322 | text-align: center; 323 | padding: 20px 0 0px; 324 | } 325 | ul.social li { 326 | display: inline-block; 327 | width: 60px; 328 | height: 60px; 329 | overflow: hidden; 330 | line-height: 60px; 331 | background: rgb(219, 82, 47); 332 | margin-bottom:.5em; 333 | font-size: 20px; 334 | 335 | -webkit-border-radius: 5px; 336 | -moz-border-radius: 5px; 337 | border-radius: 5px; 338 | 339 | -webkit-transition-duration: 0.7s; 340 | -moz-transition-duration: 0.7s; 341 | -o-transition-duration: 0.7s; 342 | transition-duration: 0.7s; 343 | } 344 | ul.social li:hover { 345 | background: #33cc99; 346 | box-shadow: inset 0 0 20px rgba(0, 0, 0, 0.3); 347 | } 348 | ul.social li:hover a { 349 | top: -60px; 350 | } 351 | ul.social li a { 352 | display: block; 353 | width: 100%; 354 | height: 200%; 355 | position: relative; 356 | top: 0; 357 | -webkit-transition: top 0.7s; 358 | -moz-transition: top 0.7s; 359 | -o-transition: top 0.7s; 360 | transition: top 0.7s; 361 | } 362 | ul.social li a i { 363 | color: #fff; 364 | } 365 | ul.social li:hover:before { 366 | opacity: 0; 367 | } 368 | ul.social li:nth-child(1):before{ 369 | content: 'P'; 370 | color: #fff; 371 | } 372 | ul.social li:nth-child(2):before{ 373 | content: 'F'; 374 | color: #fff; 375 | } 376 | ul.social li:nth-child(3):before{ 377 | content: 'T'; 378 | color: #fff; 379 | } 380 | ul.social li:nth-child(4):before{ 381 | content: 'G'; 382 | color: #fff; 383 | } 384 | ul.social li:nth-child(5):before{ 385 | content: 'L'; 386 | color: #fff; 387 | } 388 | ul.social li:nth-child(6):before{ 389 | content: '+'; 390 | color: #fff; 391 | } 392 | 393 | /* sliding contact form */ 394 | .contact-form input, .contact-form textarea { 395 | padding: 10px auto; 396 | height: 50px; 397 | 398 | -webkit-border-radius: 0; 399 | -moz-border-radius: 0; 400 | border-radius: 0; 401 | } 402 | .contact-form textarea { 403 | height: 150px; 404 | } 405 | .contact-form .container { 406 | max-width: 500px; 407 | padding: 20px 0 ; 408 | display: none; 409 | } 410 | .contact-form i { 411 | display: block; 412 | padding: 20px; 413 | font-size: 40px; 414 | margin-top: 55px; 415 | background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAIklEQVQIW2NkQAInT578zwjjgzjm5uaMYAEYB8RmROaABAD2Mw9fuRdIeAAAAABJRU5ErkJggg==) repeat; 416 | display: inline-block; 417 | 418 | -webkit-transition: all 300ms ease; 419 | -moz-transition: all 300ms ease; 420 | -ms-transition: all 300ms ease; 421 | -o-transition: all 300ms ease; 422 | transition: all 300ms ease; 423 | 424 | border-radius: 100%; 425 | border-bottom-right-radius: 0%; 426 | border-bottom-left-radius: 0%; 427 | } 428 | .contact-form-btn:hover { 429 | cursor: pointer; 430 | } 431 | .contact-form .btn-custom { 432 | border-radius: 5px; 433 | margin: 20px auto; 434 | } 435 | .contact-form .btn-custom:hover { 436 | color: #000; 437 | } 438 | 439 | /************************************************************* 440 | section#subscribe 441 | **************************************************************/ 442 | .subscribe { 443 | background: rgb(26, 26, 26); 444 | color: #fff; 445 | text-align: center; 446 | } 447 | .subscribe input{ 448 | border: 1px solid #fff; 449 | height: 42px; 450 | width: 322px; 451 | 452 | 453 | -webkit-border-radius: 0; 454 | -moz-border-radius: 0; 455 | border-radius: 0; 456 | 457 | -webkit-border-top-left-radius: 5px; 458 | -webkit-border-bottom-left-radius: 5px; 459 | -moz-border-top-left-radius: 5px; 460 | -moz-border-bottom-left-radius: 5px; 461 | border-top-left-radius: 5px; 462 | border-bottom-left-radius: 5px; 463 | } 464 | 465 | .btn-custom { 466 | display: inline-block; 467 | padding: 15px 32px 13px; 468 | margin-bottom: 0; 469 | font-size: 14px; 470 | line-height: 20px; 471 | color: #fff; 472 | text-align: center; 473 | vertical-align: middle; 474 | cursor: pointer; 475 | border: 2px solid rgb(219, 82, 47); 476 | background: rgb(219, 82, 47); 477 | 478 | -webkit-border-top-right-radius: 5px; 479 | -webkit-border-bottom-right-radius: 5px; 480 | -moz-border-top-right-radius: 5px; 481 | -moz-border-bottom-right-radius: 5px; 482 | border-top-right-radius: 5px; 483 | border-bottom-right-radius: 5px; 484 | 485 | -webkit-transition: all 300ms ease; 486 | -moz-transition: all 300ms ease; 487 | -ms-transition: all 300ms ease; 488 | -o-transition: all 300ms ease; 489 | transition: all 300ms ease; 490 | } 491 | .btn-custom:hover { 492 | background: transparent; 493 | } 494 | 495 | 496 | /************************************************************* 497 | #footer 498 | **************************************************************/ 499 | .footer { 500 | padding: 0px 0 !important; 501 | } 502 | .footer-title { 503 | font-size: 20px; 504 | } 505 | .footer-title a:hover { 506 | text-decoration: none; 507 | } 508 | .copyright { 509 | margin-top: 18px; 510 | } 511 | 512 | /************************************************************* 513 | responsive fix 514 | **************************************************************/ 515 | /* Large desktop */ 516 | @media (min-width: 1200px) { } 517 | 518 | /* Portrait tablet to landscape and desktop */ 519 | @media (min-width: 768px) and (max-width: 979px) { 520 | .header-description h1, .header-description h2 { 521 | font-size: 83px; 522 | line-height: 68px; 523 | } 524 | .header-features { 525 | margin: 0 0 30px 0; 526 | } 527 | .header-feature { 528 | margin: 0 0 30px 0; 529 | padding: 0; 530 | } 531 | } 532 | 533 | /* Landscape phone to portrait tablet */ 534 | @media (max-width: 767px) { 535 | body { 536 | padding: 0; 537 | } 538 | .container { 539 | padding-left: 20px; 540 | padding-right: 20px; 541 | } 542 | .header-description { 543 | margin: 76px 0 80px; 544 | } 545 | .header-description h1, .header-description h2 { 546 | font-size: 66px; 547 | line-height: 58px; 548 | } 549 | .header-btn { 550 | margin-top: 74px; 551 | } 552 | .header-features { 553 | margin: 0 0 30px 0; 554 | } 555 | .header-feature { 556 | margin: 0 0 30px 0; 557 | padding: 0; 558 | } 559 | 560 | /* blockqoute */ 561 | .testimonials { 562 | padding: 44px 0 60px !important; 563 | } 564 | .testimonials i { 565 | font-size: 106px; 566 | } 567 | blockquote > div { 568 | padding: 0; 569 | } 570 | blockquote p { 571 | font-size: 18px; 572 | } 573 | 574 | /* contact form */ 575 | .contact-form-inner { 576 | padding: 18px !important; 577 | } 578 | .subscribe input { 579 | height: 31px; 580 | width: 154px; 581 | } 582 | .btn-custom { 583 | padding: 9px 14px 8px; 584 | } 585 | 586 | .congrats-sam { 587 | max-width: 300px; 588 | } 589 | 590 | } 591 | 592 | /* Landscape phones and down */ 593 | @media (max-width: 480px) { 594 | 595 | } 596 | -------------------------------------------------------------------------------- /app/assets/stylesheets/_footer.scss: -------------------------------------------------------------------------------- 1 | footer { 2 | color: #333; 3 | padding-top: 40px; 4 | padding-bottom: 30px; 5 | background: $gray-lighter; 6 | } 7 | 8 | .container-disqus { 9 | max-width: 900px; 10 | } 11 | 12 | #license { 13 | float: right; 14 | } 15 | 16 | #hide-cc { 17 | visibility: hidden; 18 | display: none; 19 | } 20 | -------------------------------------------------------------------------------- /app/assets/stylesheets/_install_steps.scss: -------------------------------------------------------------------------------- 1 | /* BASE FONTS */ 2 | @import url(https://fonts.googleapis.com/css?family=Lato:300,400,700); 3 | @import url(https://fonts.googleapis.com/css?family=Rokkitt:400,700); 4 | 5 | $sansFontFamily: 'Lato', "Helvetica Neue", Helvetica, Arial, sans-serif; 6 | $serifFontFamily: 'Rokkitt', Georgia, "Times New Roman", Times, serif; 7 | 8 | body { 9 | letter-spacing: .08em; 10 | font-weight: 300; 11 | } 12 | 13 | h1 { 14 | font-family: $sansFontFamily; 15 | font-weight: 300; 16 | margin: 1em 0; 17 | text-align: center; 18 | text-shadow: 0 0 2px rgb(151, 151, 151); 19 | } 20 | 21 | h2 , h3, h4{ 22 | font-family: $sansFontFamily; 23 | } 24 | 25 | strong { 26 | font-weight: 400; 27 | } 28 | 29 | i { 30 | font-size: 15px; 31 | } 32 | 33 | pre { 34 | margin: 1.4em 0; 35 | } 36 | 37 | /* SECTIONS */ 38 | 39 | section { 40 | padding-top: 2em; 41 | } 42 | 43 | #confetti { 44 | z-index: -1; 45 | position: fixed; 46 | margin-left: -10%; 47 | } 48 | 49 | .install_steps.show { 50 | color: white; 51 | } 52 | 53 | .install_steps.show { 54 | &.congratulations, &.choose_os { 55 | color: #3B3C3C; 56 | } 57 | } 58 | 59 | .choose_os_version, .install_rails, .update_rubygems { 60 | background-color: #5B6474; 61 | 62 | .note:before { 63 | border-color:#fff #5B6474 rgba(255,255,255,0.2) #658E15; 64 | } 65 | } 66 | 67 | .railsinstaller, .railsinstaller_windows { 68 | .option { 69 | background-color: rgba(255,255,255,0.9); 70 | border-color: #fff; 71 | color: #72B49B; 72 | @extend .btn; 73 | @extend .btn-large; 74 | @extend .btn-primary; 75 | } 76 | 77 | .note:before { 78 | border-color:#fff #72B49B rgba(255,255,255,0.2) #658E15; 79 | } 80 | } 81 | 82 | #prompt { 83 | color: #8FE7B3; 84 | padding: 1.7em; 85 | } 86 | 87 | .find_the_command_line, .install_rvm_and_ruby { 88 | background-color: #3B4960; 89 | 90 | .note:before { 91 | border-color:#fff #3B4960 rgba(255,255,255,0.2) #658E15; 92 | } 93 | } 94 | 95 | .railsinstaller, .rails_for_linux_and_other, .install_git, .railsinstaller_windows { 96 | background-color: #CE613E; 97 | 98 | .prompt { 99 | .troubleshooting { 100 | min-width: 175px; 101 | text-align: center; 102 | background-color: #3B4960; 103 | border-color: #3B4960; 104 | margin-bottom: 3px; 105 | 106 | @extend .btn; 107 | @extend .btn-large; 108 | @extend .btn-primary; 109 | 110 | &:hover { 111 | background-color: #5B6474; 112 | border-color: #5B6474; 113 | } 114 | } 115 | } 116 | 117 | .note:before { 118 | border-color:#fff #CE613E rgba(255,255,255,0.2) #CE613E; 119 | } 120 | } 121 | 122 | .verify_ruby_version, .install_xcode, .textmate { 123 | background-color: #65AE55; 124 | 125 | .note:before { 126 | border-color:#fff #65AE55 rgba(255,255,255,0.2) #658E15; 127 | } 128 | } 129 | 130 | .configure_git, .find_git_bash, .install_homebrew, .verify_rails_version { 131 | background-color: #8E59BC; 132 | 133 | .note:before { 134 | border-color:#fff #8E59BC rgba(255,255,255,0.2) #658E15; 135 | } 136 | } 137 | 138 | .sublime_text, .update_ruby, .create_ssh_key { 139 | background-color: #72B49B; 140 | 141 | .option { 142 | background-color: #fff; 143 | border-color: #fff; 144 | color: #72B49B; 145 | @extend .btn; 146 | @extend .btn-large; 147 | @extend .btn-primary; 148 | } 149 | 150 | .note:before { 151 | border-color:#fff #72B49B rgba(255,255,255,0.2) #72B49B; 152 | } 153 | } 154 | 155 | .create_your_first_app, .update_rails { 156 | background: #CF7C00; 157 | 158 | .note:before { 159 | border-color:#fff #CF7C00 rgba(255,255,255,0.2) #658E15; 160 | } 161 | } 162 | 163 | .see_it_live { 164 | background: #5181BD; 165 | 166 | .note:before { 167 | border-color:#fff #5181BD rgba(255,255,255,0.2) #658E15; 168 | } 169 | } 170 | 171 | .choose_your_os { 172 | padding: 30px; 173 | } 174 | 175 | .congratulations a { 176 | color: #5181BD; 177 | } 178 | 179 | header { 180 | background-color: #eeeeee; 181 | 182 | .site-title { 183 | margin: 20px; 184 | color: #333; 185 | 186 | &:hover { 187 | color: black; 188 | } 189 | } 190 | 191 | .nav { 192 | margin-top: 34px; 193 | } 194 | 195 | a { 196 | color: #333; 197 | } 198 | } 199 | 200 | .instructions { 201 | // text-align: center; 202 | font-size: 20px; 203 | line-height: 1.4; 204 | margin: 0 15%; 205 | 206 | li { 207 | margin-bottom: 30px; 208 | 209 | ul, pre { 210 | text-align: left; 211 | } 212 | } 213 | 214 | img { 215 | padding: 1.4em 0; 216 | } 217 | } 218 | 219 | .congrats-text { 220 | margin-bottom: 100px; 221 | } 222 | 223 | .center { 224 | text-align: center; 225 | margin: auto; 226 | display: block; 227 | } 228 | 229 | .prompt { 230 | padding-bottom: 40px; 231 | max-width: 100%; 232 | 233 | .options { 234 | padding-top: 20px; 235 | } 236 | 237 | .button_to { 238 | margin-top: 5px; 239 | display: inline-block; 240 | } 241 | 242 | .option { 243 | min-width: 175px; 244 | text-align: center; 245 | background-color: #515151; 246 | border-color: #515151; 247 | margin-bottom: 3px; 248 | 249 | @extend .btn; 250 | @extend .btn-large; 251 | @extend .btn-primary; 252 | 253 | &:hover { 254 | background-color: #3B3C3C; 255 | border-color: #3B3C3C; 256 | } 257 | } 258 | 259 | .troubleshooting { 260 | min-width: 175px; 261 | text-align: center; 262 | background-color: #d9534f; 263 | border-color: #d9534f; 264 | margin-bottom: 3px; 265 | 266 | @extend .btn; 267 | @extend .btn-large; 268 | @extend .btn-primary; 269 | 270 | &:hover { 271 | background-color: #c9302c; 272 | border-color: #c9302c; 273 | } 274 | } 275 | } 276 | 277 | .list-image { 278 | margin: 10px; 279 | } 280 | 281 | /* folded corner 282 | http://nicolasgallagher.com/pure-css-folded-corner-effect/ 283 | */ 284 | 285 | .note { 286 | background: rgba(255,255,255,0.2); 287 | color: #fff; 288 | font-size: 90%; 289 | margin-bottom: 2em; 290 | margin-top: 2em; 291 | overflow: hidden; 292 | padding: 1em 1.5em; 293 | position: relative; 294 | 295 | &:before { 296 | content:""; 297 | position:absolute; 298 | top:0; 299 | right:0; 300 | border-width:0 16px 16px 0; 301 | border-style:solid; 302 | // border-color:#fff #CF7C00 rgba(255,255,255,0.2) #658E15; 303 | background: rgba(255,255,255,1); 304 | -webkit-box-shadow:0 1px 1px rgba(0,0,0,0.3), -1px 1px 1px rgba(0,0,0,0.2); 305 | -moz-box-shadow:0 1px 1px rgba(0,0,0,0.3), -1px 1px 1px rgba(0,0,0,0.2); 306 | box-shadow:0 1px 1px rgba(0,0,0,0.3), -1px 1px 1px rgba(0,0,0,0.2); 307 | display:block; width:0; /* Firefox 3.0 damage limitation */ 308 | } 309 | 310 | &.rounded { 311 | -webkit-border-radius:5px 0 5px 5px; 312 | -moz-border-radius:5px 0 5px 5px; 313 | border-radius:5px 0 5px 5px; 314 | 315 | &:before { 316 | border-width:8px; 317 | border-color:#fff #fff transparent transparent; 318 | -webkit-border-bottom-left-radius:5px; 319 | -moz-border-radius:0 0 0 5px; 320 | border-radius:0 0 0 5px; 321 | } 322 | } 323 | } 324 | 325 | #git-intro { 326 | background: rgba(255, 255, 255, 0.2); 327 | padding: 1%; 328 | border-radius: 2px; 329 | box-shadow: 0 0 1px rgb(85, 85, 85); 330 | } 331 | 332 | // Clearfix 333 | // -------- 334 | // For clearing floats like a boss h5bp.com/q 335 | .clearfix { 336 | *zoom: 1; 337 | 338 | &:before, &:after { 339 | display: table; 340 | content: ""; 341 | // Fixes Opera/contenteditable bug: 342 | // http://nicolasgallagher.com/micro-clearfix-hack/#comment-36952 343 | line-height: 0; 344 | } 345 | 346 | &:after { 347 | clear: both; 348 | } 349 | } 350 | -------------------------------------------------------------------------------- /app/assets/stylesheets/_sidebar.scss: -------------------------------------------------------------------------------- 1 | /* By default it's not affixed in mobile views, so undo that */ 2 | .sidebar.affix-bottom, 3 | .sidebar.affix { 4 | position: static; 5 | } 6 | 7 | /* Tablets/desktops and up */ 8 | @media screen and (min-width: 992px) { 9 | .sidebar.affix-bottom, 10 | .sidebar.affix { 11 | width: 293px; 12 | } 13 | .sidebar.affix { 14 | position: fixed; /* Undo the static from mobile-first approach */ 15 | top: 20px; 16 | } 17 | .sidebar.affix-bottom { 18 | position: absolute; /* Undo the static from mobile-first approach */ 19 | } 20 | } 21 | 22 | /* Large desktops and up */ 23 | @media screen and (min-width: 1200px) { 24 | 25 | /* Widen the fixed sidebar again */ 26 | .sidebar.affix-bottom, 27 | .sidebar.affix { 28 | width: 370px; 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /app/assets/stylesheets/application.css.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * This is a manifest file that'll be compiled into application.css, which will include all the files 3 | * listed below. 4 | * 5 | * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets, 6 | * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path. 7 | * 8 | * You're free to add application-wide styles to this file and they'll appear at the top of the 9 | * compiled file, but it's generally better to create a new file per style scope. 10 | * 11 | *= require_self 12 | */ 13 | 14 | @import "bootstrap"; 15 | @import "font-awesome"; 16 | 17 | // Actual app css 18 | @import "beaker"; 19 | @import "sidebar"; 20 | @import "footer"; 21 | @import "install_steps"; 22 | -------------------------------------------------------------------------------- /app/controllers/application_controller.rb: -------------------------------------------------------------------------------- 1 | class ApplicationController < ActionController::Base 2 | # Prevent CSRF attacks by raising an exception. 3 | # For APIs, you may want to use :null_session instead. 4 | protect_from_forgery with: :exception 5 | 6 | def current_user 7 | @current_user ||= User.new config: session.fetch(:user, {}) 8 | end 9 | 10 | def os; params[:os] || current_user.os; end 11 | def os_version; params[:os_version] || current_user.os_version; end 12 | def ruby_version; current_user.ruby_version; end 13 | def rails_version; current_user.rails_version; end 14 | 15 | def mac?; os =~ /Mac/; end 16 | def windows?; os =~ /Windows/; end 17 | def linux?; os =~ /Linux/; end 18 | 19 | helper_method :mac?, :windows?, :current_user, :os_version 20 | end 21 | -------------------------------------------------------------------------------- /app/controllers/concerns/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onemonth/install_rails/eb21694d10c94b1ba1e69e88d8db61d496eac0ed/app/controllers/concerns/.keep -------------------------------------------------------------------------------- /app/controllers/install_steps_controller.rb: -------------------------------------------------------------------------------- 1 | class InstallStepsController < ApplicationController 2 | include Wicked::Wizard 3 | 4 | prepend_before_action :set_steps 5 | after_action :set_session 6 | 7 | rescue_from Wicked::Wizard::InvalidStepError, with: ->{ redirect_to root_path } 8 | 9 | def show 10 | case step 11 | when :update_ruby 12 | skip_step if ruby_version =~ /2/ 13 | when :update_rails 14 | skip_step if rails_version =~ /5/ 15 | end 16 | render_wizard 17 | end 18 | 19 | def update 20 | current_user.update(user_params) 21 | render_wizard current_user 22 | end 23 | 24 | private 25 | 26 | def set_steps 27 | self.steps = [:choose_os] 28 | case 29 | when mac? 30 | self.steps += mac_steps 31 | when windows? 32 | self.steps += windows_steps 33 | when linux? 34 | self.steps += ubuntu_steps 35 | end 36 | end 37 | 38 | def mac_steps 39 | steps = [:choose_os_version] 40 | case os_version 41 | when "10.14", "10.13", "10.12", "10.11", "10.10", "10.9" 42 | steps += [ 43 | :install_xcode, 44 | :find_the_command_line, 45 | :install_homebrew, 46 | :install_git, 47 | :configure_git, 48 | :install_rvm_and_ruby, 49 | :install_rails, 50 | :sublime_text, 51 | :create_your_first_app, 52 | :see_it_live 53 | ] 54 | end 55 | return steps 56 | end 57 | 58 | def windows_steps 59 | [ 60 | :railsinstaller_windows, 61 | :find_git_bash, 62 | :update_rubygems, 63 | :update_rails, 64 | :sublime_text, 65 | :create_your_first_app, 66 | :see_it_live 67 | ] 68 | end 69 | 70 | def ubuntu_steps 71 | [:rails_for_linux_and_other] 72 | end 73 | 74 | def finish_wizard_path 75 | congratulations_path 76 | end 77 | 78 | def user_params 79 | params.permit(:os, :os_version, :ruby_version, :rails_version) 80 | end 81 | 82 | def set_session 83 | session[:user] = current_user.config 84 | end 85 | end 86 | -------------------------------------------------------------------------------- /app/controllers/main_controller.rb: -------------------------------------------------------------------------------- 1 | class MainController < ApplicationController 2 | def index 3 | end 4 | 5 | def test 6 | render layout: "application" 7 | end 8 | 9 | def congratulations 10 | render layout: "install_steps" 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /app/controllers/sessions_controller.rb: -------------------------------------------------------------------------------- 1 | class SessionsController < ApplicationController 2 | def destroy 3 | sign_out 4 | redirect_to root_url 5 | end 6 | end 7 | -------------------------------------------------------------------------------- /app/helpers/application_helper.rb: -------------------------------------------------------------------------------- 1 | module ApplicationHelper 2 | end 3 | -------------------------------------------------------------------------------- /app/helpers/install_steps_helper.rb: -------------------------------------------------------------------------------- 1 | module InstallStepsHelper 2 | 3 | def percent_completed 4 | number_to_percentage((wizard_steps.index(step) / wizard_steps.size.to_f)*100, precision: 0) 5 | end 6 | 7 | def progress_bar 8 | content_tag :div, class: "progress" do 9 | content_tag :div, nil, class: "bar", style: "width: #{percent_completed};" 10 | end 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /app/helpers/welcome_helper.rb: -------------------------------------------------------------------------------- 1 | module WelcomeHelper 2 | end 3 | -------------------------------------------------------------------------------- /app/mailers/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onemonth/install_rails/eb21694d10c94b1ba1e69e88d8db61d496eac0ed/app/mailers/.keep -------------------------------------------------------------------------------- /app/models/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onemonth/install_rails/eb21694d10c94b1ba1e69e88d8db61d496eac0ed/app/models/.keep -------------------------------------------------------------------------------- /app/models/concerns/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onemonth/install_rails/eb21694d10c94b1ba1e69e88d8db61d496eac0ed/app/models/concerns/.keep -------------------------------------------------------------------------------- /app/models/user.rb: -------------------------------------------------------------------------------- 1 | class User 2 | include ActiveModel::Model 3 | 4 | attr_accessor :config 5 | 6 | def update(params) 7 | params.each do |key, value| 8 | config[key] = value 9 | end 10 | end 11 | 12 | def save 13 | true 14 | end 15 | 16 | def method_missing(name) 17 | config[name.to_s] 18 | end 19 | end 20 | -------------------------------------------------------------------------------- /app/views/install_steps/choose_os.html.erb: -------------------------------------------------------------------------------- 1 |
2 |

First off, we need to figure out which instructions to give you.

3 |

Which operating system are you using?

4 |
5 | 6 |
7 |
8 | <%= image_tag "mac_steps/apple.png", class: 'choose_your_os' %> 9 |
10 | <%= button_to "Mac", wizard_path, name: :os, method: :put, class: "option" %> 11 |
12 |
13 | <%= image_tag "microsoft.png", class: 'choose_your_os' %> 14 |
15 | <%= button_to "Windows", wizard_path, name: :os, method: :put, class: "option" %> 16 |
17 |
18 | <%= image_tag "linux-logo.png", class: 'choose_your_os' %> 19 |
20 | <%= button_to "Linux", wizard_path, name: :os, method: :put, class: "option" %> 21 |
22 |
23 | -------------------------------------------------------------------------------- /app/views/install_steps/choose_os_version.html.erb: -------------------------------------------------------------------------------- 1 |
2 |

What version of OS X do you have?

3 |
    4 |
  1. 5 |

    Click on the  Apple logo (at the top left of your screen)
    and select “About This Mac

    6 |
    <%= image_tag "mac_steps/select_about_this_mac.png" %>
    7 |

    Your version number is shown under OS X

    8 |
    <%= image_tag "mac_steps/about_this_mac.png" %>
    9 |
  2. 10 |
11 |
12 | 13 |
14 |

15 | Select your version of OS X 16 |

17 |
18 | <%= button_to "10.14", wizard_path, name: :os_version, method: :put, class: "option" %> 19 | <%= button_to "10.13", wizard_path, name: :os_version, method: :put, class: "option" %> 20 | <%= button_to "10.12", wizard_path, name: :os_version, method: :put, class: "option" %> 21 |
22 | <%= button_to "10.11", wizard_path, name: :os_version, method: :put, class: "option" %> 23 | <%= button_to "10.10", wizard_path, name: :os_version, method: :put, class: "option" %> 24 | <%= button_to "10.9", wizard_path, name: :os_version, method: :put, class: "option" %> 25 |
26 | <%= button_tag "Troubleshooting", type: "button", class: "troubleshooting", data: {toggle: "collapse", target: "#trouble"} %> 27 |
28 |
29 | 30 |
31 | <%= render 'layouts/disqus' %> 32 |
33 | -------------------------------------------------------------------------------- /app/views/install_steps/configure_git.html.erb: -------------------------------------------------------------------------------- 1 |
2 |

Configure Git

3 |
    4 |
  1. 5 | In your Terminal type: 6 |
    git config --global user.name "Your Actual Name"
    7 |
  2. 8 |
  3. 9 | And then type: 10 |
    git config --global user.email "Your Actual Email"
    11 |
    12 |
    13 | Your email address should be the same one associated with your <%= link_to "GitHub", "http://help.github.com/articles/set-up-git", target: "_blank" %> account. 14 |
    15 |
    16 |
  4. 17 |
  5. 18 | To verify your configuration, type: 19 |
    git config -l
    20 |
  6. 21 |

    Your email and user name should appear in return

    22 | 23 |
24 |
25 | 26 |
27 |

Why did we do this? What is Git?

28 |

29 | Git is version control software. You will use Git to track and manage your coding history as well as get into the programming community as a whole. 30 |

31 |

32 | To put it another way, Git will allow you to make revisions of your work as well as others… this way you can feel assured that if you make an awful mistake to fix or have a solution for someone else, Git will be the best way to do it! 33 |

34 | 35 |
36 |

More information and resources on Git here: <%= link_to "Here", "http://git-scm.com/videos" %>

37 |

Never used the command line? You may want to pause and take this <%= link_to "free command line tutorial", "https://onemonth.com/courses/command-line-crash-course?utm_source=installrails&utm_campaign=rails&utm_medium=installrails" %>.

38 |
39 |
40 | 41 | <%= render 'layouts/step_navigation' %> 42 | 43 |
44 | <%= render 'layouts/disqus' %> 45 |
46 | -------------------------------------------------------------------------------- /app/views/install_steps/create_ssh_key.html.erb: -------------------------------------------------------------------------------- 1 |
2 |

Create an SSH Key

3 |
    4 |
  1. 5 | Open your terminal 6 |
      7 |
    • Open Spotlight (the little icon on the top right corner of your mac) and type "Terminal". Hit Enter.
    • 8 |
    9 |
  2. 10 | 11 |
  3. 12 | In your terminal, type this: 13 |
    ssh-keygen -C YourEmail@example.com -t rsa
    14 |
      15 |
    • When prompted to enter a keyphrase simply hit the “Enter” key.
    • 16 |
    17 |
  4. 18 | 19 |
  5. Expected result:
  6. 20 |
    Generating public/private rsa key pair.
    21 | Enter file in which to save the key (/Users/yourname/.ssh/id_rsa):
    22 | Created directory '/Users/yourname/.ssh'.
    23 | Enter passphrase (empty for no passphrase):
    24 | Enter same passphrase again:
    25 | Your identification has been saved in /Users/yourname/.ssh/id_rsa.
    26 | Your public key has been saved in /Users/yourname/.ssh/id_rsa.pub.
    27 | The key fingerprint is:
    28 | 88:63:df:77:ef:3l:c7:3z:28:11:95:0d:3e:sf:5h:9a YourEmail@example.com
    29 |
30 |
31 | 32 | <%= render partial: "layouts/step_navigation" %> 33 | 34 |
35 | <%= render 'layouts/disqus' %> 36 |
37 | -------------------------------------------------------------------------------- /app/views/install_steps/create_your_first_app.html.erb: -------------------------------------------------------------------------------- 1 |
2 |

Create your first app

3 |

If you followed all the previous steps correctly, you should be ready to create your first app.

4 | 5 |
    6 |
  1. 7 | Run the cd (change directory) command in 8 | <% if windows? %> 9 | Git Bash 10 | <% else %> 11 | Terminal 12 | <% end %> 13 | to change directory into your desktop folder 14 |
    $ cd ~/Desktop
    15 |
  2. 16 | 17 |
    18 |
    NOTE: We do this so that when we create a new application, we’ll be able to see it in our desktop and access it more easily.
    19 |
    <%= image_tag "sam.png" %>
    20 |
    21 | 22 |
  3. 23 | You can double check that you did this correctly with the command pwd (print working directory), which will tell you what folder you’re currently in. 24 |
    $ pwd
    25 |
  4. 26 | 27 |
  5. 28 | Expected result: 29 |
    /Users/[YOUR USER NAME]/Desktop
    30 |
  6. 31 | 32 |
  7. 33 | Now we’re going to run a command that will create a new rails application 34 |
    $ rails new sample_app
    35 |
  8. 36 | 37 |
  9. We just created a new app! Let’s see it live.
  10. 38 |
39 |
40 | 41 | <%= render 'layouts/step_navigation' %> 42 | 43 |
44 |

#1 - My error is about “Uglifier”

45 |

If your error resembles something like…

46 |
#ERROR MESSAGE:
47 | Could not find gem 'uglifier <>=1.0.3> x85-mingw32' in the gems available on this machine
48 | Run 'bundle install' to install missing gems
49 |

Try running

50 |
$ gem install uglifier
51 |
52 | 53 |

#2 - My error is about "sdoc"

54 |

If your error resembles something like…

55 |
#ERROR MESSAGE:
56 | Could not find gem 'sdoc (>= 0) ruby' in the gems available on this machine
57 | Run 'bundle install' to install missing gems.
58 |

Try running

59 |
$ gem install sdoc
60 | 61 |

62 | 63 | <%= render 'layouts/disqus' %> 64 |
65 | -------------------------------------------------------------------------------- /app/views/install_steps/find_git_bash.html.erb: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | Now we're going to explore something called: 5 | 6 |

7 | The Command Line 8 |

9 |
10 | 11 |

The command line is a place on your computer where you can type in commands (I'll show you in a moment).

12 |

After you type them in you'll hit Enter to run those commands. And then the magic happens!

13 |

Never used the command line? You may want to pause and take this <%= link_to "free command line tutorial", "https://onemonth.com/courses/command-line-crash-course?utm_source=installrails&utm_campaign=rails&utm_medium=installrails" %>.

14 | 15 |
16 | 17 |
    18 |
  1. 19 |

    Open up the Git Bash application from your RailsInstaller folder.

    20 |

    Having trouble finding it? Look under the "Start" menu."

    21 |
    <%= image_tag "windows/windows-gitbash.png" %>
    22 |
  2. 23 |
24 |
25 | 26 | <%= render 'layouts/step_navigation' %> 27 | 28 |
29 | <%= render 'layouts/disqus' %> 30 |
31 | -------------------------------------------------------------------------------- /app/views/install_steps/find_the_command_line.html.erb: -------------------------------------------------------------------------------- 1 |
2 |
3 | Now we’re going to explore something called: 4 |

The Command Line

5 |
6 | 7 |

The command line is a place on your computer where you can type in executable code (You will see in a moment)

8 |

After you type them in, you’ll hit Enter to run the commands

9 |

This is where magic happens

10 |

Never used the command line? You may want to pause and take this <%= link_to "free command line tutorial", "https://onemonth.com/courses/command-line-crash-course?utm_source=installrails&utm_campaign=rails&utm_medium=installrails" %>.

11 |
12 | 13 |
    14 |
  1. 15 |

    On a Mac, we can find the Terminal by opening Spotlight and type “Terminal
    (the little icon on the top right corner of your Mac)

    16 |
    <%= image_tag "mac_steps/spotlight_search_for_terminal.png" %>
    17 |
  2. 18 | 19 |
  3. 20 |

    Alternatively, you could look in your “Applications” folder 21 |
    It’s under “Applications → Utilities → Terminal”)

    22 |
    <%= image_tag "mac_steps/applications_utilities_terminal.png" %>
    23 |
  4. 24 | 25 |
  5. 26 |

    Once you open it, your Terminal should look something like this (don’t freak out):

    27 |
    <%= image_tag "mac_steps/terminal.png" %>
    28 |
  6. 29 | 30 |
    31 |
    32 | PRO TIP: 33 | Add Terminal to your Dock; you’ll be using it a lot. 34 | Click & Hold the Terminal dock icon and select 35 | “Options > Keep in Dock” 36 |
    37 | 38 |
    39 | <%= image_tag "sam.png" %> 40 |
    41 |
    42 | 43 |
  7. 44 |

    Now try typing the following command and hitting “Enter

    45 | 46 |
    $ jot - 1 25
    47 | 48 |
    49 |
    50 | Ignore the $ and the space at the beginning. It is called a prompt and it just means the command is executable 51 |
    52 |
    53 | 54 |

    It should print out list of all the numbers from 1 to 25

    55 |
    $ jot - 1 25
    56 | 1
    57 | 2
    58 | .
    59 | .
    60 | .
    61 | 24
    62 | 25
    63 | 64 |

    Try going up to a million. ~__^

    65 |
  8. 66 |
67 |
68 | 69 | <%= render partial: "layouts/step_navigation" %> 70 | 71 |
72 | <%= render 'layouts/disqus' %> 73 |
74 | -------------------------------------------------------------------------------- /app/views/install_steps/install_git.html.erb: -------------------------------------------------------------------------------- 1 |
2 |

Install Git

3 |
    4 |
  1. 5 | In your terminal type 6 |
  2. 7 |
    brew install git
    8 |
  3. 9 | To verify your installation, in your terminal type 10 |
  4. 11 |
    git --version
    12 |

    Approximate expected result

    13 |
    git version 2.x.x
    14 |
15 |
16 | 17 | <%= render 'layouts/step_navigation' %> 18 | 19 |
20 | <%= render 'layouts/disqus' %> 21 |
22 | -------------------------------------------------------------------------------- /app/views/install_steps/install_homebrew.html.erb: -------------------------------------------------------------------------------- 1 |
2 |

Install Homebrew

3 |
    4 |
  1. 5 | In your terminal type 6 |
  2. 7 |
    ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
    8 | 9 |
    10 |
    11 | Note: If this doesn’t work, <%= link_to "go here", "https://github.com/Homebrew/brew/blob/master/docs/Installation.md" %> and follow the instructions 12 |
    13 |
    14 |
  3. 15 | To verify your installation, enter the following in your terminal: 16 |
  4. 17 |
    brew -v
    18 |

    Approximated result

    19 |
    Homebrew 2.x.x
    20 |
  5. 21 | To make sure Homebrew is feeling alright, type: 22 |
  6. 23 |
    brew doctor
    24 |

    If it asks you to run brew update, do so.

    25 |
    26 |
    27 |

    28 | If it returns:
    “No such file or directory - /usr/local/Cellar”
    You should type and enter: 29 |

    30 |
    cd
    31 | sudo mkdir /usr/local/Cellar
    32 |

    Enter your login password and press enter (you won’t be able to see it)

    33 |
    34 |
    35 |
36 |
37 | 38 | <%= render 'layouts/step_navigation' %> 39 | 40 |
41 | <%= render 'layouts/disqus' %> 42 |
43 | -------------------------------------------------------------------------------- /app/views/install_steps/install_rails.html.erb: -------------------------------------------------------------------------------- 1 |
2 |

Install Rails

3 |
    4 |
  1. 5 | In your terminal type 6 |
  2. 7 |
    gem install rails --no-document
    8 |
  3. 9 | To verify your installation, in your terminal type 10 |
  4. 11 |
    rails --version
    12 |

    Approximate expected result

    13 |
    Rails 6.x.x
    14 |
15 |
16 |
17 |

Notes:

18 |
    19 |
  • This will install Rails and may take a while.
  • 20 |
  • If Rails cannot install, check the failure message. if it contains: 21 |
    -----
    22 | libxml2 is missing.  Please locate mkmf.log to investigate how it is failing.
    23 | -----
    24 | and you are using OS X 10.10 or later, then run: 25 |
    brew install libxml2
    26 | env ARCHFLAGS="-arch x86_64" gem install nokogiri:1.6.4.1 -- --use-system-libraries --with-xml=/usr/local/Cellar/libxml2/
    27 | to install libxml2 and nokogiri and rerun the rails instalation. 28 |

    Else, try running the code below and then restarting your computer: 29 |

    brew install apple-gcc42
    30 |

    31 |

    If you are still stuck, try: 32 |

    sudo xcodebuild -license
    33 | sudo port upgrade outdated
    34 | rvm reinstall 2.4.1
    35 |

    36 |
  • 37 |
38 |
39 |
40 |
41 | 42 | <%= render 'layouts/step_navigation' %> 43 | 44 |
45 | <%= render 'layouts/disqus' %> 46 |
47 | -------------------------------------------------------------------------------- /app/views/install_steps/install_rvm_and_ruby.html.erb: -------------------------------------------------------------------------------- 1 | 2 |
3 |

Install RVM and Ruby

4 |

RVM is short for Ruby Version Manager. RVM makes it easy to install different versions of Ruby on your computer and manage them as well

5 |
6 |
    7 |
  1. To install RVM, type this in your terminal
  2. 8 | 9 |
    \curl -L https://get.rvm.io | bash -s stable
    10 | 11 |
  3. Close your terminal and then re-open it. Now, lets see if RVM was loaded properly: 12 |
    rvm | head -n 1
    13 |
  4. 14 | 15 |
  5. Now install Ruby with: 16 |
    rvm use ruby --install --default
    17 | ruby -v
    18 |

    This will install Ruby and may take a while, on older versions of OS X it might take up to 1 hour.

    19 |
  6. 20 |
21 |
22 | 23 | <%= render 'layouts/step_navigation' %> 24 | 25 |
26 | <%= render 'layouts/disqus' %> 27 |
28 | -------------------------------------------------------------------------------- /app/views/install_steps/install_xcode.html.erb: -------------------------------------------------------------------------------- 1 |
2 |

Install Xcode

3 |
    4 |
  1. 5 | Install Xcode from the Mac App Store. 6 |
    7 |
    8 | Assuming Xcode has finished installing: Now you can check the Command Line Tools. 9 |
    10 |
    11 |
  2. 12 | 13 |
  3. Open Xcode. In the menu bar click on “Xcode” then select “Preferences” 14 | <%= image_tag "mac_steps/xcode_preferences.png", class: "list-image" %> 15 |
  4. 16 |
  5. Click the “Locations” tab and verify your version below 17 | <%= image_tag "mac_steps/xcode_command_line_tool.png", class: "list-image" %> 18 |
  6. 19 |
20 |

your version of xcode may vary, current version is 10.0+

21 |
22 | 23 | <%= render 'layouts/step_navigation' %> 24 | 25 |
26 | <%= render 'layouts/disqus' %> 27 |
28 | -------------------------------------------------------------------------------- /app/views/install_steps/rails_for_linux_and_other.html.erb: -------------------------------------------------------------------------------- 1 |
2 |

Using the Linux OS?

3 | 4 |

Follow the setup instructions at RailsGirls and then choose "Next Step" below. If you run into trouble you may want to consult RailsApps guide which goes much deeper into the Linux installation process. 5 |

6 | 7 | <%= render 'layouts/step_navigation' %> 8 | 9 |
10 | 11 |
12 | 13 |
14 | <%= render 'layouts/disqus' %> 15 |
16 | -------------------------------------------------------------------------------- /app/views/install_steps/railsinstaller_windows.html.erb: -------------------------------------------------------------------------------- 1 |
2 |

Time to install Rails!

3 |
    4 |
  1. 5 |

    Visit the site <%= link_to "Railsinstaller.org", "http://railsinstaller.org/en", target: "_blank" %> and choose from ONE of the following options to download RailsInstaller.

    6 |
    7 |
    8 | <%= link_to image_tag("windows/install_rails_step1.png", alt: "RailsInstaller", class: "img-responsive"), "http://railsinstaller.org/en", target: "_blank" %> 9 |
    10 |
    11 |
  2. 12 | 13 |
  3. 14 |

    Once the file has fully downloaded, double-click it to open the installer wizard.

    15 |
    <%= image_tag "windows/install_rails_step2.png", alt: "RailsInstaller Wizard" %>
    16 |
  4. 17 | 18 |
  5. 19 |

    Click 'Next' for each step - it's okay to accept the default settings.

    20 |
    <%= image_tag "windows/install_rails_step3.png" %>
    21 |
  6. 22 | 23 |
  7. 24 |

    When prompted, enter your name and email address
    (don't worry, no one will see this email or spam you, this is purely for setup purposes).

    25 |
  8. 26 |
27 |
28 | 29 | <%= render partial: "layouts/step_navigation" %> 30 | 31 |
32 |

33 | 34 | <%= render 'layouts/disqus' %> 35 |
36 | -------------------------------------------------------------------------------- /app/views/install_steps/see_it_live.html.erb: -------------------------------------------------------------------------------- 1 |
2 |

See it live!

3 |
    4 |
  1. 5 | Move into your new application folder 6 |
    $ cd ~/Desktop/sample_app
    7 |
  2. 8 |
  3. 9 | We’re going to start a little server so we can see the application in a browser 10 |
    $ rails server
    11 |
  4. 12 |
  5. 13 | This command should show you: 14 |
    => Booting Puma
    15 | => Rails 6.0.0 application starting in development
    16 | => Run `rails server -h` for more startup options
    17 | Puma starting in single mode...
    18 | * Version 4.3.1 (ruby 2.5.1-p57), codename: Love Song
    19 | * Min threads: 5, max threads: 5
    20 | * Environment: development
    21 | * Listening on tcp://0.0.0.0:3000
    22 | Use Ctrl-C to stop
    23 |
  6. 24 |
  7. 25 | Open up your browser and visit <%= link_to "http://localhost:3000", "http://localhost:3000", target: "_blank" %> 26 |
  8. 27 |
28 |

You should see your new web app!

29 |
30 | 31 |
32 |
33 | PRO TIP:
Whenever you run
$ rails server
…you’ll no longer be able to type anything in that command line window (because that window is now busy running your site).

Leaving us with two options:
1) When you’re coding: let this window run the server, and open another command line window to write new commands
2) When you’re finished: close the server by hitting “Control + C” and give yourself a pat on the back for being awesome. 34 |
35 |
36 | <%= image_tag "sam.png", class: 'sam' %> 37 |
38 |
39 |
40 | 41 | <%= render 'layouts/step_navigation' %> 42 | 43 |
44 |

#1 - My error is about: “node.js”, “therubyrhino”, “therubyracer” or a Java Runtime Error

45 |

a) If your error resembles any of those words you may need to DOWNLOAD NODE.JS

46 |

b) Restart your computer after you install Node.js

47 |

48 | <%= render 'layouts/disqus' %> 49 |
50 | -------------------------------------------------------------------------------- /app/views/install_steps/sublime_text.html.erb: -------------------------------------------------------------------------------- 1 |
2 |

Install Sublime Text

3 |

As a developer, you’ll be using your text editor quite often. A text editor is a simple program that lets you write text (and by text we mean… code). Our preferred text editor is Sublime Text.

4 |
5 | 6 |
    7 |
  1. 8 |

    To download Sublime Text visit the Sublime Text site and download it to your computer (hint: click the big blue button on their homepage).

    9 |

    <%= link_to "Visit Sublime Text & Download", 'http://www.sublimetext.com/', target: :_blank, class: "btn option" %>

    10 |
  2. 11 |
  3. 12 |

    Once the file has fully downloaded, double-click it and a new window will open. On a Mac: drag and drop Sublime Text 3 into your Applications folder.

    13 |

    <%= image_tag "mac_steps/applications_folder.png", class: "list-image" %>

    14 |
  4. 15 |
16 |
17 | 18 | <%= render 'layouts/step_navigation' %> 19 | 20 |
21 | <%= render 'layouts/disqus' %> 22 |
23 | -------------------------------------------------------------------------------- /app/views/install_steps/update_rails.html.erb: -------------------------------------------------------------------------------- 1 | <% if current_user.rails_version =~ /3.2/ %> 2 |
3 |

Because you don't have the latest version of Rails, we're going to update to the latest version

4 |
    5 |
  1. In the command line, run the following command:
  2. 6 |
    $ gem update rails --no-ri --no-rdoc
    7 |

    This command should update several gems for you and may take a few minutes

    8 |
  3. 9 | Next, check to see if you have Rails installed by running: 10 |
    $ rails --version
    11 |
  4. 12 |
13 |
14 | 15 | <%= render 'layouts/step_navigation' %> 16 | <% else %> 17 |
18 |

Because you don't have Rails installed yet, we're going to install it

19 |
    20 |
  1. In the command line, run the following command:
  2. 21 |
    $ gem install rails --no-ri --no-rdoc
    22 |

    This command should update several gems for you and may take a few minutes

    23 |
  3. 24 | Next, check to see if you have the right version of Rails installed by running: 25 |
    $ rails --version
    26 |
  4. 27 |
28 |
29 | 30 | <%= render 'layouts/step_navigation' %> 31 | <% end %> 32 | 33 |
34 |

#1 - I'm currently getting an error that has the words "SSL" and "Certificate"

35 |

If your error resembles something like...

36 |
#ERROR MESSAGE:
37 |     Unable to download data from https://rubygems.org/ - SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (https://s3.amazonaws.com/produ...
38 | Here are the main steps that should fix it. If not, consult this guide for a few alternative fixes: OpenSSL Errors and Rails Guide 39 |
$ sudo rvm osx-ssl-certs cron install
40 | $ brew update
41 | $ brew install openssl
42 | $ brew link openssl --force
43 | $ brew install curl-ca-bundle
44 | 45 |

46 | 47 | <%= render 'layouts/disqus' %> 48 |
49 | -------------------------------------------------------------------------------- /app/views/install_steps/update_rubygems.html.erb: -------------------------------------------------------------------------------- 1 |
2 |

Now let's update Rubygems

3 |

We need to update Rubygems on your machine to the latest version.

4 |
5 |
    6 |
  1. 7 |

    In your Git Bash prompt, type the following command and hit ENTER.

    8 |
    curl http://installrails.com/update_rubygems.rb | ruby
    9 |

    If you'd like to learn more about this, check out <%= link_to "this post", "http://guides.rubygems.org/ssl-certificate-update/" %>.

    10 |
  2. 11 |
12 |
13 | 14 | <%= render 'layouts/step_navigation' %> 15 | 16 |
17 | <%= render 'layouts/disqus' %> 18 |
19 | -------------------------------------------------------------------------------- /app/views/layouts/_development.html.erb: -------------------------------------------------------------------------------- 1 |
2 | 3 |
Params <%= debug(params) %>
4 |
User <%= debug(current_user) %>
5 | 6 | <% if params[:controller] == "install_steps" %> 7 |
Steps <%= debug(wizard_steps) %>
8 | <% end %> 9 | -------------------------------------------------------------------------------- /app/views/layouts/_disqus.html.erb: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | 5 | 16 | 17 | comments powered by Disqus 18 | -------------------------------------------------------------------------------- /app/views/layouts/_step_navigation.html.erb: -------------------------------------------------------------------------------- 1 |
2 | <%= link_to "Previous Step", previous_wizard_path, class: "option" %> 3 | <%= button_tag "Troubleshooting", type: "button", class: "troubleshooting", data: {toggle: "collapse", target: "#trouble"} %> 4 | <%= link_to "Next Step", next_wizard_path, class: "option"%> 5 |
6 | -------------------------------------------------------------------------------- /app/views/layouts/application.html.erb: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Install Rails | Your Guide for Installing Ruby on Rails 5 | 6 | 7 | <%= csrf_meta_tags %> 8 | <%= stylesheet_link_tag "application", media: "all", "data-turbolinks-track" => true %> 9 | <%= javascript_include_tag "application", "data-turbolinks-track" => true %> 10 | 11 | 12 | 18 | <%= yield(:head) %> 19 | 20 | 21 | <%= yield(:header) %> 22 | 23 | <% if content_for? :container_override? %> 24 | <%= yield %> 25 | <% else %> 26 | <%= content_tag :div, class: "container" do %> 27 | <%= content_for?(:content) ? yield(:content) : yield %> 28 | <% end %> 29 | <% end %> 30 | 31 | <% if content_for?(:footer) %> 32 |
33 |
34 | <%= yield(:footer) %> 35 | <%= render partial: "layouts/development" if Rails.env.development? %> 36 |
37 |
38 | <% end %> 39 | 40 | 41 | -------------------------------------------------------------------------------- /app/views/layouts/install_steps.html.erb: -------------------------------------------------------------------------------- 1 | <% content_for(:header) do %> 2 |
3 |
4 | <%= link_to (content_tag(:p, nil, class: "icon-beaker") + " InstallRails.com"), root_path, class: "site-title" %> 5 |
6 |
7 | <% end %> 8 | 9 | <% content_for(:content) do %> 10 | <% if content_for?(:sidebar) %> 11 |
12 |
13 | <%= yield %> 14 |
15 |
16 | 19 |
20 |
21 | 22 | <% else %> 23 | <%= yield %> 24 | <% end %> 25 | <% end %> 26 | 27 | <% content_for(:footer) do %> 28 | <%= link_to image_tag("logo-one-month-blue.svg", width: 130, height: 17), "https://onemonth.com/?utm_source=installrails&utm_campaign=rails&utm_medium=installrails", id: "footer-logo-link" %> © <%= Date.current.year %> 29 | <% end %> 30 | 31 | <%= render template: "layouts/application" %> 32 | -------------------------------------------------------------------------------- /app/views/layouts/main.html.erb: -------------------------------------------------------------------------------- 1 | <% content_for :container_override?, true %> 2 | 3 | <%= render template: "layouts/application" %> 4 | -------------------------------------------------------------------------------- /app/views/main/congratulations.html.erb: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 |

Congratulations!

5 |
<%= image_tag "mac_steps/congrats_sam.png", class: "congrats-sam", style: 'display:inline;' %>
6 | 7 |

Want to learn Ruby on Rails?

8 | 9 |
    10 |
  1. 11 | <%= image_tag "omr_logo.png", style: 'display:inline; padding: 0;' %> <%= link_to "One Month Rails", "http://onemonth.com/courses/rails?utm_source=installrails&utm_campaign=rails&utm_medium=installrails", target: "_blank" %> is an online course where you can build your first app in less than one month! 12 |
  2. 13 |
14 |

By the end of the course, you'll be able to build powerful web apps with features such as Bootstrap (for creating website templates), Devise (for making a secure user login), Active Admin (for managing users), Paperclip (for allowing users to upload images and other content), and much more.

15 |

In just 30 days, this <%= link_to "Ruby on Rails tutorial", "http://onemonth.com/courses/rails?utm_source=installrails&utm_campaign=rails&utm_medium=installrails", target: "_blank" %> will take you from being a complete beginner to building your first web application - guaranteed!

16 |

<%= link_to "Enroll today in One Month Rails.","http://onemonth.com/courses/rails?utm_source=installrails&utm_campaign=rails&utm_medium=installrails", target: "_blank" %>

17 | 18 |
19 | 20 | Fork me on GitHub 21 | 22 | -------------------------------------------------------------------------------- /app/views/main/index.html.erb: -------------------------------------------------------------------------------- 1 | Fork me on GitHub 2 | 3 | 30 | 31 | 32 |
33 |
34 |
35 | 36 |
37 |
38 | 39 |

Over 10,000+

40 |

The number of people using InstallRails.com grows everyday!

41 |
42 |
43 | 44 |
45 |
46 | 47 |

Does it work on Mac, Windows, and Linux?

48 |

Yes! Our Ruby on Rails tutorial shows you how to install rails and related gems on any operating system.

49 |
50 |
51 | 52 | 53 |
54 |
55 | 56 |

What gets installed?

57 |

Ruby on Rails, Git, SQLite, RVM, Rails Installer, Sublime Text and in some cases XCode.

58 |
59 |
60 | 61 |
62 |
63 | 64 |

Who Made This?

65 |

66 | 67 | @mattangriffel 68 | , 69 | 70 | @castig 71 | , 72 | 73 | @gdi2290 74 | and all the folks at One Month where you can learn to code in 30 days 75 |

76 |
77 |
78 | 79 |
80 |
81 |
82 | 83 |
84 |
85 |
86 |
87 | 88 | 89 | 90 | 93 |
94 |
95 |
96 |
97 | -------------------------------------------------------------------------------- /app/views/main/test.html.erb: -------------------------------------------------------------------------------- 1 | <% content_for(:header) do %> 2 |
3 |
4 | <%= link_to (content_tag(:i, nil, class: "icon-beaker") + " InstallRails.com"), root_path, class: "site-title" %> 5 |
6 |
7 | <% end %> 8 | 9 |
10 |

Main content here

11 |

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nemo, tenetur, sit, sint, officiis quam saepe dolores tempore architecto necessitatibus suscipit accusamus quisquam ipsa facere in voluptates delectus enim. Eaque, molestiae!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nemo, tenetur, sit, sint, officiis quam saepe dolores tempore architecto necessitatibus suscipit accusamus quisquam ipsa facere in voluptates delectus enim. Eaque, molestiae!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nemo, tenetur, sit, sint, officiis quam saepe dolores tempore architecto necessitatibus suscipit accusamus quisquam ipsa facere in voluptates delectus enim. Eaque, molestiae!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nemo, tenetur, sit, sint, officiis quam saepe dolores tempore architecto necessitatibus suscipit accusamus quisquam ipsa facere in voluptates delectus enim. Eaque, molestiae!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nemo, tenetur, sit, sint, officiis quam saepe dolores tempore architecto necessitatibus suscipit accusamus quisquam ipsa facere in voluptates delectus enim. Eaque, molestiae!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nemo, tenetur, sit, sint, officiis quam saepe dolores tempore architecto necessitatibus suscipit accusamus quisquam ipsa facere in voluptates delectus enim. Eaque, molestiae!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nemo, tenetur, sit, sint, officiis quam saepe dolores tempore architecto necessitatibus suscipit accusamus quisquam ipsa facere in voluptates delectus enim. Eaque, molestiae!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nemo, tenetur, sit, sint, officiis quam saepe dolores tempore architecto necessitatibus suscipit accusamus quisquam ipsa facere in voluptates delectus enim. Eaque, molestiae!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nemo, tenetur, sit, sint, officiis quam saepe dolores tempore architecto necessitatibus suscipit accusamus quisquam ipsa facere in voluptates delectus enim. Eaque, molestiae!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nemo, tenetur, sit, sint, officiis quam saepe dolores tempore architecto necessitatibus suscipit accusamus quisquam ipsa facere in voluptates delectus enim. Eaque, molestiae!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nemo, tenetur, sit, sint, officiis quam saepe dolores tempore architecto necessitatibus suscipit accusamus quisquam ipsa facere in voluptates delectus enim. Eaque, molestiae!

12 |
13 |
14 | 20 |
21 |
22 | 23 | <% content_for(:footer) do %> 24 |
25 | copyright One Month Rails 26 | <% end %> 27 | -------------------------------------------------------------------------------- /bin/bundle: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) 3 | load Gem.bin_path('bundler', 'bundle') 4 | -------------------------------------------------------------------------------- /bin/rails: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | APP_PATH = File.expand_path('../../config/application', __FILE__) 3 | require_relative '../config/boot' 4 | require 'rails/commands' 5 | -------------------------------------------------------------------------------- /bin/rake: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | require_relative '../config/boot' 3 | require 'rake' 4 | Rake.application.run 5 | -------------------------------------------------------------------------------- /bin/rspec: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # 3 | # This file was generated by Bundler. 4 | # 5 | # The application 'rspec' is installed as part of a gem, and 6 | # this file is here to facilitate running it. 7 | # 8 | 9 | require 'pathname' 10 | ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile", 11 | Pathname.new(__FILE__).realpath) 12 | 13 | require 'rubygems' 14 | require 'bundler/setup' 15 | 16 | load Gem.bin_path('rspec-core', 'rspec') 17 | -------------------------------------------------------------------------------- /config.ru: -------------------------------------------------------------------------------- 1 | # This file is used by Rack-based servers to start the application. 2 | 3 | require ::File.expand_path('../config/environment', __FILE__) 4 | run Rails.application 5 | -------------------------------------------------------------------------------- /config/application.rb: -------------------------------------------------------------------------------- 1 | require File.expand_path('../boot', __FILE__) 2 | 3 | require "active_model/railtie" 4 | require "action_controller/railtie" 5 | require "action_mailer/railtie" 6 | require "sprockets/railtie" 7 | 8 | # Require the gems listed in Gemfile, including any gems 9 | # you've limited to :test, :development, or :production. 10 | Bundler.require(:default, Rails.env) 11 | 12 | module InstallRails 13 | class Application < Rails::Application 14 | # Settings in config/environments/* take precedence over those specified here. 15 | # Application configuration should go into files in config/initializers 16 | # -- all .rb files in that directory are automatically loaded. 17 | 18 | # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. 19 | # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. 20 | # config.time_zone = 'Central Time (US & Canada)' 21 | 22 | # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. 23 | # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] 24 | # config.i18n.default_locale = :de 25 | 26 | config.assets.precompile += %w[ *.png 27 | *.jpg 28 | *.jpeg 29 | *.gif 30 | html5shiv.js 31 | script.js 32 | install_steps.css 33 | basic.rb ] 34 | 35 | config.generators do |g| 36 | g.test_framework :rspec, :views => false, :fixture => true 37 | g.fixture_replacement :factory_girl, :dir => 'spec/factories' 38 | end 39 | end 40 | end 41 | -------------------------------------------------------------------------------- /config/boot.rb: -------------------------------------------------------------------------------- 1 | # Set up gems listed in the Gemfile. 2 | ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) 3 | 4 | require 'bundler/setup' if File.exists?(ENV['BUNDLE_GEMFILE']) 5 | -------------------------------------------------------------------------------- /config/cucumber.yml: -------------------------------------------------------------------------------- 1 | <% 2 | rerun = File.file?('rerun.txt') ? IO.read('rerun.txt') : "" 3 | rerun_opts = rerun.to_s.strip.empty? ? "--format #{ENV['CUCUMBER_FORMAT'] || 'progress'} features" : "--format #{ENV['CUCUMBER_FORMAT'] || 'pretty'} #{rerun}" 4 | std_opts = "--format #{ENV['CUCUMBER_FORMAT'] || 'pretty'} --strict --tags 'not @wip'" 5 | %> 6 | default: <%= std_opts %> features 7 | wip: --tags @wip:3 --wip features 8 | rerun: <%= rerun_opts %> --format rerun --out rerun.txt --strict --tags 'not @wip' 9 | -------------------------------------------------------------------------------- /config/environment.rb: -------------------------------------------------------------------------------- 1 | # Load the Rails application. 2 | require File.expand_path('../application', __FILE__) 3 | 4 | # Initialize the Rails application. 5 | InstallRails::Application.initialize! 6 | -------------------------------------------------------------------------------- /config/environments/development.rb: -------------------------------------------------------------------------------- 1 | InstallRails::Application.configure do 2 | # Settings specified here will take precedence over those in config/application.rb. 3 | 4 | # In the development environment your application's code is reloaded on 5 | # every request. This slows down response time but is perfect for development 6 | # since you don't have to restart the web server when you make code changes. 7 | config.cache_classes = false 8 | 9 | # Do not eager load code on boot. 10 | config.eager_load = false 11 | 12 | # Show full error reports and disable caching. 13 | config.consider_all_requests_local = true 14 | config.action_controller.perform_caching = false 15 | 16 | # Don't care if the mailer can't send. 17 | config.action_mailer.raise_delivery_errors = false 18 | 19 | # Print deprecation notices to the Rails logger. 20 | config.active_support.deprecation = :log 21 | 22 | # Debug mode disables concatenation and preprocessing of assets. 23 | # This option may cause significant delays in view rendering with a large 24 | # number of complex assets. 25 | config.assets.debug = true 26 | end 27 | -------------------------------------------------------------------------------- /config/environments/production.rb: -------------------------------------------------------------------------------- 1 | InstallRails::Application.configure do 2 | # Settings specified here will take precedence over those in config/application.rb. 3 | 4 | # Code is not reloaded between requests. 5 | config.cache_classes = true 6 | 7 | # Eager load code on boot. This eager loads most of Rails and 8 | # your application in memory, allowing both thread web servers 9 | # and those relying on copy on write to perform better. 10 | # Rake tasks automatically ignore this option for performance. 11 | config.eager_load = true 12 | 13 | # Full error reports are disabled and caching is turned on. 14 | config.consider_all_requests_local = false 15 | config.action_controller.perform_caching = true 16 | 17 | # Enable Rack::Cache to put a simple HTTP cache in front of your application 18 | # Add `rack-cache` to your Gemfile before enabling this. 19 | # For large-scale production use, consider using a caching reverse proxy like nginx, varnish or squid. 20 | # config.action_dispatch.rack_cache = true 21 | 22 | # Disable Rails's static asset server (Apache or nginx will already do this). 23 | config.serve_static_files = false 24 | 25 | # Compress JavaScripts and CSS. 26 | config.assets.js_compressor = :uglifier 27 | # config.assets.css_compressor = :sass 28 | 29 | # Do not fallback to assets pipeline if a precompiled asset is missed. 30 | config.assets.compile = false 31 | 32 | # Generate digests for assets URLs. 33 | config.assets.digest = true 34 | 35 | # Version of your assets, change this if you want to expire all your assets. 36 | config.assets.version = '1.0' 37 | 38 | # Specifies the header that your server uses for sending files. 39 | # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache 40 | # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx 41 | 42 | # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. 43 | # config.force_ssl = true 44 | 45 | # Set to :debug to see everything in the log. 46 | config.log_level = :info 47 | 48 | # Prepend all log lines with the following tags. 49 | # config.log_tags = [ :subdomain, :uuid ] 50 | 51 | # Use a different logger for distributed setups. 52 | # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new) 53 | 54 | # Use a different cache store in production. 55 | # config.cache_store = :mem_cache_store 56 | 57 | # Enable serving of images, stylesheets, and JavaScripts from an asset server. 58 | # config.action_controller.asset_host = "http://assets.example.com" 59 | 60 | # Precompile additional assets. 61 | # application.js, application.css, and all non-JS/CSS in app/assets folder are already added. 62 | # config.assets.precompile += %w( search.js ) 63 | 64 | # Ignore bad email addresses and do not raise email delivery errors. 65 | # Set this to true and configure the email server for immediate delivery to raise delivery errors. 66 | # config.action_mailer.raise_delivery_errors = false 67 | 68 | # Enable locale fallbacks for I18n (makes lookups for any locale fall back to 69 | # the I18n.default_locale when a translation can not be found). 70 | config.i18n.fallbacks = true 71 | 72 | # Send deprecation notices to registered listeners. 73 | config.active_support.deprecation = :notify 74 | 75 | # Disable automatic flushing of the log to improve performance. 76 | # config.autoflush_log = false 77 | 78 | # Use default logging formatter so that PID and timestamp are not suppressed. 79 | config.log_formatter = ::Logger::Formatter.new 80 | end 81 | -------------------------------------------------------------------------------- /config/environments/test.rb: -------------------------------------------------------------------------------- 1 | InstallRails::Application.configure do 2 | # Settings specified here will take precedence over those in config/application.rb. 3 | 4 | # The test environment is used exclusively to run your application's 5 | # test suite. You never need to work with it otherwise. Remember that 6 | # your test database is "scratch space" for the test suite and is wiped 7 | # and recreated between test runs. Don't rely on the data there! 8 | config.cache_classes = true 9 | 10 | # Do not eager load code on boot. This avoids loading your whole application 11 | # just for the purpose of running a single test. If you are using a tool that 12 | # preloads Rails for running tests, you may have to set it to true. 13 | config.eager_load = false 14 | 15 | # Configure static asset server for tests with Cache-Control for performance. 16 | config.serve_static_files = true 17 | config.static_cache_control = "public, max-age=3600" 18 | 19 | # Show full error reports and disable caching. 20 | config.consider_all_requests_local = true 21 | config.action_controller.perform_caching = false 22 | 23 | # Raise exceptions instead of rendering exception templates. 24 | config.action_dispatch.show_exceptions = false 25 | 26 | # Disable request forgery protection in test environment. 27 | config.action_controller.allow_forgery_protection = false 28 | 29 | # Tell Action Mailer not to deliver emails to the real world. 30 | # The :test delivery method accumulates sent emails in the 31 | # ActionMailer::Base.deliveries array. 32 | config.action_mailer.delivery_method = :test 33 | 34 | # Print deprecation notices to the stderr. 35 | config.active_support.deprecation = :stderr 36 | end 37 | -------------------------------------------------------------------------------- /config/initializers/backtrace_silencers.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | # You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. 4 | # Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } 5 | 6 | # You can also remove all the silencers if you're trying to debug a problem that might stem from framework code. 7 | # Rails.backtrace_cleaner.remove_silencers! 8 | -------------------------------------------------------------------------------- /config/initializers/filter_parameter_logging.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | # Configure sensitive parameters which will be filtered from the log file. 4 | Rails.application.config.filter_parameters += [:password] 5 | -------------------------------------------------------------------------------- /config/initializers/inflections.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | # Add new inflection rules using the following format. Inflections 4 | # are locale specific, and you may define rules for as many different 5 | # locales as you wish. All of these examples are active by default: 6 | # ActiveSupport::Inflector.inflections(:en) do |inflect| 7 | # inflect.plural /^(ox)$/i, '\1en' 8 | # inflect.singular /^(ox)en/i, '\1' 9 | # inflect.irregular 'person', 'people' 10 | # inflect.uncountable %w( fish sheep ) 11 | # end 12 | 13 | # These inflection rules are supported but not enabled by default: 14 | # ActiveSupport::Inflector.inflections(:en) do |inflect| 15 | # inflect.acronym 'RESTful' 16 | # end 17 | -------------------------------------------------------------------------------- /config/initializers/mime_types.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | # Add new mime types for use in respond_to blocks: 4 | # Mime::Type.register "text/richtext", :rtf 5 | # Mime::Type.register_alias "text/html", :iphone 6 | -------------------------------------------------------------------------------- /config/initializers/secret_token.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | # Your secret key is used for verifying the integrity of signed cookies. 4 | # If you change this key, all old signed cookies will become invalid! 5 | 6 | # Make sure the secret is at least 30 characters and all random, 7 | # no regular words or you'll be exposed to dictionary attacks. 8 | # You can use `rake secret` to generate a secure secret key. 9 | 10 | # Make sure your secret_key_base is kept private 11 | # if you're sharing your code publicly. 12 | InstallRails::Application.config.secret_key_base = ENV['SECRET_KEY_BASE'] || "868fd6b774842ed10a3eadb9fc684b6f1172809cd6c37ef4f76044ee3e788b1d7eb5114484b94b30f01aa33fa7026a346c483d011a1d5a201a6201695a98cb6c" -------------------------------------------------------------------------------- /config/initializers/session_store.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | InstallRails::Application.config.session_store :cookie_store, key: '_install_rails_session' 4 | -------------------------------------------------------------------------------- /config/initializers/wrap_parameters.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | # This file contains settings for ActionController::ParamsWrapper which 4 | # is enabled by default. 5 | 6 | # Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array. 7 | ActiveSupport.on_load(:action_controller) do 8 | wrap_parameters format: [:json] if respond_to?(:wrap_parameters) 9 | end 10 | 11 | # To enable root element in JSON for ActiveRecord objects. 12 | # ActiveSupport.on_load(:active_record) do 13 | # self.include_root_in_json = true 14 | # end 15 | -------------------------------------------------------------------------------- /config/locales/en.yml: -------------------------------------------------------------------------------- 1 | # Files in the config/locales directory are used for internationalization 2 | # and are automatically loaded by Rails. If you want to use locales other 3 | # than English, add the necessary files in this directory. 4 | # 5 | # To use the locales, use `I18n.t`: 6 | # 7 | # I18n.t 'hello' 8 | # 9 | # In views, this is aliased to just `t`: 10 | # 11 | # <%= t('hello') %> 12 | # 13 | # To use a different locale, set it with `I18n.locale`: 14 | # 15 | # I18n.locale = :es 16 | # 17 | # This would use the information in config/locales/es.yml. 18 | # 19 | # To learn more, please read the Rails Internationalization guide 20 | # available at http://guides.rubyonrails.org/i18n.html. 21 | 22 | en: 23 | hello: "Hello world" 24 | -------------------------------------------------------------------------------- /config/routes.rb: -------------------------------------------------------------------------------- 1 | InstallRails::Application.routes.draw do 2 | resources :install_steps, path: 'steps' 3 | 4 | controller :main do 5 | get :test 6 | get :congratulations 7 | end 8 | 9 | root to: 'main#index' 10 | end 11 | -------------------------------------------------------------------------------- /config/unicorn.rb: -------------------------------------------------------------------------------- 1 | # config/unicorn.rb 2 | worker_processes 3 3 | timeout 30 4 | preload_app true 5 | 6 | before_fork do |server, worker| 7 | 8 | Signal.trap 'TERM' do 9 | puts 'Unicorn master intercepting TERM and sending myself QUIT instead' 10 | Process.kill 'QUIT', Process.pid 11 | end 12 | 13 | defined?(ActiveRecord::Base) and 14 | ActiveRecord::Base.connection.disconnect! 15 | end 16 | 17 | after_fork do |server, worker| 18 | 19 | Signal.trap 'TERM' do 20 | puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to sent QUIT' 21 | end 22 | 23 | defined?(ActiveRecord::Base) and 24 | ActiveRecord::Base.establish_connection 25 | end 26 | -------------------------------------------------------------------------------- /db/seeds.rb: -------------------------------------------------------------------------------- 1 | # This file should contain all the record creation needed to seed the database with its default values. 2 | # The data can then be loaded with the rake db:seed (or created alongside the db with db:setup). 3 | # 4 | # Examples: 5 | # 6 | # cities = City.create([{ name: 'Chicago' }, { name: 'Copenhagen' }]) 7 | # Mayor.create(name: 'Emanuel', city: cities.first) 8 | -------------------------------------------------------------------------------- /env.sample: -------------------------------------------------------------------------------- 1 | PORT=3000 2 | RACK_ENV=development 3 | -------------------------------------------------------------------------------- /features/homepage.feature: -------------------------------------------------------------------------------- 1 | Feature: Homepage 2 | In order to know how to install rails 3 | As a visitor to the site 4 | I want to start the lesson 5 | 6 | Scenario: Navigate the user to the start of the lesson 7 | Given I am on the homepage 8 | When I click "Start now" 9 | Then I am asked about my OS 10 | -------------------------------------------------------------------------------- /features/step_definitions/homepage_steps.rb: -------------------------------------------------------------------------------- 1 | Given(/^I am on the homepage$/) do 2 | visit root_path 3 | end 4 | 5 | When(/^I click "(.*?)"$/) do |button_text| 6 | click_on button_text 7 | end 8 | 9 | Then(/^I am asked about my OS$/) do 10 | within 'h2' do 11 | expect(page).to have_content('Which operating system are you using?') 12 | end 13 | end 14 | -------------------------------------------------------------------------------- /features/support/env.rb: -------------------------------------------------------------------------------- 1 | # IMPORTANT: This file is generated by cucumber-rails - edit at your own peril. 2 | # It is recommended to regenerate this file in the future when you upgrade to a 3 | # newer version of cucumber-rails. Consider adding your own code to a new file 4 | # instead of editing this one. Cucumber will automatically load all features/**/*.rb 5 | # files. 6 | 7 | require 'cucumber/rails' 8 | 9 | # Capybara defaults to CSS3 selectors rather than XPath. 10 | # If you'd prefer to use XPath, just uncomment this line and adjust any 11 | # selectors in your step definitions to use the XPath syntax. 12 | # Capybara.default_selector = :xpath 13 | 14 | # By default, any exception happening in your Rails application will bubble up 15 | # to Cucumber so that your scenario will fail. This is a different from how 16 | # your application behaves in the production environment, where an error page will 17 | # be rendered instead. 18 | # 19 | # Sometimes we want to override this default behaviour and allow Rails to rescue 20 | # exceptions and display an error page (just like when the app is running in production). 21 | # Typical scenarios where you want to do this is when you test your error pages. 22 | # There are two ways to allow Rails to rescue exceptions: 23 | # 24 | # 1) Tag your scenario (or feature) with @allow-rescue 25 | # 26 | # 2) Set the value below to true. Beware that doing this globally is not 27 | # recommended as it will mask a lot of errors for you! 28 | # 29 | ActionController::Base.allow_rescue = false 30 | 31 | # Remove/comment out the lines below if your app doesn't have a database. 32 | # For some databases (like MongoDB and CouchDB) you may need to use :truncation instead. 33 | begin 34 | # Needed for postgresql 35 | # DatabaseCleaner.strategy = :transaction 36 | 37 | # Needed for Mongo 38 | #DatabaseCleaner.strategy = :truncation 39 | rescue NameError 40 | raise "You need to add database_cleaner to your Gemfile (in the :test group) if you wish to use it." 41 | end 42 | 43 | # You may also want to configure DatabaseCleaner to use different strategies for certain features and scenarios. 44 | # See the DatabaseCleaner documentation for details. Example: 45 | # 46 | # Before('@no-txn,@selenium,@culerity,@celerity,@javascript') do 47 | # # { :except => [:widgets] } may not do what you expect here 48 | # # as Cucumber::Rails::Database.javascript_strategy overrides 49 | # # this setting. 50 | # DatabaseCleaner.strategy = :truncation 51 | # end 52 | # 53 | # Before('~@no-txn', '~@selenium', '~@culerity', '~@celerity', '~@javascript') do 54 | # DatabaseCleaner.strategy = :transaction 55 | # end 56 | # 57 | 58 | # Possible values are :truncation and :transaction 59 | # The :transaction strategy is faster, but might give you threading problems. 60 | # See https://github.com/cucumber/cucumber-rails/blob/master/features/choose_javascript_database_strategy.feature 61 | Cucumber::Rails::Database.javascript_strategy = :truncation 62 | 63 | -------------------------------------------------------------------------------- /lib/assets/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onemonth/install_rails/eb21694d10c94b1ba1e69e88d8db61d496eac0ed/lib/assets/.keep -------------------------------------------------------------------------------- /lib/assets/templates/basic.rb: -------------------------------------------------------------------------------- 1 | # >---------------------------------[ Initial Setup ]----------------------------------< 2 | 3 | run "bundle update" 4 | 5 | # >---------------------------------[ Git ]----------------------------------< 6 | 7 | git :init 8 | git add: '.' 9 | git commit: "-aqm 'Initial commit'" 10 | 11 | # >---------------------------------[ Git ]----------------------------------< 12 | 13 | ## GEMFILE 14 | run "rm Gemfile" 15 | file "Gemfile" 16 | add_source "https://rubygems.org" 17 | 18 | # ## Ruby 19 | # insert_into_file 'Gemfile', "ruby '2.0.0'\n", after: "source 'https://rubygems.org'" 20 | 21 | ## Rails 22 | gem 'rails' 23 | 24 | gem_group :develoment do 25 | gem 'sqlite3' 26 | end 27 | 28 | gem_group :production do 29 | gem 'rails_12factor' 30 | gem 'pg' 31 | end 32 | gem 'sass-rails' 33 | gem 'uglifier' 34 | gem 'coffee-rails' 35 | gem 'jquery-rails' 36 | gem 'turbolinks' 37 | gem 'jbuilder' 38 | gem 'bootstrap-sass', '~> 2.3.2.0' 39 | gem 'devise', '3.0.0.rc' 40 | gem 'simple_form', '3.0.0.rc' 41 | run "bundle install --without production" 42 | 43 | # Add bootstrap CSS and JS 44 | 45 | inject_into_file "app/assets/javascripts/application.js", "//= require bootstrap\n", before: "//= require_tree ." 46 | 47 | file 'app/assets/stylesheets/bootstrap_and_overrides.css.scss', <<-CODE 48 | @import "bootstrap"; 49 | body { 50 | padding-top: 60px; 51 | } 52 | @import "bootstrap/responsive"; 53 | .center { 54 | text-align: center; 55 | } 56 | CODE 57 | 58 | # Generate home and about page 59 | generate(:controller, "Pages home about") 60 | route "root to: 'pages#home'" 61 | route "get 'about', to: 'pages#about'" 62 | run "rm app/views/pages/home.html.erb" 63 | file 'app/views/pages/home.html.erb', <<-CODE 64 | <% unless user_signed_in? %> 65 |
66 |

Welcome to One Month Rails!

67 |

68 | You've found the home page for the 69 | <%= link_to "One Month Rails", "http://onemonth.com/courses/rails" %> 70 | application. 71 |

72 |

73 | <%= link_to "Sign Up Now!", new_user_registration_path, class: "btn btn-primary btn-large" %> 74 |

75 |
76 | <% end %> 77 | CODE 78 | 79 | run "rm app/views/pages/about.html.erb" 80 | file 'app/views/pages/about.html.erb', <<-CODE 81 |

About Us

82 |

This is what we're about.

83 | CODE 84 | 85 | # Create the application layout 86 | run "rm app/views/layouts/application.html.erb" 87 | file 'app/views/layouts/application.html.erb', <<-CODE 88 | 89 | 90 | 91 | #{@app_name.humanize} 92 | <%= stylesheet_link_tag "application", :media => "all", "data-turbolinks-track" => true %> 93 | <%= javascript_include_tag "application" %> 94 | <%= csrf_meta_tags %> 95 | 96 | 97 | <%= render 'layouts/header' %> 98 | 99 |
100 | <% flash.each do |name, msg| %> 101 | <%= content_tag(:div, msg, class: "alert alert-\#{name}") %> 102 | <% end %> 103 | <%= yield %> 104 | <%= render 'layouts/footer' %> 105 |
106 | 107 | 108 | 109 | CODE 110 | 111 | # Create the header 112 | file 'app/views/layouts/_header.html.erb', <<-CODE 113 | 139 | CODE 140 | 141 | # Create the footer 142 | file 'app/views/layouts/_footer.html.erb', <<-CODE 143 | 148 | CODE 149 | 150 | # Set up Simple Form 151 | generate("simple_form:install", "--bootstrap") 152 | 153 | # Set up Devise 154 | 155 | application "\# Required for Devise on Heroku" 156 | application "config.assets.initialize_on_precompile = false" 157 | 158 | run "bundle exec rails generate devise:install" 159 | run "bundle exec rails generate devise User" 160 | run "rake db:migrate" 161 | 162 | file "app/views/devise/registrations/new.html.erb", <<-CODE 163 |

Sign up

164 | 165 | <%= simple_form_for(resource, :as => resource_name, :url => registration_path(resource_name), html: { class: 'form-horizontal'}) do |f| %> 166 | <%= f.error_notification %> 167 | 168 | <%= f.input :name %> 169 | <%= f.input :email %> 170 | <%= f.input :password %> 171 | 172 |
173 | <%= f.submit "Sign up", class: "btn btn-primary" %> 174 |
175 | <% end %> 176 | 177 | <%= render "devise/shared/links" %> 178 | 179 | CODE 180 | 181 | file "app/views/devise/registrations/edit.html.erb", <<-CODE 182 |

Sign up

183 | 184 | <%= simple_form_for(resource, :as => resource_name, :url => registration_path(resource_name), html: { class: 'form-horizontal'}) do |f| %> 185 | <%= f.error_notification %> 186 | 187 | <%= f.input :name %> 188 | <%= f.input :email %> 189 | <%= f.input :password %> 190 | 191 |
192 | <%= f.submit "Sign up", class: "btn btn-primary" %> 193 |
194 | <% end %> 195 | 196 | <%= render "devise/shared/links" %> 197 | 198 | CODE 199 | 200 | # Customize Devise 201 | 202 | generate(:migration, "AddNameToUsers", "name:string") 203 | rake "db:migrate" 204 | 205 | inject_into_file "app/models/user.rb", ":name, ", after: "attr_accessible " 206 | 207 | # Create a seed user 208 | 209 | append_file "db/seeds.rb" do <<-CODE 210 | User.create(name: "Example User", email: "user@example.com", password: "foobar", password_confirmation: "foobar") 211 | CODE 212 | end 213 | 214 | rake "db:seed" 215 | -------------------------------------------------------------------------------- /lib/tasks/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onemonth/install_rails/eb21694d10c94b1ba1e69e88d8db61d496eac0ed/lib/tasks/.keep -------------------------------------------------------------------------------- /lib/tasks/cucumber.rake: -------------------------------------------------------------------------------- 1 | # IMPORTANT: This file is generated by cucumber-rails - edit at your own peril. 2 | # It is recommended to regenerate this file in the future when you upgrade to a 3 | # newer version of cucumber-rails. Consider adding your own code to a new file 4 | # instead of editing this one. Cucumber will automatically load all features/**/*.rb 5 | # files. 6 | 7 | 8 | unless ARGV.any? {|a| a =~ /^gems/} # Don't load anything when running the gems:* tasks 9 | 10 | vendored_cucumber_bin = Dir["#{Rails.root}/vendor/{gems,plugins}/cucumber*/bin/cucumber"].first 11 | $LOAD_PATH.unshift(File.dirname(vendored_cucumber_bin) + '/../lib') unless vendored_cucumber_bin.nil? 12 | 13 | begin 14 | require 'cucumber/rake/task' 15 | 16 | namespace :cucumber do 17 | Cucumber::Rake::Task.new({:ok => 'test:prepare'}, 'Run features that should pass') do |t| 18 | t.binary = vendored_cucumber_bin # If nil, the gem's binary is used. 19 | t.fork = true # You may get faster startup if you set this to false 20 | t.profile = 'default' 21 | end 22 | 23 | Cucumber::Rake::Task.new({:wip => 'test:prepare'}, 'Run features that are being worked on') do |t| 24 | t.binary = vendored_cucumber_bin 25 | t.fork = true # You may get faster startup if you set this to false 26 | t.profile = 'wip' 27 | end 28 | 29 | Cucumber::Rake::Task.new({:rerun => 'test:prepare'}, 'Record failing features and run only them if any exist') do |t| 30 | t.binary = vendored_cucumber_bin 31 | t.fork = true # You may get faster startup if you set this to false 32 | t.profile = 'rerun' 33 | end 34 | 35 | desc 'Run all features' 36 | task :all => [:ok, :wip] 37 | 38 | task :statsetup do 39 | require 'rails/code_statistics' 40 | ::STATS_DIRECTORIES << %w(Cucumber\ features features) if File.exist?('features') 41 | ::CodeStatistics::TEST_TYPES << "Cucumber features" if File.exist?('features') 42 | end 43 | end 44 | desc 'Alias for cucumber:ok' 45 | task :cucumber => 'cucumber:ok' 46 | 47 | task :default => :cucumber 48 | 49 | task :features => :cucumber do 50 | STDERR.puts "*** The 'features' task is deprecated. See rake -T cucumber ***" 51 | end 52 | 53 | # In case we don't have the generic Rails test:prepare hook, append a no-op task that we can depend upon. 54 | task 'test:prepare' do 55 | end 56 | 57 | task :stats => 'cucumber:statsetup' 58 | rescue LoadError 59 | desc 'cucumber rake task not available (cucumber not installed)' 60 | task :cucumber do 61 | abort 'Cucumber rake task is not available. Be sure to install cucumber as a gem or plugin' 62 | end 63 | end 64 | 65 | end 66 | -------------------------------------------------------------------------------- /log/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onemonth/install_rails/eb21694d10c94b1ba1e69e88d8db61d496eac0ed/log/.keep -------------------------------------------------------------------------------- /public/404.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | The page you were looking for doesn't exist (404) 5 | 48 | 49 | 50 | 51 | 52 |
53 |

The page you were looking for doesn't exist.

54 |

You may have mistyped the address or the page may have moved.

55 |
56 |

If you are the application owner check the logs for more information.

57 | 58 | 59 | -------------------------------------------------------------------------------- /public/422.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | The change you wanted was rejected (422) 5 | 48 | 49 | 50 | 51 | 52 |
53 |

The change you wanted was rejected.

54 |

Maybe you tried to change something you didn't have access to.

55 |
56 |

If you are the application owner check the logs for more information.

57 | 58 | 59 | -------------------------------------------------------------------------------- /public/500.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | We're sorry, but something went wrong (500) 5 | 48 | 49 | 50 | 51 | 52 |
53 |

We're sorry, but something went wrong.

54 |
55 |

If you are the application owner check the logs for more information.

56 | 57 | 58 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onemonth/install_rails/eb21694d10c94b1ba1e69e88d8db61d496eac0ed/public/favicon.ico -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | # See http://www.robotstxt.org/wc/norobots.html for documentation on how to use the robots.txt file 2 | # 3 | # To ban all spiders from the entire site uncomment the next two lines: 4 | # User-agent: * 5 | # Disallow: / 6 | -------------------------------------------------------------------------------- /public/update_rubygems.rb: -------------------------------------------------------------------------------- 1 | require 'open-uri' 2 | 3 | class UpgradeRubygems 4 | UPGRADES = { 5 | "1.8" => "http://rubygems.org/downloads/rubygems-update-1.8.30.gem", 6 | "2.0" => "http://rubygems.org/downloads/rubygems-update-2.0.17.gem", 7 | "2.2" => "http://rubygems.org/downloads/rubygems-update-2.2.5.gem", 8 | "2.6" => "http://rubygems.org/downloads/rubygems-update-2.6.7.gem" 9 | } 10 | 11 | def call 12 | puts "You're up to date" and return if !upgrade_available? 13 | 14 | puts "You currently have #{rubygems_version}" 15 | download 16 | install 17 | update 18 | puts "You now have #{rubygems_version}" 19 | end 20 | 21 | private 22 | 23 | def download 24 | puts "Downloading #{upgrade_url}..." 25 | 26 | open(filename, "wb") do |file| 27 | open(upgrade_url) do |uri| 28 | file.write(uri.read) 29 | end 30 | end 31 | end 32 | 33 | def install 34 | puts "Installing #{filename}..." 35 | `gem install --local #{filename}` 36 | end 37 | 38 | def update 39 | puts "Updating rubygems..." 40 | `update_rubygems --no-ri --no-rdoc` 41 | end 42 | 43 | def rubygems_version 44 | `gem --version` 45 | end 46 | 47 | def upgrade_available? 48 | !!upgrade_url 49 | end 50 | 51 | def upgrade_url 52 | @upgrade_file ||= UPGRADES[rubygems_version[0..2]] 53 | end 54 | 55 | def filename 56 | @filename ||= upgrade_url.split("/").last 57 | end 58 | end 59 | 60 | upgrade = UpgradeRubygems.new 61 | upgrade.call 62 | -------------------------------------------------------------------------------- /script/cucumber: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | 3 | vendored_cucumber_bin = Dir["#{File.dirname(__FILE__)}/../vendor/{gems,plugins}/cucumber*/bin/cucumber"].first 4 | if vendored_cucumber_bin 5 | load File.expand_path(vendored_cucumber_bin) 6 | else 7 | require 'rubygems' unless ENV['NO_RUBYGEMS'] 8 | require 'cucumber' 9 | load Cucumber::BINARY 10 | end 11 | -------------------------------------------------------------------------------- /spec/spec_helper.rb: -------------------------------------------------------------------------------- 1 | # This file is copied to spec/ when you run 'rails generate rspec:install' 2 | ENV["RAILS_ENV"] ||= 'test' 3 | require File.expand_path("../../config/environment", __FILE__) 4 | require 'rspec/rails' 5 | 6 | # Requires supporting ruby files with custom matchers and macros, etc, in 7 | # spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are 8 | # run as spec files by default. This means that files in spec/support that end 9 | # in _spec.rb will both be required and run as specs, causing the specs to be 10 | # run twice. It is recommended that you do not name files matching this glob to 11 | # end with _spec.rb. You can configure this pattern with with the --pattern 12 | # option on the command line or in ~/.rspec, .rspec or `.rspec-local`. 13 | Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f } 14 | 15 | # Checks for pending migrations before tests are run. 16 | # If you are not using ActiveRecord, you can remove this line. 17 | ActiveRecord::Migration.check_pending! if defined?(ActiveRecord::Migration) 18 | 19 | RSpec.configure do |config| 20 | # ## Mock Framework 21 | # 22 | # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line: 23 | # 24 | # config.mock_with :mocha 25 | # config.mock_with :flexmock 26 | # config.mock_with :rr 27 | 28 | # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures 29 | # config.fixture_path = "#{::Rails.root}/spec/fixtures" 30 | 31 | # If you're not using ActiveRecord, or you'd prefer not to run each of your 32 | # examples within a transaction, remove the following line or assign false 33 | # instead of true. 34 | 35 | # needed for postgresql only 36 | # config.use_transactional_fixtures = true 37 | 38 | # Run specs in random order to surface order dependencies. If you find an 39 | # order dependency and want to debug it, you can fix the order by providing 40 | # the seed, which is printed after each run. 41 | # --seed 1234 42 | config.order = "random" 43 | end 44 | -------------------------------------------------------------------------------- /spec/support/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onemonth/install_rails/eb21694d10c94b1ba1e69e88d8db61d496eac0ed/spec/support/.keep -------------------------------------------------------------------------------- /vendor/assets/javascripts/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onemonth/install_rails/eb21694d10c94b1ba1e69e88d8db61d496eac0ed/vendor/assets/javascripts/.keep -------------------------------------------------------------------------------- /vendor/assets/javascripts/html5shiv.js: -------------------------------------------------------------------------------- 1 | /* 2 | HTML5 Shiv v3.6.2 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed 3 | */ 4 | (function(l,f){function m(){var a=e.elements;return"string"==typeof a?a.split(" "):a}function i(a){var b=n[a[o]];b||(b={},h++,a[o]=h,n[h]=b);return b}function p(a,b,c){b||(b=f);if(g)return b.createElement(a);c||(c=i(b));b=c.cache[a]?c.cache[a].cloneNode():r.test(a)?(c.cache[a]=c.createElem(a)).cloneNode():c.createElem(a);return b.canHaveChildren&&!s.test(a)?c.frag.appendChild(b):b}function t(a,b){if(!b.cache)b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag(); 5 | a.createElement=function(c){return!e.shivMethods?b.createElem(c):p(c,a,b)};a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+m().join().replace(/\w+/g,function(a){b.createElem(a);b.frag.createElement(a);return'c("'+a+'")'})+");return n}")(e,b.frag)}function q(a){a||(a=f);var b=i(a);if(e.shivCSS&&!j&&!b.hasCSS){var c,d=a;c=d.createElement("p");d=d.getElementsByTagName("head")[0]||d.documentElement;c.innerHTML="x"; 6 | c=d.insertBefore(c.lastChild,d.firstChild);b.hasCSS=!!c}g||t(a,b);return a}var k=l.html5||{},s=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,r=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,j,o="_html5shiv",h=0,n={},g;(function(){try{var a=f.createElement("a");a.innerHTML="";j="hidden"in a;var b;if(!(b=1==a.childNodes.length)){f.createElement("a");var c=f.createDocumentFragment();b="undefined"==typeof c.cloneNode|| 7 | "undefined"==typeof c.createDocumentFragment||"undefined"==typeof c.createElement}g=b}catch(d){g=j=!0}})();var e={elements:k.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup main mark meter nav output progress section summary time video",version:"3.6.2",shivCSS:!1!==k.shivCSS,supportsUnknownElements:g,shivMethods:!1!==k.shivMethods,type:"default",shivDocument:q,createElement:p,createDocumentFragment:function(a,b){a||(a=f);if(g)return a.createDocumentFragment(); 8 | for(var b=b||i(a),c=b.frag.cloneNode(),d=0,e=m(),h=e.length;d *').fadeIn(); 75 | $('.subscribe-wrapper').html(data); 76 | $('#subsc-form input').val(''); 77 | }); 78 | return false; 79 | }); 80 | 81 | }); -------------------------------------------------------------------------------- /vendor/assets/stylesheets/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onemonth/install_rails/eb21694d10c94b1ba1e69e88d8db61d496eac0ed/vendor/assets/stylesheets/.keep --------------------------------------------------------------------------------