sorted 0.4.3 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 0262798feaab6b58860df0dd56c6eda414263e58
4
+ data.tar.gz: dde3ec5870721ddc59198f98132ea9ca03c7c763
5
+ SHA512:
6
+ metadata.gz: 8dc76069eeb8b172e3c6096588f9bc12404d44c747800fc3332f5e82344d476e1d22cab0a8bcc2110aa0c3292cc8c72fe3e6839cd28d0e92e2bb663696ab01d6
7
+ data.tar.gz: 18aec9e23e623f26be39632328d190c4213d7f960abb162b65337cfd2a9e7191775e303cee573ed63c471ae814b5368bd2d2d634c9ead24e8582df3c2db02b80
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/.travis.yml CHANGED
@@ -1,6 +1,8 @@
1
+ language: ruby
1
2
  rvm:
2
- - 1.8.7
3
3
  - 1.9.3
4
+ - 2.0.0
5
+ - jruby-19mode
4
6
  - ruby-head
5
7
 
6
8
  script: bundle exec rake spec
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
- source :gemcutter
1
+ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in example.gemspec
4
4
  gemspec
data/README.md ADDED
@@ -0,0 +1,43 @@
1
+ # sorted
2
+
3
+ [![Build Status](https://travis-ci.org/mynameisrufus/sorted.png?branch=master)](https://travis-ci.org/mynameisrufus/sorted)
4
+
5
+ Sorted is a simple object that will take an sql order string and a url
6
+ sort string to let you sort large datasets over many pages (using
7
+ [will_paginate](https://github.com/mislav/will_paginate) or
8
+ [kaminari](https://github.com/amatsuda/kaminari)) without losing state.
9
+
10
+ ### View
11
+
12
+ Generate a sorted link with the email attribute:
13
+
14
+ ```ruby
15
+ link_to_sorted "Email", :email
16
+ ```
17
+
18
+ Works the same as the `link_to` method except a second argument for the
19
+ sort attribute is needed.
20
+
21
+ ### Ruby 1.8.7 Rails 3.x
22
+
23
+ ```ruby
24
+ gem 'sorted', '~> 0.4.3'
25
+ ```
26
+
27
+ ### Model
28
+
29
+ Using the `sorted` method with the optional default order argument:
30
+
31
+ ```ruby
32
+ @users = User.sorted(params[:sort], "email ASC").page(params[:page])
33
+ ```
34
+
35
+ ### Rubies
36
+
37
+ * MRI 1.9.3, 2.0.0.
38
+ * JRuby 1.9 mode
39
+
40
+ ### ORMs
41
+
42
+ * ActiveRecord
43
+ * Mongoid
data/Rakefile CHANGED
@@ -7,14 +7,24 @@ RSpec::Core::RakeTask.new(:spec) do |spec|
7
7
  spec.pattern = FileList['spec/**/*_spec.rb']
8
8
  end
9
9
 
10
- task :default => :spec
10
+ task :default => "spec:all"
11
11
 
12
12
  require 'rdoc/task'
13
13
  Rake::RDocTask.new do |rdoc|
14
14
  require 'sorted/version'
15
15
 
16
16
  rdoc.rdoc_dir = 'rdoc'
17
- rdoc.title = "kaminari #{Sorted::VERSION}"
17
+ rdoc.title = "sorted #{Sorted::VERSION}"
18
18
  rdoc.rdoc_files.include('README*')
19
19
  rdoc.rdoc_files.include('lib/**/*.rb')
20
20
  end
21
+
22
+ namespace :spec do
23
+ desc "Run Tests against all ORMs"
24
+ task :all do
25
+ %w(active_record_40 mongoid_30).each do |gemfile|
26
+ sh "BUNDLE_GEMFILE='gemfiles/#{gemfile}.gemfile' bundle --quiet"
27
+ sh "BUNDLE_GEMFILE='gemfiles/#{gemfile}.gemfile' bundle exec rake -t spec"
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,9 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'railties', '>= 4.0.0'
4
+ gem 'activerecord', '>= 4.0.0', require: 'active_record'
5
+ gem 'rspec-rails', '>= 2.0'
6
+ gem 'activerecord-jdbcsqlite3-adapter', platforms: :jruby
7
+ gem 'sqlite3', '>= 1.3.5', platforms: :ruby
8
+
9
+ gemspec path: '../'
@@ -0,0 +1,92 @@
1
+ PATH
2
+ remote: /Users/rufuspost/Projects/ruby/gems/sorted
3
+ specs:
4
+ sorted (1.0.0)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ actionpack (4.0.0)
10
+ activesupport (= 4.0.0)
11
+ builder (~> 3.1.0)
12
+ erubis (~> 2.7.0)
13
+ rack (~> 1.5.2)
14
+ rack-test (~> 0.6.2)
15
+ activemodel (4.0.0)
16
+ activesupport (= 4.0.0)
17
+ builder (~> 3.1.0)
18
+ activerecord (4.0.0)
19
+ activemodel (= 4.0.0)
20
+ activerecord-deprecated_finders (~> 1.0.2)
21
+ activesupport (= 4.0.0)
22
+ arel (~> 4.0.0)
23
+ activerecord-deprecated_finders (1.0.3)
24
+ activerecord-jdbc-adapter (1.3.3)
25
+ activerecord (>= 2.2)
26
+ activerecord-jdbcsqlite3-adapter (1.3.3)
27
+ activerecord-jdbc-adapter (~> 1.3.3)
28
+ jdbc-sqlite3 (~> 3.7.2)
29
+ activesupport (4.0.0)
30
+ i18n (~> 0.6, >= 0.6.4)
31
+ minitest (~> 4.2)
32
+ multi_json (~> 1.3)
33
+ thread_safe (~> 0.1)
34
+ tzinfo (~> 0.3.37)
35
+ arel (4.0.1)
36
+ atomic (1.1.14)
37
+ atomic (1.1.14-java)
38
+ builder (3.1.4)
39
+ diff-lcs (1.2.4)
40
+ erubis (2.7.0)
41
+ i18n (0.6.5)
42
+ jdbc-sqlite3 (3.7.2.1)
43
+ minitest (4.7.5)
44
+ multi_json (1.8.2)
45
+ rack (1.5.2)
46
+ rack-test (0.6.2)
47
+ rack (>= 1.0)
48
+ railties (4.0.0)
49
+ actionpack (= 4.0.0)
50
+ activesupport (= 4.0.0)
51
+ rake (>= 0.8.7)
52
+ thor (>= 0.18.1, < 2.0)
53
+ rake (10.1.0)
54
+ rspec (2.14.1)
55
+ rspec-core (~> 2.14.0)
56
+ rspec-expectations (~> 2.14.0)
57
+ rspec-mocks (~> 2.14.0)
58
+ rspec-core (2.14.6)
59
+ rspec-expectations (2.14.3)
60
+ diff-lcs (>= 1.1.3, < 2.0)
61
+ rspec-mocks (2.14.4)
62
+ rspec-rails (2.14.0)
63
+ actionpack (>= 3.0)
64
+ activesupport (>= 3.0)
65
+ railties (>= 3.0)
66
+ rspec-core (~> 2.14.0)
67
+ rspec-expectations (~> 2.14.0)
68
+ rspec-mocks (~> 2.14.0)
69
+ sqlite3 (1.3.8)
70
+ thor (0.18.1)
71
+ thread_safe (0.1.3)
72
+ atomic
73
+ thread_safe (0.1.3-java)
74
+ atomic
75
+ tzinfo (0.3.38)
76
+
77
+ PLATFORMS
78
+ java
79
+ ruby
80
+
81
+ DEPENDENCIES
82
+ actionpack (>= 3.0.0)
83
+ activerecord (>= 4.0.0)
84
+ activerecord-jdbcsqlite3-adapter
85
+ activesupport (>= 3.0.0)
86
+ bundler (>= 1.0.0)
87
+ railties (>= 4.0.0)
88
+ rake
89
+ rspec (>= 2.0.0)
90
+ rspec-rails (>= 2.0)
91
+ sorted!
92
+ sqlite3 (>= 1.3.5)
@@ -0,0 +1,12 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'railties', '>= 4'
4
+ gem 'mongoid', '~> 4', github: 'mongoid/mongoid', require: 'mongoid'
5
+ gem 'rspec-rails', '>= 2.0'
6
+ gem 'origin'
7
+ gem 'moped'
8
+ gem 'nokogiri'
9
+ gem 'xpath'
10
+ gem 'mime-types'
11
+
12
+ gemspec path: '../'
@@ -0,0 +1,106 @@
1
+ GIT
2
+ remote: git://github.com/mongoid/mongoid.git
3
+ revision: 9b3bc1264032209b7a6c0e82d0ca656f401e476b
4
+ specs:
5
+ mongoid (4.0.0)
6
+ activemodel (~> 4.0.0)
7
+ moped (~> 2.0.beta3)
8
+ origin (~> 1.0)
9
+ tzinfo (~> 0.3.37)
10
+
11
+ PATH
12
+ remote: /Users/rufuspost/Projects/ruby/gems/sorted
13
+ specs:
14
+ sorted (1.0.0)
15
+
16
+ GEM
17
+ remote: https://rubygems.org/
18
+ specs:
19
+ actionpack (4.0.0)
20
+ activesupport (= 4.0.0)
21
+ builder (~> 3.1.0)
22
+ erubis (~> 2.7.0)
23
+ rack (~> 1.5.2)
24
+ rack-test (~> 0.6.2)
25
+ activemodel (4.0.0)
26
+ activesupport (= 4.0.0)
27
+ builder (~> 3.1.0)
28
+ activesupport (4.0.0)
29
+ i18n (~> 0.6, >= 0.6.4)
30
+ minitest (~> 4.2)
31
+ multi_json (~> 1.3)
32
+ thread_safe (~> 0.1)
33
+ tzinfo (~> 0.3.37)
34
+ atomic (1.1.14)
35
+ atomic (1.1.14-java)
36
+ bson (2.0.0.rc3)
37
+ bson (2.0.0.rc3-java)
38
+ builder (3.1.4)
39
+ diff-lcs (1.2.4)
40
+ erubis (2.7.0)
41
+ i18n (0.6.5)
42
+ mime-types (2.0)
43
+ mini_portile (0.5.2)
44
+ minitest (4.7.5)
45
+ moped (2.0.0.beta3)
46
+ bson (~> 2.0.0.rc3)
47
+ optionable (~> 0.1.1)
48
+ multi_json (1.8.2)
49
+ nokogiri (1.6.0)
50
+ mini_portile (~> 0.5.0)
51
+ nokogiri (1.6.0-java)
52
+ mini_portile (~> 0.5.0)
53
+ optionable (0.1.1)
54
+ origin (1.1.0)
55
+ rack (1.5.2)
56
+ rack-test (0.6.2)
57
+ rack (>= 1.0)
58
+ railties (4.0.0)
59
+ actionpack (= 4.0.0)
60
+ activesupport (= 4.0.0)
61
+ rake (>= 0.8.7)
62
+ thor (>= 0.18.1, < 2.0)
63
+ rake (10.1.0)
64
+ rspec (2.14.1)
65
+ rspec-core (~> 2.14.0)
66
+ rspec-expectations (~> 2.14.0)
67
+ rspec-mocks (~> 2.14.0)
68
+ rspec-core (2.14.7)
69
+ rspec-expectations (2.14.3)
70
+ diff-lcs (>= 1.1.3, < 2.0)
71
+ rspec-mocks (2.14.4)
72
+ rspec-rails (2.14.0)
73
+ actionpack (>= 3.0)
74
+ activesupport (>= 3.0)
75
+ railties (>= 3.0)
76
+ rspec-core (~> 2.14.0)
77
+ rspec-expectations (~> 2.14.0)
78
+ rspec-mocks (~> 2.14.0)
79
+ thor (0.18.1)
80
+ thread_safe (0.1.3)
81
+ atomic
82
+ thread_safe (0.1.3-java)
83
+ atomic
84
+ tzinfo (0.3.38)
85
+ xpath (2.0.0)
86
+ nokogiri (~> 1.3)
87
+
88
+ PLATFORMS
89
+ java
90
+ ruby
91
+
92
+ DEPENDENCIES
93
+ actionpack (>= 3.0.0)
94
+ activesupport (>= 3.0.0)
95
+ bundler (>= 1.0.0)
96
+ mime-types
97
+ mongoid (~> 4)!
98
+ moped
99
+ nokogiri
100
+ origin
101
+ railties (>= 4)
102
+ rake
103
+ rspec (>= 2.0.0)
104
+ rspec-rails (>= 2.0)
105
+ sorted!
106
+ xpath
@@ -1,13 +1,16 @@
1
- require 'active_record'
2
1
  require 'sorted'
2
+ require 'active_support/concern'
3
3
 
4
4
  module Sorted
5
5
  module Orms
6
6
  module ActiveRecord
7
- def self.included(base)
8
- def base.sorted(sort, default_order = nil)
7
+ extend ActiveSupport::Concern
8
+
9
+ included do
10
+ def self.sorted(sort, default_order = nil)
9
11
  sorter = ::Sorted::Parser.new(sort, default_order)
10
- order sorter.to_sql
12
+ quoter = ->(frag) { connection.quote_column_name(frag) }
13
+ order sorter.to_sql(quoter)
11
14
  end
12
15
  end
13
16
  end
@@ -0,0 +1,18 @@
1
+ require 'sorted'
2
+ require 'active_support/concern'
3
+
4
+ module Sorted
5
+ module Orms
6
+ module Mongoid
7
+ extend ActiveSupport::Concern
8
+ SQL_TO_MONGO = { "asc" => 1, "desc" => -1 }
9
+
10
+ included do
11
+ def self.sorted(sort, default_order = nil)
12
+ sorter = ::Sorted::Parser.new(sort, default_order)
13
+ order_by sorter.to_hash.merge(sorter) { |key, val| SQL_TO_MONGO[val] }
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
data/lib/sorted/parser.rb CHANGED
@@ -35,13 +35,16 @@ module Sorted
35
35
  end
36
36
  end.compact
37
37
  end
38
-
38
+
39
39
  def to_hash
40
40
  array.inject({}){|h,a| h.merge(Hash[a[0],a[1]])}
41
41
  end
42
-
43
- def to_sql
44
- array.map{|a| "#{a[0]} #{a[1].upcase}" }.join(', ')
42
+
43
+ def to_sql(quoter = ->(frag) { frag })
44
+ array.map do |a|
45
+ column = a[0].split('.').map{ |frag| quoter.call(frag) }.join('.')
46
+ "#{column} #{a[1].upcase}"
47
+ end.join(', ')
45
48
  end
46
49
 
47
50
  def to_s
@@ -51,12 +54,12 @@ module Sorted
51
54
  def to_a
52
55
  array
53
56
  end
54
-
57
+
55
58
  def toggle
56
59
  @array = Toggler.new(sorts, orders).to_a
57
60
  self
58
61
  end
59
-
62
+
60
63
  def reset
61
64
  @array = default
62
65
  self
@@ -3,10 +3,18 @@ require 'sorted'
3
3
  module Sorted
4
4
  class Railtie < Rails::Railtie
5
5
  initializer "sorted.configure" do |app|
6
- ActiveSupport.on_load :active_record do
7
- require 'sorted/orms/active_record'
8
- include Sorted::Orms::ActiveRecord
6
+ if defined? ::ActiveRecord
7
+ ActiveSupport.on_load :active_record do
8
+ require 'sorted/orms/active_record'
9
+ include Sorted::Orms::ActiveRecord
10
+ end
9
11
  end
12
+
13
+ if defined? ::Mongoid
14
+ require 'sorted/orms/mongoid'
15
+ ::Mongoid::Document.send :include, Sorted::Orms::Mongoid
16
+ end
17
+
10
18
  ActiveSupport.on_load :action_view do
11
19
  require 'sorted/view_helpers/action_view'
12
20
  include Sorted::ViewHelpers::ActionView
@@ -1,3 +1,3 @@
1
1
  module Sorted
2
- VERSION = "0.4.3"
2
+ VERSION = "1.0.0"
3
3
  end
@@ -54,7 +54,32 @@ module Sorted
54
54
 
55
55
  sorter = SortedViewHelper.new(order, ((request.get? && !params.nil?) ? params.dup : {}))
56
56
  options[:class] = [options[:class], sorter.css].join(' ').strip
57
- link_to(sorter.params, options, html_options, &block)
57
+ link_to(url_for(sorter.params), options, html_options, &block)
58
+ end
59
+
60
+ # Convenience method for quickly spitting out a sorting menu.
61
+ #
62
+ # ==== Examples
63
+ #
64
+ # Basic usage
65
+ #
66
+ # sort_by :first_name, :last_name
67
+ #
68
+ # To provide a string to use instead of a column name, pass an array composed
69
+ # of your label string and the column name (symbol):
70
+ #
71
+ # sortable_by :author_name, :title, ["Date of Publication", :published_at]
72
+ #
73
+ def sortable_by(*columns)
74
+ links = content_tag :span, "Sort by: "
75
+ columns.each do |c|
76
+ if c.is_a? Array
77
+ links += link_to_sorted(c[0],c[1].to_sym)
78
+ else
79
+ links += link_to_sorted(c.to_s.titleize, c.to_sym)
80
+ end
81
+ end
82
+ content_tag :div, links, class: 'sortable'
58
83
  end
59
84
  end
60
85
  end
data/sorted.gemspec CHANGED
@@ -5,19 +5,21 @@ Gem::Specification.new do |s|
5
5
  s.name = "sorted"
6
6
  s.version = Sorted::VERSION
7
7
  s.platform = Gem::Platform::RUBY
8
- s.authors = ["Rufus Post"]
9
- s.email = ["rufuspost@gmail.com"]
8
+ s.authors = ["Rufus Post", "Daniel Leavitt"]
9
+ s.email = ["rufuspost@gmail.com", "daniel.leavitt@gmail.com"]
10
10
  s.homepage = "http://rubygems.org/gems/sorted"
11
- s.summary = "sort data with a database"
12
- s.description = "lets you sort large data sets using view helpers and a scope"
11
+ s.summary = %q{Data sorting library}
12
+ s.description = %q{Allows you to sort large datasets over many pages, without losing state.}
13
+ s.license = "MIT"
13
14
 
14
15
  s.required_rubygems_version = ">= 1.3.6"
15
16
  s.rubyforge_project = "sorted"
16
17
 
18
+ s.add_development_dependency "rake", ">= 0"
17
19
  s.add_development_dependency "bundler", ">= 1.0.0"
18
- s.add_development_dependency "rails", ">= 3.1.2"
19
20
  s.add_development_dependency "rspec", ">= 2.0.0"
20
- s.add_development_dependency "sqlite3", ">= 1.3.5"
21
+ s.add_development_dependency "activesupport", ">= 3.0.0"
22
+ s.add_development_dependency "actionpack", ">= 3.0.0"
21
23
 
22
24
  s.files = `git ls-files`.split("\n")
23
25
  s.executables = `git ls-files`.split("\n").map{|f| f =~ /^bin\/(.*)/ ? $1 : nil}.compact
@@ -1,27 +1,27 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Sorted::Orms::ActiveRecord do
4
- ActiveRecord::Base.send(:include, Sorted::Orms::ActiveRecord)
5
-
6
- class SortedActiveRecordTest < ActiveRecord::Base
7
- establish_connection :adapter => 'sqlite3', :database => '/tmp/foobar.db'
3
+ if defined? ActiveRecord
4
+ describe Sorted::Orms::ActiveRecord do
5
+ ActiveRecord::Base.send(:include, Sorted::Orms::ActiveRecord)
8
6
 
9
- connection.create_table table_name, :force => true do |t|
10
- t.string :name
11
- end
7
+ class SortedActiveRecordTest < ActiveRecord::Base
8
+ establish_connection adapter: 'sqlite3', database: ':memory:'
12
9
 
13
- scope :page, lambda {
14
- limit(50)
15
- }
16
- end
10
+ connection.create_table table_name, force: true do |t|
11
+ t.string :name
12
+ end
17
13
 
18
- it "should integrate with ActiveRecord::Base" do
19
- SortedActiveRecordTest.should respond_to(:sorted)
20
- end
14
+ scope :page, -> { limit(50) }
15
+ end
21
16
 
22
- it "should play nice with other scopes" do
23
- sql = "SELECT \"sorted_active_record_tests\".* FROM \"sorted_active_record_tests\" WHERE \"sorted_active_record_tests\".\"name\" = 'bob' ORDER BY name ASC LIMIT 50"
24
- SortedActiveRecordTest.where(:name => 'bob').page.sorted(nil, 'name ASC').to_sql.should == sql
25
- SortedActiveRecordTest.page.sorted(nil, 'name ASC').where(:name => 'bob').to_sql.should == sql
17
+ it "should integrate with ActiveRecord::Base" do
18
+ SortedActiveRecordTest.should respond_to(:sorted)
19
+ end
20
+
21
+ it "should play nice with other scopes" do
22
+ sql = "SELECT \"sorted_active_record_tests\".* FROM \"sorted_active_record_tests\" WHERE \"sorted_active_record_tests\".\"name\" = 'bob' ORDER BY \"name\" ASC LIMIT 50"
23
+ SortedActiveRecordTest.where(:name => 'bob').page.sorted(nil, 'name ASC').to_sql.should == sql
24
+ SortedActiveRecordTest.page.sorted(nil, 'name ASC').where(:name => 'bob').to_sql.should == sql
25
+ end
26
26
  end
27
27
  end
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+
3
+ if defined? Mongoid
4
+ describe Sorted::Orms::Mongoid do
5
+ ::Mongoid::Criteria.send :include, Sorted::Orms::Mongoid
6
+ ::Mongoid::Document.send :include, Sorted::Orms::Mongoid
7
+
8
+ class SortedMongoidTest
9
+ include ::Mongoid::Document
10
+
11
+ field :name, type: String
12
+
13
+ def self.page
14
+ limit(50)
15
+ end
16
+ end
17
+
18
+ it "should integrate with Mongoid::Document" do
19
+ SortedMongoidTest.should respond_to(:sorted)
20
+ end
21
+
22
+ it "should integrate with Mongoid::Criteria" do
23
+ SortedMongoidTest.page.should respond_to(:sorted)
24
+ end
25
+
26
+ it "should play nice with other scopes" do
27
+ query_options = { limit: 50, sort: { "name" => 1 } }
28
+ SortedMongoidTest.page.sorted(nil, 'name ASC').options.should == query_options
29
+ SortedMongoidTest.page.sorted(nil, 'name ASC').options.should == query_options
30
+ end
31
+ end
32
+ end
@@ -61,13 +61,31 @@ describe Sorted::Parser, "params parsing" do
61
61
  end
62
62
 
63
63
  describe Sorted::Parser, "return types" do
64
+ module FakeConnection
65
+ def self.quote_column_name(column_name)
66
+ "`#{column_name}`"
67
+ end
68
+ end
69
+
70
+ let(:quoter) {
71
+ ->(frag) { FakeConnection.quote_column_name(frag) }
72
+ }
73
+
74
+ it "should properly escape sql column names" do
75
+ order = "users.name DESC"
76
+ result = "`users`.`name` DESC"
77
+
78
+ sorter = Sorted::Parser.new(nil, order)
79
+ sorter.to_sql(quoter).should eq result
80
+ end
81
+
64
82
  it "should return an sql sort string" do
65
83
  sort = "email_desc!name_desc"
66
84
  order = "email ASC, phone ASC, name DESC"
67
- result = "email DESC, name DESC, phone ASC"
85
+ result = "`email` DESC, `name` DESC, `phone` ASC"
68
86
 
69
87
  sorter = Sorted::Parser.new(sort, order)
70
- sorter.to_sql.should eq result
88
+ sorter.to_sql(quoter).should eq result
71
89
  end
72
90
 
73
91
  it "should return an hash" do
@@ -91,9 +109,9 @@ describe Sorted::Parser, "return types" do
91
109
  it "sql injection using order by clause should not work" do
92
110
  sort = "(case+when+((ASCII(SUBSTR((select+table_name+from+all_tables+where+rownum%3d1),1))>%3D128))+then+id+else+something+end)"
93
111
  order = "email ASC, phone ASC, name DESC"
94
- result = "email ASC, phone ASC, name DESC"
112
+ result = "`email` ASC, `phone` ASC, `name` DESC"
95
113
 
96
114
  sorter = Sorted::Parser.new(sort, order)
97
- sorter.to_sql.should eq result
115
+ sorter.to_sql(quoter).should eq result
98
116
  end
99
117
  end
data/spec/spec_helper.rb CHANGED
@@ -1,6 +1,16 @@
1
1
  $LOAD_PATH.unshift(File.dirname(__FILE__))
2
2
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
+
4
+ begin
5
+ require 'rails'
6
+ rescue LoadError
7
+ end
8
+
9
+ require 'bundler/setup'
10
+ Bundler.require
11
+
3
12
  require 'sorted'
13
+ require 'sorted/orms/mongoid'
4
14
  require 'sorted/orms/active_record'
5
15
  require 'sorted/view_helpers/action_view'
6
16
  require 'rspec'
metadata CHANGED
@@ -1,75 +1,108 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sorted
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.3
5
- prerelease:
4
+ version: 1.0.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Rufus Post
8
+ - Daniel Leavitt
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-06-03 00:00:00.000000000 Z
12
+ date: 2013-11-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: bundler
16
- requirement: &70131329800380 !ruby/object:Gem::Requirement
17
- none: false
15
+ name: rake
16
+ requirement: !ruby/object:Gem::Requirement
18
17
  requirements:
19
- - - ! '>='
18
+ - - '>='
20
19
  - !ruby/object:Gem::Version
21
- version: 1.0.0
20
+ version: '0'
22
21
  type: :development
23
22
  prerelease: false
24
- version_requirements: *70131329800380
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - '>='
26
+ - !ruby/object:Gem::Version
27
+ version: '0'
25
28
  - !ruby/object:Gem::Dependency
26
- name: rails
27
- requirement: &70131329799320 !ruby/object:Gem::Requirement
28
- none: false
29
+ name: bundler
30
+ requirement: !ruby/object:Gem::Requirement
29
31
  requirements:
30
- - - ! '>='
32
+ - - '>='
31
33
  - !ruby/object:Gem::Version
32
- version: 3.1.2
34
+ version: 1.0.0
33
35
  type: :development
34
36
  prerelease: false
35
- version_requirements: *70131329799320
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - '>='
40
+ - !ruby/object:Gem::Version
41
+ version: 1.0.0
36
42
  - !ruby/object:Gem::Dependency
37
43
  name: rspec
38
- requirement: &70131329817920 !ruby/object:Gem::Requirement
39
- none: false
44
+ requirement: !ruby/object:Gem::Requirement
40
45
  requirements:
41
- - - ! '>='
46
+ - - '>='
42
47
  - !ruby/object:Gem::Version
43
48
  version: 2.0.0
44
49
  type: :development
45
50
  prerelease: false
46
- version_requirements: *70131329817920
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - '>='
54
+ - !ruby/object:Gem::Version
55
+ version: 2.0.0
56
+ - !ruby/object:Gem::Dependency
57
+ name: activesupport
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - '>='
61
+ - !ruby/object:Gem::Version
62
+ version: 3.0.0
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - '>='
68
+ - !ruby/object:Gem::Version
69
+ version: 3.0.0
47
70
  - !ruby/object:Gem::Dependency
48
- name: sqlite3
49
- requirement: &70131329816300 !ruby/object:Gem::Requirement
50
- none: false
71
+ name: actionpack
72
+ requirement: !ruby/object:Gem::Requirement
51
73
  requirements:
52
- - - ! '>='
74
+ - - '>='
53
75
  - !ruby/object:Gem::Version
54
- version: 1.3.5
76
+ version: 3.0.0
55
77
  type: :development
56
78
  prerelease: false
57
- version_requirements: *70131329816300
58
- description: lets you sort large data sets using view helpers and a scope
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - '>='
82
+ - !ruby/object:Gem::Version
83
+ version: 3.0.0
84
+ description: Allows you to sort large datasets over many pages, without losing state.
59
85
  email:
60
86
  - rufuspost@gmail.com
87
+ - daniel.leavitt@gmail.com
61
88
  executables: []
62
89
  extensions: []
63
90
  extra_rdoc_files: []
64
91
  files:
65
92
  - .gitignore
93
+ - .rspec
66
94
  - .travis.yml
67
95
  - Gemfile
68
96
  - LICENSE
69
- - README.rdoc
97
+ - README.md
70
98
  - Rakefile
99
+ - gemfiles/active_record_40.gemfile
100
+ - gemfiles/active_record_40.gemfile.lock
101
+ - gemfiles/mongoid_30.gemfile
102
+ - gemfiles/mongoid_30.gemfile.lock
71
103
  - lib/sorted.rb
72
104
  - lib/sorted/orms/active_record.rb
105
+ - lib/sorted/orms/mongoid.rb
73
106
  - lib/sorted/parser.rb
74
107
  - lib/sorted/railtie.rb
75
108
  - lib/sorted/toggler.rb
@@ -77,35 +110,33 @@ files:
77
110
  - lib/sorted/view_helpers/action_view.rb
78
111
  - sorted.gemspec
79
112
  - spec/sorted/orms/active_record_spec.rb
113
+ - spec/sorted/orms/mongoid_spec.rb
80
114
  - spec/sorted/parser_spec.rb
81
115
  - spec/sorted/toggler_spec.rb
82
116
  - spec/sorted/view_helpers/action_view_spec.rb
83
117
  - spec/spec_helper.rb
84
118
  homepage: http://rubygems.org/gems/sorted
85
- licenses: []
119
+ licenses:
120
+ - MIT
121
+ metadata: {}
86
122
  post_install_message:
87
123
  rdoc_options: []
88
124
  require_paths:
89
125
  - lib
90
126
  required_ruby_version: !ruby/object:Gem::Requirement
91
- none: false
92
127
  requirements:
93
- - - ! '>='
128
+ - - '>='
94
129
  - !ruby/object:Gem::Version
95
130
  version: '0'
96
- segments:
97
- - 0
98
- hash: -4246959904636690833
99
131
  required_rubygems_version: !ruby/object:Gem::Requirement
100
- none: false
101
132
  requirements:
102
- - - ! '>='
133
+ - - '>='
103
134
  - !ruby/object:Gem::Version
104
135
  version: 1.3.6
105
136
  requirements: []
106
137
  rubyforge_project: sorted
107
- rubygems_version: 1.8.11
138
+ rubygems_version: 2.0.0
108
139
  signing_key:
109
- specification_version: 3
110
- summary: sort data with a database
140
+ specification_version: 4
141
+ summary: Data sorting library
111
142
  test_files: []
data/README.rdoc DELETED
@@ -1,27 +0,0 @@
1
- = sorted
2
-
3
- Sorted is a simple object that will take an sql order string and a url
4
- sort string to let you sort large datasets over many pages (using
5
- {will_paginate}[http://github.com/mislav/will_paginatea] or
6
- {kaminari}[https://github.com/amatsuda/kaminari]) without loosing state.
7
-
8
- {<img src="https://secure.travis-ci.org/mynameisrufus/sorted.png" />}[http://travis-ci.org/mynameisrufus/sorted]
9
-
10
- === Gemfile
11
-
12
- gem 'sorted', '~> 0.4.3'
13
-
14
- === View
15
-
16
- Generate a sorted link with the email attribute:
17
-
18
- link_to_sorted "Email", :email
19
-
20
- Works the same as the +link_to+ method except a second argument for the
21
- sort attribute is needed.
22
-
23
- === Model
24
-
25
- Using the +sorted+ method with the optional default order argument:
26
-
27
- @users = User.sorted(params[:sort], "email ASC").page(params[:page])