db2_query 0.1.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,95 +1,77 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Db2Query
4
- class Result
5
- attr_reader :core, :klass, :rows, :columns, :column_metadatas, :attr_format
4
+ class Result < ActiveRecord::Result
5
+ attr_reader :formatters
6
6
 
7
- def initialize(core, klass, columns, rows, attr_format = {})
8
- @core = core
9
- @klass = klass.to_s.camelize
10
- @rows = rows
11
- @attr_format = attr_format
12
- @columns = []
13
- @column_metadatas = extract_metadatas(columns)
7
+ def initialize(columns, rows, formatters = {}, column_types = {})
8
+ @formatters = formatters
9
+ super(columns, rows, column_types)
14
10
  end
15
11
 
16
- def to_a
17
- core.const_set(klass, row_class) unless core.const_defined?(klass)
18
-
19
- rows.map do |row|
20
- (core.const_get klass).new(row, column_metadatas)
21
- end
12
+ def includes_column?(name)
13
+ @columns.include? name
22
14
  end
23
15
 
24
- def to_hash
25
- rows.map do |row|
26
- Hash[columns.zip(row)]
27
- end
16
+ def record
17
+ @record ||= Record.new(rows[0], columns, formatters)
28
18
  end
29
19
 
30
- def pluck(*column_names)
31
- records.map do |record|
32
- column_names.map { |column_name| record.send(column_name) }
20
+ def records
21
+ @records ||= rows.map do |row|
22
+ Record.new(row, columns, formatters)
33
23
  end
34
24
  end
35
25
 
36
- def first
37
- records.first
38
- end
39
-
40
- def last
41
- records.last
42
- end
43
-
44
- def size
45
- records.size
46
- end
47
- alias length size
48
-
49
- def each(&block)
50
- records.each(&block)
26
+ def to_h
27
+ rows.map do |row|
28
+ columns.zip(row).each_with_object({}) { |cr, h| h[cr[0].to_sym] = cr[1] }
29
+ end
51
30
  end
52
31
 
53
32
  def inspect
54
33
  entries = records.take(11).map!(&:inspect)
34
+
55
35
  entries[10] = "..." if entries.size == 11
56
- "#<#{self.class} [#{entries.join(', ')}]>"
36
+
37
+ "#<#{self.class.name} [#{entries.join(', ')}]>"
57
38
  end
58
39
 
59
- private
60
- def records
61
- @records ||= to_a
62
- end
40
+ class Record
41
+ attr_reader :formatters
63
42
 
64
- def extract_metadatas(columns)
65
- columns.map do |col|
66
- @columns << column_name = col.name.downcase
67
- Column.new(column_name, col.type, attr_format[column_name.to_sym])
43
+ def initialize(row, columns, formatters)
44
+ @formatters = formatters
45
+ columns.zip(row) do |col, val|
46
+ column, value = format(col, val)
47
+ singleton_class.class_eval { attr_accessor "#{column}" }
48
+ send("#{column}=", value)
68
49
  end
69
50
  end
70
51
 
71
- def row_class
72
- Class.new do
73
- def initialize(row, columns_metadata)
74
- columns_metadata.zip(row) do |column, val|
75
- self.class.send(:attr_accessor, column.name.to_sym)
76
- instance_variable_set("@#{column.name}", column.format(val))
77
- end
78
- end
52
+ def inspect
53
+ inspection = if defined?(instance_variables) && instance_variables
54
+ instance_variables.reject { |var| var == :@formatters }.map do |attr|
55
+ value = instance_variable_get(attr)
56
+ "#{attr[1..-1]}: #{(value.kind_of? String) ? %Q{"#{value}"} : value}"
57
+ end.compact.join(", ")
58
+ else
59
+ "not initialized"
60
+ end
79
61
 
80
- def inspect
81
- inspection = if defined?(instance_variables) && instance_variables
82
- instance_variables.collect do |attr|
83
- value = instance_variable_get(attr)
84
- "#{attr[1..-1]}: #{(value.kind_of? String) ? %Q{"#{value}"} : value}"
85
- end.compact.join(", ")
86
- else
87
- "not initialized"
88
- end
62
+ "#<Record #{inspection}>"
63
+ end
89
64
 
90
- "#<#{self.class} #{inspection}>"
65
+ private
66
+ def format(col, val)
67
+ column = col.downcase
68
+ format_name = formatters[column.to_sym]
69
+ unless format_name.nil?
70
+ formatter = Db2Query::Formatter.lookup(format_name)
71
+ val = formatter.format(val)
91
72
  end
73
+ [column, val]
92
74
  end
93
- end
75
+ end
94
76
  end
95
77
  end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "db2_query"
