tablets 0.3.3 → 0.3.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: 68012b3107a6032fcedefead6cebe9842a432400
4
- data.tar.gz: 282ee6b15713cffb360deccf1080f35e0fe4bad7
3
+ metadata.gz: 8913447e8e90a68f62572e09b15021e29735d1d8
4
+ data.tar.gz: c89c42ec3ac921e0e35390f57b493977992bfec0
5
5
  SHA512:
6
- metadata.gz: aa226722b0c938c3167197b9636eeaa94562859a044cc008be3af059326e19203639a18206e85ce2ab6b8e38fcb9e689a626215222993781661825a756d6a799
7
- data.tar.gz: d8df45c567abda884a7c319c0b64cc7ecd4e75e89ae2676f8e3fb4a59f6cfc77a2c738e579261fa064c98910613c4339401665df9cb3200d6371061ce44d4ecb
6
+ metadata.gz: eb8b28dfa772a35282cfae6e82858146db98fa9a55f9c74214a2dbdd504191303f6f75239b18364426d093701765b65c8cec9eae79d8ea942d56f7399fb3445e
7
+ data.tar.gz: bb2bb9bc0b285e077061a176416e6981d4bbbefd007efe14898dcc613746104129fd51cf89f491327e2948cb5d8cddf303cfcfa2f05080ddd00490eb58663093
@@ -1,11 +1,13 @@
1
1
  class Tablets.Tablet
2
2
  constructor: (@element, @options, @params) ->
3
3
  @initVars()
4
- @initTable()
5
4
  @initHandlers()
6
5
 
7
6
  Tablets.set(@id, this)
8
7
 
8
+ $ =>
9
+ @initTable()
10
+
9
11
  dataTableOptions: ->
10
12
  $.extend {}, @options,
11
13
  fnServerParams: (data) =>
@@ -37,7 +39,6 @@ class Tablets.Tablet
37
39
  @element.on 'xhr.dt', (_event, _table, data) =>
38
40
  @trigger('afterResponse', data)
39
41
 
40
-
41
42
  reload: ->
42
43
  @element.dataTable().fnDraw(false)
43
44
 
@@ -14,6 +14,11 @@ module Tablets
14
14
  fail NotImplementedError, '#apply need to be overrided by processing.'
15
15
  end
16
16
 
17
+ # Shorthand for create processing and apply it.
18
+ def self.apply(params, columns, relation)
19
+ new(params, columns).apply(relation)
20
+ end
21
+
17
22
  private
18
23
 
19
24
  attr_reader :params, :columns
@@ -1,3 +1,5 @@
1
+ require 'active_support/core_ext/object'
2
+
1
3
  require 'tablets/utils/arel'
2
4
 
3
5
  require 'tablets/data/processing/base'
@@ -1,3 +1,5 @@
1
+ require 'active_support/core_ext/object'
2
+
1
3
  require 'tablets/data/processing/filter'
2
4
  require 'tablets/data/processing/paginate'
3
5
  require 'tablets/data/processing/order'
@@ -15,11 +17,7 @@ module Tablets
15
17
 
16
18
  # Applies all processings on relation and returns it.
17
19
  def fetch
18
- result = relation
19
- result = order(result)
20
- result = filter(result)
21
- result = paginate(result)
22
- result
20
+ paginate filter order relation
23
21
  end
24
22
 
25
23
  # Returns total records count before filter and pagination is applied.
@@ -40,21 +38,21 @@ module Tablets
40
38
  def order(records)
41
39
  return records unless params[:order].present?
42
40
 
43
- Tablets::Data::Processing::Order.new(params, columns).apply(records)
41
+ Tablets::Data::Processing::Order.apply(params, columns, records)
44
42
  end
45
43
 
46
44
  # Applies filter processing.
47
45
  def filter(records)
48
46
  return records unless params[:search].present?
49
47
 
50
- Tablets::Data::Processing::Filter.new(params, columns).apply(records)
48
+ Tablets::Data::Processing::Filter.apply(params, columns, records)
51
49
  end
52
50
 
53
51
  # Applies paginate processing.
54
52
  def paginate(records)
55
- return records if params.try(:[], :length) == '-1'
53
+ return records if params[:length] == '-1'
56
54
 
57
- Tablets::Data::Processing::Paginate.new(params, columns).apply(records)
55
+ Tablets::Data::Processing::Paginate.apply(params, columns, records)
58
56
  end
59
57
  end
60
58
  end
data/lib/tablets/data.rb CHANGED
@@ -1,3 +1,5 @@
1
+ require 'active_support/core_ext/object'
2
+
1
3
  require 'tablets/data/query'
2
4
 
3
5
  module Tablets
@@ -26,11 +28,16 @@ module Tablets
26
28
 
27
29
  # Initializes query with concretized relation.
