yesql 0.1.6 → 0.1.7

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: 8f432f23ac16148c7439ec096a55c142c9985c537d06ef5ded891fb3178d3bbf
4
- data.tar.gz: b5d82c03933a0401d4b24a3fd48f00ea3864adfb8566db7f73c518714784cc54
3
+ metadata.gz: 180f75c325ecfc85f0d95e0d0a9422fcde92db273487bd19a7f03318c3206f16
4
+ data.tar.gz: '00429a2c7880d6546e82b5c530d097be14e524ed161a81d7c75b55c61f86f2b7'
5
5
  SHA512:
6
- metadata.gz: '084397cf83aa10faf2d724a0be1c11548e36dd515932c4552498c130a96efb044ca5f498aa30d4ec9c002ea1f36c4ec3699bcd4e6e2db2313b0b56fab9da2ae5'
7
- data.tar.gz: 70a91ebc63c23cd5c653351e728fc9c93207fd2583b1b72629d63717ba8e105c86318b016110f3040fd681b176da4d80db2807c40b4859ac3192c1a160901572
6
+ metadata.gz: 6a13774afd3b568927652026d00ac25d1b521c4eebcdcf4d2f4bc9d3de86652613322d449e30f276eabfebcb2aaa044bdc66abc3757f0f759533b0fcf5c53868
7
+ data.tar.gz: 3017fb1e072485f1c3d469517c1e326d74c32f2d14873a8801c78da8d0bb1f49459a81f6abc64b9c0fa1680dd8799cd12328496ec0077fa2823e24e204f80c1a
@@ -1,8 +1,20 @@
1
1
  require: rubocop-rspec
2
2
 
3
+ Metrics/BlockLength:
4
+ Exclude:
5
+ - spec/**/*_spec.rb
6
+ - spec/spec_helper.rb
7
+ - spec/yesql/shared/*
8
+
3
9
  RSpec/FilePath:
4
10
  Exclude:
5
11
  - spec/**/*_spec.rb
6
12
 
7
13
  RSpec/NestedGroups:
8
14
  Enabled: False
15
+
16
+ RSpec/ExampleLength:
17
+ Enabled: False
18
+
19
+ RSpec/BeforeAfterAll:
20
+ Enabled: False
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- yesql (0.1.5)
4
+ yesql (0.1.6)
5
5
  rails (>= 5.0)
6
6
 
7
7
  GEM
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'yesql/statement'
3
4
  require 'yesql/version'
4
5
  require 'yesql/config/configuration'
5
6
  require 'yesql/query/performer'
@@ -7,7 +8,6 @@ require 'yesql/errors/cache_expiration_error'
7
8
  require 'yesql/errors/file_path_does_not_exist_error'
8
9
  require 'yesql/errors/no_bindings_provided_error'
9
10
  require 'yesql/errors/output_argument_error'
10
- require 'yesql/bindings/binder'
11
11
 
12
12
  module YeSQL
13
13
  include ::YeSQL::Config
@@ -40,7 +40,7 @@ module YeSQL
40
40
  def execute(bindings, cache, file_path, output, options)
41
41
  ::YeSQL::Query::Performer.new(
42
42
  bindings: bindings,
43
- bind_statement: ::YeSQL::Bindings::Binder.bind_statement(file_path, bindings),
43
+ bind_statement: ::YeSQL::Statement.new(bindings, file_path),
44
44
  cache: cache,
45
45
  file_path: file_path,
46
46
  output: output,
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'yesql'
4
+ require 'yesql/common/adapter'
4
5
 
5
6
  module ::YeSQL
6
7
  module Bindings
@@ -1,13 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module YeSQL
3
+ require 'yesql/utils/read'
4
+
5
+ module ::YeSQL
4
6
  module Errors
5
7
  module NoBindingsProvidedError
6
8
  def validate_statement_bindings(binds, file_path)
7
9
  return unless statement_binds(file_path).size.positive?
8
10
 
9
11
  format(MESSAGE, renderable_statement_binds(file_path)).tap do |message|
10
- raise ArgumentError, message unless binds.is_a?(Hash) && !binds.empty?
12
+ raise ::ArgumentError, message unless binds.is_a?(::Hash) && !binds.empty?
11
13
  end
12
14
  end
13
15
 
@@ -32,9 +32,9 @@ module YeSQL
32
32
  # rubocop:enable Metrics/ParameterLists
33
33
 
34
34
  def call
35
- return modified_output if cache.empty?
35
+ return transformed_result if cache.empty?
36
36
 
37
- Rails.cache.fetch(cache_key, expires_in: expires_in) { modified_output }
37
+ Rails.cache.fetch(cache_key, expires_in: expires_in) { transformed_result }
38
38
  end
39
39
 
40
40
  private
@@ -49,8 +49,8 @@ module YeSQL
49
49
  :prepare,
50
50
  :rows
51
51
 
52
- def modified_output
53
- @modified_output ||=
52
+ def transformed_result
53
+ @transformed_result ||=
54
54
  ::YeSQL::Query::TransformResult.new(output: output, result: query_result).call
55
55
  end
56
56
 
@@ -61,13 +61,13 @@ module YeSQL
61
61
  prepare: prepare).call
62
62
  end
63
63
 
64
- def extractor
65
- ::YeSQL::Bindings::Extractor.new(bindings: named_bindings).call
66
- end
67
-
68
64
  def binds
69
65
  ::YeSQL::Bindings::Transformed.new(statement_binds: statement_binds(extractor)).call
70
66
  end
67
+
68
+ def extractor
69
+ ::YeSQL::Bindings::Extractor.new(bindings: named_bindings).call
70
+ end
71
71
  end
72
72
  end
73
73
  end
