tablets 0.3.6 → 0.3.7

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.
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