simple-sql 0.4.2 → 0.4.3

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: 54dcb90e07a18f552fcaa0f48a29ca7e60dd3888
4
- data.tar.gz: ea2093eb587de387ecff564f46f4c86857cd5e5c
3
+ metadata.gz: 5fcb2c111a8c6dc399a0f901c00c3bfcc03389d4
4
+ data.tar.gz: c49d0bed25fdeba1bda89b40ed26b750b3243e02
5
5
  SHA512:
6
- metadata.gz: 35493961c28b9140d4a18508acc4d7bfe28c638fff760418173cfee3f583ba643d427ca4670eb5c4dd2d812ea7c63347b9d37bb4c82ed560d73f1651a9845199
7
- data.tar.gz: 5978e812fec0928e0ff5dcf020409775c55406d20b635244a71a238a74fe094368bc02453106028d848594affbbcfde068982fb1b1a3b5db90c83e211cdc9d17
6
+ metadata.gz: aa83158d75e583871e008e6a7b04b29ad2c428aa4572dec3f97aebaf5a321c5d8fd0f0a50844290f618f0e49ef2317e2f8b49ac5b25602353b0e6eb93959dee7
7
+ data.tar.gz: 0a4b31bb554bc1db1e01bc6f52cf5bbc7d904721702e4f87d2e10458e59b0f3d6e56f9e77a2cd16e08dd34e80592ab05e61dee2a7a993339ea63f28b9a9e31b4
data/Gemfile CHANGED
@@ -1,4 +1,5 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
+ gem 'byebug'
3
4
  # Specify your gem's dependencies in {gemname}.gemspec
4
5
  gemspec
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- simple-sql (0.4.2)
4
+ simple-sql (0.4.3)
5
5
  pg (~> 0.20)
6
6
  pg_array_parser (~> 0)
7
7
 
@@ -24,6 +24,7 @@ GEM
24
24
  ast (2.3.0)
25
25
  awesome_print (0.4.0)
26
26
  builder (3.2.3)
27
+ byebug (10.0.2)
27
28
  concurrent-ruby (1.0.5)
28
29
  database_cleaner (1.6.2)
29
30
  diff-lcs (1.3)
@@ -78,6 +79,7 @@ PLATFORMS
78
79
  DEPENDENCIES
79
80
  activerecord (~> 4)
80
81
  awesome_print (~> 0)
82
+ byebug
81
83
  database_cleaner (~> 1)
82
84
  pg (= 0.20)
83
85
  rake (~> 11)
@@ -60,15 +60,17 @@ module Simple::SQL::ConnectionAdapter
60
60
  end
61
61
  end
62
62
 
63
+ private
64
+
63
65
  def add_page_info(scope, results)
64
66
  raise ArgumentError, "expect Array but get a #{results.class.name}" unless results.is_a?(Array)
65
67
  raise ArgumentError, "per must be > 0" unless scope.per > 0
66
68
 
67
69
  # optimization: add empty case (page <= 1 && results.empty?)
68
70
  if scope.page <= 1 && results.empty?
69
- Scope::PageInfo.attach(results, total_count: 0, per: scope.per, page: scope.page)
71
+ Scope::PageInfo.attach(results, total_count: 0, per: scope.per, page: 1)
70
72
  else
71
- sql = "SELECT COUNT(*) FROM (#{scope.to_sql(pagination: false)}) simple_sql_count"
73
+ sql = "SELECT COUNT(*) FROM (#{scope.order_by(nil).to_sql(pagination: false)}) simple_sql_count"
72
74
  total_count = ask(sql, *scope.args)
73
75
  Scope::PageInfo.attach(results, total_count: total_count, per: scope.per, page: scope.page)
74
76
  end
@@ -104,6 +106,8 @@ module Simple::SQL::ConnectionAdapter
104
106
  end
105
107
  end
106
108
 
109
+ public
110
+
107
111
  def resolve_type(ftype, fmod)
108
112
  @resolved_types ||= {}
109
113
  @resolved_types[[ftype, fmod]] ||= raw_connection.exec("SELECT format_type($1,$2)", [ftype, fmod]).getvalue(0, 0)
@@ -14,12 +14,14 @@ class Simple::SQL::Scope
14
14
 
15
15
  attr_reader :args
16
16
  attr_reader :per, :page
17
+ attr_reader :order_by_fragment
17
18
 
18
19
  # Build a scope object
19
20
  def initialize(sql)
20
21
  @sql = sql
21
22
  @args = []
22
23
  @filters = []
24
+ @order_by = nil
23
25
  end
24
26
 
25
27
  private
@@ -30,6 +32,7 @@ class Simple::SQL::Scope
30
32
  dupe.instance_variable_set :@filters, @filters.dup
31
33
  dupe.instance_variable_set :@per, @per
32
34
  dupe.instance_variable_set :@page, @page
35
+ dupe.instance_variable_set :@order_by_fragment, @order_by_fragment
33
36
  dupe
34
37
  end
35
38
 
@@ -49,8 +52,6 @@ class Simple::SQL::Scope
49
52
  duplicate.send(:where!, sql_fragment, arg, placeholder: placeholder)
50
53
  end
51
54
 
52
- private
53
-
54
55
  def where!(sql_fragment, arg = :__dummy__no__arg, placeholder: "?")
55
56
  if arg == :__dummy__no__arg
56
57
  @filters << sql_fragment
@@ -62,15 +63,11 @@ class Simple::SQL::Scope
62
63
  self
63
64
  end
64
65
 
65
- public
66
-
67
66
  # Set pagination
68
67
  def paginate(per:, page:)
69
68
  duplicate.send(:paginate!, per: per, page: page)
70
69
  end
71
70
 
72
- private
73
-
74
71
  def paginate!(per:, page:)
75
72
  @per = per
76
73
  @page = page
@@ -78,6 +75,16 @@ class Simple::SQL::Scope
78
75
  self
79
76
  end
80
77
 
78
+ # Adjust sort order
79
+ def order_by!(sql_fragment)
80
+ @order_by_fragment = sql_fragment
81
+ self
82
+ end
83
+
84
+ def order_by(sql_fragment)
85
+ duplicate.order_by!(sql_fragment)
86
+ end
87
+
81
88
  public
82
89
 
83
90
  # Is this a paginated scope?
@@ -94,11 +101,16 @@ class Simple::SQL::Scope
94
101
  unless active_filters.empty?
95
102
  sql += " WHERE (" + active_filters.join(") AND (") + ")"
96
103
  end
104
+
105
+ if order_by_fragment
106
+ sql += " ORDER BY #{order_by_fragment}"
107
+ end
108
+
97
109
  if pagination == :auto && @per && @page
98
110
  raise ArgumentError, "per must be > 0" unless @per > 0
99
111
  raise ArgumentError, "page must be > 0" unless @page > 0
100
112
 
101
- sql += "LIMIT #{@per} OFFSET #{(@page - 1) * @per}"
113
+ sql += " LIMIT #{@per} OFFSET #{(@page - 1) * @per}"
102
114
  end
103
115
 
104
116
  sql
@@ -1,5 +1,5 @@
1
1
  module Simple
2
2
  module SQL
3
- VERSION = "0.4.2"
3
+ VERSION = "0.4.3"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple-sql
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: 0.4.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - radiospiel
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2018-04-26 00:00:00.000000000 Z
12
+ date: 2018-04-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: pg_array_parser