sortablecolumns 0.1.6 → 3.0.3
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/.gitignore +1 -0
- data/.specification +77 -0
- data/Gemfile +14 -0
- data/History.txt +4 -0
- data/Rakefile +18 -18
- data/lib/sortablecolumns/helpers.rb +13 -14
- data/lib/sortablecolumns/sortablecolumns.rb +3 -2
- data/lib/sortablecolumns/version.rb +3 -0
- data/lib/sortablecolumns.rb +0 -3
- data/sortablecolumns.gemspec +25 -0
- data/test/sortablecolumns_test.rb +118 -57
- metadata +81 -23
data/.gitignore
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
Gemfile.lock
|
data/.specification
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: sortablecolumns
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.6
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Bryan Donovan - http://www.bryandonovan.com
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-02-20 00:00:00 -08:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: hoe
|
17
|
+
type: :development
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 1.8.3
|
24
|
+
version:
|
25
|
+
description: Sortable HTML tables for Rails
|
26
|
+
email: b.dondo+rubyforge@gmail.com
|
27
|
+
executables: []
|
28
|
+
|
29
|
+
extensions: []
|
30
|
+
|
31
|
+
extra_rdoc_files:
|
32
|
+
- History.txt
|
33
|
+
- Manifest.txt
|
34
|
+
- README.txt
|
35
|
+
files:
|
36
|
+
- History.txt
|
37
|
+
- Manifest.txt
|
38
|
+
- README.txt
|
39
|
+
- Rakefile
|
40
|
+
- lib/sortablecolumns.rb
|
41
|
+
- lib/sortablecolumns/helpers.rb
|
42
|
+
- lib/sortablecolumns/sortablecolumns.rb
|
43
|
+
- test/col_def_test_yaml_files/person/dude/dude_report.yml
|
44
|
+
- test/col_def_test_yaml_files/person/mysorter.yml
|
45
|
+
- test/col_def_test_yaml_files/person/tacosorter.yml
|
46
|
+
- test/sortablecolumns_test.rb
|
47
|
+
has_rdoc: true
|
48
|
+
homepage: http://rubyforge.org/projects/sortablecolumns/
|
49
|
+
licenses: []
|
50
|
+
|
51
|
+
post_install_message:
|
52
|
+
rdoc_options:
|
53
|
+
- --main
|
54
|
+
- README.txt
|
55
|
+
require_paths:
|
56
|
+
- lib
|
57
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: "0"
|
62
|
+
version:
|
63
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: "0"
|
68
|
+
version:
|
69
|
+
requirements: []
|
70
|
+
|
71
|
+
rubyforge_project: sortablecolumns
|
72
|
+
rubygems_version: 1.3.5
|
73
|
+
signing_key:
|
74
|
+
specification_version: 2
|
75
|
+
summary: Sortable HTML tables for Rails
|
76
|
+
test_files: []
|
77
|
+
|
data/Gemfile
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
source "http://rubygems.org"
|
2
|
+
|
3
|
+
# Specify your gem's dependencies in bundletest.gemspec
|
4
|
+
gemspec
|
5
|
+
|
6
|
+
group :development, :test do
|
7
|
+
gem 'mocha'
|
8
|
+
gem 'hpricot'
|
9
|
+
gem 'rails', ">=3.0.3"
|
10
|
+
gem 'sqlite3-ruby'
|
11
|
+
gem 'rcov'
|
12
|
+
end
|
13
|
+
|
14
|
+
# vim: syntax=Ruby
|
data/History.txt
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
=== 3.0.3 / 2011-02-06
|
2
|
+
* Compatible with Rails 3 (tested against Rails 3.0.3 in particular)
|
3
|
+
* Changing version numbering to match Rails version tested against.
|
4
|
+
|
1
5
|
=== 0.1.6 / 2009-02-20
|
2
6
|
* Fixed bugs so tests actually pass in Rails 2.2.2. Erroneously tested against 2.1.2 for release 0.1.5.
|
3
7
|
|
data/Rakefile
CHANGED
@@ -1,26 +1,28 @@
|
|
1
1
|
# -*- ruby -*-
|
2
2
|
|
3
3
|
require 'rubygems'
|
4
|
-
require '
|
4
|
+
require 'rake/rdoctask'
|
5
|
+
require 'rake/testtask'
|
6
|
+
require 'rcov'
|
7
|
+
require 'rcov/rcovtask'
|
5
8
|
require './lib/sortablecolumns.rb'
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
p.changes = p.paragraphs_of('History.txt', 0..1).join("\n\n")
|
15
|
-
p.remote_rdoc_dir = '' # Release to root
|
9
|
+
require 'bundler'
|
10
|
+
Bundler::GemHelper.install_tasks
|
11
|
+
|
12
|
+
desc "Run unit tests"
|
13
|
+
Rake::TestTask.new("test") do |t|
|
14
|
+
t.libs << "test"
|
15
|
+
t.pattern = 'test/*_test.rb'
|
16
|
+
t.verbose = true
|
16
17
|
end
|
17
18
|
|
18
|
-
|
19
|
-
|
19
|
+
desc "Run unit tests with rcov"
|
20
|
+
Rcov::RcovTask.new('rcov') do |t|
|
21
|
+
t.test_files = FileList['test/*_test.rb']
|
22
|
+
t.ruby_opts << "-Ilib:ext/rcovrt" # in order to use this rcov
|
23
|
+
t.verbose = true
|
20
24
|
end
|
21
25
|
|
22
|
-
ALLISON = "/opt/local/lib/ruby/gems/1.8/gems/allison-2.0.3/lib/allison.rb"
|
23
|
-
|
24
26
|
Rake::RDocTask.new do |rd|
|
25
27
|
rd.main = "README.txt"
|
26
28
|
rd.rdoc_dir = "doc"
|
@@ -29,11 +31,9 @@ Rake::RDocTask.new do |rd|
|
|
29
31
|
"History.txt",
|
30
32
|
"Manifest.txt",
|
31
33
|
"lib/**/*.rb")
|
32
|
-
rd.title = "
|
34
|
+
rd.title = "Sortablecolumns RDoc"
|
33
35
|
|
34
36
|
rd.options << '-S' # inline source
|
35
|
-
|
36
|
-
rd.template = ALLISON if File.exist?(ALLISON)
|
37
37
|
end
|
38
38
|
|
39
39
|
# vim: syntax=Ruby
|
@@ -47,7 +47,7 @@ module Sortablecolumns
|
|
47
47
|
if link_ops[:object_url]
|
48
48
|
#link_to failed in the tests in Rails 2.2.2
|
49
49
|
url = send("#{klass.to_s.downcase}_url", obj)
|
50
|
-
txt =
|
50
|
+
txt = link_to(txt, url)
|
51
51
|
elsif link_ops[:controller] && link_ops[:action]
|
52
52
|
if link_ops[:id] && link_ops[:id] == 'obj_id'
|
53
53
|
link_ops[:id] = obj.id
|
@@ -60,19 +60,20 @@ module Sortablecolumns
|
|
60
60
|
# cycle through link_ops, other than controller, action, and id,
|
61
61
|
# and check if the option value is a method for this object. If not,
|
62
62
|
# assign the value directly in the url.
|
63
|
-
ops = link_ops.reject{|key,val| key == :controller
|
63
|
+
ops = link_ops.reject{|key,val| key == :controller || key == :action }# || key == :id}
|
64
64
|
ops.each do |key, val|
|
65
|
-
|
65
|
+
unless key == :id && val == 'obj_id'
|
66
|
+
if val.is_a?(String) || val.is_a?(Symbol)
|
67
|
+
link_ops[key] = obj.send(val) if val && obj.respond_to?(val.to_sym)
|
68
|
+
end
|
69
|
+
end
|
66
70
|
end
|
67
71
|
end
|
68
72
|
txt = link_to(txt, link_ops)
|
69
73
|
end
|
70
74
|
elsif link_ops[:url]
|
71
75
|
url = link_ops[:url].gsub(/:id/, obj.id.to_s)
|
72
|
-
|
73
|
-
url = 'http://' + default_url_options[:host] + url
|
74
|
-
end
|
75
|
-
txt = "<a href=\"#{url}\">#{txt}</a>"
|
76
|
+
txt = link_to(txt, url)
|
76
77
|
end
|
77
78
|
end
|
78
79
|
|
@@ -102,7 +103,7 @@ module Sortablecolumns
|
|
102
103
|
cols.each do |col|
|
103
104
|
txt << print_col(obj, sorter, col)
|
104
105
|
end
|
105
|
-
content_tag("tr", txt, options)
|
106
|
+
content_tag("tr", txt.html_safe, options)
|
106
107
|
end
|
107
108
|
|
108
109
|
#Prints table body with content
|
@@ -121,7 +122,7 @@ module Sortablecolumns
|
|
121
122
|
txt << print_table_row(obj, sorter, :class => tr_class)
|
122
123
|
i += 1
|
123
124
|
end
|
124
|
-
content_tag("tbody", txt)
|
125
|
+
content_tag("tbody", txt.html_safe)
|
125
126
|
end
|
126
127
|
|
127
128
|
#Prints single TH tag with content
|
@@ -133,8 +134,8 @@ module Sortablecolumns
|
|
133
134
|
sortable = klass.send("#{sorter}_sortable?", col)
|
134
135
|
return content_tag("th", th_txt, :class => th_class) unless sortable
|
135
136
|
url = get_col_heading_url(klass, sorter, col)
|
136
|
-
|
137
|
-
link = "<a href=\"#{url}\">#{th_txt}</a>"
|
137
|
+
link = link_to(th_txt, url)
|
138
|
+
#link = "<a href=\"#{url}\">#{th_txt}</a>"
|
138
139
|
return content_tag("th", link, :class => th_class)
|
139
140
|
end
|
140
141
|
|
@@ -174,14 +175,12 @@ module Sortablecolumns
|
|
174
175
|
cols.each do |col|
|
175
176
|
txt << print_col_heading(klass, sorter, col)
|
176
177
|
end
|
177
|
-
txt
|
178
|
-
content_tag("tr", txt, options)
|
178
|
+
content_tag("tr", txt.html_safe, options)
|
179
179
|
end
|
180
180
|
|
181
181
|
#Prints THEAD tags with content
|
182
182
|
def print_table_thead(klass, sorter)
|
183
183
|
content_tag('thead', print_table_heading_row(klass, sorter))
|
184
184
|
end
|
185
|
-
|
186
185
|
end
|
187
186
|
end
|
@@ -5,6 +5,7 @@
|
|
5
5
|
|
6
6
|
require 'active_record'
|
7
7
|
require 'active_support'
|
8
|
+
require 'active_support/core_ext/hash/keys'
|
8
9
|
require 'action_controller'
|
9
10
|
|
10
11
|
module ActiveRecord #:nodoc:
|
@@ -15,7 +16,7 @@ module ActiveRecord #:nodoc:
|
|
15
16
|
end
|
16
17
|
|
17
18
|
module ClassMethods
|
18
|
-
include ActiveSupport::CoreExtensions::Hash::Keys
|
19
|
+
#include ActiveSupport::CoreExtensions::Hash::Keys
|
19
20
|
|
20
21
|
# == Configuration options
|
21
22
|
#
|
@@ -63,7 +64,7 @@ module ActiveRecord #:nodoc:
|
|
63
64
|
|
64
65
|
def self.#{sorter_name}_yaml_path
|
65
66
|
raise "RAILS_ROOT is not defined" unless defined?(RAILS_ROOT)
|
66
|
-
klass_name = ActiveSupport::Inflector.underscore(self.
|
67
|
+
klass_name = ActiveSupport::Inflector.underscore(self.table_name.classify)
|
67
68
|
file_name = "#{sorter_name}.yml"
|
68
69
|
if sorter_options[:subclass_name]
|
69
70
|
sub_path = File.join(klass_name, ActiveSupport::Inflector.underscore(sorter_options[:subclass_name]), file_name)
|
data/lib/sortablecolumns.rb
CHANGED
@@ -1,6 +1,3 @@
|
|
1
|
-
module Sortablecolumns #:nodoc:
|
2
|
-
VERSION = '0.1.6'
|
3
|
-
end
|
4
1
|
Dir[File.join(File.dirname(__FILE__), "sortablecolumns/**/*.rb")].sort.each { |lib| require lib }
|
5
2
|
ActiveRecord::Base.send(:include, ActiveRecord::Acts::Sortablecolumns)
|
6
3
|
ActionView::Base.send(:include, Sortablecolumns::Helpers)
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "sortablecolumns/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "sortablecolumns"
|
7
|
+
s.version = Sortablecolumns::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Bryan Donovan"]
|
10
|
+
s.email = ["b.dondo+rubyforge@gmail.com"]
|
11
|
+
s.homepage = "http://rubyforge.org/projects/sortablecolumns/"
|
12
|
+
s.summary = "Sortable HTML tables for Rails"
|
13
|
+
s.description = "Sortable HTML tables for Rails"
|
14
|
+
|
15
|
+
s.rubyforge_project = "sortablecolumns"
|
16
|
+
|
17
|
+
s.files = `git ls-files`.split("\n")
|
18
|
+
s.test_files = `git ls-files -- test/*`.split("\n")
|
19
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
|
+
s.require_paths = ["lib"]
|
21
|
+
|
22
|
+
s.add_dependency "activerecord", ">=3.0.3"
|
23
|
+
s.add_dependency "activesupport", ">=3.0.3"
|
24
|
+
s.add_dependency "actionpack", ">=3.0.3"
|
25
|
+
end
|
@@ -1,8 +1,17 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'test/unit'
|
3
|
+
require 'mocha'
|
4
|
+
require 'hpricot'
|
3
5
|
$:.unshift File.dirname(__FILE__) + '/../lib'
|
4
6
|
require 'sortablecolumns'
|
5
|
-
require '
|
7
|
+
require 'rails'
|
8
|
+
require 'action_dispatch/testing/integration'
|
9
|
+
require 'active_record/railtie'
|
10
|
+
|
11
|
+
module MySorterApp
|
12
|
+
class Application < Rails::Application
|
13
|
+
end
|
14
|
+
end
|
6
15
|
|
7
16
|
RAILS_ROOT = File.dirname(__FILE__) + '/../'
|
8
17
|
|
@@ -11,7 +20,7 @@ RAILS_ROOT = File.dirname(__FILE__) + '/../'
|
|
11
20
|
#Based on test code for Rails' acts_as_tree
|
12
21
|
#http://dev.rubyonrails.org/svn/rails/plugins/acts_as_tree/test/acts_as_tree_test.rb
|
13
22
|
|
14
|
-
ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :
|
23
|
+
ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
|
15
24
|
|
16
25
|
# AR keeps printing annoying schema statements
|
17
26
|
$stdout = StringIO.new
|
@@ -74,7 +83,6 @@ class Dude < Person
|
|
74
83
|
def dudename
|
75
84
|
firstname
|
76
85
|
end
|
77
|
-
|
78
86
|
end
|
79
87
|
|
80
88
|
class SubPerson < Person
|
@@ -85,32 +93,35 @@ end
|
|
85
93
|
#---------------------------------------------------
|
86
94
|
# Routes
|
87
95
|
#---------------------------------------------------
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
96
|
+
MySorterApp::Application.routes.draw do
|
97
|
+
# match 'products/:id' => 'catalog#view'
|
98
|
+
match 'people/show/:id' => 'people#show', :as => :person
|
99
|
+
match 'people/:person_id/foods' => 'foods#show', :as => :people_foods
|
100
|
+
#match 'foods/meats/:id' => 'foods#show', :as => :meat
|
101
|
+
|
102
|
+
#map.people_foods '/people/:person_id/foods',
|
103
|
+
#:controller => 'foods',
|
104
|
+
#:action => 'show'
|
95
105
|
#simulate the RESTful urls:
|
96
|
-
|
97
|
-
|
98
|
-
|
106
|
+
resources :dudes
|
107
|
+
#map.dude '/dudes/:id',
|
108
|
+
#:controller => 'dudes',
|
109
|
+
#:action => 'show'
|
99
110
|
|
100
|
-
|
101
|
-
|
111
|
+
match ':controller(/:action(/:id(.:format)))'
|
102
112
|
end
|
103
113
|
|
104
114
|
|
105
115
|
#---------------------------------------------------
|
106
116
|
# Tests
|
107
117
|
#---------------------------------------------------
|
108
|
-
class SortableColumnsTest< Test::Unit::TestCase
|
118
|
+
class SortableColumnsTest < Test::Unit::TestCase
|
109
119
|
def setup
|
110
120
|
setup_db
|
111
121
|
@person = Person.create(:firstname => "Billy", :lastname => "Jones", :age => 24,
|
112
122
|
:description => "Billy is an awesome guy.\nHowever, he is also a punk. He loves www.google.com. ")
|
113
123
|
@person.save
|
124
|
+
@this_dir = File.expand_path(File.dirname(__FILE__))
|
114
125
|
end
|
115
126
|
|
116
127
|
def teardown
|
@@ -122,12 +133,14 @@ class SortableColumnsTest< Test::Unit::TestCase
|
|
122
133
|
end
|
123
134
|
|
124
135
|
def test_person_yaml_path
|
125
|
-
|
136
|
+
expected = File.expand_path(File.join(@this_dir,"col_def_test_yaml_files/person/mysorter.yml"))
|
137
|
+
assert_equal expected, File.expand_path(Person.mysorter_yaml_path)
|
126
138
|
end
|
127
139
|
|
128
140
|
def test_sub_person_yaml_path
|
129
141
|
#test sub-models & models with multi-word names, such as SubPerson
|
130
|
-
|
142
|
+
expected = File.expand_path(File.join(@this_dir,"col_def_test_yaml_files/person/sub_person/cool_sorter_thing.yml"))
|
143
|
+
assert_equal expected, File.expand_path(SubPerson.cool_sorter_thing_yaml_path)
|
131
144
|
end
|
132
145
|
|
133
146
|
def test_person_mysorter_yaml_load
|
@@ -152,7 +165,8 @@ class SortableColumnsTest< Test::Unit::TestCase
|
|
152
165
|
end
|
153
166
|
|
154
167
|
def test_dude_yaml_path
|
155
|
-
|
168
|
+
expected = File.expand_path(File.join(@this_dir,"col_def_test_yaml_files/person/dude/dude_report.yml"))
|
169
|
+
assert_equal expected, File.expand_path(Dude.dude_report_yaml_path)
|
156
170
|
end
|
157
171
|
|
158
172
|
def test_dude_yaml_load
|
@@ -343,7 +357,6 @@ class SortableColumnsTest< Test::Unit::TestCase
|
|
343
357
|
assert_equal 'number', Person.default_sorter_datatype('age')
|
344
358
|
assert_equal 'Balance', Person.default_sorter_heading('balance')
|
345
359
|
end
|
346
|
-
|
347
360
|
end
|
348
361
|
|
349
362
|
|
@@ -360,9 +373,9 @@ class SortablecolumnsHelperTest < Test::Unit::TestCase
|
|
360
373
|
include ActionView::Helpers::SanitizeHelper
|
361
374
|
include ActionView::Helpers::TagHelper
|
362
375
|
include ActionView::Helpers::UrlHelper
|
363
|
-
|
364
|
-
|
376
|
+
include Rails.application.routes.url_helpers
|
365
377
|
include Sortablecolumns::Helpers
|
378
|
+
|
366
379
|
default_url_options[:host] = 'test.host'
|
367
380
|
attr_accessor :params
|
368
381
|
attr_accessor :request
|
@@ -382,6 +395,7 @@ class SortablecolumnsHelperTest < Test::Unit::TestCase
|
|
382
395
|
|
383
396
|
def setup
|
384
397
|
@view = View.new
|
398
|
+
@view.stubs(:controller).returns('people')
|
385
399
|
setup_db
|
386
400
|
@person = Person.create(:firstname => "Billy", :lastname => "Jones",
|
387
401
|
:age => 24, :balance => '1234.5678',
|
@@ -420,7 +434,17 @@ class SortablecolumnsHelperTest < Test::Unit::TestCase
|
|
420
434
|
def test_print_col_person_description
|
421
435
|
#should be same as: simple_format(sanitize(auto_link(@person.description)))
|
422
436
|
expected = "<p>Billy is an awesome guy.\n<br />However, he is also a punk. <a href=\"http://www.google.com\">www.google.com</a></p>"
|
423
|
-
|
437
|
+
html = @view.print_col(@person, :mysorter, :description)
|
438
|
+
doc = Hpricot(html)
|
439
|
+
td = doc.at("/td")
|
440
|
+
assert_equal 'left', td['class']
|
441
|
+
_p = doc.at("/td/p").inner_text
|
442
|
+
assert _p.match(/Billy.*\n.*punk/)
|
443
|
+
assert_equal 1, doc.search("/td/p/br").size
|
444
|
+
link = doc.search("/td/p/a").last
|
445
|
+
assert_equal 'http://www.google.com', link['href']
|
446
|
+
assert_equal 'www.google.com', link.inner_text
|
447
|
+
assert_equal 0, doc.search("/script").size
|
424
448
|
end
|
425
449
|
|
426
450
|
def test_print_col_dude_description
|
@@ -438,7 +462,7 @@ class SortablecolumnsHelperTest < Test::Unit::TestCase
|
|
438
462
|
end
|
439
463
|
|
440
464
|
def test_print_col_person_firstname
|
441
|
-
assert_equal "<td class=\"left\"><a href=\"
|
465
|
+
assert_equal "<td class=\"left\"><a href=\"/people/show/#{@person.id}\">Billy</a></td>", @view.print_col(@person, :mysorter, :firstname)
|
442
466
|
end
|
443
467
|
|
444
468
|
def test_print_col_dude_dudename
|
@@ -446,7 +470,7 @@ class SortablecolumnsHelperTest < Test::Unit::TestCase
|
|
446
470
|
end
|
447
471
|
|
448
472
|
def test_print_col_taco_meat
|
449
|
-
assert_equal "<td><a href=\"
|
473
|
+
assert_equal "<td><a href=\"/foods/meats/#{@person.id}\">Beef</a></td>", @view.print_col(@person, :tacosorter, :meat)
|
450
474
|
end
|
451
475
|
|
452
476
|
def test_print_col_taco_type
|
@@ -455,7 +479,7 @@ class SortablecolumnsHelperTest < Test::Unit::TestCase
|
|
455
479
|
|
456
480
|
def test_print_col_taco_calories
|
457
481
|
#testing if we can have extra parameters in the url
|
458
|
-
assert_equal "<td><a href=\"
|
482
|
+
assert_equal "<td><a href=\"/foods/calories?foo=bar\">1200.00</a></td>", @view.print_col(@person, :tacosorter, :calories)
|
459
483
|
end
|
460
484
|
|
461
485
|
def test_print_col_dude_print_view
|
@@ -471,7 +495,7 @@ class SortablecolumnsHelperTest < Test::Unit::TestCase
|
|
471
495
|
#
|
472
496
|
# Where person_id is a field in the result set (in this test, there's a mock method instead)
|
473
497
|
|
474
|
-
expected = "<td><a href=\"
|
498
|
+
expected = "<td><a href=\"/dudes/print_view?person_id=23445\">Print</a></td>"
|
475
499
|
assert_equal expected, @view.print_col(@dude, :dude_report, :print_view)
|
476
500
|
end
|
477
501
|
|
@@ -491,13 +515,22 @@ class SortablecolumnsHelperTest < Test::Unit::TestCase
|
|
491
515
|
end
|
492
516
|
|
493
517
|
def test_print_col_edit
|
494
|
-
expected = "<td><a href=\"
|
518
|
+
expected = "<td><a href=\"/people/edit/#{@person.id}\">Edit</a></td>"
|
495
519
|
assert_equal expected, @view.print_col(@person, :mysorter, :edit)
|
496
520
|
end
|
497
521
|
|
498
522
|
def test_print_col_delete
|
499
|
-
|
500
|
-
|
523
|
+
# Should be something like:
|
524
|
+
# <td><a href=\"/people/destroy/1\" data-confirm=\"Are you sure?\" data-method=\"delete\" rel=\"nofollow\">Delete</a></td>
|
525
|
+
html = @view.print_col(@person, :mysorter, :delete)
|
526
|
+
doc = Hpricot(html)
|
527
|
+
assert_equal 1, doc.search("/td").size
|
528
|
+
link = doc.at("/td/a")
|
529
|
+
assert_equal "/people/destroy/1", link['href']
|
530
|
+
assert_equal "Delete", link.inner_text
|
531
|
+
['data-confirm', 'data-method', 'rel'].each do |attr|
|
532
|
+
assert_not_nil link[attr]
|
533
|
+
end
|
501
534
|
end
|
502
535
|
|
503
536
|
#---[ Column Headings ]-------------------------------------------------
|
@@ -511,7 +544,7 @@ class SortablecolumnsHelperTest < Test::Unit::TestCase
|
|
511
544
|
@view.params[:dir] = 'desc'
|
512
545
|
new_order = 'windshield_strength'
|
513
546
|
new_dir = 'asc'
|
514
|
-
expected = "
|
547
|
+
expected = "/cars/wheels?bar=123&dir=asc&foo=blah&order_by=windshield_strength"
|
515
548
|
assert_equal expected, @view.get_url(new_order, new_dir)
|
516
549
|
end
|
517
550
|
|
@@ -530,49 +563,52 @@ class SortablecolumnsHelperTest < Test::Unit::TestCase
|
|
530
563
|
@view.params[:page] = '2'
|
531
564
|
new_order = 'windshield_strength'
|
532
565
|
new_dir = 'asc'
|
533
|
-
expected = "
|
566
|
+
expected = "/cars/wheels?bar=123&dir=asc&foo=blah&order_by=windshield_strength"
|
534
567
|
assert_equal expected, @view.get_url(new_order, new_dir)
|
535
568
|
end
|
536
569
|
|
537
570
|
def test_person_heading_firstname
|
538
|
-
expected = "<th><a href=\"
|
571
|
+
expected = "<th><a href=\"/people?dir=asc&order_by=firstname\">First</a></th>"
|
539
572
|
assert_equal expected, @view.print_col_heading(Person, :mysorter, :firstname)
|
540
573
|
|
541
574
|
#test if controller changes
|
575
|
+
#@view.stubs(:controller).returns('blah')
|
542
576
|
@view.params[:controller] = 'blah'
|
543
|
-
expected = "<th><a href=\"
|
577
|
+
expected = "<th><a href=\"/blah?dir=asc&order_by=firstname\">First</a></th>"
|
544
578
|
assert_equal expected, @view.print_col_heading(Person, :mysorter, :firstname)
|
545
579
|
|
546
580
|
#test if action changes
|
547
581
|
@view.params[:action] = 'foo'
|
548
|
-
expected = "<th><a href=\"
|
582
|
+
expected = "<th><a href=\"/blah/foo?dir=asc&order_by=firstname\">First</a></th>"
|
549
583
|
assert_equal expected, @view.print_col_heading(Person, :mysorter, :firstname)
|
550
584
|
|
551
585
|
#test if sort direction changes
|
552
586
|
@view = View.new
|
587
|
+
@view.stubs(:controller).returns('people')
|
553
588
|
@view.params[:order_by] = 'firstname'
|
554
589
|
@view.params[:dir] = 'asc'
|
555
590
|
#should switch the direction to descending:
|
556
|
-
expected = "<th><a href=\"
|
591
|
+
expected = "<th><a href=\"/people?dir=desc&order_by=firstname\">First</a></th>"
|
557
592
|
assert_equal expected, @view.print_col_heading(Person, :mysorter, :firstname)
|
558
593
|
|
559
594
|
#test a url route that has more than just controller and action
|
560
595
|
@view = View.new
|
596
|
+
@view.stubs(:controller).returns('people')
|
561
597
|
@view.params[:controller] = 'foods'
|
562
598
|
@view.params[:action] = 'show'
|
563
599
|
@view.params[:person_id] = 1
|
564
|
-
expected = "<th><a href=\"
|
600
|
+
expected = "<th><a href=\"/people/1/foods?dir=asc&order_by=firstname\">First</a></th>"
|
565
601
|
assert_equal expected, @view.print_col_heading(Person, :mysorter, :firstname)
|
566
602
|
end
|
567
603
|
|
568
604
|
def test_person_heading_age
|
569
605
|
#default direction should be desc
|
570
|
-
expected = "<th><a href=\"
|
606
|
+
expected = "<th><a href=\"/people?dir=desc&order_by=age\">Age</a></th>"
|
571
607
|
assert_equal expected, @view.print_col_heading(Person, :mysorter, :age)
|
572
608
|
@view.params[:order_by] = 'age'
|
573
609
|
@view.params[:dir] = 'desc'
|
574
610
|
#back to asc
|
575
|
-
expected = "<th><a href=\"
|
611
|
+
expected = "<th><a href=\"/people?dir=asc&order_by=age\">Age</a></th>"
|
576
612
|
assert_equal expected, @view.print_col_heading(Person, :mysorter, :age)
|
577
613
|
end
|
578
614
|
|
@@ -584,7 +620,7 @@ class SortablecolumnsHelperTest < Test::Unit::TestCase
|
|
584
620
|
|
585
621
|
def test_taco_heading_meat
|
586
622
|
#test order_by sort_option from col_defs
|
587
|
-
expected = "<th><a href=\"
|
623
|
+
expected = "<th><a href=\"/people?dir=asc&order_by=meats.id\">Meat</a></th>"
|
588
624
|
assert_equal expected, @view.print_col_heading(Person, :tacosorter, :meat)
|
589
625
|
end
|
590
626
|
|
@@ -594,42 +630,67 @@ class SortablecolumnsHelperTest < Test::Unit::TestCase
|
|
594
630
|
end
|
595
631
|
|
596
632
|
def test_person_print_table_row
|
597
|
-
|
633
|
+
html = @view.print_table_row(@person, :mysorter)
|
634
|
+
doc = Hpricot(html)
|
635
|
+
assert_equal 1, doc.search("/tr").size
|
636
|
+
assert_equal 7, doc.search("/tr/td").size
|
637
|
+
first_td = doc.at("/tr/td")
|
638
|
+
assert_equal 'left', first_td['class']
|
639
|
+
assert_equal "/people/show/1", first_td.at("/a")['href']
|
598
640
|
end
|
599
641
|
|
600
642
|
def test_person_print_table_heading_row
|
601
|
-
|
643
|
+
html = @view.print_table_heading_row(Person, :mysorter)
|
644
|
+
doc = Hpricot(html)
|
645
|
+
assert_equal 1, doc.search("/tr").size
|
646
|
+
assert_equal 7, doc.search("/tr/th").size
|
647
|
+
first_th = doc.at("/tr/th")
|
648
|
+
assert_equal "/people?dir=asc&order_by=firstname", first_th.at("/a")['href']
|
602
649
|
end
|
603
650
|
|
604
651
|
def test_person_print_table_thead
|
605
652
|
expected = "<thead>#{@expected_person_heading_row}</thead>"
|
606
|
-
|
653
|
+
html = @view.print_table_thead(Person, :mysorter)
|
654
|
+
doc = Hpricot(html)
|
655
|
+
assert_equal 1, doc.search("/thead").size
|
656
|
+
assert_equal 7, doc.search("/thead/tr/th").size
|
607
657
|
end
|
608
658
|
|
659
|
+
|
609
660
|
def test_person_print_table_body
|
610
661
|
people = [@person, @person2]
|
611
662
|
expected = "<tbody>" + @expected_person_row + @expected_person2_row + "</tbody>"
|
612
|
-
|
663
|
+
html = @view.print_table_body(people, :mysorter)
|
664
|
+
doc = Hpricot(html)
|
665
|
+
assert_equal 2, doc.search("/tbody/tr").size
|
666
|
+
assert_equal 14, doc.search("/tbody/tr/td").size
|
613
667
|
end
|
614
668
|
|
615
669
|
def test_person_print_table
|
616
670
|
people = [@person, @person2]
|
617
|
-
|
618
|
-
|
619
|
-
assert_equal
|
620
|
-
|
621
|
-
|
622
|
-
|
623
|
-
|
624
|
-
assert_equal expected, @view.print_table(people, :mysorter,
|
671
|
+
html = @view.print_table(people, :mysorter)
|
672
|
+
doc = Hpricot(html)
|
673
|
+
assert_equal 1, doc.search("/table").size
|
674
|
+
assert_equal 2, doc.search("/table/tbody/tr").size
|
675
|
+
assert_equal 14, doc.search("/table/tbody/tr/td").size
|
676
|
+
|
677
|
+
html = @view.print_table(people, :mysorter,
|
625
678
|
{:table => {:class => 'yui-skin-sam', :id => 'yui_table'}})
|
679
|
+
doc = Hpricot(html)
|
680
|
+
table = doc.at("/table")
|
681
|
+
assert_equal 'yui-skin-sam', table['class']
|
682
|
+
assert_equal 'yui_table', table['id']
|
626
683
|
|
627
|
-
|
628
|
-
"<thead>#{@expected_person_heading_row}</thead>" +
|
629
|
-
"<tbody>" + @expected_person_row_alternate + @expected_person2_row_alternate +
|
630
|
-
"</tbody></table>"
|
631
|
-
assert_equal expected, @view.print_table(people, :mysorter,
|
684
|
+
html = @view.print_table(people, :mysorter,
|
632
685
|
:table => {:class => 'yui-skin-sam', :id => 'yui_table'},
|
633
686
|
:tr => {:classes => ['even','odd']})
|
687
|
+
doc = Hpricot(html)
|
688
|
+
assert_equal 'yui-skin-sam', table['class']
|
689
|
+
assert_equal 'yui_table', table['id']
|
690
|
+
rows = doc.search("/table/tbody/tr")
|
691
|
+
first_td_row = rows[0]
|
692
|
+
assert_equal 'even', first_td_row['class']
|
693
|
+
second_td_row = rows[1]
|
694
|
+
assert_equal 'odd', second_td_row['class']
|
634
695
|
end
|
635
696
|
end
|
metadata
CHANGED
@@ -1,38 +1,84 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sortablecolumns
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 1
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 3
|
8
|
+
- 0
|
9
|
+
- 3
|
10
|
+
version: 3.0.3
|
5
11
|
platform: ruby
|
6
12
|
authors:
|
7
|
-
- Bryan Donovan
|
13
|
+
- Bryan Donovan
|
8
14
|
autorequire:
|
9
15
|
bindir: bin
|
10
16
|
cert_chain: []
|
11
17
|
|
12
|
-
date:
|
18
|
+
date: 2011-02-06 00:00:00 -08:00
|
13
19
|
default_executable:
|
14
20
|
dependencies:
|
15
21
|
- !ruby/object:Gem::Dependency
|
16
|
-
name:
|
17
|
-
|
18
|
-
|
19
|
-
|
22
|
+
name: activerecord
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
20
26
|
requirements:
|
21
27
|
- - ">="
|
22
28
|
- !ruby/object:Gem::Version
|
23
|
-
|
24
|
-
|
29
|
+
hash: 1
|
30
|
+
segments:
|
31
|
+
- 3
|
32
|
+
- 0
|
33
|
+
- 3
|
34
|
+
version: 3.0.3
|
35
|
+
type: :runtime
|
36
|
+
version_requirements: *id001
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: activesupport
|
39
|
+
prerelease: false
|
40
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ">="
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
hash: 1
|
46
|
+
segments:
|
47
|
+
- 3
|
48
|
+
- 0
|
49
|
+
- 3
|
50
|
+
version: 3.0.3
|
51
|
+
type: :runtime
|
52
|
+
version_requirements: *id002
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: actionpack
|
55
|
+
prerelease: false
|
56
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
hash: 1
|
62
|
+
segments:
|
63
|
+
- 3
|
64
|
+
- 0
|
65
|
+
- 3
|
66
|
+
version: 3.0.3
|
67
|
+
type: :runtime
|
68
|
+
version_requirements: *id003
|
25
69
|
description: Sortable HTML tables for Rails
|
26
|
-
email:
|
70
|
+
email:
|
71
|
+
- b.dondo+rubyforge@gmail.com
|
27
72
|
executables: []
|
28
73
|
|
29
74
|
extensions: []
|
30
75
|
|
31
|
-
extra_rdoc_files:
|
32
|
-
|
33
|
-
- Manifest.txt
|
34
|
-
- README.txt
|
76
|
+
extra_rdoc_files: []
|
77
|
+
|
35
78
|
files:
|
79
|
+
- .gitignore
|
80
|
+
- .specification
|
81
|
+
- Gemfile
|
36
82
|
- History.txt
|
37
83
|
- Manifest.txt
|
38
84
|
- README.txt
|
@@ -40,36 +86,48 @@ files:
|
|
40
86
|
- lib/sortablecolumns.rb
|
41
87
|
- lib/sortablecolumns/helpers.rb
|
42
88
|
- lib/sortablecolumns/sortablecolumns.rb
|
89
|
+
- lib/sortablecolumns/version.rb
|
90
|
+
- sortablecolumns.gemspec
|
43
91
|
- test/col_def_test_yaml_files/person/dude/dude_report.yml
|
44
92
|
- test/col_def_test_yaml_files/person/mysorter.yml
|
45
93
|
- test/col_def_test_yaml_files/person/tacosorter.yml
|
46
94
|
- test/sortablecolumns_test.rb
|
47
95
|
has_rdoc: true
|
48
96
|
homepage: http://rubyforge.org/projects/sortablecolumns/
|
97
|
+
licenses: []
|
98
|
+
|
49
99
|
post_install_message:
|
50
|
-
rdoc_options:
|
51
|
-
|
52
|
-
- README.txt
|
100
|
+
rdoc_options: []
|
101
|
+
|
53
102
|
require_paths:
|
54
103
|
- lib
|
55
104
|
required_ruby_version: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
56
106
|
requirements:
|
57
107
|
- - ">="
|
58
108
|
- !ruby/object:Gem::Version
|
109
|
+
hash: 3
|
110
|
+
segments:
|
111
|
+
- 0
|
59
112
|
version: "0"
|
60
|
-
version:
|
61
113
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
114
|
+
none: false
|
62
115
|
requirements:
|
63
116
|
- - ">="
|
64
117
|
- !ruby/object:Gem::Version
|
118
|
+
hash: 3
|
119
|
+
segments:
|
120
|
+
- 0
|
65
121
|
version: "0"
|
66
|
-
version:
|
67
122
|
requirements: []
|
68
123
|
|
69
124
|
rubyforge_project: sortablecolumns
|
70
|
-
rubygems_version: 1.
|
125
|
+
rubygems_version: 1.4.2
|
71
126
|
signing_key:
|
72
|
-
specification_version:
|
127
|
+
specification_version: 3
|
73
128
|
summary: Sortable HTML tables for Rails
|
74
|
-
test_files:
|
75
|
-
|
129
|
+
test_files:
|
130
|
+
- test/col_def_test_yaml_files/person/dude/dude_report.yml
|
131
|
+
- test/col_def_test_yaml_files/person/mysorter.yml
|
132
|
+
- test/col_def_test_yaml_files/person/tacosorter.yml
|
133
|
+
- test/sortablecolumns_test.rb
|