db2_query 0.2.3 → 0.3.0
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 +122 -67
- data/Rakefile +3 -2
- data/lib/db2_query.rb +10 -13
- data/lib/db2_query/base.rb +3 -5
- data/lib/db2_query/config.rb +20 -17
- data/lib/db2_query/connection.rb +87 -123
- data/lib/db2_query/core.rb +73 -28
- data/lib/db2_query/error.rb +1 -1
- data/lib/db2_query/formatter.rb +2 -2
- data/lib/db2_query/logger.rb +42 -0
- data/lib/db2_query/railtie.rb +2 -7
- data/lib/db2_query/result.rb +11 -3
- data/lib/db2_query/tasks/database.rake +17 -33
- data/lib/db2_query/tasks/initializer.rake +7 -8
- data/lib/db2_query/version.rb +2 -2
- metadata +52 -41
- data/lib/db2_query/bind.rb +0 -6
- data/lib/db2_query/connection_handling.rb +0 -112
- data/lib/db2_query/database_statements.rb +0 -89
- data/lib/db2_query/odbc_connector.rb +0 -44
data/lib/db2_query/core.rb
CHANGED
@@ -1,37 +1,36 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
module Db2Query
|
4
|
+
class DbClient
|
5
|
+
attr_reader :dsn
|
4
6
|
|
5
|
-
|
6
|
-
module Core
|
7
|
-
extend ActiveSupport::Concern
|
8
|
-
|
9
|
-
included do
|
10
|
-
def self.configurations=(config)
|
11
|
-
@@configurations = ActiveRecord::DatabaseConfigurations.new(config)
|
12
|
-
end
|
13
|
-
self.configurations = {}
|
7
|
+
delegate :run, :do, to: :client
|
14
8
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
mattr_accessor :connection_handlers, instance_accessor: false, default: {}
|
20
|
-
|
21
|
-
class_attribute :default_connection_handler
|
9
|
+
def initialize(dsn)
|
10
|
+
@dsn = dsn
|
11
|
+
@client = retrieve_db_client
|
12
|
+
end
|
22
13
|
|
23
|
-
|
24
|
-
|
25
|
-
|
14
|
+
def retrieve_db_client
|
15
|
+
ODBC.connect(dsn)
|
16
|
+
end
|
26
17
|
|
27
|
-
|
28
|
-
|
18
|
+
def client
|
19
|
+
unless @client.connected?
|
20
|
+
@client = retrieve_db_client
|
29
21
|
end
|
22
|
+
@client
|
23
|
+
end
|
24
|
+
end
|
30
25
|
|
31
|
-
|
26
|
+
module Core
|
27
|
+
extend ActiveSupport::Concern
|
28
|
+
included do
|
29
|
+
@@connection = nil
|
30
|
+
@@mutex = Mutex.new
|
32
31
|
end
|
33
32
|
|
34
|
-
|
33
|
+
class_methods do
|
35
34
|
def initiation
|
36
35
|
yield(self) if block_given?
|
37
36
|
end
|
@@ -40,9 +39,25 @@ module DB2Query
|
|
40
39
|
formatters.store(attr_name, format)
|
41
40
|
end
|
42
41
|
|
42
|
+
def connection
|
43
|
+
@@connection || create_connection
|
44
|
+
end
|
45
|
+
|
46
|
+
def create_connection
|
47
|
+
@@mutex.synchronize do
|
48
|
+
return @@connection if @@connection
|
49
|
+
@@connection = Connection.new(config) { DbClient.new(config[:dsn]) }
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def establish_connection
|
54
|
+
load_database_configurations
|
55
|
+
create_connection
|
56
|
+
end
|
57
|
+
|
43
58
|
def query(name, body)
|
44
59
|
if defined_method_name?(name)
|
45
|
-
raise
|
60
|
+
raise Db2Query::Error, "You tried to define a scope named \"#{name}\" " \
|
46
61
|
"on the model \"#{self.name}\", but DB2Query already defined " \
|
47
62
|
"a class method with the same name."
|
48
63
|
end
|
@@ -52,14 +67,33 @@ module DB2Query
|
|
52
67
|
body.call(*args)
|
53
68
|
end
|
54
69
|
elsif body.is_a?(String)
|
55
|
-
sql = body
|
70
|
+
sql = body.strip
|
56
71
|
singleton_class.define_method(name) do |*args|
|
57
72
|
connection.exec_query(formatters, sql, args)
|
58
73
|
end
|
59
74
|
else
|
60
|
-
raise
|
75
|
+
raise Db2Query::Error, "The query body needs to be callable or is a sql string"
|
61
76
|
end
|
62
77
|
end
|
78
|
+
alias define query
|
79
|
+
|
80
|
+
def fetch(sql, args)
|
81
|
+
validate_sql(sql)
|
82
|
+
connection.exec_query({}, sql, args)
|
83
|
+
end
|
84
|
+
|
85
|
+
def fetch_list(sql, args)
|
86
|
+
validate_sql(sql)
|
87
|
+
raise Db2Query::Error, "Missing @list pointer at SQL" if sql.scan(/\@list+/).length == 0
|
88
|
+
raise Db2Query::Error, "The arguments should be an array of list" unless args.is_a?(Array)
|
89
|
+
connection.exec_query({}, sql.gsub("@list", "'#{args.join("', '")}'"), [])
|
90
|
+
end
|
91
|
+
|
92
|
+
def sql_with_extention(sql, extention)
|
93
|
+
validate_sql(sql)
|
94
|
+
raise Db2Query::Error, "Missing @extention pointer at SQL" if sql.scan(/\@extention+/).length == 0
|
95
|
+
sql.gsub("@extention", extention.strip)
|
96
|
+
end
|
63
97
|
|
64
98
|
private
|
65
99
|
def formatters
|
@@ -78,11 +112,18 @@ module DB2Query
|
|
78
112
|
sql_statement = allocate.method(sql_method).call
|
79
113
|
|
80
114
|
unless sql_statement.is_a? String
|
81
|
-
raise
|
115
|
+
raise Db2Query::Error, "Query methods must return a SQL statement string!"
|
82
116
|
end
|
83
117
|
|
84
118
|
query(method_name, sql_statement)
|
85
119
|
|
120
|
+
if args[0].is_a?(Hash)
|
121
|
+
keys = sql_statement.scan(/\$\S+/).map { |key| key.gsub!(/[$=]/, "") }
|
122
|
+
rearrange_args = {}
|
123
|
+
keys.each { |key| rearrange_args[key.to_sym] = args[0][key.to_sym] }
|
124
|
+
args[0] = rearrange_args
|
125
|
+
end
|
126
|
+
|
86
127
|
method(method_name).call(*args)
|
87
128
|
elsif connection.respond_to?(method_name)
|
88
129
|
connection.send(method_name, *args)
|
@@ -90,6 +131,10 @@ module DB2Query
|
|
90
131
|
super
|
91
132
|
end
|
92
133
|
end
|
134
|
+
|
135
|
+
def validate_sql(sql)
|
136
|
+
raise Db2Query::Error, "SQL have to be in string format" unless sql.is_a?(String)
|
137
|
+
end
|
93
138
|
end
|
94
139
|
end
|
95
140
|
end
|
data/lib/db2_query/error.rb
CHANGED
data/lib/db2_query/formatter.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
module
|
3
|
+
module Db2Query
|
4
4
|
module Formatter
|
5
5
|
def self.register(name, klass)
|
6
6
|
self.format_registry.store(name.to_sym, klass.new)
|
@@ -21,7 +21,7 @@ module DB2Query
|
|
21
21
|
|
22
22
|
class AbstractFormatter
|
23
23
|
def format(value)
|
24
|
-
raise
|
24
|
+
raise Db2Query::Error, "Implement format method in your subclass."
|
25
25
|
end
|
26
26
|
end
|
27
27
|
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Db2Query
|
4
|
+
module Logger
|
5
|
+
def translate_exception_class(e, sql, binds)
|
6
|
+
message = "#{e.class.name}: #{e.message}"
|
7
|
+
|
8
|
+
exception = translate_exception(
|
9
|
+
e, message: message, sql: sql, binds: binds
|
10
|
+
)
|
11
|
+
exception.set_backtrace e.backtrace
|
12
|
+
exception
|
13
|
+
end
|
14
|
+
|
15
|
+
def log(sql, name = "SQL", binds = [], type_casted_binds = [], statement_name = nil) # :doc:
|
16
|
+
@instrumenter.instrument(
|
17
|
+
"sql.active_record",
|
18
|
+
sql: sql,
|
19
|
+
name: name,
|
20
|
+
binds: binds,
|
21
|
+
type_casted_binds: type_casted_binds,
|
22
|
+
statement_name: statement_name,
|
23
|
+
connection_id: object_id,
|
24
|
+
connection: self) do
|
25
|
+
@lock.synchronize do
|
26
|
+
yield
|
27
|
+
end
|
28
|
+
rescue => e
|
29
|
+
raise translate_exception_class(e, sql, binds)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def translate_exception(exception, message:, sql:, binds:)
|
34
|
+
case exception
|
35
|
+
when RuntimeError
|
36
|
+
exception
|
37
|
+
else
|
38
|
+
StatementInvalid.new(message, sql: sql, binds: binds)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/lib/db2_query/railtie.rb
CHANGED
@@ -3,18 +3,13 @@
|
|
3
3
|
require "db2_query"
|
4
4
|
require "rails"
|
5
5
|
|
6
|
-
module
|
7
|
-
class Railtie < Rails::Railtie
|
6
|
+
module Db2Query
|
7
|
+
class Railtie < ::Rails::Railtie
|
8
8
|
railtie_name :db2_query
|
9
9
|
|
10
10
|
rake_tasks do
|
11
11
|
path = File.expand_path(__dir__)
|
12
12
|
Dir.glob("#{path}/tasks/*.rake").each { |f| load f }
|
13
13
|
end
|
14
|
-
|
15
|
-
initializer "db2_query.database_initialization" do
|
16
|
-
DB2Query::Base.configurations = DB2Query.config
|
17
|
-
DB2Query::Base.establish_connection :primary
|
18
|
-
end
|
19
14
|
end
|
20
15
|
end
|
data/lib/db2_query/result.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
module
|
3
|
+
module Db2Query
|
4
4
|
class Result < ActiveRecord::Result
|
5
5
|
attr_reader :formatters
|
6
6
|
|
@@ -9,6 +9,14 @@ module DB2Query
|
|
9
9
|
super(columns, rows, column_types)
|
10
10
|
end
|
11
11
|
|
12
|
+
def includes_column?(name)
|
13
|
+
@columns.include? name
|
14
|
+
end
|
15
|
+
|
16
|
+
def record
|
17
|
+
@record ||= Record.new(rows[0], columns, formatters)
|
18
|
+
end
|
19
|
+
|
12
20
|
def records
|
13
21
|
@records ||= rows.map do |row|
|
14
22
|
Record.new(row, columns, formatters)
|
@@ -26,7 +34,7 @@ module DB2Query
|
|
26
34
|
|
27
35
|
entries[10] = "..." if entries.size == 11
|
28
36
|
|
29
|
-
"#<#{self.class.name}
|
37
|
+
"#<#{self.class.name} [#{entries.join(', ')}]>"
|
30
38
|
end
|
31
39
|
|
32
40
|
class Record
|
@@ -59,7 +67,7 @@ module DB2Query
|
|
59
67
|
column = col.downcase
|
60
68
|
format_name = formatters[column.to_sym]
|
61
69
|
unless format_name.nil?
|
62
|
-
formatter =
|
70
|
+
formatter = Db2Query::Formatter.lookup(format_name)
|
63
71
|
val = formatter.format(val)
|
64
72
|
end
|
65
73
|
[column, val]
|
@@ -1,48 +1,32 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "db2_query"
|
4
|
+
|
3
5
|
DB2_QUERY_DATABASE_TEMPLATE ||= <<-EOF
|
4
6
|
# frozen_string_literal: true
|
5
|
-
|
7
|
+
|
6
8
|
development:
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
secondary:
|
12
|
-
conn_string:
|
13
|
-
driver: DB2
|
14
|
-
database: ARUNIT2
|
15
|
-
dbalias: ARUNIT2
|
16
|
-
hostname: LOCALHOST
|
17
|
-
currentschema: LIBTEST
|
18
|
-
port: "0"
|
19
|
-
protocol: IPC
|
20
|
-
uid: <%= ENV["DB2EC_UID"] %>
|
21
|
-
pwd: <%= ENV["DB2EC_PWD"] %>
|
9
|
+
dsn: TODO
|
10
|
+
pool: 5
|
11
|
+
timeout: 5
|
12
|
+
|
22
13
|
test:
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
dbalias: ARUNIT2
|
32
|
-
hostname: LOCALHOST
|
33
|
-
currentschema: LIBTEST
|
34
|
-
port: "0"
|
35
|
-
protocol: IPC
|
36
|
-
uid: <%= ENV["DB2EC_UID"] %>
|
37
|
-
pwd: <%= ENV["DB2EC_PWD"] %>
|
14
|
+
dsn: TODO
|
15
|
+
pool: 5
|
16
|
+
timeout: 5
|
17
|
+
|
18
|
+
production:
|
19
|
+
dsn: TODO
|
20
|
+
pool: 5
|
21
|
+
timeout: 5
|
38
22
|
EOF
|
39
23
|
|
40
24
|
namespace :db2query do
|
41
25
|
desc "Create Database configuration file"
|
42
26
|
task :database do
|
43
|
-
database_path = "#{Rails.root}/config/
|
27
|
+
database_path = "#{Rails.root}/config/db2query.yml"
|
44
28
|
if File.exist?(database_path)
|
45
|
-
raise
|
29
|
+
raise Db2Query::Error, "Db2Query database config file exists, please check first"
|
46
30
|
else
|
47
31
|
puts " Creating database config file ..."
|
48
32
|
File.open(database_path, "w") do |file|
|
@@ -1,25 +1,24 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "db2_query"
|
4
|
+
|
3
5
|
DB2_QUERY_INITIALIZER_TEMPLATE ||= <<-EOF
|
4
6
|
# frozen_string_literal: true
|
5
|
-
|
6
7
|
require "db2_query"
|
7
8
|
require "db2_query/formatter"
|
8
9
|
|
9
|
-
|
10
|
-
base.
|
11
|
-
base.establish_connection ENV['RAILS_ENV'].to_sym
|
10
|
+
Db2Query::Base.initiation do |base|
|
11
|
+
base.establish_connection
|
12
12
|
end
|
13
13
|
|
14
14
|
# Example
|
15
|
-
|
16
|
-
class FirstNameFormatter < DB2Query::AbstractFormatter
|
15
|
+
class FirstNameFormatter < Db2Query::AbstractFormatter
|
17
16
|
def format(value)
|
18
17
|
"Dr." + value
|
19
18
|
end
|
20
19
|
end
|
21
20
|
|
22
|
-
|
21
|
+
Db2Query::Formatter.registration do |format|
|
23
22
|
format.register(:first_name_formatter, FirstNameFormatter)
|
24
23
|
end
|
25
24
|
EOF
|
@@ -30,7 +29,7 @@ namespace :db2query do
|
|
30
29
|
# Create initializer file
|
31
30
|
initializer_path = "#{Rails.root}/config/initializers/db2query.rb"
|
32
31
|
if File.exist?(initializer_path)
|
33
|
-
raise
|
32
|
+
raise Db2Query::Error, "Db2Query initializer file exists, please check first"
|
34
33
|
else
|
35
34
|
puts " Creating initializer file ..."
|
36
35
|
File.open(initializer_path, "w") do |file|
|
data/lib/db2_query/version.rb
CHANGED
metadata
CHANGED
@@ -1,59 +1,59 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: db2_query
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- yohanes_l
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-07-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: rubocop
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '0
|
20
|
-
type: :
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
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: '0
|
26
|
+
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: rubocop-performance
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
34
|
-
type: :
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: rubocop-rails
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
48
|
-
type: :
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
54
|
+
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: faker
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - ">="
|
@@ -67,7 +67,7 @@ dependencies:
|
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: byebug
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - ">="
|
@@ -81,50 +81,62 @@ dependencies:
|
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
84
|
+
name: rails
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 6.1.3
|
87
90
|
- - ">="
|
88
91
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
92
|
+
version: 6.1.3.2
|
90
93
|
type: :development
|
91
94
|
prerelease: false
|
92
95
|
version_requirements: !ruby/object:Gem::Requirement
|
93
96
|
requirements:
|
97
|
+
- - "~>"
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: 6.1.3
|
94
100
|
- - ">="
|
95
101
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
102
|
+
version: 6.1.3.2
|
97
103
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
104
|
+
name: connection_pool
|
99
105
|
requirement: !ruby/object:Gem::Requirement
|
100
106
|
requirements:
|
107
|
+
- - "~>"
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '2.2'
|
101
110
|
- - ">="
|
102
111
|
- !ruby/object:Gem::Version
|
103
|
-
version:
|
104
|
-
type: :
|
112
|
+
version: 2.2.5
|
113
|
+
type: :runtime
|
105
114
|
prerelease: false
|
106
115
|
version_requirements: !ruby/object:Gem::Requirement
|
107
116
|
requirements:
|
117
|
+
- - "~>"
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: '2.2'
|
108
120
|
- - ">="
|
109
121
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
122
|
+
version: 2.2.5
|
111
123
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
124
|
+
name: ruby-odbc
|
113
125
|
requirement: !ruby/object:Gem::Requirement
|
114
126
|
requirements:
|
115
127
|
- - ">="
|
116
128
|
- !ruby/object:Gem::Version
|
117
129
|
version: '0'
|
118
|
-
type: :
|
130
|
+
type: :runtime
|
119
131
|
prerelease: false
|
120
132
|
version_requirements: !ruby/object:Gem::Requirement
|
121
133
|
requirements:
|
122
134
|
- - ">="
|
123
135
|
- !ruby/object:Gem::Version
|
124
136
|
version: '0'
|
125
|
-
description: A Rails
|
137
|
+
description: A Rails Db2 ODBC adapter
|
126
138
|
email:
|
127
|
-
- yohanes.lumentut@
|
139
|
+
- yohanes.lumentut@gmail.com
|
128
140
|
executables: []
|
129
141
|
extensions: []
|
130
142
|
extra_rdoc_files: []
|
@@ -134,26 +146,25 @@ files:
|
|
134
146
|
- Rakefile
|
135
147
|
- lib/db2_query.rb
|
136
148
|
- lib/db2_query/base.rb
|
137
|
-
- lib/db2_query/bind.rb
|
138
149
|
- lib/db2_query/config.rb
|
139
150
|
- lib/db2_query/connection.rb
|
140
|
-
- lib/db2_query/connection_handling.rb
|
141
151
|
- lib/db2_query/core.rb
|
142
|
-
- lib/db2_query/database_statements.rb
|
143
152
|
- lib/db2_query/error.rb
|
144
153
|
- lib/db2_query/formatter.rb
|
145
|
-
- lib/db2_query/
|
154
|
+
- lib/db2_query/logger.rb
|
146
155
|
- lib/db2_query/railtie.rb
|
147
156
|
- lib/db2_query/result.rb
|
148
157
|
- lib/db2_query/tasks/database.rake
|
149
158
|
- lib/db2_query/tasks/init.rake
|
150
159
|
- lib/db2_query/tasks/initializer.rake
|
151
160
|
- lib/db2_query/version.rb
|
152
|
-
homepage: https://github.com/yohaneslumentut
|
161
|
+
homepage: https://github.com/yohaneslumentut
|
153
162
|
licenses:
|
154
163
|
- MIT
|
155
164
|
metadata:
|
156
|
-
|
165
|
+
homepage_uri: https://github.com/yohaneslumentut
|
166
|
+
source_code_uri: https://github.com/yohaneslumentut/db2_query
|
167
|
+
changelog_uri: https://github.com/yohaneslumentut/db2_query
|
157
168
|
post_install_message:
|
158
169
|
rdoc_options: []
|
159
170
|
require_paths:
|
@@ -169,8 +180,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
169
180
|
- !ruby/object:Gem::Version
|
170
181
|
version: '0'
|
171
182
|
requirements: []
|
172
|
-
rubygems_version: 3.
|
183
|
+
rubygems_version: 3.0.3
|
173
184
|
signing_key:
|
174
185
|
specification_version: 4
|
175
|
-
summary:
|
186
|
+
summary: Db2 ODBC adapter
|
176
187
|
test_files: []
|