tablets 0.3.6 → 0.3.7

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: 2d046e5a6fa2f522b63f13c69f724ff82473387c
4
- data.tar.gz: 8587012faa26256221152719f81b85456d8621de
3
+ metadata.gz: fabd1f1477cd295cede4c19f5401f3200a19dd2d
4
+ data.tar.gz: 7dbfdf2ae6f5e4ee8c7fc40c351ef4b1130e3d50
5
5
  SHA512:
6
- metadata.gz: aa268e7dc0dd793dfcacbbfefef99d90889f37664edb250745caa05d81a8fe00b88bc66d26a60c96f9e8df5e8052f783984efddfb4a02a84215bd75f6d2ac871
7
- data.tar.gz: 884625f076e9e455246648e4d8858c8677940acedaa6dc9b62d9468fbf40fcc0b465bcbb4662a6ae322abbaca01340e2433370a467ac9ed815ec61884c256b7b
6
+ metadata.gz: 96286ea703337dd2e0123835c8fc9a41c35455a1c3b1680e178ec0bcab57d1292fd91cce2e0026e15c96c07ad6e962947bdfb461568741cd38107e7d6d9f1da3
7
+ data.tar.gz: 3ea819cbd7b92d3d0ffb38f9ac3bc77333877e7515c9af05df0d9bcb5a56d06525f97461eb3df1e472613ca682ac3c7d0e3e50120be3c6c8739efdee2c4386a3
data/README.md CHANGED
@@ -58,7 +58,13 @@ Tablets.register :posts do
58
58
  options: { className: 'post-title' }
59
59
  }, {
60
60
  title: 'User',
61
- data: proc { |user, controller| user == controller.current_user ? 'It is you' : [user.first_name, user.last_name].compact.join(' ') },
61
+ data: proc do |post, controller|
62
+ if post.user == controller.current_user
63
+ 'It is you'
64
+ else
65
+ [post.user.first_name, post.user.last_name].compact.join(' ')
66
+ end
67
+ end,
62
68
  order: ['users.first_name', 'users.last_name'],
63
69
  search: ['users.first_name', 'users.last_name']
64
70
  }]
@@ -1,6 +1,6 @@
1
1
  require 'active_support/core_ext/object'
2
2
 
3
- require 'tablets/utils/arel'
3
+ require 'tablets/utils/search_condition'
4
4
 
5
5
  require 'tablets/data/processing/base'
6
6
 
@@ -28,10 +28,8 @@ module Tablets
28
28
  # Builds search conditions.
29
29
  def build_conditions_for(query)
30
30
  query.split(' ').map do |value|
31
- searchable_columns.map do |column|
32
- search_condition(column, value)
33
- end.reduce(:or)
34
- end.reduce(:and)
31
+ '(' + search_conditions(value) + ')'
32
+ end.join(' AND ')
35
33
  end
36
34
 
37
35
  # Returns searchable columns.
@@ -39,9 +37,11 @@ module Tablets
39
37
  columns.map { |column| column[:search] }.flatten.compact
40
38
  end
41
39
 
42
- # Returs search condition.
43
- def search_condition(column, value)
44
- Tablets::Utils::Arel.column(column).matches("%#{value}%")
40
+ # Returs search conditions for each searchable column.
41
+ def search_conditions(value)
42
+ searchable_columns.map do |column|
43
+ Tablets::Utils::SearchCondition.build(column, value)
44
+ end.join(' OR ')
45
45
  end
46
46
  end
47
47
  end
@@ -0,0 +1,56 @@
1
+ module Tablets
2
+ module Utils
3
+ # Resposible for building database specific search conditions.
4
+ module SearchCondition
5
+ class << self
6
+ # Builds search condition for specific db type.
7
+ def build(column, query)
8
+ sanitize "(#{casted_column(column)} #{like} ?)", "%#{query}%"
9
+ end
10
+
11
+ private
12
+
13
+ # Sanitizes sql expression with params.
14
+ def sanitize(sql, *params)
15
+ ActiveRecord::Base.send(:sanitize_sql_array, [sql, *params])
16
+ end
17
+
18
+ # Casyt column to string.
19
+ def casted_column(column)
20
+ "CAST (#{quoted_column(column)} AS #{string_type})"
21
+ end
22
+
23
+ # Quotes column name.
24
+ def quoted_column(column)
25
+ column.split('.').map do |component|
26
+ ActiveRecord::Base.connection.quote_column_name component
27
+ end.join('.')
28
+ end
29
+
30
+ # Returns database specific like operator.
31
+ def like
32
+ case db_adapter
33
+ when :postgresql then 'ILIKE'
34
+ when :mysql2 then 'LIKE'
35
+ when :sqlite3 then 'LIKE'
36
+ end
37
+ end
38
+
39
+ # Returns database specific string type.
40
+ def string_type
41
+ case db_adapter
42
+ when :postgresql then 'VARCHAR'
43
+ when :mysql2 then 'CHAR'
44
+ when :sqlite3 then 'TEXT'
45
+ end
46
+ end
47
+
48
+ # Retrieves rails database adapter.
49
+ def db_adapter
50
+ @db_adapter ||=
51
+ ActiveRecord::Base.configurations[Rails.env]['adapter'].to_sym
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
@@ -1,3 +1,3 @@
1
1
  module Tablets
2
- VERSION = '0.3.6'
2
+ VERSION = '0.3.7'
3
3
  end
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.6
4
+ version: 0.3.7
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-07-14 00:00:00.000000000 Z
11
+ date: 2015-07-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -126,8 +126,8 @@ files:
126
126
  - lib/tablets/railtie.rb
127
127
  - lib/tablets/renderer.rb
128
128
  - lib/tablets/tablet.rb
129
- - lib/tablets/utils/arel.rb
130
129
  - lib/tablets/utils/config.rb
130
+ - lib/tablets/utils/search_condition.rb
131
131
  - lib/tablets/version.rb
132
132
  - lib/tablets/view_helpers.rb
133
133
  - spec/lib/tablets/data/processing/base_spec.rb
@@ -1,34 +0,0 @@
1
- module Tablets
2
- module Utils
3
- # Arel related utils.
4
- module Arel
5
- class << self
6
- # Casting arel column using db specific type.
7
- def column(column)
8
- model, column = column.split('.')
9
- model = model.singularize.titleize.gsub(/ /, '').constantize
10
-
11
- ::Arel::Nodes::NamedFunction.new(
12
- 'CAST', [model.arel_table[column.to_sym].as(typecast)]
13
- )
14
- end
15
-
16
- private
17
-
18
- # Returns database specific string type.
19
- def typecast
20
- case db_adapter
21
- when :postgresql then 'VARCHAR'
22
- when :mysql2 then 'CHAR'
23
- when :sqlite3 then 'TEXT'
24
- end
25
- end
26
-
27
- # Retrieves rails database adapter.
28
- def db_adapter
29
- ActiveRecord::Base.configurations[Rails.env]['adapter'].to_sym
30
- end
31
- end
32
- end
33
- end
34
- end