table_sortable 1.0.0.pre.alpha.3 → 1.0.0.pre.alpha.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0d984c4493ecd467f57e1d03d749a1fb3b31c84e
4
- data.tar.gz: 5a6e3fd9fd74ac90b5f27e285585ce0e782c1680
3
+ metadata.gz: b98db7d33d20b683075edac94fe5ee1df23a3816
4
+ data.tar.gz: 30fc8c7ba54dbd07f5fe83d5319d0e474cb8acf6
5
5
  SHA512:
6
- metadata.gz: bc8748ddf802895ab307455f0db04e2c58627d22d8ef446480e23479c4a6cf66983f8f9f53773404fb6640834354117d96a89be2a3df5a42de33b02d89c63197
7
- data.tar.gz: be63858bc76eefc8573ea13734381d8bb54ef24b86ebb0ebaf7f192f8c35149e34f4a08d2e182f491a04ee79a7226b7c1e1e438c9b958dd89d043be0f5e52bc7
6
+ metadata.gz: 572e3c065b21961613949494af13ac3f1b3f41352afa9ade5268bcf9b50cdcaad85afd4d69a2bed7597eb2ab407242b13582f6f26ba550f8d153d2324d24a271
7
+ data.tar.gz: 965022220b77acccc058d1f1e21df373847b1448289050f008c66905f4cd9d32daa0005af1b2d2f735db53595d3781b08166cbd038e7c260075f822643018599
@@ -15,7 +15,7 @@ module TableSortable
15
15
  template = options[:template] || col_name
16
16
  column_options = options[:options] || {}
17
17
 
18
- @name = col_name
18
+ @name = col_name.to_sym
19
19
  @value = value.respond_to?(:call) ? value : -> (record) { record.send(value) }
20
20
  @content = content.respond_to?(:call) ? content : -> (record) { record.send(content) }
21
21
  @label = label
@@ -18,5 +18,9 @@ module TableSortable
18
18
  end
19
19
  end
20
20
 
21
+ def [](name)
22
+ self.find{|col| col.name == name.to_sym}
23
+ end
24
+
21
25
  end
22
26
  end
@@ -3,6 +3,7 @@ module TableSortable
3
3
  module Controller
4
4
 
5
5
  extend ActiveSupport::Concern
6
+ include TableSortable::Core
6
7
 
7
8
  included do
8
9
  helper_method :columns
@@ -49,84 +50,6 @@ module TableSortable
49
50
  end
50
51
  end
51
52
 
52
- def define_columns(*args)
53
- options = args.extract_options!
54
- column_offset = options[:offset] || 0
55
- translation_key = options[:translation_key]
56
- template_path = options[:template_path]
57
- columns = args
58
- define_translation_key translation_key
59
- define_template_path template_path
60
- define_column_offset column_offset
61
- columns.each do |column|
62
- define_column column, translation_key: translation_key
63
- end
64
- end
65
-
66
- def define_column(col_name, *options)
67
- options = default_column_options.merge(options.extract_options!)
68
- @columns.add(col_name, options.merge(controller: self))
69
- end
70
-
71
- def define_column_order(*order)
72
- @column_order = order
73
- end
74
-
75
- def define_column_offset(offset)
76
- @column_offset = offset
77
- end
78
-
79
- def define_translation_key(key)
80
- @translation_key = key
81
- end
82
-
83
- def define_template_path(path)
84
- @template_path = path.blank? ? nil : File.join(path, "")
85
- end
86
-
87
- def columns
88
- @columns.sort_by(column_order)
89
- end
90
-
91
- private
92
-
93
- def default_column_options
94
- {translation_key: @translation_key, template_path: @template_path}
95
- end
96
-
97
- def filter_and_sort(scope, params = nil)
98
- populate_params(params)
99
-
100
- actions = [->(records) { records }]
101
- ordered_actions(scope.first).reverse.each_with_index do |action, i|
102
- actions << ->(records) { action.used? ? (actions[i].call(action.run(records))) : actions[i].call(records) }
103
- end
104
- scope = actions.last.call(scope) unless scope.blank?
105
- if @query_params.page
106
- scope = Result.new(scope, @query_params.page, @query_params.page_size)
107
- end
108
-
109
- scope
110
- end
111
-
112
- def initialize_table_sortable
113
- @columns = TableSortable::Columns.new
114
- define_column_offset 0
115
- end
116
-
117
- def ordered_actions(record = nil)
118
- filter_actions = @columns.map{|col| col.filter }
119
- sort_actions = @columns.map{|col| col.sorter }
120
- (filter_actions+sort_actions).sort{ |a,b| (a.method(record) && b.method(record)) ? (a.method(record) <=> b.method(record)) : b.method(record) ? 1 : -1 }
121
- end
122
-
123
- def populate_params(params = nil)
124
- @query_params = QueryParams.new(params || self.params, columns, column_offset)
125
- end
126
-
127
- public
128
-
129
- attr_reader :column_order, :column_offset, :translation_key, :template_path
130
53
 
131
54
  end
132
55
  end