28
30
  def query
29
- @query ||= Tablets::Data::Query.new(tablet.relation(params[:params]),
31
+ @query ||= Tablets::Data::Query.new(tablet.relation(relation_params),
30
32
  params,
31
33
  tablet.columns)
32
34
  end
33
35
 
36
+ # Relation params. Empty hash by default.
37
+ def relation_params
38
+ params[:params] || {}
39
+ end
40
+
34
41
  # Fetching records and applies process tablet callback on it.
35
42
  def records
36
43
  @records ||= tablet.process(query.fetch)
@@ -1,3 +1,5 @@
1
+ require 'active_support/core_ext/object'
2
+
1
3
  require 'tablets/engine'
2
4
 
3
5
  module Tablets
@@ -1,3 +1,5 @@
1
+ require 'active_support/core_ext/object'
2
+
1
3
  module Tablets
2
4
  module Utils
3
5
  # Config utility. Allows to write configs in declarative form.
@@ -1,3 +1,3 @@
1
1
  module Tablets
2
- VERSION = '0.3.3'
2
+ VERSION = '0.3.4'
3
3
  end
@@ -3,11 +3,11 @@ require 'spec_helper'
3
3
  require 'tablets/data/processing/base'
4
4
 
5
5
  RSpec.describe Tablets::Data::Processing::Base do
6
- subject { Tablets::Data::Processing::Base.new(params, columns) }
6
+ subject { described_class.new(params, columns) }
7
7
 
8
- let(:relation) { 'relation' }
9
- let(:params) { 'params' }
10
- let(:columns) { 'columns' }
8
+ let(:relation) { :relation }
9
+ let(:params) { :params }
10
+ let(:columns) { :columns }
11
11
 
12
12
  describe '#apply' do
13
13
  it 'raises not implemented error' do
@@ -16,4 +16,12 @@ RSpec.describe Tablets::Data::Processing::Base do
16
16
  end.to raise_error(NotImplementedError)
17
17
  end
18
18
  end
19
+
20
+ describe '.apply' do
21
+ it 'raises not implemented error' do
22
+ expect do
23
+ described_class.apply(params, columns, relation)
24
+ end.to raise_error(NotImplementedError)
25
+ end
26
+ end
19
27
  end
@@ -0,0 +1,9 @@
1
+ require 'spec_helper'
2
+
3
+ require 'tablets/data/processing/filter'
4
+
5
+ RSpec.describe Tablets::Data::Processing::Filter do
6
+ subject { described_class.new(params, columns) }
7
+
8
+ let(:columns) { :columns }
9
+ end
@@ -0,0 +1,9 @@
1
+ require 'spec_helper'
2
+
3
+ require 'tablets/data/processing/order'
4
+
5
+ RSpec.describe Tablets::Data::Processing::Order do
6
+ subject { described_class.new(params, columns) }
7
+
8
+ let(:columns) { :columns }
9
+ end
@@ -3,11 +3,11 @@ require 'spec_helper'
3
3
  require 'tablets/data/processing/paginate'
4
4
 
5
5
  RSpec.describe Tablets::Data::Processing::Paginate do
6
- subject { Tablets::Data::Processing::Paginate.new(params, columns) }
6
+ subject { described_class.new(params, columns) }
7
7
 
8
8
  let(:relation) { double }
9
9
  let(:params) { { start: start, length: length } }
10
- let(:columns) { 'columns' }
10
+ let(:columns) { :columns }
11
11
 
12
12
  describe '#apply' do
13
13
  before do
@@ -0,0 +1,112 @@
1
+ require 'spec_helper'
2
+
3
+ require 'tablets/data/query'
4
+
5
+ RSpec.describe Tablets::Data::Query do
6
+ subject { described_class.new(relation, params, columns) }
7
+
8
+ let(:relation) { 'relation' }
9
+ let(:params) { {} }
10
+ let(:columns) { :columns }
11
+
12
+ before do
13
+ allow(Tablets::Data::Processing::Order).to receive(:apply)
14
+ .with(params, columns, relation).and_return(relation)
15
+ allow(Tablets::Data::Processing::Filter).to receive(:apply)
16
+ .with(params, columns, relation).and_return(relation)
17
+ allow(Tablets::Data::Processing::Paginate).to receive(:apply)
18
+ .with(params, columns, relation).and_return(relation)
19
+ end
20
+
21
+ describe '#fetch' do
22
+ let!(:result) { subject.fetch }
23
+
24
+ let(:params) { { order: :order, search: :search } }
25
+
26
+ it 'returns relation' do
27
+ expect(result).to eq(relation)
28
+ end
29
+
30
+ it 'applies order' do
31
+ expect(Tablets::Data::Processing::Order).to have_received(:apply)
32
+ .with(params, columns, relation)
33
+ end
34
+
35
+ it 'applies filter' do
36
+ expect(Tablets::Data::Processing::Filter).to have_received(:apply)
37
+ .with(params, columns, relation)
38
+ end
39
+
40
+ it 'applies paginate' do
41
+ expect(Tablets::Data::Processing::Paginate).to have_received(:apply)
42
+ .with(params, columns, relation)
43
+ end
44
+
45
+ context 'without order' do
46
+ let(:params) { { search: :search } }
47
+
48
+ it 'not applies order' do
49
+ expect(Tablets::Data::Processing::Order).to_not have_received(:apply)
50
+ end
51
+ end
52
+
53
+ context 'without search' do
54
+ let(:params) { { order: :order } }
55
+
56
+ it 'not applies order' do
57
+ expect(Tablets::Data::Processing::Filter).to_not have_received(:apply)
58
+ end
59
+ end
60
+
61
+ context 'with negative length' do
62
+ let(:params) { { length: '-1' } }
63
+
64
+ it 'not applies order' do
65
+ expect(Tablets::Data::Processing::Paginate).to_not have_received(:apply)
66
+ end
67
+ end
68
+ end
69
+
70
+ describe '#total' do
71
+ let(:total) { :total }
72
+
73
+ before do
74
+ allow(relation).to receive(:count).with(:all).and_return(total)
75
+ end
76
+
77
+ let!(:result) { subject.total }
78
+
79
+ it 'returns total' do
80
+ expect(result).to eq(total)
81
+ end
82
+ end
83
+
84
+ describe '#filtered' do
85
+ let(:params) { { search: :search } }
86
+
87
+ let(:total) { :total }
88
+
89
+ before do
90
+ allow(relation).to receive(:count).with(:all).and_return(total)
91
+ end
92
+
93
+ let!(:result) { subject.filtered }
94
+
95
+ it 'applies filter' do
96
+ expect(Tablets::Data::Processing::Filter).to have_received(:apply)
97
+ .with(params, columns, relation)
98
+ end
99
+
100
+ context 'without search' do
101
+ let(:params) { {} }
102
+
103
+ it 'not applies order' do
104
+ expect(Tablets::Data::Processing::Filter).to_not have_received(:apply)
105
+ end
106
+ end
107
+
108
+ it 'returns total' do
109
+ expect(result).to eq(total)
110
+ end
111
+ end
112
+ end
@@ -0,0 +1,7 @@
1
+ require 'spec_helper'
2
+
3
+ require 'tablets/data'
4
+
5
+ RSpec.describe Tablets::Data do
6
+ subject { described_class.new(tablet, params) }
7
+ end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ require 'tablets/global/configurator'
4
+
5
+ RSpec.describe Tablets::Global::Configurator do
6
+ subject { Object.new.tap { |object| object.extend(described_class) } }
7
+
8
+ describe '#setup' do
9
+ it 'yields self' do
10
+ expect do |expect_block|
11
+ subject.setup(&expect_block)
12
+ end.to yield_with_args(subject)
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,71 @@
1
+ require 'spec_helper'
2
+
3
+ require 'tablets'
4
+
5
+ require 'tablets/global/loader'
6
+
7
+ RSpec.describe Tablets::Global::Loader do
8
+ subject { Object.new.tap { |object| object.extend(described_class) } }
9
+
10
+ def self.set_tablets
11
+ before do
12
+ subject.instance_variable_set(:@tablets, yield)
13
+ end
14
+ end
15
+
16
+ def tablets
17
+ subject.instance_variable_get(:@tablets)
18
+ end
19
+
20
+ describe '#unload!' do
21
+ set_tablets { {} }
22
+
23
+ before { subject.unload! }
24
+
25
+ it 'sets tablets to nil' do
26
+ expect(tablets).to be_nil
27
+ end
28
+ end
29
+
30
+ describe '#loaded?' do
31
+ context 'if tablets is not nil' do
32
+ set_tablets { {} }
33
+
34
+ it 'returns true' do
35
+ expect(subject.loaded?).to eq(true)
36
+ end
37
+ end
38
+
39
+ context 'if tablets is nil' do
40
+ it 'returns false' do
41
+ expect(subject.loaded?).to eq(false)
42
+ end
43
+ end
44
+ end
45
+
46
+ describe '#load!' do
47
+ let(:files) { %w(file1 file2) }
48
+ let(:tablets_dir) { 'dir' }
49
+
50
+ before do
51
+ allow(Tablets).to receive(:tablets_dir).and_return(tablets_dir)
52
+ allow(Dir).to receive(:[]).and_return(files)
53
+ end
54
+
55
+ before do
56
+ allow(subject).to receive(:load)
57
+ end
58
+
59
+ before { subject.load! }
60
+
61
+ it 'sets tablets to empty hash' do
62
+ expect(tablets).to eq({})
63
+ end
64
+
65
+ it 'loads each file' do
66
+ files.each do |file|
67
+ expect(subject).to have_received(:load).with(file)
68
+ end
69
+ end
70
+ end
71
+ end
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  require 'tablets/global/store'
4
4
 
5
5
  RSpec.describe Tablets::Global::Store do
6
- subject { Object.new.tap { |object| object.extend(Tablets::Global::Store) } }
6
+ subject { Object.new.tap { |object| object.extend(described_class) } }
7
7
 
8
8
  describe '#register' do
9
9
  let(:name) { :posts }
@@ -1,10 +1,11 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  require 'tablets'
4
+
4
5
  require 'tablets/renderer'
5
6
 
6
7
  RSpec.describe Tablets::Renderer do
7
- subject { Tablets::Renderer.new(tablet, params) }
8
+ subject { described_class.new(tablet, params) }
8
9
 
9
10
  describe '#render' do
10
11
  let(:tablet) { double }
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  require 'tablets/utils/config'
4
4
 
5
5
  RSpec.describe Tablets::Utils::Config do
6
- subject { Tablets::Utils::Config.new(&block) }
6
+ subject { described_class.new(&block) }
7
7
 
8
8
  def hash
9
9
  subject.instance_eval { @hash }
@@ -38,6 +38,24 @@ RSpec.describe Tablets::Utils::Config do
38
38
  end
39
39
  end
40
40
 
41
+ describe '#has?' do
42
+ context 'if value exists' do
43
+ let(:block) { proc { var('val') } }
44
+
45
+ it 'returns true' do
46
+ expect(subject.has?(:var)).to eq(true)
47
+ end
48
+ end
49
+
50
+ context 'if value not exists' do
51
+ let(:block) { nil }
52
+
53
+ it 'returns false' do
54
+ expect(subject.has?(:var)).to eq(false)
55
+ end
56
+ end
57
+ end
58
+
41
59
  describe '#get' do
42
60
  context 'if value exists' do
43
61
  let(:block) { proc { var('val') } }
@@ -1,10 +1,11 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  require 'tablets'
4
+
4
5
  require 'tablets/view_helpers'
5
6
 
6
7
  RSpec.describe Tablets::ViewHelpers do
7
- subject { Object.new.tap { |object| object.extend(Tablets::ViewHelpers) } }
8
+ subject { Object.new.tap { |object| object.extend(described_class) } }
8
9
 
9
10
  describe '#render_tablet' do
10
11
  let(:name) { :name }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tablets
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.3.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yevhen Shemet
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-26 00:00:00.000000000 Z
11
+ date: 2015-06-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -131,7 +131,13 @@ files:
131
131
  - lib/tablets/version.rb
132
132
  - lib/tablets/view_helpers.rb
133
133
  - spec/lib/tablets/data/processing/base_spec.rb
134
+ - spec/lib/tablets/data/processing/filter_spec.rb
135
+ - spec/lib/tablets/data/processing/order_spec.rb
134
136
  - spec/lib/tablets/data/processing/paginate_spec.rb
137
+ - spec/lib/tablets/data/query_spec.rb
138
+ - spec/lib/tablets/data_spec.rb
139
+ - spec/lib/tablets/global/configurator_spec.rb
140
+ - spec/lib/tablets/global/loader_spec.rb
135
141
  - spec/lib/tablets/global/store_spec.rb
136
142
  - spec/lib/tablets/renderer_spec.rb
137
143
  - spec/lib/tablets/utils/config_spec.rb
@@ -157,15 +163,21 @@ required_rubygems_version: !ruby/object:Gem::Requirement
157
163
  version: '0'
158
164
  requirements: []
159
165
  rubyforge_project:
160
- rubygems_version: 2.4.7
166
+ rubygems_version: 2.4.6
161
167
  signing_key:
162
168
  specification_version: 4
163
169
  summary: Wrapper around jquery-datatables.
164
170
  test_files:
171
+ - spec/lib/tablets/data_spec.rb
165
172
  - spec/lib/tablets/utils/config_spec.rb
166
173
  - spec/lib/tablets/view_helpers_spec.rb
167
174
  - spec/lib/tablets/renderer_spec.rb
168
175
  - spec/lib/tablets/data/processing/base_spec.rb
176
+ - spec/lib/tablets/data/processing/order_spec.rb
177
+ - spec/lib/tablets/data/processing/filter_spec.rb
169
178
  - spec/lib/tablets/data/processing/paginate_spec.rb
179
+ - spec/lib/tablets/data/query_spec.rb
180
+ - spec/lib/tablets/global/loader_spec.rb
170
181
  - spec/lib/tablets/global/store_spec.rb
182
+ - spec/lib/tablets/global/configurator_spec.rb
171
183
  - spec/spec_helper.rb