@@ -11,32 +11,35 @@ module ::YeSQL
11
11
 
12
12
  include ::YeSQL::Common::Adapter
13
13
 
14
- def initialize(binds:, bind_statement:, file_path:, prepare:)
14
+ def initialize(binds: [], bind_statement:, file_path:, prepare:)
15
15
  @binds = binds
16
16
  @bind_statement = bind_statement
17
+ @connection = ActiveRecord::Base.connection
17
18
  @file_path = file_path
18
19
  @prepare_option = prepare
19
20
  end
20
21
 
21
22
  def call
23
+ return view_result if view?
22
24
  return rails5_result if ::Rails::VERSION::MAJOR == 5 && mysql?
23
25
 
24
- exec_query(bind_statement, file_path, binds, prepare: prepare_option)
26
+ exec_query(bound, file_path, binds, prepare: prepare_option)
25
27
  end
26
28
 
27
29
  private
28
30
 
29
- attr_reader :binds, :bind_statement, :file_path, :prepare_option
31
+ attr_reader :binds, :bind_statement, :connection, :file_path, :prepare_option
30
32
 
31
- def_delegators(:connection, :exec_query, :raw_connection)
33
+ def_delegators(:bind_statement, :bound, :to_s, :view?)
34
+ def_delegators(:connection, :exec_query, :raw_connection)
32
35
  def_delegators(:raw_connection, :prepare)
33
36
 
34
- def connection
35
- ActiveRecord::Base.connection
37
+ def view_result
38
+ exec_query(bound)
36
39
  end
37
40
 
38
41
  def rails5_result
39
- prepare(bind_statement).execute(*binds)
42
+ prepare(bound).execute(*binds)
40
43
  end
41
44
  end
42
45
  end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'yesql'
4
+ require 'yesql/common/adapter'
4
5
  require 'forwardable'
5
6
 
6
7
  module ::YeSQL
@@ -8,20 +9,23 @@ module ::YeSQL
8
9
  class TransformResult
9
10
  extend Forwardable
10
11
 
12
+ include ::YeSQL::Common::Adapter
13
+
11
14
  def initialize(output:, result:)
12
15
  @output = output
13
16
  @result = result
14
17
  end
15
18
 
16
19
  def call
17
- if ::Rails::VERSION::MAJOR == 5
20
+ if ::Rails::VERSION::MAJOR == 5 && mysql?
18
21
  return columns if columns?
19
22
  return rows_values if rows?
23
+ return array_of_symbol_hashes if hash?
20
24
  end
21
25
 
22
26
  return result.public_send(output.to_sym) if columns? || rows?
23
27
 
24
- array_of_symbol_hashes
28
+ to_a.map(&:symbolize_keys)
25
29
  end
26
30
 
27
31
  private
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'forwardable'
4
+
5
+ require 'yesql/utils/read'
6
+ require 'yesql/bindings/extractor'
7
+ require 'yesql/common/adapter'
8
+
9
+ module ::YeSQL
10
+ class Statement
11
+ extend Forwardable
12
+
13
+ include ::YeSQL::Common::Adapter
14
+
15
+ def initialize(bindings = {}, file_path)
16
+ @bindings = bindings
17
+ @connection = ::ActiveRecord::Base.connection
18
+ @file_path = file_path
19
+ end
20
+
21
+ def bound
22
+ to_s.gsub(::YeSQL::BIND_REGEX) do |match|
23
+ extractor[match[/(\w+)/].to_sym].tap do |extract|
24
+ break quote(extract[:value]) if view?
25
+
26
+ break extract[:bind][:vars]
27
+ end
28
+ end
29
+ end
30
+
31
+ def to_s
32
+ @to_s ||= ::YeSQL::Utils::Read.statement(file_path, readable: true)
33
+ end
34
+
35
+ def view?
36
+ to_s =~ /^create\s.*view\s/i
37
+ end
38
+
39
+ private
40
+
41
+ def_delegator(:connection, :quote)
42
+
43
+ attr_reader :bindings, :connection, :file_path
44
+
45
+ def extractor
46
+ ::YeSQL::Bindings::Extractor.new(bindings: bindings).call
47
+ end
48
+ end
49
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module YeSQL
4
- VERSION = '0.1.6'
4
+ VERSION = '0.1.7'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yesql
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sebastián Palma
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-10-26 00:00:00.000000000 Z
11
+ date: 2020-11-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -97,7 +97,6 @@ files:
97
97
  - bin/console
98
98
  - bin/setup
99
99
  - lib/yesql.rb
100
- - lib/yesql/bindings/binder.rb
101
100
  - lib/yesql/bindings/extract.rb
102
101
  - lib/yesql/bindings/extractor.rb
103
102
  - lib/yesql/bindings/transformed.rb
@@ -112,6 +111,7 @@ files:
112
111
  - lib/yesql/query/performer.rb
113
112
  - lib/yesql/query/result.rb
114
113
  - lib/yesql/query/transform_result.rb
114
+ - lib/yesql/statement.rb
115
115
  - lib/yesql/utils/read.rb
116
116
  - lib/yesql/version.rb
117
117
  - yesql.gemspec
@@ -1,19 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'yesql/utils/read'
4
- require 'yesql/bindings/extractor'
5
-
6
- module YeSQL
7
- module Bindings
8
- class Binder
9
- def self.bind_statement(file_path, bindings)
10
- ::YeSQL::Bindings::Extractor.new(bindings: bindings).call.tap do |extractor|
11
- break ::YeSQL::Utils::Read.statement(file_path, readable: true)
12
- .gsub(::YeSQL::BIND_REGEX) do |match|
13
- extractor[match[/(\w+)/].to_sym][:bind][:vars]
14
- end
15
- end
16
- end
17
- end
18
- end
19
- end