db2_query 0.3.2 → 0.3.6
Sign up to get free protection for your applications and to get access to all the features.
- 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
|