@@ -0,0 +1,88 @@
1
+ require 'table_sortable/columns'
2
+
3
+ module TableSortable
4
+ module Core
5
+ extend ActiveSupport::Concern
6
+
7
+ def define_columns(*args)
8
+ options = args.extract_options!
9
+ column_offset = options[:offset] || 0
10
+ translation_key = options[:translation_key]
11
+ template_path = options[:template_path]
12
+ columns = args
13
+ define_translation_key translation_key
14
+ define_template_path template_path
15
+ define_column_offset column_offset
16
+ columns.each do |column|
17
+ define_column column, translation_key: translation_key
18
+ end
19
+ end
20
+
21
+ def define_column(col_name, *options)
22
+ options = default_column_options.merge(options.extract_options!)
23
+ @columns.add(col_name, options.merge(controller: self))
24
+ end
25
+
26
+ def define_column_order(*order)
27
+ @column_order = order
28
+ end
29
+
30
+ def define_column_offset(offset)
31
+ @column_offset = offset
32
+ end
33
+
34
+ def define_translation_key(key)
35
+ @translation_key = key
36
+ end
37
+
38
+ def define_template_path(path)
39
+ @template_path = path.blank? ? nil : File.join(path, "")
40
+ end
41
+
42
+ def columns
43
+ @columns.sort_by(column_order)
44
+ end
45
+
46
+ # private
47
+
48
+ def default_column_options
49
+ {translation_key: @translation_key, template_path: @template_path}
50
+ end
51
+
52
+ def filter_and_sort(scope, params = nil)
53
+ populate_params(params)
54
+
55
+ actions = [->(records) { records }]
56
+ ordered_actions(scope.first).reverse.each_with_index do |action, i|
57
+ actions << ->(records) { action.used? ? (actions[i].call(action.run(records))) : actions[i].call(records) }
58
+ end
59
+ scope = actions.last.call(scope) unless scope.blank?
60
+ if @query_params.page
61
+ scope = Result.new(scope, @query_params.page, @query_params.page_size)
62
+ end
63
+
64
+ scope
65
+ end
66
+
67
+ def initialize_table_sortable
68
+ @columns = TableSortable::Columns.new
69
+ define_column_offset 0
70
+ end
71
+
72
+ def ordered_actions(record = nil)
73
+ filter_actions = @columns.map{|col| col.filter }
74
+ sort_actions = @columns.map{|col| col.sorter }
75
+ (filter_actions+sort_actions).sort{ |a,b| (a.method(record) && b.method(record)) ? (a.method(record) <=> b.method(record)) : b.method(record) ? 1 : -1 }
76
+ end
77
+
78
+ def populate_params(params = nil)
79
+ @query_params = QueryParams.new(params || self.params, columns, column_offset)
80
+ end
81
+
82
+ public
83
+
84
+ attr_reader :column_order, :column_offset, :translation_key, :template_path
85
+ # attr_accessor :params if defined?(self.class.params)
86
+
87
+ end
88
+ end
@@ -3,7 +3,7 @@ module TableSortable
3
3
 
4
4
  attr_reader :page, :page_size
5
5
  def initialize(params, columns, column_offset = 0)
6
- @page = params[PAGE].to_i
6
+ @page = params[PAGE] ? params[PAGE].to_i : nil
7
7
  @page_size = params[PAGESIZE].to_i
8
8
 
9
9
  # reset column filters and sorters
@@ -1,3 +1,3 @@
1
1
  module TableSortable
2
- VERSION = "1.0.0.pre.alpha.3"
2
+ VERSION = "1.0.0.pre.alpha.4"
3
3
  end
@@ -9,7 +9,7 @@ module TableSortable
9
9
  PAGE = 'page'
10
10
  PAGESIZE = 'pagesize'
11
11
 
12
- class Engine < Rails::Engine; end
12
+ class Engine < Rails::Engine; end if defined?(Rails)
13
13
 
14
14
  end
15
15
 
@@ -20,8 +20,8 @@ require 'table_sortable/column/sorter'
20
20
  require 'table_sortable/column/filter'
21
21
  require 'table_sortable/column'
22
22
  require 'table_sortable/result'
23
- require 'table_sortable/columns'
24
23
  require 'table_sortable/version'
24
+ require 'table_sortable/core'
25
25
  require 'table_sortable/controller'
26
26
  require 'table_sortable/query_params'
27
27
  require 'table_sortable/railtie' if defined?(Rails)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: table_sortable
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.pre.alpha.3
4
+ version: 1.0.0.pre.alpha.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Oded Davidov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-07-10 00:00:00.000000000 Z
11
+ date: 2017-07-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -171,6 +171,7 @@ files:
171
171
  - lib/table_sortable/columns.rb
172
172
  - lib/table_sortable/concerns/proc.rb
173
173
  - lib/table_sortable/controller.rb
174
+ - lib/table_sortable/core.rb
174
175
  - lib/table_sortable/process.rb
175
176
  - lib/table_sortable/query_params.rb
176
177
  - lib/table_sortable/railtie.rb