jtable-rails 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.document +5 -0
- data/.rspec +1 -0
- data/.rvmrc +1 -0
- data/Gemfile +10 -0
- data/Gemfile.lock +94 -0
- data/LICENSE.txt +22 -0
- data/README.md +2 -0
- data/Rakefile +42 -0
- data/VERSION +1 -0
- data/jtable-rails.gemspec +136 -0
- data/lib/jtable-rails.rb +5 -0
- data/lib/jtable-rails/action_controller.rb +8 -0
- data/lib/jtable-rails/active_record.rb +83 -0
- data/spec/controller_specs/people_controller_spec.rb +30 -0
- data/spec/fabricators/person.rb +9 -0
- data/spec/model_specs/person_spec.rb +73 -0
- data/spec/spec_helper.rb +16 -0
- data/spec/support/rails_app/.gitignore +4 -0
- data/spec/support/rails_app/Gemfile +5 -0
- data/spec/support/rails_app/Gemfile.lock +82 -0
- data/spec/support/rails_app/Rakefile +7 -0
- data/spec/support/rails_app/app/controllers/application_controller.rb +3 -0
- data/spec/support/rails_app/app/controllers/people_controller.rb +83 -0
- data/spec/support/rails_app/app/helpers/application_helper.rb +2 -0
- data/spec/support/rails_app/app/helpers/people_helper.rb +2 -0
- data/spec/support/rails_app/app/models/person.rb +3 -0
- data/spec/support/rails_app/app/views/layouts/application.html.erb +14 -0
- data/spec/support/rails_app/app/views/people/_form.html.erb +41 -0
- data/spec/support/rails_app/app/views/people/edit.html.erb +6 -0
- data/spec/support/rails_app/app/views/people/index.html.erb +33 -0
- data/spec/support/rails_app/app/views/people/new.html.erb +5 -0
- data/spec/support/rails_app/app/views/people/show.html.erb +35 -0
- data/spec/support/rails_app/config.ru +4 -0
- data/spec/support/rails_app/config/application.rb +42 -0
- data/spec/support/rails_app/config/boot.rb +13 -0
- data/spec/support/rails_app/config/database.yml +22 -0
- data/spec/support/rails_app/config/environment.rb +5 -0
- data/spec/support/rails_app/config/environments/development.rb +26 -0
- data/spec/support/rails_app/config/environments/production.rb +49 -0
- data/spec/support/rails_app/config/environments/test.rb +35 -0
- data/spec/support/rails_app/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/support/rails_app/config/initializers/inflections.rb +10 -0
- data/spec/support/rails_app/config/initializers/mime_types.rb +5 -0
- data/spec/support/rails_app/config/initializers/secret_token.rb +7 -0
- data/spec/support/rails_app/config/initializers/session_store.rb +8 -0
- data/spec/support/rails_app/config/locales/en.yml +5 -0
- data/spec/support/rails_app/config/routes.rb +60 -0
- data/spec/support/rails_app/db/migrate/20110207142623_create_people.rb +18 -0
- data/spec/support/rails_app/db/schema.rb +26 -0
- data/spec/support/rails_app/db/seeds.rb +7 -0
- data/spec/support/rails_app/public/stylesheets/scaffold.css +56 -0
- data/spec/support/rails_app/script/rails +6 -0
- metadata +236 -0
@@ -0,0 +1,9 @@
|
|
1
|
+
Fabricator(:person) do
|
2
|
+
[:first_name, :last_name, :age, :date_of_birth, :gender, :alive]
|
3
|
+
first_name {Fabricate.sequence(:person_first_name) {|i| "FirstName #{i}"}}
|
4
|
+
last_name {Fabricate.sequence(:person_last_name) {|i| "LastName #{i}"}}
|
5
|
+
age {Fabricate.sequence(:person_age)}
|
6
|
+
date_of_birth {Fabricate.sequence(:person_date_of_birth).years.ago}
|
7
|
+
gender {Fabricate.sequence(:person_gender) {|i| i%2==0 ? "Male" : "Female"}}
|
8
|
+
alive {rand(10).even?}
|
9
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
describe "Person" do
|
4
|
+
before(:each) do
|
5
|
+
10.times do |i|
|
6
|
+
Fabricate(:person)
|
7
|
+
end
|
8
|
+
|
9
|
+
@params = {
|
10
|
+
:searchable_columns => ["first_name", "last_name", "age", "date_of_birth", "gender"],
|
11
|
+
:column_search => {},
|
12
|
+
:limit => "5",
|
13
|
+
:offset => "0",
|
14
|
+
:search => "",
|
15
|
+
:sort_column => "",
|
16
|
+
:sort_direction => ""
|
17
|
+
}
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should have the jtable scopes and methods" do
|
21
|
+
Person.respond_to?(:jtable).should be_true
|
22
|
+
Person.respond_to?(:jtable_search).should be_true
|
23
|
+
Person.respond_to?(:jtable_single_search).should be_true
|
24
|
+
Person.respond_to?(:jtable_order).should be_true
|
25
|
+
Person.respond_to?(:jtable_paginate).should be_true
|
26
|
+
Person.respond_to?(:jtable_default).should be_true
|
27
|
+
Person.respond_to?(:jtable_query).should be_true
|
28
|
+
[:first_name, :last_name, :age, :date_of_birth, :gender, :alive].each do |attribute|
|
29
|
+
Person.respond_to?("jtable_search_#{attribute}").should be_true
|
30
|
+
Person.respond_to?("jtable_order_#{attribute}").should be_true
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should load initial set" do
|
35
|
+
Person.jtable_query(@params).to_json.should eql(Person.all.to_json)
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should paginate" do
|
39
|
+
Person.jtable_query(@params).jtable_paginate(@params[:limit], @params[:offset]).to_json.should eql(Person.limit(5).offset(0).to_json)
|
40
|
+
@params[:offset] = 5
|
41
|
+
Person.jtable_query(@params).jtable_paginate(@params[:limit], @params[:offset]).to_json.should eql(Person.limit(5).offset(5).to_json)
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should search" do
|
45
|
+
person_1 = Person.first
|
46
|
+
person_2 = Person.last
|
47
|
+
person_1.first_name = "John"
|
48
|
+
person_1.last_name = "Smith"
|
49
|
+
person_1.save
|
50
|
+
person_2.first_name = "Johnathan"
|
51
|
+
person_2.last_name = "Smith"
|
52
|
+
person_2.save
|
53
|
+
@params[:search] = "john smith"
|
54
|
+
Person.jtable_query(@params).to_json.should eql(Person.where(['(first_name LIKE ? OR last_name LIKE ?) AND (first_name LIKE ? OR last_name LIKE ?)', "%john%", "%john%", "%smith%", "%smith%"]).to_json)
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should single column search" do
|
58
|
+
person_1 = Person.first
|
59
|
+
person_2 = Person.last
|
60
|
+
person_1.first_name = "John"
|
61
|
+
person_1.save
|
62
|
+
person_2.first_name = "Johnathan"
|
63
|
+
person_2.save
|
64
|
+
@params[:column_search][:first_name] = "john"
|
65
|
+
Person.jtable_query(@params).to_json.should eql(Person.where(['(first_name LIKE ?)', "%john%"]).to_json)
|
66
|
+
end
|
67
|
+
|
68
|
+
it "should order" do
|
69
|
+
@params[:sort_column] = "age"
|
70
|
+
@params[:sort_direction] = "ASC"
|
71
|
+
Person.jtable_query(@params).to_json.should eql(Person.order('age ASC').to_json)
|
72
|
+
end
|
73
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
3
|
+
require 'rspec'
|
4
|
+
require 'jtable-rails'
|
5
|
+
|
6
|
+
require 'support/rails_app/config/environment.rb'
|
7
|
+
|
8
|
+
Dir[File.expand_path(File.join(File.dirname(__FILE__), 'fabricators', '**', '*.rb'))].each {|f| require f}
|
9
|
+
|
10
|
+
RSpec.configure do |config|
|
11
|
+
config.before(:each) do
|
12
|
+
[Person].each do |model|
|
13
|
+
model.destroy_all
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
PATH
|
2
|
+
remote: /Users/yelvert/projects/jtable/jtable-rails
|
3
|
+
specs:
|
4
|
+
jtable-rails (0.0.0)
|
5
|
+
rails (= 3.0.3)
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: http://rubygems.org/
|
9
|
+
specs:
|
10
|
+
abstract (1.0.0)
|
11
|
+
actionmailer (3.0.3)
|
12
|
+
actionpack (= 3.0.3)
|
13
|
+
mail (~> 2.2.9)
|
14
|
+
actionpack (3.0.3)
|
15
|
+
activemodel (= 3.0.3)
|
16
|
+
activesupport (= 3.0.3)
|
17
|
+
builder (~> 2.1.2)
|
18
|
+
erubis (~> 2.6.6)
|
19
|
+
i18n (~> 0.4)
|
20
|
+
rack (~> 1.2.1)
|
21
|
+
rack-mount (~> 0.6.13)
|
22
|
+
rack-test (~> 0.5.6)
|
23
|
+
tzinfo (~> 0.3.23)
|
24
|
+
activemodel (3.0.3)
|
25
|
+
activesupport (= 3.0.3)
|
26
|
+
builder (~> 2.1.2)
|
27
|
+
i18n (~> 0.4)
|
28
|
+
activerecord (3.0.3)
|
29
|
+
activemodel (= 3.0.3)
|
30
|
+
activesupport (= 3.0.3)
|
31
|
+
arel (~> 2.0.2)
|
32
|
+
tzinfo (~> 0.3.23)
|
33
|
+
activeresource (3.0.3)
|
34
|
+
activemodel (= 3.0.3)
|
35
|
+
activesupport (= 3.0.3)
|
36
|
+
activesupport (3.0.3)
|
37
|
+
arel (2.0.7)
|
38
|
+
builder (2.1.2)
|
39
|
+
erubis (2.6.6)
|
40
|
+
abstract (>= 1.0.0)
|
41
|
+
i18n (0.5.0)
|
42
|
+
mail (2.2.15)
|
43
|
+
activesupport (>= 2.3.6)
|
44
|
+
i18n (>= 0.4.0)
|
45
|
+
mime-types (~> 1.16)
|
46
|
+
treetop (~> 1.4.8)
|
47
|
+
mime-types (1.16)
|
48
|
+
polyglot (0.3.1)
|
49
|
+
rack (1.2.1)
|
50
|
+
rack-mount (0.6.13)
|
51
|
+
rack (>= 1.0.0)
|
52
|
+
rack-test (0.5.7)
|
53
|
+
rack (>= 1.0)
|
54
|
+
rails (3.0.3)
|
55
|
+
actionmailer (= 3.0.3)
|
56
|
+
actionpack (= 3.0.3)
|
57
|
+
activerecord (= 3.0.3)
|
58
|
+
activeresource (= 3.0.3)
|
59
|
+
activesupport (= 3.0.3)
|
60
|
+
bundler (~> 1.0)
|
61
|
+
railties (= 3.0.3)
|
62
|
+
railties (3.0.3)
|
63
|
+
actionpack (= 3.0.3)
|
64
|
+
activesupport (= 3.0.3)
|
65
|
+
rake (>= 0.8.7)
|
66
|
+
thor (~> 0.14.4)
|
67
|
+
rake (0.8.7)
|
68
|
+
sqlite3 (1.3.3)
|
69
|
+
sqlite3-ruby (1.3.3)
|
70
|
+
sqlite3 (>= 1.3.3)
|
71
|
+
thor (0.14.6)
|
72
|
+
treetop (1.4.9)
|
73
|
+
polyglot (>= 0.3.1)
|
74
|
+
tzinfo (0.3.24)
|
75
|
+
|
76
|
+
PLATFORMS
|
77
|
+
ruby
|
78
|
+
|
79
|
+
DEPENDENCIES
|
80
|
+
jtable-rails!
|
81
|
+
rails (= 3.0.3)
|
82
|
+
sqlite3-ruby
|
@@ -0,0 +1,7 @@
|
|
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
|
+
require 'rake'
|
6
|
+
|
7
|
+
RailsApp::Application.load_tasks
|
@@ -0,0 +1,83 @@
|
|
1
|
+
class PeopleController < ApplicationController
|
2
|
+
# GET /people
|
3
|
+
# GET /people.xml
|
4
|
+
def index
|
5
|
+
@people = Person.all
|
6
|
+
|
7
|
+
respond_to do |format|
|
8
|
+
format.html # index.html.erb
|
9
|
+
format.xml { render :xml => @people }
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
# GET /people/1
|
14
|
+
# GET /people/1.xml
|
15
|
+
def show
|
16
|
+
@person = Person.find(params[:id])
|
17
|
+
|
18
|
+
respond_to do |format|
|
19
|
+
format.html # show.html.erb
|
20
|
+
format.xml { render :xml => @person }
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
# GET /people/new
|
25
|
+
# GET /people/new.xml
|
26
|
+
def new
|
27
|
+
@person = Person.new
|
28
|
+
|
29
|
+
respond_to do |format|
|
30
|
+
format.html # new.html.erb
|
31
|
+
format.xml { render :xml => @person }
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
# GET /people/1/edit
|
36
|
+
def edit
|
37
|
+
@person = Person.find(params[:id])
|
38
|
+
end
|
39
|
+
|
40
|
+
# POST /people
|
41
|
+
# POST /people.xml
|
42
|
+
def create
|
43
|
+
@person = Person.new(params[:person])
|
44
|
+
|
45
|
+
respond_to do |format|
|
46
|
+
if @person.save
|
47
|
+
format.html { redirect_to(@person, :notice => 'Person was successfully created.') }
|
48
|
+
format.xml { render :xml => @person, :status => :created, :location => @person }
|
49
|
+
else
|
50
|
+
format.html { render :action => "new" }
|
51
|
+
format.xml { render :xml => @person.errors, :status => :unprocessable_entity }
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
# PUT /people/1
|
57
|
+
# PUT /people/1.xml
|
58
|
+
def update
|
59
|
+
@person = Person.find(params[:id])
|
60
|
+
|
61
|
+
respond_to do |format|
|
62
|
+
if @person.update_attributes(params[:person])
|
63
|
+
format.html { redirect_to(@person, :notice => 'Person was successfully updated.') }
|
64
|
+
format.xml { head :ok }
|
65
|
+
else
|
66
|
+
format.html { render :action => "edit" }
|
67
|
+
format.xml { render :xml => @person.errors, :status => :unprocessable_entity }
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
# DELETE /people/1
|
73
|
+
# DELETE /people/1.xml
|
74
|
+
def destroy
|
75
|
+
@person = Person.find(params[:id])
|
76
|
+
@person.destroy
|
77
|
+
|
78
|
+
respond_to do |format|
|
79
|
+
format.html { redirect_to(people_url) }
|
80
|
+
format.xml { head :ok }
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
<%= form_for(@person) do |f| %>
|
2
|
+
<% if @person.errors.any? %>
|
3
|
+
<div id="error_explanation">
|
4
|
+
<h2><%= pluralize(@person.errors.count, "error") %> prohibited this person from being saved:</h2>
|
5
|
+
|
6
|
+
<ul>
|
7
|
+
<% @person.errors.full_messages.each do |msg| %>
|
8
|
+
<li><%= msg %></li>
|
9
|
+
<% end %>
|
10
|
+
</ul>
|
11
|
+
</div>
|
12
|
+
<% end %>
|
13
|
+
|
14
|
+
<div class="field">
|
15
|
+
<%= f.label :first_name %><br />
|
16
|
+
<%= f.text_field :first_name %>
|
17
|
+
</div>
|
18
|
+
<div class="field">
|
19
|
+
<%= f.label :last_name %><br />
|
20
|
+
<%= f.text_field :last_name %>
|
21
|
+
</div>
|
22
|
+
<div class="field">
|
23
|
+
<%= f.label :age %><br />
|
24
|
+
<%= f.text_field :age %>
|
25
|
+
</div>
|
26
|
+
<div class="field">
|
27
|
+
<%= f.label :date_of_birth %><br />
|
28
|
+
<%= f.date_select :date_of_birth %>
|
29
|
+
</div>
|
30
|
+
<div class="field">
|
31
|
+
<%= f.label :gender %><br />
|
32
|
+
<%= f.text_field :gender %>
|
33
|
+
</div>
|
34
|
+
<div class="field">
|
35
|
+
<%= f.label :alive %><br />
|
36
|
+
<%= f.check_box :alive %>
|
37
|
+
</div>
|
38
|
+
<div class="actions">
|
39
|
+
<%= f.submit %>
|
40
|
+
</div>
|
41
|
+
<% end %>
|
@@ -0,0 +1,33 @@
|
|
1
|
+
<h1>Listing people</h1>
|
2
|
+
|
3
|
+
<table>
|
4
|
+
<tr>
|
5
|
+
<th>First name</th>
|
6
|
+
<th>Last name</th>
|
7
|
+
<th>Age</th>
|
8
|
+
<th>Date of birth</th>
|
9
|
+
<th>Gender</th>
|
10
|
+
<th>Alive</th>
|
11
|
+
<th></th>
|
12
|
+
<th></th>
|
13
|
+
<th></th>
|
14
|
+
</tr>
|
15
|
+
|
16
|
+
<% @people.each do |person| %>
|
17
|
+
<tr>
|
18
|
+
<td><%= person.first_name %></td>
|
19
|
+
<td><%= person.last_name %></td>
|
20
|
+
<td><%= person.age %></td>
|
21
|
+
<td><%= person.date_of_birth %></td>
|
22
|
+
<td><%= person.gender %></td>
|
23
|
+
<td><%= person.alive %></td>
|
24
|
+
<td><%= link_to 'Show', person %></td>
|
25
|
+
<td><%= link_to 'Edit', edit_person_path(person) %></td>
|
26
|
+
<td><%= link_to 'Destroy', person, :confirm => 'Are you sure?', :method => :delete %></td>
|
27
|
+
</tr>
|
28
|
+
<% end %>
|
29
|
+
</table>
|
30
|
+
|
31
|
+
<br />
|
32
|
+
|
33
|
+
<%= link_to 'New Person', new_person_path %>
|
@@ -0,0 +1,35 @@
|
|
1
|
+
<p id="notice"><%= notice %></p>
|
2
|
+
|
3
|
+
<p>
|
4
|
+
<b>First name:</b>
|
5
|
+
<%= @person.first_name %>
|
6
|
+
</p>
|
7
|
+
|
8
|
+
<p>
|
9
|
+
<b>Last name:</b>
|
10
|
+
<%= @person.last_name %>
|
11
|
+
</p>
|
12
|
+
|
13
|
+
<p>
|
14
|
+
<b>Age:</b>
|
15
|
+
<%= @person.age %>
|
16
|
+
</p>
|
17
|
+
|
18
|
+
<p>
|
19
|
+
<b>Date of birth:</b>
|
20
|
+
<%= @person.date_of_birth %>
|
21
|
+
</p>
|
22
|
+
|
23
|
+
<p>
|
24
|
+
<b>Gender:</b>
|
25
|
+
<%= @person.gender %>
|
26
|
+
</p>
|
27
|
+
|
28
|
+
<p>
|
29
|
+
<b>Alive:</b>
|
30
|
+
<%= @person.alive %>
|
31
|
+
</p>
|
32
|
+
|
33
|
+
|
34
|
+
<%= link_to 'Edit', edit_person_path(@person) %> |
|
35
|
+
<%= link_to 'Back', people_path %>
|