dancroak-sortable_table 0.0.4 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.markdown +72 -0
- data/Rakefile +9 -9
- data/VERSION.yml +4 -0
- data/lib/sortable_table/app/controllers/application_controller.rb +15 -47
- data/lib/sortable_table/app/helpers/application_helper.rb +47 -31
- data/lib/sortable_table/test/test_helper.rb +65 -0
- data/lib/sortable_table.rb +1 -0
- data/test/rails_root/Rakefile +10 -0
- data/test/rails_root/app/controllers/application.rb +5 -0
- data/test/rails_root/app/controllers/users_controller.rb +9 -0
- data/test/rails_root/app/helpers/application_helper.rb +3 -0
- data/test/rails_root/app/helpers/users_helper.rb +2 -0
- data/test/rails_root/app/models/user.rb +2 -0
- data/test/rails_root/app/views/layouts/users.html.erb +17 -0
- data/test/rails_root/app/views/users/index.html.erb +19 -0
- data/test/rails_root/config/boot.rb +109 -0
- data/test/rails_root/config/database.yml +19 -0
- data/test/rails_root/config/environment.rb +26 -0
- data/test/rails_root/config/environments/development.rb +17 -0
- data/test/rails_root/config/environments/test.rb +22 -0
- data/test/rails_root/config/initializers/new_rails_defaults.rb +15 -0
- data/test/rails_root/config/routes.rb +6 -0
- data/test/rails_root/db/development.sqlite3 +0 -0
- data/test/rails_root/db/migrate/20080819225020_create_users.rb +15 -0
- data/test/rails_root/db/production.sqlite3 +0 -0
- data/test/rails_root/db/schema.rb +23 -0
- data/test/rails_root/db/test.sqlite3 +0 -0
- data/test/rails_root/log/development.log +2710 -0
- data/test/rails_root/log/production.log +0 -0
- data/test/rails_root/log/server.log +0 -0
- data/test/rails_root/public/404.html +30 -0
- data/test/rails_root/public/422.html +30 -0
- data/test/rails_root/public/500.html +30 -0
- data/test/rails_root/public/dispatch.cgi +10 -0
- data/test/rails_root/public/dispatch.fcgi +24 -0
- data/test/rails_root/public/dispatch.rb +10 -0
- data/test/rails_root/public/favicon.ico +0 -0
- data/test/rails_root/public/images/rails.png +0 -0
- data/test/rails_root/public/images/sort-ascending-arrow.gif +0 -0
- data/test/rails_root/public/images/sort-descending-arrow.gif +0 -0
- data/test/rails_root/public/index.html +274 -0
- data/test/rails_root/public/javascripts/application.js +2 -0
- data/test/rails_root/public/javascripts/controls.js +963 -0
- data/test/rails_root/public/javascripts/dragdrop.js +972 -0
- data/test/rails_root/public/javascripts/effects.js +1120 -0
- data/test/rails_root/public/javascripts/prototype.js +4225 -0
- data/test/rails_root/public/robots.txt +5 -0
- data/test/rails_root/public/stylesheets/scaffold.css +53 -0
- data/test/rails_root/public/stylesheets/sortable.css +10 -0
- data/test/rails_root/script/about +3 -0
- data/test/rails_root/script/console +3 -0
- data/test/rails_root/script/dbconsole +3 -0
- data/test/rails_root/script/destroy +3 -0
- data/test/rails_root/script/generate +3 -0
- data/test/rails_root/script/performance/benchmarker +3 -0
- data/test/rails_root/script/performance/profiler +3 -0
- data/test/rails_root/script/performance/request +3 -0
- data/test/rails_root/script/plugin +3 -0
- data/test/rails_root/script/process/inspector +3 -0
- data/test/rails_root/script/process/reaper +3 -0
- data/test/rails_root/script/process/spawner +3 -0
- data/test/rails_root/script/runner +3 -0
- data/test/rails_root/script/server +3 -0
- data/test/rails_root/test/factories/user_factory.rb +17 -0
- data/test/rails_root/test/functional/users_controller_test.rb +15 -0
- data/test/rails_root/test/test_helper.rb +32 -0
- data/test/rails_root/test/units/helpers/application_helper_test.rb +46 -0
- metadata +220 -4
- data/README.textile +0 -136
- data/TODO.textile +0 -2
data/README.markdown
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
Sortable Table
|
2
|
+
==============
|
3
|
+
|
4
|
+
Rails plugin to sort tables of ActiveRecord data.
|
5
|
+
|
6
|
+
Install
|
7
|
+
-------
|
8
|
+
|
9
|
+
script/plugin install git://github.com/dancroak/sortable_table.git
|
10
|
+
|
11
|
+
Conventions
|
12
|
+
-----------
|
13
|
+
|
14
|
+
params[:sort] and params[:order]
|
15
|
+
|
16
|
+
Examples
|
17
|
+
--------
|
18
|
+
|
19
|
+
Use the sortable_attributes macro to list the... sortable attributes.
|
20
|
+
|
21
|
+
Then, in your index action, pass the sort_order method to your usual
|
22
|
+
order parameter for will paginate or named scope call.
|
23
|
+
|
24
|
+
class UsersController < Admin::BaseController
|
25
|
+
|
26
|
+
sortable_attributes :name, :email
|
27
|
+
|
28
|
+
def index
|
29
|
+
@users = User.paginate :page => params[:page], :order => sort_order
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
Time-saving Shoulda macros for your tests:
|
35
|
+
|
36
|
+
class UsersControllerTest < ActionController::TestCase
|
37
|
+
|
38
|
+
context 'GET to index with sort and order params' do
|
39
|
+
setup do
|
40
|
+
5.times do |each|
|
41
|
+
Factory :user,
|
42
|
+
:name => "name #{each}",
|
43
|
+
:email => "email#{each}@example.com"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
should_sort_by :name
|
48
|
+
should_sort_by :email
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
And some sugar for your views:
|
54
|
+
|
55
|
+
%h1 Users
|
56
|
+
|
57
|
+
%table
|
58
|
+
%tr
|
59
|
+
= sortable_table_header 'Name', :sort => 'name'
|
60
|
+
= sortable_table_header 'E-mail', :sort => 'email'
|
61
|
+
|
62
|
+
- @users.each do |each|
|
63
|
+
%tr
|
64
|
+
%td= each.name
|
65
|
+
%td= each.email
|
66
|
+
|
67
|
+
Authors
|
68
|
+
-------
|
69
|
+
|
70
|
+
Dan Croak, Joe Ferris, and Boston.rb.
|
71
|
+
|
72
|
+
Copyright (c) 2008 Dan Croak, released under the MIT license
|
data/Rakefile
CHANGED
@@ -11,21 +11,21 @@ end
|
|
11
11
|
|
12
12
|
desc "Run the test suite"
|
13
13
|
task :default => :test
|
14
|
-
|
14
|
+
|
15
15
|
spec = Gem::Specification.new do |s|
|
16
|
-
s.version = '0.0.4'
|
17
16
|
s.name = "sortable_table"
|
18
17
|
s.summary = "Sort HTML tables in a Rails app."
|
19
18
|
s.email = "dcroak@thoughtbot.com"
|
20
19
|
s.homepage = "http://github.com/dancroak/sortable_table"
|
21
20
|
s.description = "Sort HTML tables in a Rails app."
|
22
21
|
s.authors = ["Dan Croak", "Joe Ferris", "Boston.rb"]
|
23
|
-
s.files = FileList["[A-Z]*", "{lib,rails}/**/*"]
|
22
|
+
s.files = FileList["[A-Z]*", "{lib,rails,test}/**/*"]
|
24
23
|
end
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
24
|
+
|
25
|
+
begin
|
26
|
+
require 'rubygems'
|
27
|
+
require 'jeweler'
|
28
|
+
Jeweler.gemspec = spec
|
29
|
+
rescue LoadError
|
30
|
+
puts "Jeweler not available. sudo gem install technicalpickles-jeweler --source=http://gems.github.com"
|
31
31
|
end
|
data/VERSION.yml
ADDED
@@ -2,7 +2,7 @@ module SortableTable
|
|
2
2
|
module App
|
3
3
|
module Controllers
|
4
4
|
module ApplicationController
|
5
|
-
|
5
|
+
|
6
6
|
def self.included(base)
|
7
7
|
base.class_eval do
|
8
8
|
include InstanceMethods
|
@@ -12,33 +12,21 @@ module SortableTable
|
|
12
12
|
|
13
13
|
module ClassMethods
|
14
14
|
def sortable_attributes(*args)
|
15
|
-
mappings =
|
16
|
-
acceptable_columns =
|
17
|
-
|
18
|
-
end
|
19
|
-
|
20
|
-
def pop_hash_from_list(*args)
|
21
|
-
if args.last.is_a?(Hash)
|
22
|
-
args.pop
|
23
|
-
else
|
24
|
-
{}
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
def join_array_and_hash_values(array, hash)
|
29
|
-
array.collect { |each| each.to_s } +
|
30
|
-
hash.values.collect { |each| each.to_s }
|
31
|
-
end
|
32
|
-
|
33
|
-
def define_sort_order(acceptable_columns, mappings)
|
15
|
+
mappings = args.last.is_a?(Hash) ? args.pop : {}
|
16
|
+
acceptable_columns = args.collect(&:to_s) + mappings.keys.collect(&:to_s)
|
17
|
+
|
34
18
|
define_method(:sort_order) do |*default|
|
35
|
-
direction = params[:order]
|
36
|
-
|
19
|
+
direction = if params[:order]
|
20
|
+
params[:order] == 'ascending' ? 'asc' : 'desc'
|
21
|
+
else
|
22
|
+
default_sort_direction(default)
|
23
|
+
end
|
24
|
+
column = params[:sort] || 'created_at'
|
37
25
|
if params[:sort] && acceptable_columns.include?(column)
|
38
26
|
column = mappings[column.to_sym] || column
|
39
|
-
|
27
|
+
"#{column} #{direction}"
|
40
28
|
else
|
41
|
-
"#{acceptable_columns.first} #{
|
29
|
+
"#{acceptable_columns.first} #{direction}"
|
42
30
|
end
|
43
31
|
end
|
44
32
|
end
|
@@ -46,30 +34,10 @@ module SortableTable
|
|
46
34
|
|
47
35
|
module InstanceMethods
|
48
36
|
def default_sort_direction(default)
|
49
|
-
if
|
50
|
-
|
51
|
-
when "ascending", "asc" then "asc"
|
52
|
-
when "descending", "asc" then "desc"
|
53
|
-
else
|
54
|
-
raise RuntimeError,
|
55
|
-
"valid :default sort orders are 'ascending' & 'descending'"
|
56
|
-
end
|
57
|
-
else
|
58
|
-
"desc"
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
def hash_with_default_key?(object)
|
63
|
-
object.any? &&
|
64
|
-
object.first.is_a?(Hash) &&
|
65
|
-
object.first.has_key?(:default)
|
66
|
-
end
|
67
|
-
|
68
|
-
def handle_compound_sorting(column, direction)
|
69
|
-
if column.is_a?(Array)
|
70
|
-
column.collect { |each| "#{each} #{direction}" }.join(',')
|
37
|
+
if default.any? && default.first.is_a?(Hash) && default.first.has_key?(:default)
|
38
|
+
default.first[:default] == 'ascending' ? 'asc' : 'desc'
|
71
39
|
else
|
72
|
-
|
40
|
+
'desc'
|
73
41
|
end
|
74
42
|
end
|
75
43
|
end
|
@@ -10,49 +10,53 @@ module SortableTable
|
|
10
10
|
end
|
11
11
|
|
12
12
|
module InstanceMethods
|
13
|
-
def sortable_table_header(
|
14
|
-
|
15
|
-
|
13
|
+
def sortable_table_header(*args)
|
14
|
+
opts = args.extract_options!
|
15
|
+
|
16
|
+
inner_html = args
|
17
|
+
if inner_html.blank?
|
18
|
+
raise ArgumentError("Must specify inner_html as first argument")
|
19
|
+
end
|
20
|
+
|
21
|
+
# if args.first.is_a?(String)
|
22
|
+
# inner_html = args.shift
|
23
|
+
# elsif opts.first.is_a?(Hash)
|
24
|
+
# if opts.has_key?(:inner_html)
|
25
|
+
# inner_html = opts[:inner_html]
|
26
|
+
# else
|
27
|
+
# # raise ArgumentError unless opts.has_key?(:sort)
|
28
|
+
# inner_html = opts[:sort].humanize
|
29
|
+
# end
|
30
|
+
# else
|
31
|
+
# raise ArgumentError,
|
32
|
+
# "calling signature must be String, Hash or Hash"
|
33
|
+
# end
|
34
|
+
|
35
|
+
# anchor = opts[:anchor].blank? ? "" : "##{opts[:anchor]}"
|
36
|
+
# sortable_url(opts) + anchor
|
37
|
+
|
16
38
|
content_tag :th,
|
17
|
-
link_to(
|
18
|
-
sortable_url(opts)
|
39
|
+
link_to(inner_html,
|
40
|
+
sortable_url(opts),
|
19
41
|
:title => opts[:title]),
|
20
|
-
:class =>
|
42
|
+
:class => class_name_for_sortable_table_header_tag(opts)
|
21
43
|
end
|
22
44
|
|
23
|
-
def
|
24
|
-
class_names = []
|
25
|
-
class_names << sortable_table_header_class(opts)
|
26
|
-
class_names << opts[:class]
|
27
|
-
class_names.compact.blank? ? nil : class_names.compact.join(" ")
|
28
|
-
end
|
29
|
-
|
30
|
-
def sortable_table_header_class(opts)
|
45
|
+
def class_name_for_sortable_table_header_tag(opts)
|
31
46
|
if default_sort_to_most_recent? opts
|
32
|
-
'descending'
|
47
|
+
class_name = 'descending'
|
33
48
|
elsif re_sort? opts
|
34
|
-
params[:order]
|
49
|
+
class_name = params[:order]
|
35
50
|
else
|
36
|
-
|
51
|
+
class_name = ""
|
37
52
|
end
|
53
|
+
class_name << " #{opts[:class_name]}"
|
38
54
|
end
|
39
|
-
|
40
|
-
def default_sort_to_most_recent?(opts)
|
41
|
-
params[:sort].nil? && opts[:sort] == 'date'
|
42
|
-
end
|
43
|
-
|
44
|
-
def re_sort?(opts)
|
45
|
-
params[:sort] == opts[:sort]
|
46
|
-
end
|
47
|
-
|
48
|
-
def reverse_order(order)
|
49
|
-
order == 'ascending' ? 'descending' : 'ascending'
|
50
|
-
end
|
51
|
-
|
55
|
+
|
52
56
|
def sortable_url(opts)
|
53
57
|
url_for(params.merge(:sort => opts[:sort], :order => link_sort_order(opts), :page => 1))
|
54
58
|
end
|
55
|
-
|
59
|
+
|
56
60
|
def link_sort_order(opts)
|
57
61
|
if default_sort_to_most_recent? opts
|
58
62
|
'ascending'
|
@@ -62,6 +66,18 @@ module SortableTable
|
|
62
66
|
'ascending'
|
63
67
|
end
|
64
68
|
end
|
69
|
+
|
70
|
+
def default_sort_to_most_recent?(opts)
|
71
|
+
params[:sort].nil? && opts[:sort] == @sorted_column
|
72
|
+
end
|
73
|
+
|
74
|
+
def re_sort?(opts)
|
75
|
+
params[:sort] == opts[:sort]
|
76
|
+
end
|
77
|
+
|
78
|
+
def reverse_order(order)
|
79
|
+
order == 'ascending' ? 'descending' : 'ascending'
|
80
|
+
end
|
65
81
|
end
|
66
82
|
|
67
83
|
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
module SortableTable
|
2
|
+
module Test
|
3
|
+
module TestHelper
|
4
|
+
|
5
|
+
def self.included(base)
|
6
|
+
base.class_eval do
|
7
|
+
include InstanceMethods
|
8
|
+
extend ClassMethods
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
module InstanceMethods
|
13
|
+
def stubbed_action_view
|
14
|
+
view = ActionView::Base.new(@controller.class.view_paths, {}, @controller)
|
15
|
+
yield view
|
16
|
+
ActionView::Base.stubs(:new).returns(view)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
module ClassMethods
|
21
|
+
def should_sort_by(attribute, params = {}, &block)
|
22
|
+
collection = self.name.underscore.gsub(/_controller_test/, '')
|
23
|
+
collection.slice!(0..collection.rindex('/')) if collection.include?('/')
|
24
|
+
collection = collection.to_sym
|
25
|
+
model_name = collection.to_s.singularize.camelize.constantize
|
26
|
+
block ||= attribute
|
27
|
+
|
28
|
+
%w(ascending descending).each do |direction|
|
29
|
+
should "sort by #{attribute.to_s} #{direction}" do
|
30
|
+
assert_not_nil model_name.find(:all).any?,
|
31
|
+
"#{model_name}.find(:all) is nil"
|
32
|
+
|
33
|
+
get :index, :sort => attribute.to_s, :order => direction
|
34
|
+
|
35
|
+
# controller tests
|
36
|
+
|
37
|
+
assert_not_nil assigns(collection),
|
38
|
+
"assigns(:#{collection}) is nil"
|
39
|
+
assert assigns(collection).size >= 2,
|
40
|
+
"cannot test sorting without at least 2 sortable objects"
|
41
|
+
|
42
|
+
expected = assigns(collection).sort_by(&block)
|
43
|
+
expected = expected.reverse if direction == 'descending'
|
44
|
+
|
45
|
+
assert expected == assigns(collection),
|
46
|
+
"expected - #{expected.map(&block).inspect}," <<
|
47
|
+
" but was - #{assigns(collection).map(&block).inspect}"
|
48
|
+
|
49
|
+
# view tests
|
50
|
+
|
51
|
+
view_helper_error_message = "Include the sortable_table_header" <<
|
52
|
+
" helper in your view with the option :sort => '#{attribute}'"
|
53
|
+
|
54
|
+
assert_select "th" do
|
55
|
+
assert_select "a[href*=?]", "sort=#{attribute.to_s}",
|
56
|
+
true, view_helper_error_message
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
data/lib/sortable_table.rb
CHANGED
@@ -0,0 +1,10 @@
|
|
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.join(File.dirname(__FILE__), 'config', 'boot'))
|
5
|
+
|
6
|
+
require 'rake'
|
7
|
+
require 'rake/testtask'
|
8
|
+
require 'rake/rdoctask'
|
9
|
+
|
10
|
+
require 'tasks/rails'
|
@@ -0,0 +1,17 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
2
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
3
|
+
|
4
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
5
|
+
<head>
|
6
|
+
<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
|
7
|
+
<title>Users: <%= controller.action_name %></title>
|
8
|
+
<%= stylesheet_link_tag 'scaffold', 'sortable' %>
|
9
|
+
</head>
|
10
|
+
<body>
|
11
|
+
|
12
|
+
<p style="color: green"><%= flash[:notice] %></p>
|
13
|
+
|
14
|
+
<%= yield %>
|
15
|
+
|
16
|
+
</body>
|
17
|
+
</html>
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<h1>Users</h1>
|
2
|
+
|
3
|
+
<table>
|
4
|
+
<tr>
|
5
|
+
<%= sortable_table_header 'Name', :sort => 'name' %>
|
6
|
+
<%= sortable_table_header 'Email', :sort => 'email' %>
|
7
|
+
<%= sortable_table_header 'Age', :sort => 'age' %>
|
8
|
+
<th>Created On</th>
|
9
|
+
</tr>
|
10
|
+
|
11
|
+
<% @users.each do |user| %>
|
12
|
+
<tr>
|
13
|
+
<td><%=h user.name %></td>
|
14
|
+
<td><%=h user.email %></td>
|
15
|
+
<td><%=h user.age %></td>
|
16
|
+
<td><%=h user.created_at.to_s %></td>
|
17
|
+
</tr>
|
18
|
+
<% end %>
|
19
|
+
</table>
|
@@ -0,0 +1,109 @@
|
|
1
|
+
# Don't change this file!
|
2
|
+
# Configure your app in config/environment.rb and config/environments/*.rb
|
3
|
+
|
4
|
+
RAILS_ROOT = "#{File.dirname(__FILE__)}/.." unless defined?(RAILS_ROOT)
|
5
|
+
|
6
|
+
module Rails
|
7
|
+
class << self
|
8
|
+
def boot!
|
9
|
+
unless booted?
|
10
|
+
preinitialize
|
11
|
+
pick_boot.run
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def booted?
|
16
|
+
defined? Rails::Initializer
|
17
|
+
end
|
18
|
+
|
19
|
+
def pick_boot
|
20
|
+
(vendor_rails? ? VendorBoot : GemBoot).new
|
21
|
+
end
|
22
|
+
|
23
|
+
def vendor_rails?
|
24
|
+
File.exist?("#{RAILS_ROOT}/vendor/rails")
|
25
|
+
end
|
26
|
+
|
27
|
+
def preinitialize
|
28
|
+
load(preinitializer_path) if File.exist?(preinitializer_path)
|
29
|
+
end
|
30
|
+
|
31
|
+
def preinitializer_path
|
32
|
+
"#{RAILS_ROOT}/config/preinitializer.rb"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
class Boot
|
37
|
+
def run
|
38
|
+
load_initializer
|
39
|
+
Rails::Initializer.run(:set_load_path)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
class VendorBoot < Boot
|
44
|
+
def load_initializer
|
45
|
+
require "#{RAILS_ROOT}/vendor/rails/railties/lib/initializer"
|
46
|
+
Rails::Initializer.run(:install_gem_spec_stubs)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
class GemBoot < Boot
|
51
|
+
def load_initializer
|
52
|
+
self.class.load_rubygems
|
53
|
+
load_rails_gem
|
54
|
+
require 'initializer'
|
55
|
+
end
|
56
|
+
|
57
|
+
def load_rails_gem
|
58
|
+
if version = self.class.gem_version
|
59
|
+
gem 'rails', version
|
60
|
+
else
|
61
|
+
gem 'rails'
|
62
|
+
end
|
63
|
+
rescue Gem::LoadError => load_error
|
64
|
+
$stderr.puts %(Missing the Rails #{version} gem. Please `gem install -v=#{version} rails`, update your RAILS_GEM_VERSION setting in config/environment.rb for the Rails version you do have installed, or comment out RAILS_GEM_VERSION to use the latest version installed.)
|
65
|
+
exit 1
|
66
|
+
end
|
67
|
+
|
68
|
+
class << self
|
69
|
+
def rubygems_version
|
70
|
+
Gem::RubyGemsVersion if defined? Gem::RubyGemsVersion
|
71
|
+
end
|
72
|
+
|
73
|
+
def gem_version
|
74
|
+
if defined? RAILS_GEM_VERSION
|
75
|
+
RAILS_GEM_VERSION
|
76
|
+
elsif ENV.include?('RAILS_GEM_VERSION')
|
77
|
+
ENV['RAILS_GEM_VERSION']
|
78
|
+
else
|
79
|
+
parse_gem_version(read_environment_rb)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def load_rubygems
|
84
|
+
require 'rubygems'
|
85
|
+
|
86
|
+
unless rubygems_version >= '0.9.4'
|
87
|
+
$stderr.puts %(Rails requires RubyGems >= 0.9.4 (you have #{rubygems_version}). Please `gem update --system` and try again.)
|
88
|
+
exit 1
|
89
|
+
end
|
90
|
+
|
91
|
+
rescue LoadError
|
92
|
+
$stderr.puts %(Rails requires RubyGems >= 0.9.4. Please install RubyGems and try again: http://rubygems.rubyforge.org)
|
93
|
+
exit 1
|
94
|
+
end
|
95
|
+
|
96
|
+
def parse_gem_version(text)
|
97
|
+
$1 if text =~ /^[^#]*RAILS_GEM_VERSION\s*=\s*["']([!~<>=]*\s*[\d.]+)["']/
|
98
|
+
end
|
99
|
+
|
100
|
+
private
|
101
|
+
def read_environment_rb
|
102
|
+
File.read("#{RAILS_ROOT}/config/environment.rb")
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
# All that for this:
|
109
|
+
Rails.boot!
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# SQLite version 3.x
|
2
|
+
# gem install sqlite3-ruby (not necessary on OS X Leopard)
|
3
|
+
development:
|
4
|
+
adapter: sqlite3
|
5
|
+
database: db/development.sqlite3
|
6
|
+
timeout: 5000
|
7
|
+
|
8
|
+
# Warning: The database defined as "test" will be erased and
|
9
|
+
# re-generated from your development database when you run "rake".
|
10
|
+
# Do not set this db to the same as development or production.
|
11
|
+
test:
|
12
|
+
adapter: sqlite3
|
13
|
+
database: db/test.sqlite3
|
14
|
+
timeout: 5000
|
15
|
+
|
16
|
+
production:
|
17
|
+
adapter: sqlite3
|
18
|
+
database: db/production.sqlite3
|
19
|
+
timeout: 5000
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# Be sure to restart your server when you modify this file
|
2
|
+
|
3
|
+
# Uncomment below to force Rails into production mode when
|
4
|
+
# you don't control web/app server and can't set it the proper way
|
5
|
+
# ENV['RAILS_ENV'] ||= 'production'
|
6
|
+
|
7
|
+
# Specifies gem version of Rails to use when vendor/rails is not present
|
8
|
+
RAILS_GEM_VERSION = '2.1.0' unless defined? RAILS_GEM_VERSION
|
9
|
+
|
10
|
+
# Bootstrap the Rails environment, frameworks, and default configuration
|
11
|
+
require File.join(File.dirname(__FILE__), 'boot')
|
12
|
+
|
13
|
+
Rails::Initializer.run do |config|
|
14
|
+
|
15
|
+
config.time_zone = 'UTC'
|
16
|
+
|
17
|
+
# Your secret key for verifying cookie session data integrity.
|
18
|
+
# If you change this key, all old sessions will become invalid!
|
19
|
+
# Make sure the secret is at least 30 characters and all random,
|
20
|
+
# no regular words or you'll be exposed to dictionary attacks.
|
21
|
+
config.action_controller.session = {
|
22
|
+
:session_key => '_rails_root_session',
|
23
|
+
:secret => '6042b566bbfa8e55bdb33a4b3b39b3c373e035c0a87b587a614db4c8bfea19a7adbd49f2098d4c995e37b28f6539e309f4bc5885cf023b47d5fe9d4450be2d46'
|
24
|
+
}
|
25
|
+
|
26
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# Settings specified here will take precedence over those in config/environment.rb
|
2
|
+
|
3
|
+
# In the development environment your application's code is reloaded on
|
4
|
+
# every request. This slows down response time but is perfect for development
|
5
|
+
# since you don't have to restart the webserver when you make code changes.
|
6
|
+
config.cache_classes = false
|
7
|
+
|
8
|
+
# Log error messages when you accidentally call methods on nil.
|
9
|
+
config.whiny_nils = true
|
10
|
+
|
11
|
+
# Show full error reports and disable caching
|
12
|
+
config.action_controller.consider_all_requests_local = true
|
13
|
+
config.action_view.debug_rjs = 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
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# Settings specified here will take precedence over those in config/environment.rb
|
2
|
+
|
3
|
+
# The test environment is used exclusively to run your application's
|
4
|
+
# test suite. You never need to work with it otherwise. Remember that
|
5
|
+
# your test database is "scratch space" for the test suite and is wiped
|
6
|
+
# and recreated between test runs. Don't rely on the data there!
|
7
|
+
config.cache_classes = true
|
8
|
+
|
9
|
+
# Log error messages when you accidentally call methods on nil.
|
10
|
+
config.whiny_nils = true
|
11
|
+
|
12
|
+
# Show full error reports and disable caching
|
13
|
+
config.action_controller.consider_all_requests_local = true
|
14
|
+
config.action_controller.perform_caching = false
|
15
|
+
|
16
|
+
# Disable request forgery protection in test environment
|
17
|
+
config.action_controller.allow_forgery_protection = false
|
18
|
+
|
19
|
+
# Tell Action Mailer not to deliver emails to the real world.
|
20
|
+
# The :test delivery method accumulates sent emails in the
|
21
|
+
# ActionMailer::Base.deliveries array.
|
22
|
+
config.action_mailer.delivery_method = :test
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# These settings change the behavior of Rails 2 apps and will be defaults
|
2
|
+
# for Rails 3. You can remove this initializer when Rails 3 is released.
|
3
|
+
|
4
|
+
# Include Active Record class name as root for JSON serialized output.
|
5
|
+
ActiveRecord::Base.include_root_in_json = true
|
6
|
+
|
7
|
+
# Store the full class name (including module namespace) in STI type column.
|
8
|
+
ActiveRecord::Base.store_full_sti_class = true
|
9
|
+
|
10
|
+
# Use ISO 8601 format for JSON serialized times and dates.
|
11
|
+
ActiveSupport.use_standard_json_time_format = true
|
12
|
+
|
13
|
+
# Don't escape HTML entities in JSON, leave that for the #json_escape helper.
|
14
|
+
# if you're including raw json in an HTML page.
|
15
|
+
ActiveSupport.escape_html_entities_in_json = false
|
Binary file
|