postgres_with 1.0.0 → 3.0.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: fbff15d0145d5eee85ae2e75eeaf6783ecd1cf8db0899ef905144feeca5026de
4
- data.tar.gz: 8afc9a9de9643ee41d720d8e79a2079d5fc1eb0e744e85a7b3225ce8411396c0
3
+ metadata.gz: 8b217641731e9827d5666b667849286d4699a078f64b6d0a0545fa853b128892
4
+ data.tar.gz: 7d4a05a5720fcc3b73d95ad78d58dbb6d914de316d8ba55baaa830a6b377208c
5
5
  SHA512:
6
- metadata.gz: f0be688754367f5514aac6868f99c73403b38900945bc553cf9cc436168c3a44739d5c28393d67ccb83cd58fb9615cb3810a77caf54c9e6695691342c762b7fe
7
- data.tar.gz: fb37ba76cadb929b1fe6b4eb0bdcfb101b43c5d505f3aaa22ccdf855c49722fc0f1889543d6919b0b866b4847488b5721dceddf3dead54be126b22af5b311ca6
6
+ metadata.gz: 240fd7dc24c95e2dc920f36125246c2d396cee28297f88e8d87ffb2ac3d4ddf65487fe2dbe8443353347f5f266aeda80a5669dc6933af05c3d9bb6b491f66358
7
+ data.tar.gz: 5f843c516f5491a142e0cde66ef0ed984c2f96223894a32a0d8a665363ed4167edd38fc887d29615402dbce9749925a38f571de0fc7c6edaa463835950c62688
@@ -1,11 +1,3 @@
1
1
  module ActiveRecord::Querying
2
2
  delegate :with, to: :all
3
-
4
- def from_cte(name, expression)
5
- table = Arel::Table.new(name)
6
-
7
- cte_proxy = CTEProxy.new(name, self)
8
- relation = ActiveRecord::Relation.new cte_proxy, cte_proxy.arel_table
9
- relation.with name => expression
10
- end
11
3
  end
@@ -81,24 +81,15 @@ module ActiveRecord
81
81
  with_statements = with_values.flat_map do |with_value|
82
82
  case with_value
83
83
  when String
84
- with_value
84
+ Arel::Nodes::SqlLiteral.new(with_value)
85
85
  when Hash
86
- with_value.map do |name, expression|
87
- case expression
88
- when String
89
- select = Arel::Nodes::SqlLiteral.new "(#{expression})"
90
- when ActiveRecord::Relation, Arel::SelectManager
91
- select = Arel::Nodes::SqlLiteral.new "(#{expression.to_sql})"
92
- end
93
- if name.to_s.start_with?('_materialized_')
94
- name = name.gsub('_materialized_', '')
95
- Arel::Nodes::AsMaterialized.new Arel::Nodes::SqlLiteral.new("\"#{name}\""), select
96
- else
97
- Arel::Nodes::As.new Arel::Nodes::SqlLiteral.new("\"#{name}\""), select
98
- end
99
- end
86
+ build_arel_from_hash(with_value)
100
87
  when Arel::Nodes::As
101
88
  with_value
89
+ when Array
90
+ build_arel_from_array(with_value)
91
+ else
92
+ raise ArgumentError, "Unsupported argument type: #{with_value} #{with_value.class}"
102
93
  end
103
94
  end
104
95
  unless with_statements.empty?
@@ -112,6 +103,35 @@ module ActiveRecord
112
103
  arel
113
104
  end
114
105
 
106
+ def build_arel_from_hash(with_value)
107
+ with_value.map do |name, expression|
108
+ select = case expression
109
+ when String
110
+ Arel::Nodes::SqlLiteral.new("(#{expression})")
111
+ when ActiveRecord::Relation
112
+ expression.arel
113
+ when Arel::SelectManager
114
+ expression
115
+ end
116
+ if name.to_s.start_with?('_materialized_')
117
+ name = name.gsub('_materialized_', '')
118
+ table = Arel::Table.new(name)
119
+ Arel::Nodes::AsMaterialized.new(table, select)
120
+ else
121
+ table = Arel::Table.new(name)
122
+ Arel::Nodes::As.new(table, select)
123
+ end
124
+ end
125
+ end
126
+
127
+ def build_arel_from_array(array)
128
+ unless array.map(&:class).uniq == [Arel::Nodes::As]
129
+ raise ArgumentError, "Unsupported argument type: #{array} #{array.class}"
130
+ end
131
+
132
+ array
133
+ end
134
+
115
135
  alias_method :build_arel_without_extensions, :build_arel
116
136
  alias_method :build_arel, :build_arel_with_extensions
117
137
  end
@@ -1,4 +1,3 @@
1
1
  require 'active_record'
2
2
  require 'postgres_with/active_record/relation'
3
- require 'postgres_with/active_record/cte_proxy'
4
3
  require 'postgres_with/active_record/querying'
@@ -1,6 +1,6 @@
1
1
  module Arel
2
2
  module Visitors
