sql-builder 0.2.0 → 0.3.0

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
  SHA256:
3
- metadata.gz: 150ba78258f5b3cb152890b76982b01652a5a779bfd4aecfbb1591e0ab7820ad
4
- data.tar.gz: 726c4b1b6b4d7a522d02848059285529c924ad6109b367bd2fe42cb77f97f26e
3
+ metadata.gz: 5bcc084c0688d944d96e0ee1714b177d32c879cac4d1ef3fae67cd05ada5a47b
4
+ data.tar.gz: 5d31a28f462ba242b1d473bda0305796c6b9862c5b2b4e4f94c1861fb03579ab
5
5
  SHA512:
6
- metadata.gz: d912e64843705a78564aed481d87f1dd00959cd80b33583f7cd7b9cdb12b4cf7bf0693d3f9041972a0e00deeb79037905fef68d733aac1e20958e67119c8aca5
7
- data.tar.gz: 338b7ae715a9c01144a228d5e752db1007fb21504463b58ff69fc9a5201a2d032b317f817b236f628adad540cea113b3bfb3143086ee485bf91c90b1798cf741
6
+ metadata.gz: f3adb6c21540df083abf0c1480c314acae8362191e0389cba9318ca86d716f286eaa02f9a600b369228d341e0984e297b8cc699d5df9ded21938d596f1752863
7
+ data.tar.gz: 5cd5ad219554c76dcf07561cbf094d3ab5306a531e6b3414461bbc8b376e4f850328602b8ab0af9275fab0b87aa8dc2071127309e8ebc1ce2c4424120e8d20ea
data/README.md CHANGED
@@ -47,7 +47,7 @@ Add the conditions by request params:
47
47
 
48
48
  ```ruby
49
49
  query.where("age >= ?", params[:age]) unless params[:age].blank?
50
- query.where("status = ?", params[:status]) unless params[:status].nil?
50
+ query.where(status: params[:status]) unless params[:status].nil?
51
51
  if params[:created_at_from] && params[:created_at_to]
52
52
  query.where("created_at >= ? and created_at <= ?", params[:created_at_from], params[:created_at_to])
53
53
  end
@@ -67,7 +67,7 @@ ORDER BY id desc LIMIT 100 OFFSET 0
67
67
 
68
68
  ```rb
69
69
  query = SQLBuilder.new("select user_id, name, count(ip) as ip_count from user_visits")
70
- query.where("status = ?", 1).where("created_at > ?", params[:created_at])
70
+ query.where(status: 1).where("created_at > ?", params[:created_at])
71
71
  query.group("user_id").group("name").having("count(ip) > 2")
72
72
  query.to_sql
73
73
  ```
@@ -12,7 +12,7 @@ require "active_record"
12
12
  # .to_sql
13
13
  class SQLBuilder
14
14
  attr_reader :sql, :conditions, :havings, :orders, :groups, :limit_options, :page_options
15
- delegate :sanitize_sql, :sanitize_sql_for_order, to: ActiveRecord::Base
15
+ delegate :sanitize_sql_array, :sanitize_sql_for_order, to: ActiveRecord::Base
16
16
 
17
17
  # Create a new SQLBuilder
18
18
  #
@@ -44,7 +44,7 @@ class SQLBuilder
44
44
  query_scope = condition.first
45
45
  @conditions = query_scope.conditions
46
46
  else
47
- conditions << sanitize_sql(condition)
47
+ conditions << sanitize_sql_for_assignment(condition)
48
48
  end
49
49
 
50
50
  self
@@ -108,7 +108,7 @@ class SQLBuilder
108
108
  # # => "GROUP BY name HAVING count(name) > 5"
109
109
  #
110
110
  def having(*condition)
111
- havings << sanitize_sql(condition)
111
+ havings << sanitize_sql_for_assignment(condition)
112
112
  self
113
113
  end
114
114
 
@@ -137,16 +137,16 @@ class SQLBuilder
137
137
  def to_sql
138
138
  sql_parts = [sql]
139
139
  if conditions.any?
140
- sql_parts << "WHERE " + conditions.join(" AND ")
140
+ sql_parts << "WHERE " + conditions.flatten.join(" AND ")
141
141
  end
142
142
  if orders.any?
143
- sql_parts << "ORDER BY " + orders.join(", ")
143
+ sql_parts << "ORDER BY " + orders.flatten.join(", ")
144
144
  end
145
145
  if groups.any?
146
- sql_parts << "GROUP BY " + groups.join(", ")
146
+ sql_parts << "GROUP BY " + groups.flatten.join(", ")
147
147
  end
148
148
  if havings.any?
149
- sql_parts << "HAVING " + havings.join(" AND ")
149
+ sql_parts << "HAVING " + havings.flatten.join(" AND ")
150
150
  end
151
151
  if limit_options[:limit]
152
152
  sql_parts << "LIMIT " + limit_options[:limit].to_s
@@ -156,4 +156,22 @@ class SQLBuilder
156
156
  end
157
157
  sql_parts.join(" ")
158
158
  end
159
+
160
+ private
161
+
162
+ # https://api.rubyonrails.org/classes/ActiveRecord/Sanitization/ClassMethods.html#method-i-sanitize_sql_for_assignment
163
+ def sanitize_sql_for_assignment(assignments)
164
+ case assignments.first
165
+ when Hash; sanitize_sql_hash_for_assignment(assignments.first)
166
+ else
167
+ sanitize_sql_array(assignments)
168
+ end
169
+ end
170
+
171
+ # https://api.rubyonrails.org/classes/ActiveRecord/Sanitization/ClassMethods.html#method-i-sanitize_sql_hash_for_assignment
172
+ def sanitize_sql_hash_for_assignment(attrs)
173
+ attrs.map do |attr, value|
174
+ sanitize_sql_array(["#{attr} = ?", value])
175
+ end
176
+ end
159
177
  end
@@ -1,3 +1,3 @@
1
1
  class SQLBuilder
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sql-builder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jason Lee
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-01-06 00:00:00.000000000 Z
11
+ date: 2020-04-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord