active_record_simple_execute 0.9.1 → 1.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: c0eceac39c7160f6176c6951721ab2eea654c308e6de1a5feb4ca26fd21badb9
4
- data.tar.gz: 1c134afe71506b1dea030060b44f659cd351ff1ca28bdbd95736b8e53a896a22
3
+ metadata.gz: a104f89547cb18fd208b3cd22043bfd185cb81109522fc90f9176ff92d341858
4
+ data.tar.gz: 6aa1b61f1acbabcbebc3deb7190b4fd24a1755774a9c005cc84645511b069e9e
5
5
  SHA512:
6
- metadata.gz: 6671f5c3f4cc84226b19c9613384ece86803854b0e4c943e31146aa34b49901a3afcd81ea24ccbc3437362ef71e54cdc9d58ab75877560e1ab5059b6b2a9f6cc
7
- data.tar.gz: 2fb5d735c43a0f25a57f51bfb5db6e8d946ae8a5e109f3b3776879f2f8ffe7b4ae2e37ca72d02baf2c8def971a9a30728a0f94bed26d97475484052a82d093b7
6
+ metadata.gz: da04345171c9cd13bee15de0f766ce34ffc8c8e356949a7bd8ae35a027feae5019c09b857ea441cc8a88fff1a66fe92b4c779b4c7a8a922316eea385afda2e69
7
+ data.tar.gz: 5f5e6f73d5e51b377e04e5a62bb06173004f33d1a4c3fac0c88f0296b0bb25ed8a23f2b5ecaa1b05df4589b86ce9562911e6935c66fe8b9d15fb21d55d5ee4a5
data/CHANGELOG.md CHANGED
@@ -1,11 +1,16 @@
1
1
  CHANGELOG
2
2
  ---------
3
3
 
4
- - Unreleased - [View Diff](https://github.com/westonganger/active_record_simple_execute/compare/v0.9.1...master)
4
+ - Unreleased - [View Diff](https://github.com/westonganger/active_record_simple_execute/compare/v1.0.0...master)
5
5
  * Nothing yet
6
6
 
7
- - v0.9.1 - [View Diff](https://github.com/westonganger/active_record_simple_execute/compare/v0.9.0...v0.9.1)
8
- * [#1](https://github.com/westonganger/active_sort_order/pull/1) - Utilize active_record lazy loading
7
+ - v1.0.0 - Oct 17, 2024 - [View Diff](https://github.com/westonganger/active_record_simple_execute/compare/v0.9.1...v1.0.0)
8
+ * [#8](https://github.com/westonganger/active_record_simple_execute/pull/8) - Allow usage with different Active Record database connections
9
+ * [#7](https://github.com/westonganger/active_record_simple_execute/pull/7) - Drop support for Rails 5.1 and below
10
+ * [#5](https://github.com/westonganger/active_record_simple_execute/pull/5) - Switch from using Active Record `execute` method to `exec_query` method for better memory management
11
+
12
+ - v0.9.1 - Feb 13, 2023 - [View Diff](https://github.com/westonganger/active_record_simple_execute/compare/v0.9.0...v0.9.1)
13
+ * [#1](https://github.com/westonganger/active_record_simple_execute/pull/1) - Utilize active_record lazy loading
9
14
 
10
15
  - v0.9.0 - May 20, 2021 - [View Diff](https://github.com/westonganger/active_record_simple_execute/compare/1546ce4...v0.9.0)
11
16
  * Initial Release
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # ActiveRecord Simple Execute
2
2
 
3
3
  <a href="https://badge.fury.io/rb/active_record_simple_execute" target="_blank"><img height="21" style='border:0px;height:21px;' border='0' src="https://badge.fury.io/rb/active_record_simple_execute.svg" alt="Gem Version"></a>
4
- <a href='https://github.com/westonganger/active_record_simple_execute/actions' target='_blank'><img src="https://github.com/westonganger/active_record_simple_execute/workflows/Tests/badge.svg" style="max-width:100%;" height='21' style='border:0px;height:21px;' border='0' alt="CI Status"></a>
4
+ <a href='https://github.com/westonganger/active_record_simple_execute/actions' target='_blank'><img src="https://github.com/westonganger/active_record_simple_execute/actions/workflows/test.yml/badge.svg?branch=master" style="max-width:100%;" height='21' style='border:0px;height:21px;' border='0' alt="CI Status"></a>
5
5
  <a href='https://rubygems.org/gems/active_record_simple_execute' target='_blank'><img height='21' style='border:0px;height:21px;' src='https://img.shields.io/gem/dt/active_record_simple_execute?color=brightgreen&label=Rubygems%20Downloads' border='0' alt='RubyGems Downloads' /></a>
6
6
 
7
7
  Sanitize and Execute your raw SQL queries in ActiveRecord and Rails with a much more intuitive and shortened syntax.
@@ -9,64 +9,95 @@ Sanitize and Execute your raw SQL queries in ActiveRecord and Rails with a much
9
9
  # Installation
10
10
 
11
11
  ```ruby
12
- gem 'active_record_simple_execute'
12
+ gem "active_record_simple_execute"
13
13
  ```
14
14
 
15
15
  ## Comparison with Plain ActiveRecord
16
16
 
17
17
  As seen here using `simple_execute` is much easier to remember than all the hoops plain ActiveRecord makes you jump through.
18
18
 
19
- ### Using Simple Execute
19
+ ### Using `simple_execute`
20
20
  ```ruby
21
21
  sql_str = <<~SQL.squish
22
22
  SELECT * FROM orders
23
- FROM orders
23
+ FROM orders
24
24
  WHERE orders.company_id = :company_id AND orders.updated_by_user_id = :user_id
25
25
  SQL
26
26
 
27
- records = ActiveRecord::Base.simple_execute(sql_str, company_id: @company.id, user_id: @user.id)
27
+ records = ActiveRecord::Base.connection.simple_execute(sql_str, company_id: @company.id, user_id: @user.id)
28
+ # OR use the convenience method excluding the connection portion
29
+ # ActiveRecord::Base.simple_execute(...)
28
30
  ```
29
31
 
30
- ### Using Plain ActiveRecord Syntax
32
+ ### Using original ActiveRecord `exec_query` method
31
33
  ```ruby
32
34
  sql_str = <<~SQL.squish
33
- SELECT *
34
- FROM orders
35
+ SELECT *
36
+ FROM orders
35
37
  WHERE orders.company_id = :company_id AND orders.updated_by_user_id = :user_id
36
38
  SQL
37
39
 
38
- ### must use send because this method is private is Rails 5.1 only, Public in 5.0 and 5.2
39
40
  sanitized_sql = ActiveRecord::Base.sanitize_sql_array([sql_str, company_id: @company.id, user_id: @user.id])
40
41
 
41
- results = ActiveRecord::Base.connection.execute(sanitized_sql)
42
+ result = ActiveRecord::Base.connection.exec_query(sanitized_sql)
42
43
 
43
- if defined?(PG::Result) && results.is_a?(PG::Result)
44
- records = results.to_a
45
- elsif defined?(Mysql2::Result) && results.is_a?(Mysql2::Result)
44
+ records = result.to_a
45
+
46
+ return records
47
+ ```
48
+
49
+ ### Using original ActiveRecord `execute` method
50
+ ```ruby
51
+ sql_str = <<~SQL.squish
52
+ SELECT *
53
+ FROM orders
54
+ WHERE orders.company_id = :company_id AND orders.updated_by_user_id = :user_id
55
+ SQL
56
+
57
+ sanitized_sql = ActiveRecord::Base.sanitize_sql_array([sql_str, company_id: @company.id, user_id: @user.id])
58
+
59
+ result = ActiveRecord::Base.connection.execute(sanitized_sql)
60
+ # OR
61
+ result = ActiveRecord::Base.connection.exec_query(sanitized_sql)
62
+
63
+ if defined?(PG::Result) && result.is_a?(PG::Result)
64
+ records = result.to_a
65
+
66
+ result.clear # to prevent memory leak
67
+
68
+ elsif defined?(Mysql2::Result) && result.is_a?(Mysql2::Result)
46
69
  records = []
47
70
 
48
- results.each do |row|
71
+ result.each do |row|
49
72
  h = {}
50
73
 
51
- results.fields.each_with_index do |field,i|
74
+ result.fields.each_with_index do |field,i|
52
75
  h[field] = row[i]
53
76
  end
54
77
 
55
78
  records << h
56
79
  end
80
+
57
81
  else
58
- records = results
82
+ records = result
59
83
  end
60
84
 
61
85
  return records
62
86
  ```
63
87
 
64
- # Contributing
88
+ # Testing
65
89
 
66
- We test multiple versions of `Rails` using the `appraisal` gem. Please use the following steps to test using `appraisal`.
90
+ ```
91
+ bundle exec rake test
92
+ ```
93
+
94
+ We can locally test different versions of Rails using `ENV['RAILS_VERSION']`
67
95
 
68
- 1. `bundle exec appraisal install`
69
- 2. `bundle exec appraisal rake test`
96
+ ```
97
+ export RAILS_VERSION=7.0
98
+ bundle install
99
+ bundle exec rake test
100
+ ```
70
101
 
71
102
  For quicker feedback during gem development or debugging feel free to use the provided `rake console` task. It is defined within the [`Rakefile`](./Rakefile).
72
103
 
data/Rakefile CHANGED
@@ -10,12 +10,3 @@ Rake::TestTask.new(:test) do |t|
10
10
  end
11
11
 
12
12
  task default: [:test]
13
-
14
- task :console do
15
- require 'active_record_simple_execute'
16
-
17
- require 'test/dummy_app/app/models/post'
18
-
19
- require 'irb'
20
- binding.irb
21
- end
@@ -1,5 +1,3 @@
1
1
  module ActiveRecordSimpleExecute
2
-
3
- VERSION = "0.9.1".freeze
4
-
2
+ VERSION = "1.0.0".freeze
5
3
  end
@@ -4,33 +4,22 @@ require "active_support/lazy_load_hooks"
4
4
 
5
5
  ActiveSupport.on_load(:active_record) do
6
6
 
7
- ActiveRecord::Base.class_eval do
8
- def self.simple_execute(sql_str, **sql_vars)
9
- ### must use send because this method is private is Rails 5.1 only, Public in 5.0 and 5.2
10
- sanitized_sql = ActiveRecord::Base.send(:sanitize_sql_array, [sql_str, **sql_vars])
11
-
12
- results = ActiveRecord::Base.connection.execute(sanitized_sql)
13
-
14
- if defined?(PG::Result) && results.is_a?(PG::Result)
15
- records = results.to_a
16
- elsif defined?(Mysql2::Result) && results.is_a?(Mysql2::Result)
17
- records = []
18
-
19
- results.each do |row|
20
- h = {}
7
+ ActiveRecord::ConnectionAdapters::DatabaseStatements.module_eval do
8
+ def simple_execute(sql_str, **sql_vars)
9
+ sanitized_sql = ActiveRecord::Base.sanitize_sql_array([sql_str, **sql_vars])
21
10
 
22
- results.fields.each_with_index do |field,i|
23
- h[field] = row[i]
24
- end
11
+ query_result = exec_query(sanitized_sql)
25
12
 
26
- records << h
27
- end
28
- else
29
- records = results
30
- end
13
+ records = query_result.to_a
31
14
 
32
15
  return records
33
16
  end
34
17
  end
35
18
 
19
+ ActiveRecord::Base.class_eval do
20
+ def self.simple_execute(sql_str, **sql_vars)
21
+ self.connection.simple_execute(sql_str, **sql_vars)
22
+ end
23
+ end
24
+
36
25
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_record_simple_execute
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Weston Ganger
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-02-14 00:00:00.000000000 Z
11
+ date: 2024-10-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '3.2'
19
+ version: '5.2'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '3.2'
26
+ version: '5.2'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -66,48 +66,6 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
- - !ruby/object:Gem::Dependency
70
- name: sqlite3
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: '0'
83
- - !ruby/object:Gem::Dependency
84
- name: rails
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: '0'
97
- - !ruby/object:Gem::Dependency
98
- name: appraisal
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ">="
102
- - !ruby/object:Gem::Version
103
- version: '0'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - ">="
109
- - !ruby/object:Gem::Version
110
- version: '0'
111
69
  - !ruby/object:Gem::Dependency
112
70
  name: warning
113
71
  requirement: !ruby/object:Gem::Requirement
@@ -150,14 +108,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
150
108
  requirements:
151
109
  - - ">="
152
110
  - !ruby/object:Gem::Version
153
- version: 1.9.3
111
+ version: '0'
154
112
  required_rubygems_version: !ruby/object:Gem::Requirement
155
113
  requirements:
156
114
  - - ">="
157
115
  - !ruby/object:Gem::Version
158
116
  version: '0'
159
117
  requirements: []
160
- rubygems_version: 3.3.7
118
+ rubygems_version: 3.4.22
161
119
  signing_key:
162
120
  specification_version: 4
163
121
  summary: Sanitize and Execute your raw SQL queries in ActiveRecord and Rails with