4
+
5
+ DB2_QUERY_DATABASE_TEMPLATE ||= <<-EOF
6
+ # frozen_string_literal: true
7
+
8
+ development:
9
+ dsn: TODO
10
+ pool: 5
11
+ timeout: 5
12
+
13
+ test:
14
+ dsn: TODO
15
+ pool: 5
16
+ timeout: 5
17
+
18
+ production:
19
+ dsn: TODO
20
+ pool: 5
21
+ timeout: 5
22
+ EOF
23
+
24
+ namespace :db2query do
25
+ desc "Create Database configuration file"
26
+ task :database do
27
+ database_path = "#{Rails.root}/config/db2query.yml"
28
+ if File.exist?(database_path)
29
+ raise Db2Query::Error, "Db2Query database config file exists, please check first"
30
+ else
31
+ puts " Creating database config file ..."
32
+ File.open(database_path, "w") do |file|
33
+ file.puts DB2_QUERY_DATABASE_TEMPLATE
34
+ end
35
+ puts " File '#{database_path}' created."
36
+ end
37
+ end
38
+ end
File without changes
@@ -1,14 +1,20 @@
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
- # Example
7
+ require "db2_query"
7
8
  require "db2_query/formatter"
8
9
 
10
+ Db2Query::Base.initiation do |base|
11
+ base.establish_connection
12
+ end
13
+
14
+ # Example
9
15
  class FirstNameFormatter < Db2Query::AbstractFormatter
10
16
  def format(value)
11
- "First Name: " + value
17
+ "Dr." + value
12
18
  end
13
19
  end
14
20
 
@@ -23,7 +29,7 @@ namespace :db2query do
23
29
  # Create initializer file
24
30
  initializer_path = "#{Rails.root}/config/initializers/db2query.rb"
25
31
  if File.exist?(initializer_path)
26
- raise ArgumentError, "File exists."
32
+ raise Db2Query::Error, "Db2Query initializer file exists, please check first"
27
33
  else
28
34
  puts " Creating initializer file ..."
29
35
  File.open(initializer_path, "w") do |file|
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Db2Query
4
- VERSION = "0.1.0"
4
+ VERSION = "0.3.0"
5
5
  end
metadata CHANGED
@@ -1,51 +1,31 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: db2_query
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.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: 2020-06-05 00:00:00.000000000 Z
11
+ date: 2021-07-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: rails
14
+ name: rubocop
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: 6.0.3
20
17
  - - ">="
21
18
  - !ruby/object:Gem::Version
22
- version: 6.0.3.1
23
- type: :runtime
19
+ version: '0'
20
+ type: :development
24
21
  prerelease: false
25
22
  version_requirements: !ruby/object:Gem::Requirement
26
23
  requirements:
27
- - - "~>"
28
- - !ruby/object:Gem::Version
29
- version: 6.0.3
30
24
  - - ">="
31
25
  - !ruby/object:Gem::Version
32
- version: 6.0.3.1
33
- - !ruby/object:Gem::Dependency
34
- name: ruby-odbc
35
- requirement: !ruby/object:Gem::Requirement
36
- requirements:
37
- - - "~>"
38
- - !ruby/object:Gem::Version
39
- version: '0.99999'
40
- type: :runtime
41
- prerelease: false
42
- version_requirements: !ruby/object:Gem::Requirement
43
- requirements:
44
- - - "~>"
45
- - !ruby/object:Gem::Version
46
- version: '0.99999'
26
+ version: '0'
47
27
  - !ruby/object:Gem::Dependency
48
- name: rubocop
28
+ name: rubocop-performance
49
29
  requirement: !ruby/object:Gem::Requirement
50
30
  requirements:
51
31
  - - ">="
@@ -59,7 +39,7 @@ dependencies:
59
39
  - !ruby/object:Gem::Version
60
40
  version: '0'
61
41
  - !ruby/object:Gem::Dependency
62
- name: rubocop-performance
42
+ name: rubocop-rails
63
43
  requirement: !ruby/object:Gem::Requirement
64
44
  requirements:
65
45
  - - ">="
@@ -73,7 +53,7 @@ dependencies:
73
53
  - !ruby/object:Gem::Version
74
54
  version: '0'
75
55
  - !ruby/object:Gem::Dependency
76
- name: rubocop-rails
56
+ name: faker
77
57
  requirement: !ruby/object:Gem::Requirement
78
58
  requirements:
79
59
  - - ">="
@@ -87,7 +67,7 @@ dependencies:
87
67
  - !ruby/object:Gem::Version
88
68
  version: '0'
89
69
  - !ruby/object:Gem::Dependency
90
- name: faker
70
+ name: byebug
91
71
  requirement: !ruby/object:Gem::Requirement
92
72
  requirements:
93
73
  - - ">="
@@ -101,50 +81,62 @@ dependencies:
101
81
  - !ruby/object:Gem::Version
102
82
  version: '0'
103
83
  - !ruby/object:Gem::Dependency
104
- name: dotenv
84
+ name: rails
105
85
  requirement: !ruby/object:Gem::Requirement
106
86
  requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 6.1.3
107
90
  - - ">="
108
91
  - !ruby/object:Gem::Version
109
- version: '0'
92
+ version: 6.1.3.2
110
93
  type: :development
111
94
  prerelease: false
112
95
  version_requirements: !ruby/object:Gem::Requirement
113
96
  requirements:
97
+ - - "~>"
98
+ - !ruby/object:Gem::Version
99
+ version: 6.1.3
114
100
  - - ">="
115
101
  - !ruby/object:Gem::Version
