diff --git a/Gemfile b/Gemfile index 292c232..a791ef3 100644 --- a/Gemfile +++ b/Gemfile @@ -1,45 +1,45 @@ source 'https://rubygems.org' +ruby '2.0.0' -# Bundle edge Rails instead: gem 'rails', github: 'rails/rails' -gem 'rails', '4.0.2' - -# Use sqlite3 as the database for Active Record -gem 'sqlite3' - -# Use SCSS for stylesheets -gem 'sass-rails', '~> 4.0.0' - -# Use Uglifier as compressor for JavaScript assets -gem 'uglifier', '>= 1.3.0' - -# Use CoffeeScript for .js.coffee assets and views -gem 'coffee-rails', '~> 4.0.0' - -# See https://github.com/sstephenson/execjs#readme for more supported runtimes -# gem 'therubyracer', platforms: :ruby - -# Use jquery as the JavaScript library -gem 'jquery-rails' - -# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks -gem 'turbolinks' - -# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder -gem 'jbuilder', '~> 1.2' - -group :doc do - # bundle exec rake doc:rails generates the API under doc/api. - gem 'sdoc', require: false +def darwin_only(require_as) + RbConfig::CONFIG['host_os'] =~ /darwin/ && require_as end -# Use ActiveModel has_secure_password -# gem 'bcrypt-ruby', '~> 3.1.2' +def linux_only(require_as) + RbConfig::CONFIG['host_os'] =~ /linux/ && require_as +end -# Use unicorn as the app server -# gem 'unicorn' +gem 'rails', '4.0.2' +gem 'sqlite3' -# Use Capistrano for deployment -# gem 'capistrano', group: :development +gem 'sass-rails', '~> 4.0.0' +gem 'uglifier', '>= 1.3.0' +gem 'coffee-rails', '~> 4.0.0' +gem 'jquery-rails' +gem 'turbolinks' +gem 'jbuilder', '~> 1.2' -# Use debugger -# gem 'debugger', group: [:development, :test] +gem 'bootstrap-sass' + +group :development, :test do + gem 'spring' + gem 'rspec-rails' + + gem 'guard-spring' + gem 'guard-rspec' +end + +group :test do + gem 'capybara' + gem 'selenium-webdriver' + + gem 'factory_girl_rails' + + gem 'terminal-notifier-guard', + :require => darwin_only('terminal-notifier-guard') + gem 'libnotify', :require => linux_only('libnotify') +end + +group :doc do + gem 'sdoc', require: false +end diff --git a/Gemfile.lock b/Gemfile.lock index d033965..c3d3e4c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -27,7 +27,20 @@ GEM tzinfo (~> 0.3.37) arel (4.0.1) atomic (1.1.14) + bootstrap-sass (3.0.3.0) + sass (~> 3.2) builder (3.1.4) + capybara (2.2.1) + mime-types (>= 1.16) + nokogiri (>= 1.3.3) + rack (>= 1.0.0) + rack-test (>= 0.5.4) + xpath (~> 2.0) + celluloid (0.15.2) + timers (~> 1.1.0) + childprocess (0.4.0) + ffi (~> 1.0, >= 1.0.11) + coderay (1.1.0) coffee-rails (4.0.1) coffee-script (>= 2.2.0) railties (>= 4.0.0, < 5.0) @@ -35,8 +48,28 @@ GEM coffee-script-source execjs coffee-script-source (1.7.0) + diff-lcs (1.2.5) erubis (2.7.0) execjs (2.0.2) + factory_girl (4.3.0) + activesupport (>= 3.0.0) + factory_girl_rails (4.3.0) + factory_girl (~> 4.3.0) + railties (>= 3.0.0) + ffi (1.9.3) + formatador (0.2.4) + guard (2.3.0) + formatador (>= 0.2.4) + listen (~> 2.1) + lumberjack (~> 1.0) + pry (>= 0.9.12) + thor (>= 0.18.1) + guard-rspec (4.2.5) + guard (~> 2.1) + rspec (>= 2.14, < 4.0) + guard-spring (0.0.4) + guard + spring hike (1.2.3) i18n (0.6.9) jbuilder (1.5.3) @@ -46,13 +79,28 @@ GEM railties (>= 3.0, < 5.0) thor (>= 0.14, < 2.0) json (1.8.1) + libnotify (0.8.2) + ffi (>= 1.0.11) + listen (2.4.0) + celluloid (>= 0.15.2) + rb-fsevent (>= 0.9.3) + rb-inotify (>= 0.9) + lumberjack (1.0.4) mail (2.5.4) mime-types (~> 1.16) treetop (~> 1.4.8) + method_source (0.8.2) mime-types (1.25.1) + mini_portile (0.5.2) minitest (4.7.5) multi_json (1.8.4) + nokogiri (1.6.1) + mini_portile (~> 0.5.0) polyglot (0.3.3) + pry (0.9.12.6) + coderay (~> 1.0) + method_source (~> 0.8) + slop (~> 3.4) rack (1.5.2) rack-test (0.6.2) rack (>= 1.0) @@ -70,8 +118,28 @@ GEM rake (>= 0.8.7) thor (>= 0.18.1, < 2.0) rake (10.1.1) + rb-fsevent (0.9.4) + rb-inotify (0.9.3) + ffi (>= 0.5.0) rdoc (4.1.1) json (~> 1.4) + rspec (2.14.1) + rspec-core (~> 2.14.0) + rspec-expectations (~> 2.14.0) + rspec-mocks (~> 2.14.0) + rspec-core (2.14.7) + rspec-expectations (2.14.4) + diff-lcs (>= 1.1.3, < 2.0) + rspec-mocks (2.14.4) + rspec-rails (2.14.1) + actionpack (>= 3.0) + activemodel (>= 3.0) + activesupport (>= 3.0) + railties (>= 3.0) + rspec-core (~> 2.14.0) + rspec-expectations (~> 2.14.0) + rspec-mocks (~> 2.14.0) + rubyzip (1.1.0) sass (3.2.14) sass-rails (4.0.1) railties (>= 4.0.0, < 5.0) @@ -80,6 +148,13 @@ GEM sdoc (0.4.0) json (~> 1.8) rdoc (~> 4.0, < 5.0) + selenium-webdriver (2.39.0) + childprocess (>= 0.2.5) + multi_json (~> 1.0) + rubyzip (~> 1.0) + websocket (~> 1.0.4) + slop (3.4.7) + spring (1.1.0) sprockets (2.10.1) hike (~> 1.2) multi_json (~> 1.0) @@ -90,10 +165,12 @@ GEM activesupport (>= 3.0) sprockets (~> 2.8) sqlite3 (1.3.8) + terminal-notifier-guard (1.5.3) thor (0.18.1) thread_safe (0.1.3) atomic tilt (1.4.1) + timers (1.1.0) treetop (1.4.15) polyglot polyglot (>= 0.3.1) @@ -103,17 +180,30 @@ GEM uglifier (2.4.0) execjs (>= 0.3.0) json (>= 1.8.0) + websocket (1.0.7) + xpath (2.0.0) + nokogiri (~> 1.3) PLATFORMS ruby DEPENDENCIES + bootstrap-sass + capybara coffee-rails (~> 4.0.0) + factory_girl_rails + guard-rspec + guard-spring jbuilder (~> 1.2) jquery-rails + libnotify rails (= 4.0.2) + rspec-rails sass-rails (~> 4.0.0) sdoc + selenium-webdriver + spring sqlite3 + terminal-notifier-guard turbolinks uglifier (>= 1.3.0) diff --git a/Guardfile b/Guardfile new file mode 100644 index 0000000..cc0c048 --- /dev/null +++ b/Guardfile @@ -0,0 +1,42 @@ +# A sample Guardfile +# More info at https://github.com/guard/guard#readme + +guard 'spring', :rspec_cli => '--color' do + watch(%r{^spec/.+_spec\.rb$}) + watch(%r{^spec/spec_helper\.rb$}) { |m| 'spec' } + watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" } + watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" } + watch(%r{^app/controllers/(.+)_(controller)\.rb$}) do |m| + %W(spec/routing/#{m[1]}_routing_spec.rb spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb spec/requests/#{m[1]}_spec.rb) + end +end + +guard :rspec do + if RUBY_PLATFORM.include?('linux') + notification :libnotify, :timeout => 5, :transient => true, + :append => false, :urgency => :critical + end + if RUBY_PLATFORM.include?('darwin') + notification :terminal_notifier, :timeout => 5 + end + + watch(%r{^spec/.+_spec\.rb$}) + watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" } + watch('spec/spec_helper.rb') { "spec" } + + # Rails example + watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" } + watch(%r{^app/(.*)(\.erb|\.haml|\.slim)$}) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" } + watch(%r{^app/controllers/(.+)_(controller)\.rb$}) { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] } + watch(%r{^spec/support/(.+)\.rb$}) { "spec" } + watch('config/routes.rb') { "spec/routing" } + watch('app/controllers/application_controller.rb') { "spec/controllers" } + + # Capybara features specs + watch(%r{^app/views/(.+)/.*\.(erb|haml|slim)$}) { |m| "spec/features/#{m[1]}_spec.rb" } + + # Turnip features and steps + watch(%r{^spec/acceptance/(.+)\.feature$}) + watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'spec/acceptance' } +end + diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index d6925fa..cd5c291 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -13,4 +13,5 @@ //= require jquery //= require jquery_ujs //= require turbolinks +//= require bootstrap //= require_tree . diff --git a/app/assets/stylesheets/application.css b/app/assets/stylesheets/application.css index 3192ec8..af1f35d 100644 --- a/app/assets/stylesheets/application.css +++ b/app/assets/stylesheets/application.css @@ -11,3 +11,4 @@ *= require_self *= require_tree . */ +@import "boostrap" diff --git a/bin/rails b/bin/rails index 728cd85..7feb6a3 100755 --- a/bin/rails +++ b/bin/rails @@ -1,4 +1,8 @@ #!/usr/bin/env ruby +begin + load File.expand_path("../spring", __FILE__) +rescue LoadError +end APP_PATH = File.expand_path('../../config/application', __FILE__) require_relative '../config/boot' require 'rails/commands' diff --git a/bin/rake b/bin/rake index 1724048..8017a02 100755 --- a/bin/rake +++ b/bin/rake @@ -1,4 +1,8 @@ #!/usr/bin/env ruby +begin + load File.expand_path("../spring", __FILE__) +rescue LoadError +end require_relative '../config/boot' require 'rake' Rake.application.run diff --git a/bin/spring b/bin/spring new file mode 100755 index 0000000..253ec37 --- /dev/null +++ b/bin/spring @@ -0,0 +1,18 @@ +#!/usr/bin/env ruby + +# This file loads spring without using Bundler, in order to be fast +# It gets overwritten when you run the `spring binstub` command + +unless defined?(Spring) + require "rubygems" + require "bundler" + + if match = Bundler.default_lockfile.read.match(/^GEM$.*?^ spring \((.*?)\)$.*?^$/m) + ENV["GEM_PATH"] = ([Bundler.bundle_path.to_s] + Gem.path).join(File::PATH_SEPARATOR) + ENV["GEM_HOME"] = "" + Gem.paths = ENV + + gem "spring", match[1] + require "spring/binstub" + end +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb new file mode 100644 index 0000000..86abd90 --- /dev/null +++ b/spec/spec_helper.rb @@ -0,0 +1 @@ +require 'rubygems'