3
- class ToSql < Arel::Visitors::Reduce
3
+ class ToSql < Arel::Visitors::Visitor
4
4
  def visit_Arel_Nodes_AsMaterialized o, collector
5
5
  collector = visit o.left, collector
6
6
  collector << " AS MATERIALIZED "
@@ -1,3 +1,2 @@
1
- require 'postgres_with/arel/visitors/depth_first'
2
1
  require 'postgres_with/arel/visitors/dot'
3
2
  require 'postgres_with/arel/visitors/to_sql'
@@ -1,3 +1,3 @@
1
1
  module PostgresWith
2
- VERSION = '1.0.0'
2
+ VERSION = '3.0.0'
3
3
  end
@@ -15,8 +15,7 @@ Gem::Specification.new do |gem|
15
15
  gem.require_paths = ["lib"]
16
16
  gem.version = PostgresWith::VERSION
17
17
 
18
- gem.add_dependency 'activerecord', '~> 5.0'
19
- gem.add_dependency 'arel', '>= 4.0'
18
+ gem.add_dependency 'activerecord', '>= 6.1'
20
19
 
21
20
  gem.add_development_dependency 'pg', '>= 0.13'
22
21
  end
metadata CHANGED
@@ -1,43 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: postgres_with
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Derrick Neier
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-12-08 00:00:00.000000000 Z
11
+ date: 2023-05-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '5.0'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '5.0'
27
- - !ruby/object:Gem::Dependency
28
- name: arel
29
15
  requirement: !ruby/object:Gem::Requirement
30
16
  requirements:
31
17
  - - ">="
32
18
  - !ruby/object:Gem::Version
33
- version: '4.0'
19
+ version: '6.1'
34
20
  type: :runtime
35
21
  prerelease: false
36
22
  version_requirements: !ruby/object:Gem::Requirement
37
23
  requirements:
38
24
  - - ">="
39
25
  - !ruby/object:Gem::Version
40
- version: '4.0'
26
+ version: '6.1'
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: pg
43
29
  requirement: !ruby/object:Gem::Requirement
@@ -65,7 +51,6 @@ files:
65
51
  - Rakefile
66
52
  - lib/postgres_with.rb
67
53
  - lib/postgres_with/active_record.rb
68
- - lib/postgres_with/active_record/cte_proxy.rb
69
54
  - lib/postgres_with/active_record/querying.rb
70
55
  - lib/postgres_with/active_record/relation.rb
71
56
  - lib/postgres_with/active_record/relation/merger.rb
@@ -74,7 +59,6 @@ files:
74
59
  - lib/postgres_with/arel/nodes.rb
75
60
  - lib/postgres_with/arel/nodes/as_materialized.rb
76
61
  - lib/postgres_with/arel/visitors.rb
77
- - lib/postgres_with/arel/visitors/depth_first.rb
78
62
  - lib/postgres_with/arel/visitors/dot.rb
79
63
  - lib/postgres_with/arel/visitors/to_sql.rb
80
64
  - lib/postgres_with/version.rb
@@ -83,7 +67,7 @@ homepage: https://github.com/dneier/postgres_with
83
67
  licenses:
84
68
  - MIT
85
69
  metadata: {}
86
- post_install_message:
70
+ post_install_message:
87
71
  rdoc_options: []
88
72
  require_paths:
89
73
  - lib
@@ -98,8 +82,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
98
82
  - !ruby/object:Gem::Version
99
83
  version: '0'
100
84
  requirements: []
101
- rubygems_version: 3.0.3
102
- signing_key:
85
+ rubygems_version: 3.1.6
86
+ signing_key:
103
87
  specification_version: 4
104
88
  summary: Extends ActiveRecord to handle PostgreSQL CTEs
105
89
  test_files: []
@@ -1,35 +0,0 @@
1
- class CTEProxy
2
- include ActiveRecord::Querying
3
- include ActiveRecord::Sanitization::ClassMethods
4
- include ActiveRecord::Reflection::ClassMethods
5
-
6
- attr_accessor :reflections, :current_scope
7
- attr_reader :connection, :arel_table
8
-
9
- def initialize(name, model)
10
- @name = name
11
- @arel_table = Arel::Table.new(name)
12
- @model = model
13
- @connection = model.connection
14
- @_reflections = {}
15
- end
16
-
17
- def name
18
- @name
19
- end
20
-
21
- def table_name
22
- name
23
- end
24
-
25
- delegate :column_names, :columns_hash, :model_name, :primary_key, :attribute_alias?,
26
- :aggregate_reflections, :instantiate, :type_for_attribute, :relation_delegate_class, to: :@model
27
-
28
- private
29
-
30
- def reflections
31
- @_reflections
32
- end
33
-
34
- alias _reflections reflections
35
- end
@@ -1,7 +0,0 @@
1
- module Arel
2
- module Visitors
3
- class DepthFirst < Arel::Visitors::Visitor
4
- alias :visit_Arel_Nodes_AsMaterialized :binary
5
- end
6
- end
7
- end