116
- version: '0'
102
+ version: 6.1.3.2
117
103
  - !ruby/object:Gem::Dependency
118
- name: byebug
104
+ name: connection_pool
119
105
  requirement: !ruby/object:Gem::Requirement
120
106
  requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '2.2'
121
110
  - - ">="
122
111
  - !ruby/object:Gem::Version
123
- version: '0'
124
- type: :development
112
+ version: 2.2.5
113
+ type: :runtime
125
114
  prerelease: false
126
115
  version_requirements: !ruby/object:Gem::Requirement
127
116
  requirements:
117
+ - - "~>"
118
+ - !ruby/object:Gem::Version
119
+ version: '2.2'
128
120
  - - ">="
129
121
  - !ruby/object:Gem::Version
130
- version: '0'
122
+ version: 2.2.5
131
123
  - !ruby/object:Gem::Dependency
132
- name: sqlite3
124
+ name: ruby-odbc
133
125
  requirement: !ruby/object:Gem::Requirement
134
126
  requirements:
135
127
  - - ">="
136
128
  - !ruby/object:Gem::Version
137
129
  version: '0'
138
- type: :development
130
+ type: :runtime
139
131
  prerelease: false
140
132
  version_requirements: !ruby/object:Gem::Requirement
141
133
  requirements:
142
134
  - - ">="
143
135
  - !ruby/object:Gem::Version
144
136
  version: '0'
145
- description: A Rails query plugin to fetch data from Db2 database by using ODBC connection.
137
+ description: A Rails Db2 ODBC adapter
146
138
  email:
147
- - yohanes.lumentut@yahoo.com
139
+ - yohanes.lumentut@gmail.com
148
140
  executables: []
149
141
  extensions: []
150
142
  extra_rdoc_files: []
@@ -154,29 +146,25 @@ files:
154
146
  - Rakefile
155
147
  - lib/db2_query.rb
156
148
  - lib/db2_query/base.rb
157
- - lib/db2_query/column.rb
149
+ - lib/db2_query/config.rb
158
150
  - lib/db2_query/connection.rb
159
- - lib/db2_query/connection_handling.rb
160
- - lib/db2_query/database_configurations.rb
161
- - lib/db2_query/database_statements.rb
151
+ - lib/db2_query/core.rb
162
152
  - lib/db2_query/error.rb
163
153
  - lib/db2_query/formatter.rb
164
- - lib/db2_query/log_subscriber.rb
165
- - lib/db2_query/odbc_connector.rb
166
- - lib/db2_query/path.rb
154
+ - lib/db2_query/logger.rb
167
155
  - lib/db2_query/railtie.rb
168
156
  - lib/db2_query/result.rb
169
- - lib/db2_query/schema.rb
170
- - lib/db2_query/sql_validator.rb
157
+ - lib/db2_query/tasks/database.rake
158
+ - lib/db2_query/tasks/init.rake
159
+ - lib/db2_query/tasks/initializer.rake
171
160
  - lib/db2_query/version.rb
172
- - lib/tasks/database.rake
173
- - lib/tasks/init.rake
174
- - lib/tasks/initializer.rake
175
- homepage: https://github.com/yohaneslumentut/db2_query
161
+ homepage: https://github.com/yohaneslumentut
176
162
  licenses:
177
163
  - MIT
178
164
  metadata:
179
- allowed_push_host: https://rubygems.org
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
180
168
  post_install_message:
181
169
  rdoc_options: []
182
170
  require_paths:
@@ -192,8 +180,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
192
180
  - !ruby/object:Gem::Version
193
181
  version: '0'
194
182
  requirements: []
195
- rubygems_version: 3.1.3
183
+ rubygems_version: 3.0.3
196
184
  signing_key:
197
185
  specification_version: 4
198
- summary: Db2Query
186
+ summary: Db2 ODBC adapter
199
187
  test_files: []
@@ -1,42 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Db2Query
4
- class Column
5
- attr_reader :name, :type, :formatter
6
-
7
- FLOAT_TYPES = [ODBC::SQL_FLOAT, ODBC::SQL_DOUBLE, ODBC::SQL_DECIMAL, ODBC::SQL_REAL]
8
- INTEGER_TYPES = [ODBC::SQL_TINYINT, ODBC::SQL_SMALLINT, ODBC::SQL_INTEGER, ODBC::SQL_BIGINT, ODBC::SQL_NUMERIC]
9
-
10
- def initialize(name, type, format = nil)
11
- @name = name
12
- @type = type.to_i
13
-
14
- @formatter = if custom_format?(format)
15
- Formatter.lookup(format)
16
- elsif float_type?
17
- FloatFormatter.new
18
- elsif integer_type?
19
- IntegerFormatter.new
20
- else
21
- BareFormatter.new
22
- end
23
- end
24
-
25
- def format(value)
26
- formatter.format(value)
27
- end
28
-
29
- private
30
- def custom_format?(format)
31
- Formatter.registry.key?(format)
32
- end
33
-
34
- def float_type?
35
- FLOAT_TYPES.include?(type)
36
- end
37
-
38
- def integer_type?
39
- INTEGER_TYPES.include?(type)
40
- end
41
- end
42
- end