db2_query 0.1.0 → 0.3.0

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.
@@ -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