db2_query 0.3.2 → 0.3.6
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 +4 -4
- data/MIT-LICENSE +1 -1
- data/README.md +127 -34
- data/Rakefile +1 -11
- data/lib/db2_query/base.rb +0 -1
- data/lib/db2_query/core.rb +33 -20
- data/lib/db2_query/db_connection.rb +4 -4
- data/lib/db2_query/definitions.rb +24 -4
- data/lib/db2_query/error.rb +13 -1
- data/lib/db2_query/helper.rb +6 -5
- data/lib/db2_query/logger.rb +1 -1
- data/lib/db2_query/query.rb +30 -16
- data/lib/db2_query/railtie.rb +0 -14
- data/lib/db2_query/version.rb +1 -3
- data/lib/db2_query.rb +3 -8
- data/lib/tasks/db2_query_tasks.rake +4 -0
- metadata +26 -86
- data/lib/db2_query/quoting.rb +0 -102
- data/lib/db2_query/tasks/database.rake +0 -10
- data/lib/db2_query/tasks/init.rake +0 -9
- data/lib/db2_query/tasks/initializer.rake +0 -10
- data/lib/db2_query/tasks/templates/database.rb.tt +0 -19
- data/lib/db2_query/tasks/templates/initializer.rb.tt +0 -8
- data/lib/rails/generators/query/USAGE +0 -15
- data/lib/rails/generators/query/query_generator.rb +0 -70
- data/lib/rails/generators/query/templates/query.rb.tt +0 -26
- data/lib/rails/generators/query/templates/query_definitions.rb.tt +0 -12
- data/lib/rails/generators/query/templates/unit_test.rb.tt +0 -9
data/lib/db2_query/error.rb
CHANGED
@@ -39,7 +39,7 @@ module Db2Query
|
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
42
|
-
class
|
42
|
+
class ExtensionError < StandardError
|
43
43
|
end
|
44
44
|
|
45
45
|
class ImplementationError < StandardError
|
@@ -78,4 +78,16 @@ module Db2Query
|
|
78
78
|
"The query body needs to be callable or is a SQL statement string"
|
79
79
|
end
|
80
80
|
end
|
81
|
+
|
82
|
+
class QueryArgumentError < StandardError
|
83
|
+
def initialize(query_name, arg_key)
|
84
|
+
@query_name = query_name
|
85
|
+
@arg_key = arg_key
|
86
|
+
super(message)
|
87
|
+
end
|
88
|
+
|
89
|
+
def message
|
90
|
+
"Data type of `#{@arg_key}` not found at `:#{@query_name}` query definitions"
|
91
|
+
end
|
92
|
+
end
|
81
93
|
end
|
data/lib/db2_query/helper.rb
CHANGED
@@ -16,12 +16,13 @@ module Db2Query
|
|
16
16
|
sql.gsub("@list", "'#{list.join("', '")}'")
|
17
17
|
end
|
18
18
|
|
19
|
-
def
|
20
|
-
if sql.scan(/\@
|
21
|
-
raise Db2Query::
|
19
|
+
def sql_with_extension(sql, extension)
|
20
|
+
if sql.scan(/\@extension+/).length == 0
|
21
|
+
raise Db2Query::ExtensionError, "Missing @extension pointer at SQL"
|
22
22
|
end
|
23
|
-
sql.gsub("@
|
23
|
+
sql.gsub("@extension", extension.strip)
|
24
24
|
end
|
25
|
+
alias sql_with_extention sql_with_extension
|
25
26
|
|
26
27
|
private
|
27
28
|
def sql_query_methods
|
@@ -42,7 +43,7 @@ module Db2Query
|
|
42
43
|
end
|
43
44
|
|
44
45
|
def fetch_error_message
|
45
|
-
"`fetch`, `fetch_list` and `
|
46
|
+
"`fetch`, `fetch_list` and `fetch_extension` methods applied for SQL `select` statement only."
|
46
47
|
end
|
47
48
|
end
|
48
49
|
end
|
data/lib/db2_query/logger.rb
CHANGED
data/lib/db2_query/query.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
module Db2Query
|
4
4
|
class Query
|
5
|
-
attr_reader :
|
5
|
+
attr_reader :query_name, :sql, :columns, :keys, :types, :argument_types
|
6
6
|
|
7
7
|
include SqlStatement
|
8
8
|
|
@@ -10,12 +10,16 @@ module Db2Query
|
|
10
10
|
@columns = {}
|
11
11
|
@query_name = query_name
|
12
12
|
@sql_statement = nil
|
13
|
+
@argument_types = {}
|
13
14
|
@types = {}
|
14
15
|
end
|
15
16
|
|
16
|
-
def define_sql(
|
17
|
-
@keys
|
18
|
-
@sql
|
17
|
+
def define_sql(raw_sql)
|
18
|
+
@keys = []
|
19
|
+
@sql = raw_sql.gsub(/:\w+/) do |match|
|
20
|
+
@keys << match[1..]
|
21
|
+
'?'
|
22
|
+
end
|
19
23
|
end
|
20
24
|
|
21
25
|
def map_column(name, args)
|
@@ -33,6 +37,19 @@ module Db2Query
|
|
33
37
|
raise Db2Query::Error, "No column #{column} found at query: #{query_name} definitions"
|
34
38
|
end
|
35
39
|
|
40
|
+
def argument_type(key)
|
41
|
+
argument_types.fetch(key) || data_type(key)
|
42
|
+
rescue
|
43
|
+
raise Db2Query::Error, "No argument #{key} type found at query: #{query_name}"
|
44
|
+
end
|
45
|
+
|
46
|
+
def argument_keys
|
47
|
+
keys.map do |key|
|
48
|
+
arg_key = "#{key}".split(".").last
|
49
|
+
arg_key.to_sym unless arg_key.nil?
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
36
53
|
def length
|
37
54
|
columns.length
|
38
55
|
end
|
@@ -52,7 +69,7 @@ module Db2Query
|
|
52
69
|
end
|
53
70
|
|
54
71
|
def sorted_args(args)
|
55
|
-
|
72
|
+
argument_keys.map.with_index do |key, index|
|
56
73
|
serialized_arg(args.is_a?(Hash) ? args[key] : args[index], key)
|
57
74
|
end
|
58
75
|
end
|
@@ -82,12 +99,12 @@ module Db2Query
|
|
82
99
|
end
|
83
100
|
|
84
101
|
private
|
85
|
-
def
|
86
|
-
|
87
|
-
end
|
102
|
+
# def sql_arguments(raw_sql)
|
103
|
+
# raw_sql.scan(/\$\S+/).map { |arg| arg.gsub!(/[$=,)]/, "").to_sym }
|
104
|
+
# end
|
88
105
|
|
89
106
|
def serialized_arg(arg, key)
|
90
|
-
query_name.nil? ? arg :
|
107
|
+
query_name.nil? ? arg : argument_type(key).serialize(arg)
|
91
108
|
end
|
92
109
|
|
93
110
|
def column_from_key(key)
|
@@ -104,14 +121,11 @@ module Db2Query
|
|
104
121
|
end
|
105
122
|
end
|
106
123
|
|
107
|
-
def validate_arguments(given, expected)
|
108
|
-
raise Db2Query::ArgumentError.new(given, expected) unless given == expected
|
109
|
-
end
|
110
|
-
|
111
124
|
def validated_args(args)
|
112
|
-
|
113
|
-
|
114
|
-
|
125
|
+
arguments = args.first.is_a?(Hash) ? args.first : args
|
126
|
+
given, expected = [arguments.length, keys.length]
|
127
|
+
raise Db2Query::ArgumentError.new(given, expected) unless given == expected
|
128
|
+
sorted_args(arguments)
|
115
129
|
end
|
116
130
|
end
|
117
131
|
end
|
data/lib/db2_query/railtie.rb
CHANGED
@@ -1,18 +1,4 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "db2_query"
|
4
|
-
require "rails"
|
5
|
-
|
6
1
|
module Db2Query
|
7
2
|
class Railtie < ::Rails::Railtie
|
8
|
-
railtie_name :db2_query
|
9
|
-
|
10
|
-
rake_tasks do
|
11
|
-
Dir.glob("#{Db2Query.root}/db2_query/tasks/*.rake").each { |f| load f }
|
12
|
-
end
|
13
|
-
|
14
|
-
config.app_generators do
|
15
|
-
require "#{Db2Query.root}/rails/generators/query/query_generator.rb"
|
16
|
-
end
|
17
3
|
end
|
18
4
|
end
|
data/lib/db2_query/version.rb
CHANGED
data/lib/db2_query.rb
CHANGED
@@ -1,14 +1,11 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require "active_record"
|
4
|
-
require "active_support"
|
5
|
-
require "active_support/concurrency/load_interlock_aware_monitor"
|
6
|
-
require "active_model/type"
|
1
|
+
require "db2_query/version"
|
2
|
+
require "db2_query/railtie"
|
7
3
|
require "connection_pool"
|
8
4
|
require "odbc_utf8"
|
9
5
|
require "db2_query/error"
|
10
6
|
|
11
7
|
module Db2Query
|
8
|
+
# Your code goes here...
|
12
9
|
autoload :Version, "db2_query/version"
|
13
10
|
autoload :Error, "db2_query/error"
|
14
11
|
autoload :Config, "db2_query/config"
|
@@ -44,6 +41,4 @@ module Db2Query
|
|
44
41
|
def self.root
|
45
42
|
__dir__
|
46
43
|
end
|
47
|
-
|
48
|
-
require "db2_query/railtie" if defined?(Rails)
|
49
44
|
end
|
metadata
CHANGED
@@ -1,125 +1,75 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: db2_query
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
7
|
+
- Yohanes Lumentut
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-01-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: rails
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
20
|
-
type: :development
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
19
|
+
version: '7.1'
|
24
20
|
- - ">="
|
25
21
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
27
|
-
|
28
|
-
name: rubocop
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - ">="
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '0'
|
34
|
-
type: :development
|
22
|
+
version: 7.1.2
|
23
|
+
type: :runtime
|
35
24
|
prerelease: false
|
36
25
|
version_requirements: !ruby/object:Gem::Requirement
|
37
26
|
requirements:
|
38
|
-
- - "
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '0'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: rubocop-performance
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - ">="
|
27
|
+
- - "~>"
|
46
28
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
48
|
-
type: :development
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
29
|
+
version: '7.1'
|
52
30
|
- - ">="
|
53
31
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
32
|
+
version: 7.1.2
|
55
33
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
34
|
+
name: tty-progressbar
|
57
35
|
requirement: !ruby/object:Gem::Requirement
|
58
36
|
requirements:
|
59
|
-
- - "
|
37
|
+
- - "~>"
|
60
38
|
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
39
|
+
version: '0.18'
|
62
40
|
type: :development
|
63
41
|
prerelease: false
|
64
42
|
version_requirements: !ruby/object:Gem::Requirement
|
65
43
|
requirements:
|
66
|
-
- - "
|
44
|
+
- - "~>"
|
67
45
|
- !ruby/object:Gem::Version
|
68
|
-
version: '0'
|
46
|
+
version: '0.18'
|
69
47
|
- !ruby/object:Gem::Dependency
|
70
48
|
name: faker
|
71
49
|
requirement: !ruby/object:Gem::Requirement
|
72
50
|
requirements:
|
73
|
-
- - "
|
51
|
+
- - "~>"
|
74
52
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
53
|
+
version: '3.2'
|
76
54
|
type: :development
|
77
55
|
prerelease: false
|
78
56
|
version_requirements: !ruby/object:Gem::Requirement
|
79
57
|
requirements:
|
80
|
-
- - "
|
58
|
+
- - "~>"
|
81
59
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: byebug
|
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: rails
|
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'
|
60
|
+
version: '3.2'
|
111
61
|
- !ruby/object:Gem::Dependency
|
112
62
|
name: connection_pool
|
113
63
|
requirement: !ruby/object:Gem::Requirement
|
114
64
|
requirements:
|
115
|
-
- -
|
65
|
+
- - "~>"
|
116
66
|
- !ruby/object:Gem::Version
|
117
67
|
version: 2.2.5
|
118
68
|
type: :runtime
|
119
69
|
prerelease: false
|
120
70
|
version_requirements: !ruby/object:Gem::Requirement
|
121
71
|
requirements:
|
122
|
-
- -
|
72
|
+
- - "~>"
|
123
73
|
- !ruby/object:Gem::Version
|
124
74
|
version: 2.2.5
|
125
75
|
- !ruby/object:Gem::Dependency
|
@@ -136,8 +86,8 @@ dependencies:
|
|
136
86
|
- - ">="
|
137
87
|
- !ruby/object:Gem::Version
|
138
88
|
version: '0'
|
139
|
-
description: A Rails
|
140
|
-
|
89
|
+
description: A Rails 7 (Ruby v3.1.0) plugin for connecting Db2 with Rails appplication
|
90
|
+
by using ODBC connection.
|
141
91
|
email:
|
142
92
|
- yohanes.lumentut@gmail.com
|
143
93
|
executables: []
|
@@ -160,16 +110,10 @@ files:
|
|
160
110
|
- lib/db2_query/helper.rb
|
161
111
|
- lib/db2_query/logger.rb
|
162
112
|
- lib/db2_query/query.rb
|
163
|
-
- lib/db2_query/quoting.rb
|
164
113
|
- lib/db2_query/railtie.rb
|
165
114
|
- lib/db2_query/result.rb
|
166
115
|
- lib/db2_query/sql_statement.rb
|
167
116
|
- lib/db2_query/tasks.rb
|
168
|
-
- lib/db2_query/tasks/database.rake
|
169
|
-
- lib/db2_query/tasks/init.rake
|
170
|
-
- lib/db2_query/tasks/initializer.rake
|
171
|
-
- lib/db2_query/tasks/templates/database.rb.tt
|
172
|
-
- lib/db2_query/tasks/templates/initializer.rb.tt
|
173
117
|
- lib/db2_query/type/binary.rb
|
174
118
|
- lib/db2_query/type/boolean.rb
|
175
119
|
- lib/db2_query/type/date.rb
|
@@ -181,11 +125,7 @@ files:
|
|
181
125
|
- lib/db2_query/type/timestamp.rb
|
182
126
|
- lib/db2_query/type/value.rb
|
183
127
|
- lib/db2_query/version.rb
|
184
|
-
- lib/
|
185
|
-
- lib/rails/generators/query/query_generator.rb
|
186
|
-
- lib/rails/generators/query/templates/query.rb.tt
|
187
|
-
- lib/rails/generators/query/templates/query_definitions.rb.tt
|
188
|
-
- lib/rails/generators/query/templates/unit_test.rb.tt
|
128
|
+
- lib/tasks/db2_query_tasks.rake
|
189
129
|
homepage: https://github.com/yohaneslumentut/db2_query
|
190
130
|
licenses:
|
191
131
|
- MIT
|
@@ -208,7 +148,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
208
148
|
- !ruby/object:Gem::Version
|
209
149
|
version: '0'
|
210
150
|
requirements: []
|
211
|
-
rubygems_version: 3.
|
151
|
+
rubygems_version: 3.3.3
|
212
152
|
signing_key:
|
213
153
|
specification_version: 4
|
214
154
|
summary: Rails Db2 ODBC plugin
|
data/lib/db2_query/quoting.rb
DELETED
@@ -1,102 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Db2Query
|
4
|
-
module Quoting
|
5
|
-
def self.included(base)
|
6
|
-
base.send(:extend, ClassMethods)
|
7
|
-
end
|
8
|
-
|
9
|
-
module ClassMethods
|
10
|
-
def quoted_true
|
11
|
-
"TRUE"
|
12
|
-
end
|
13
|
-
|
14
|
-
def unquoted_true
|
15
|
-
1
|
16
|
-
end
|
17
|
-
|
18
|
-
def quoted_false
|
19
|
-
"FALSE"
|
20
|
-
end
|
21
|
-
|
22
|
-
def unquoted_false
|
23
|
-
0
|
24
|
-
end
|
25
|
-
|
26
|
-
def quoted_binary(value)
|
27
|
-
"x'#{value.hex}'"
|
28
|
-
end
|
29
|
-
|
30
|
-
def quoted_time(value)
|
31
|
-
value = value.change(year: 2000, month: 1, day: 1)
|
32
|
-
quoted_date(value).sub(/\A\d\d\d\d-\d\d-\d\d /, "")
|
33
|
-
end
|
34
|
-
|
35
|
-
def quoted_date(value)
|
36
|
-
if value.acts_like?(:time)
|
37
|
-
if ActiveRecord::Base.default_timezone == :utc
|
38
|
-
value = value.getutc if !value.utc?
|
39
|
-
else
|
40
|
-
value = value.getlocal
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
result = value.to_s(:db)
|
45
|
-
if value.respond_to?(:usec) && value.usec > 0
|
46
|
-
result << "." << sprintf("%06d", value.usec)
|
47
|
-
else
|
48
|
-
result
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
private
|
53
|
-
def _quote(value)
|
54
|
-
case value
|
55
|
-
when String, Symbol, ActiveSupport::Multibyte::Chars
|
56
|
-
"'#{quote_string(value.to_s)}'"
|
57
|
-
when true
|
58
|
-
quoted_true
|
59
|
-
when false
|
60
|
-
quoted_false
|
61
|
-
when nil
|
62
|
-
"NULL"
|
63
|
-
when BigDecimal
|
64
|
-
value.to_s("F")
|
65
|
-
when Numeric, ActiveSupport::Duration
|
66
|
-
value.to_s
|
67
|
-
when Db2Query::Type::Binary::Data
|
68
|
-
quoted_binary(value)
|
69
|
-
when ActiveRecord::Type::Time::Value
|
70
|
-
"'#{quoted_time(value)}'"
|
71
|
-
when Date, Time
|
72
|
-
"'#{quoted_date(value)}'"
|
73
|
-
when Class
|
74
|
-
"'#{value}'"
|
75
|
-
else raise TypeError, "can't quote #{value.class.name}"
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
def _type_cast(value)
|
80
|
-
case value
|
81
|
-
when Symbol, ActiveSupport::Multibyte::Chars
|
82
|
-
value.to_s
|
83
|
-
when Db2Query::Type::Binary::Data
|
84
|
-
value.hex
|
85
|
-
when true
|
86
|
-
unquoted_true
|
87
|
-
when false
|
88
|
-
unquoted_false
|
89
|
-
when BigDecimal
|
90
|
-
value.to_s("F")
|
91
|
-
when nil, Numeric, String
|
92
|
-
value
|
93
|
-
when ActiveRecord::Type::Time::Value
|
94
|
-
quoted_time(value)
|
95
|
-
when Date, Time
|
96
|
-
quoted_date(value)
|
97
|
-
else raise TypeError, "can't cast #{value.class.name}"
|
98
|
-
end
|
99
|
-
end
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
Description:
|
2
|
-
Stubs out a new query. Pass the query name, either
|
3
|
-
CamelCased or under_scored, and an optional list of its methods as arguments.
|
4
|
-
|
5
|
-
To create a query within a module, just use namespace pattern as the other rails generators do.
|
6
|
-
|
7
|
-
To create query class methods, you can use 3 options:
|
8
|
-
1. Plain SQL methods --defines
|
9
|
-
2. Query Methods with SQL string, --queries
|
10
|
-
3. Query Methods with lambda, --lambdas
|
11
|
-
|
12
|
-
Example:
|
13
|
-
$ rails g query NameSpace::Name --queries query_1 --defines query_2 --lambdas query_3
|
14
|
-
create app/queries/name_space/name_query.rb
|
15
|
-
create test/queries/name_space/name_query_test.rb
|
@@ -1,70 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "rails/generators"
|
4
|
-
require "fileutils"
|
5
|
-
|
6
|
-
module Rails
|
7
|
-
module Generators
|
8
|
-
class QueryGenerator < Rails::Generators::NamedBase
|
9
|
-
source_root File.expand_path("../templates", __FILE__)
|
10
|
-
|
11
|
-
class_option :skip_unit_test, type: :boolean, default: false, desc: "Skip unit test file creation"
|
12
|
-
class_option :defines, type: :array, default: [], desc: "Plain query method options"
|
13
|
-
class_option :queries, type: :array, default: [], desc: "Query method SQL options"
|
14
|
-
class_option :lambdas, type: :array, default: [], desc: "Query method with callable args"
|
15
|
-
|
16
|
-
def create_query_file
|
17
|
-
template "query.rb", File.join("app/queries", class_path, "#{file_name}_query.rb")
|
18
|
-
end
|
19
|
-
|
20
|
-
def create_query_definitions_file
|
21
|
-
template "query_definitions.rb", File.join("app/queries/definitions", class_path, "#{file_name}_query_definitions.rb")
|
22
|
-
end
|
23
|
-
|
24
|
-
def create_query_test_file
|
25
|
-
unless options[:skip_unit_test]
|
26
|
-
template "unit_test.rb", File.join("test/queries", class_path, "#{file_name}_query_test.rb")
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
private
|
31
|
-
def assign_names!(name)
|
32
|
-
super(name)
|
33
|
-
@method_options = options.slice("defines", "queries", "lambdas")
|
34
|
-
@query_methods = @method_options.map { |key, val| val }.flatten
|
35
|
-
end
|
36
|
-
|
37
|
-
def query_class_name
|
38
|
-
"#{file_name.camelize}Query"
|
39
|
-
end
|
40
|
-
|
41
|
-
def namespaced_query?
|
42
|
-
!class_path.empty?
|
43
|
-
end
|
44
|
-
|
45
|
-
def namespaced_names
|
46
|
-
class_path
|
47
|
-
end
|
48
|
-
|
49
|
-
def namespaced_content(content)
|
50
|
-
namespaced_names.reverse_each do |namespace_name|
|
51
|
-
content = "module #{namespace_name.camelize}\n#{indent(content)}\nend"
|
52
|
-
end
|
53
|
-
content
|
54
|
-
end
|
55
|
-
|
56
|
-
def module_namespacing(&block)
|
57
|
-
content = capture(&block)
|
58
|
-
content = namespaced_content(content) if namespaced_query?
|
59
|
-
concat(content)
|
60
|
-
end
|
61
|
-
|
62
|
-
def module_definitions_namespacing(&block)
|
63
|
-
content = capture(&block)
|
64
|
-
content = namespaced_content(content) if namespaced_query?
|
65
|
-
definitions_namespace_content = "module Definitions\n#{indent(content)}\nend"
|
66
|
-
concat(definitions_namespace_content)
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|