sorted 1.1.1 → 2.0.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.
@@ -1,9 +0,0 @@
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: '../'
@@ -1,109 +0,0 @@
1
- PATH
2
- remote: /Users/rufuspost/Projects/ruby/gems/sorted
3
- specs:
4
- sorted (1.1.1)
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
- ast (2.0.0)
37
- astrolabe (1.3.0)
38
- parser (>= 2.2.0.pre.3, < 3.0)
39
- atomic (1.1.14)
40
- atomic (1.1.14-java)
41
- builder (3.1.4)
42
- diff-lcs (1.2.4)
43
- erubis (2.7.0)
44
- i18n (0.6.5)
45
- jdbc-sqlite3 (3.7.2.1)
46
- minitest (4.7.5)
47
- multi_json (1.8.2)
48
- parser (2.2.0.pre.8)
49
- ast (>= 1.1, < 3.0)
50
- slop (~> 3.4, >= 3.4.5)
51
- powerpack (0.0.9)
52
- rack (1.5.2)
53
- rack-test (0.6.2)
54
- rack (>= 1.0)
55
- railties (4.0.0)
56
- actionpack (= 4.0.0)
57
- activesupport (= 4.0.0)
58
- rake (>= 0.8.7)
59
- thor (>= 0.18.1, < 2.0)
60
- rainbow (2.0.0)
61
- rake (10.1.0)
62
- rspec (2.14.1)
63
- rspec-core (~> 2.14.0)
64
- rspec-expectations (~> 2.14.0)
65
- rspec-mocks (~> 2.14.0)
66
- rspec-core (2.14.6)
67
- rspec-expectations (2.14.3)
68
- diff-lcs (>= 1.1.3, < 2.0)
69
- rspec-mocks (2.14.4)
70
- rspec-rails (2.14.0)
71
- actionpack (>= 3.0)
72
- activesupport (>= 3.0)
73
- railties (>= 3.0)
74
- rspec-core (~> 2.14.0)
75
- rspec-expectations (~> 2.14.0)
76
- rspec-mocks (~> 2.14.0)
77
- rubocop (0.28.0)
78
- astrolabe (~> 1.3)
79
- parser (>= 2.2.0.pre.7, < 3.0)
80
- powerpack (~> 0.0.6)
81
- rainbow (>= 1.99.1, < 3.0)
82
- ruby-progressbar (~> 1.4)
83
- ruby-progressbar (1.7.0)
84
- slop (3.6.0)
85
- sqlite3 (1.3.8)
86
- thor (0.18.1)
87
- thread_safe (0.1.3)
88
- atomic
89
- thread_safe (0.1.3-java)
90
- atomic
91
- tzinfo (0.3.38)
92
-
93
- PLATFORMS
94
- java
95
- ruby
96
-
97
- DEPENDENCIES
98
- actionpack (>= 3.0.0)
99
- activerecord (>= 4.0.0)
100
- activerecord-jdbcsqlite3-adapter
101
- activesupport (>= 3.0.0)
102
- bundler (>= 1.0.0)
103
- railties (>= 4.0.0)
104
- rake
105
- rspec (>= 2.0.0)
106
- rspec-rails (>= 2.0)
107
- rubocop (>= 0.28)
108
- sorted!
109
- sqlite3 (>= 1.3.5)
@@ -1,7 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gem 'railties', '>= 4'
4
- gem 'mongoid', '~> 4'
5
- gem 'rspec-rails', '>= 2.0'
6
-
7
- gemspec path: '../'
@@ -1,113 +0,0 @@
1
- PATH
2
- remote: ../
3
- specs:
4
- sorted (1.1.1)
5
-
6
- GEM
7
- remote: https://rubygems.org/
8
- specs:
9
- actionpack (4.1.4)
10
- actionview (= 4.1.4)
11
- activesupport (= 4.1.4)
12
- rack (~> 1.5.2)
13
- rack-test (~> 0.6.2)
14
- actionview (4.1.4)
15
- activesupport (= 4.1.4)
16
- builder (~> 3.1)
17
- erubis (~> 2.7.0)
18
- activemodel (4.1.4)
19
- activesupport (= 4.1.4)
20
- builder (~> 3.1)
21
- activesupport (4.1.4)
22
- i18n (~> 0.6, >= 0.6.9)
23
- json (~> 1.7, >= 1.7.7)
24
- minitest (~> 5.1)
25
- thread_safe (~> 0.1)
26
- tzinfo (~> 1.1)
27
- ast (2.0.0)
28
- astrolabe (1.3.0)
29
- parser (>= 2.2.0.pre.3, < 3.0)
30
- bson (2.3.0)
31
- bson (2.3.0-java)
32
- builder (3.2.2)
33
- connection_pool (2.0.0)
34
- diff-lcs (1.2.5)
35
- erubis (2.7.0)
36
- i18n (0.6.9)
37
- json (1.8.1)
38
- json (1.8.1-java)
39
- minitest (5.4.0)
40
- mongoid (4.0.0)
41
- activemodel (~> 4.0)
42
- moped (~> 2.0.0)
43
- origin (~> 2.1)
44
- tzinfo (>= 0.3.37)
45
- moped (2.0.0)
46
- bson (~> 2.2)
47
- connection_pool (~> 2.0)
48
- optionable (~> 0.2.0)
49
- optionable (0.2.0)
50
- origin (2.1.1)
51
- parser (2.2.0.pre.8)
52
- ast (>= 1.1, < 3.0)
53
- slop (~> 3.4, >= 3.4.5)
54
- powerpack (0.0.9)
55
- rack (1.5.2)
56
- rack-test (0.6.2)
57
- rack (>= 1.0)
58
- railties (4.1.4)
59
- actionpack (= 4.1.4)
60
- activesupport (= 4.1.4)
61
- rake (>= 0.8.7)
62
- thor (>= 0.18.1, < 2.0)
63
- rainbow (2.0.0)
64
- rake (10.3.2)
65
- rspec (3.0.0)
66
- rspec-core (~> 3.0.0)
67
- rspec-expectations (~> 3.0.0)
68
- rspec-mocks (~> 3.0.0)
69
- rspec-core (3.0.2)
70
- rspec-support (~> 3.0.0)
71
- rspec-expectations (3.0.2)
72
- diff-lcs (>= 1.2.0, < 2.0)
73
- rspec-support (~> 3.0.0)
74
- rspec-mocks (3.0.2)
75
- rspec-support (~> 3.0.0)
76
- rspec-rails (3.0.1)
77
- actionpack (>= 3.0)
78
- activesupport (>= 3.0)
79
- railties (>= 3.0)
80
- rspec-core (~> 3.0.0)
81
- rspec-expectations (~> 3.0.0)
82
- rspec-mocks (~> 3.0.0)
83
- rspec-support (~> 3.0.0)
84
- rspec-support (3.0.2)
85
- rubocop (0.28.0)
86
- astrolabe (~> 1.3)
87
- parser (>= 2.2.0.pre.7, < 3.0)
88
- powerpack (~> 0.0.6)
89
- rainbow (>= 1.99.1, < 3.0)
90
- ruby-progressbar (~> 1.4)
91
- ruby-progressbar (1.7.0)
92
- slop (3.6.0)
93
- thor (0.19.1)
94
- thread_safe (0.3.4)
95
- thread_safe (0.3.4-java)
96
- tzinfo (1.2.1)
97
- thread_safe (~> 0.1)
98
-
99
- PLATFORMS
100
- java
101
- ruby
102
-
103
- DEPENDENCIES
104
- actionpack (>= 3.0.0)
105
- activesupport (>= 3.0.0)
106
- bundler (>= 1.0.0)
107
- mongoid (~> 4)
108
- railties (>= 4)
109
- rake
110
- rspec (>= 2.0.0)
111
- rspec-rails (>= 2.0)
112
- rubocop (>= 0.28)
113
- sorted!
@@ -1,34 +0,0 @@
1
- require 'sorted'
2
- require 'active_support/concern'
3
-
4
- module Sorted
5
- module Orms
6
- module ActiveRecord
7
- extend ActiveSupport::Concern
8
-
9
- included do
10
- def self.sorted(sort, default_order = nil)
11
- order sort_sql(sort, default_order)
12
- end
13
-
14
- def self.resorted(sort, default_order = nil)
15
- reorder sort_sql(sort, default_order)
16
- end
17
-
18
- private
19
-
20
- def self.sort_sql(sort, default_order)
21
- sorter(sort, default_order).to_sql(quoter)
22
- end
23
-
24
- def self.sorter(sort, default_order)
25
- ::Sorted::Parser.new(sort, default_order)
26
- end
27
-
28
- def self.quoter
29
- ->(frag) { connection.quote_column_name(frag) }
30
- end
31
- end
32
- end
33
- end
34
- end
@@ -1,18 +0,0 @@
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 DELETED
@@ -1,68 +0,0 @@
1
- require 'sorted/toggler'
2
-
3
- module Sorted
4
- ##
5
- # Takes a sort query string and an SQL order string and parses the
6
- #
7
- # values to produce key value pairs.
8
- #
9
- # Example:
10
- # Sorted::Parser.new('phone_desc', 'name ASC').to_s #=> "phone_desc!name_asc"
11
- #
12
- # TODO A more helpfull name than `Parser` because it only deals with URI and
13
- # SQL. Shoud be refactored before 2.x
14
-
15
- Parser = Struct.new(:sort, :order) do
16
- def uri
17
- URIQuery.parse(sort)
18
- end
19
-
20
- def sql
21
- SQLQuery.parse(order)
22
- end
23
-
24
- def sorts
25
- uri.to_a
26
- end
27
-
28
- def orders
29
- sql.to_a
30
- end
31
-
32
- def to_hash
33
- set.to_hash
34
- end
35
-
36
- def to_sql(quote_proc = ->(f) { f })
37
- SQLQuery.encode(set, quote_proc)
38
- end
39
-
40
- def to_s
41
- URIQuery.encode(set)
42
- end
43
-
44
- def to_a
45
- set.to_a
46
- end
47
-
48
- def toggle
49
- @set = Toggler.new(sorts, orders).toggle
50
- self
51
- end
52
-
53
- def reset
54
- @set = default
55
- self
56
- end
57
-
58
- private
59
-
60
- def set
61
- @set ||= default
62
- end
63
-
64
- def default
65
- uri + (sql - uri)
66
- end
67
- end
68
- end
@@ -1,24 +0,0 @@
1
- require 'sorted'
2
-
3
- module Sorted
4
- class Railtie < Rails::Railtie
5
- initializer 'sorted.configure' do |_app|
6
- if defined? ::ActiveRecord
7
- ActiveSupport.on_load :active_record do
8
- require 'sorted/orms/active_record'
9
- include Sorted::Orms::ActiveRecord
10
- end
11
- end
12
-
13
- if defined? ::Mongoid
14
- require 'sorted/orms/mongoid'
15
- ::Mongoid::Document.send :include, Sorted::Orms::Mongoid
16
- end
17
-
18
- ActiveSupport.on_load :action_view do
19
- require 'sorted/view_helpers/action_view'
20
- include Sorted::ViewHelpers::ActionView
21
- end
22
- end
23
- end
24
- end
@@ -1,27 +0,0 @@
1
- module Sorted
2
- ##
3
- # Takes a parsed arrays of sorts and orders, it then will reorder the pairs
4
- # and flip the ascendance of the first sort pair.
5
- #
6
- # Example:
7
- # sorts = [['name', 'asc'], ['phone', 'desc']]
8
- # orders = [['name', 'asc']]
9
- # Sorted::Toggler.new(sorts, orders).to_a
10
- #
11
- # TODO Remove this in 2.x, it's only here for backwards compatibility.
12
-
13
- class Toggler
14
- def initialize(sorts, orders)
15
- @sorts = Set.new(sorts)
16
- @orders = Set.new(orders)
17
- end
18
-
19
- def toggle
20
- @orders.direction_intersect(@sorts)
21
- end
22
-
23
- def to_a
24
- toggle.to_a
25
- end
26
- end
27
- end
@@ -1,86 +0,0 @@
1
- require 'action_view'
2
- require 'sorted'
3
-
4
- module Sorted
5
- module ViewHelpers
6
- module ActionView
7
- class SortedViewHelper
8
- attr_reader :params
9
-
10
- def initialize(order, params = {})
11
- sort = params.delete :sort
12
- @params = params
13
- @parser = ::Sorted::Parser.new(sort, order).toggle
14
- @params[:sort] = @parser.to_s
15
- end
16
-
17
- def css
18
- if @parser.sorts.flatten.include? @parser.orders[0][0]
19
- "sorted #{@parser.sorts.assoc(@parser.orders[0][0]).last}"
20
- else
21
- 'sorted'
22
- end
23
- end
24
- end
25
-
26
- # Creates a link tag of the given +name+ and +attribute+ creating
27
- # a url using a set of +options+.
28
- #
29
- # ==== Examples
30
- #
31
- # Basic usage
32
- #
33
- # link_to_sorted "Email", :email
34
- # # => <a href="/profiles?sort=email_asc" class="desc">Email</a>
35
- #
36
- # Or use a block
37
- #
38
- # link_to_sorted :email do
39
- # <strong>Sort by email</strong> -- <span></span>
40
- # end
41
- # # => <a href="/profiles?sort=email_asc" class="desc"><strong>Sort by email</strong> -- <span></span></a>
42
- #
43
- def link_to_sorted(*args, &block)
44
- if block_given?
45
- order = args[0]
46
- options = args[1] || {}
47
- html_options = args[2] || {}
48
- else
49
- block = proc { args[0].to_s }
50
- order = args[1]
51
- options = args[2] || {}
52
- html_options = args[3] || {}
53
- end
54
-
55
- sorter = SortedViewHelper.new(order, ((request.get? && !params.nil?) ? params.dup : {}))
56
- options[:class] = [options[:class], sorter.css].join(' ').strip
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'
83
- end
84
- end
85
- end
86
- end