data_verifier 0.0.1

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: de8e7ec5961659d85a8c7fa92ae6e460ac62acddcf2699962f594cb6a3815014
4
+ data.tar.gz: 13d7a34878d79d2abb31b94112c266c8cae8f96ed40c2c8fe05d25cc003a73a3
5
+ SHA512:
6
+ metadata.gz: 7e50ce971d0c01a5ebc1661cd09a3a35e057bfa3472c8d2e154fbb51bac431e745ddcde3b6e21c50de484fbc11cc568963ab4e60354b16bbc687ca45294e7786
7
+ data.tar.gz: 7f346802c64d4e0682a8fabf8530ee83cb1a1c920ec0f0c32cae50ff554405d98d250a8c0b439c17b87e603e24be5a179916835e4b5acbb5fc79115688d2d432
data/.gitignore ADDED
@@ -0,0 +1,2 @@
1
+ .idea
2
+ *.gem
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ source :rubygems
2
+
3
+ gem 'sequel'
4
+ gem 'axlsx'
5
+ gem 'rspec'
data/Gemfile.lock ADDED
@@ -0,0 +1,38 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ axlsx (2.0.1)
5
+ htmlentities (~> 4.3.1)
6
+ nokogiri (>= 1.4.1)
7
+ rubyzip (~> 1.0.0)
8
+ diff-lcs (1.3)
9
+ htmlentities (4.3.4)
10
+ mini_portile2 (2.4.0)
11
+ nokogiri (1.10.3)
12
+ mini_portile2 (~> 2.4.0)
13
+ rspec (3.8.0)
14
+ rspec-core (~> 3.8.0)
15
+ rspec-expectations (~> 3.8.0)
16
+ rspec-mocks (~> 3.8.0)
17
+ rspec-core (3.8.1)
18
+ rspec-support (~> 3.8.0)
19
+ rspec-expectations (3.8.4)
20
+ diff-lcs (>= 1.2.0, < 2.0)
21
+ rspec-support (~> 3.8.0)
22
+ rspec-mocks (3.8.1)
23
+ diff-lcs (>= 1.2.0, < 2.0)
24
+ rspec-support (~> 3.8.0)
25
+ rspec-support (3.8.2)
26
+ rubyzip (1.2.2)
27
+ sequel (5.21.0)
28
+
29
+ PLATFORMS
30
+ ruby
31
+
32
+ DEPENDENCIES
33
+ axlsx
34
+ rspec
35
+ sequel
36
+
37
+ BUNDLED WITH
38
+ 1.16.1
@@ -0,0 +1,24 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require_relative './lib/data_verifier/version.rb'
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = 'data_verifier'
8
+ s.version = DataVerifier::VERSION
9
+ s.summary = 'Verify data after performing series of operations'
10
+ s.authors = ['Ajit Singh']
11
+ s.email = 'jeetsingh.ajit@gamil.com'
12
+ s.license = 'MIT'
13
+ s.homepage = 'https://github.com/ajitsing/data_verifier'
14
+
15
+ s.files = `git ls-files -z`.split("\x0")
16
+ s.executables = s.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
+ s.test_files = s.files.grep(%r{^(test|spec|features)/})
18
+ s.require_paths = ["lib"]
19
+
20
+ s.add_dependency 'axlsx', '~> 2.0.1'
21
+ s.add_dependency 'sequel', '~> 5.1.0'
22
+ s.add_development_dependency "bundler", "~> 1.5"
23
+ s.add_development_dependency 'rspec'
24
+ end
@@ -0,0 +1,2 @@
1
+ project_root = File.dirname(File.absolute_path(__FILE__))
2
+ Dir.glob(project_root + '/data_verifier/**/*.rb', &method(:require))
@@ -0,0 +1,34 @@
1
+ require 'json'
2
+ require 'sequel'
3
+
4
+ module DataVerifier
5
+ class BaselineBuilder
6
+ def initialize(config)
7
+ @config = config
8
+ @db = Sequel.connect(adapter: @config.db_adapter,
9
+ user: @config.db_user,
10
+ password: @config.db_password,
11
+ host: @config.db_host,
12
+ port: @config.db_port,
13
+ database: @config.db_name,
14
+ max_connections: @config.db_max_connections)
15
+ end
16
+
17
+ def build
18
+ @config.queries.each do |tag, query|
19
+ puts "Executing => #{query}\n"
20
+ data = @db.fetch(query)
21
+
22
+ File.open(data_file_name(tag), 'w') do |file|
23
+ file.write JSON.dump(data.all)
24
+ end
25
+ end
26
+ end
27
+
28
+ private
29
+ def data_file_name(tag)
30
+ identifier = @config.data_identifier.nil? ? '' : "#{@config.data_identifier}_"
31
+ "#{identifier}#{tag}.json"
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,19 @@
1
+ module DataVerifier
2
+ class Config
3
+ attr_accessor :db_adapter, :db_user, :db_password, :db_name, :db_host, :db_port, :db_max_connections, :queries, :data_identifier
4
+
5
+ def initialize
6
+ @db_adapter = nil
7
+ @db_user = nil
8
+ @db_password = nil
9
+ @db_host = nil
10
+ @db_port = nil
11
+ @db_name = nil
12
+ @db_max_connections = 25
13
+ @data_identifier = nil
14
+ @queries = {}
15
+
16
+ yield self if block_given?
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,74 @@
1
+ require 'json'
2
+ require 'sequel'
3
+ require 'axlsx'
4
+
5
+ module DataVerifier
6
+ class Validator
7
+ def initialize(config)
8
+ @config = config
9
+ @db = Sequel.connect(adapter: @config.db_adapter,
10
+ user: @config.db_user,
11
+ password: @config.db_password,
12
+ host: @config.db_host,
13
+ port: @config.db_port,
14
+ database: @config.db_name,
15
+ max_connections: @config.db_max_connections)
16
+ end
17
+
18
+ def generate_validation_file
19
+ excel = Axlsx::Package.new
20
+
21
+ @config.queries.each do |tag, query|
22
+ puts "Executing => #{query}\n"
23
+ data = @db.fetch(query)
24
+ update_excel(excel, tag, data)
25
+ end
26
+
27
+ excel.serialize("#{identifier}data_verifier_result.xlsx")
28
+ end
29
+
30
+ private
31
+ def data_file_name(tag)
32
+ "#{identifier}#{tag}.json"
33
+ end
34
+
35
+ def identifier
36
+ @config.data_identifier.nil? ? '' : "#{@config.data_identifier}_"
37
+ end
38
+
39
+ def update_excel(excel, sheet_name, data)
40
+ data_before_replication = JSON.parse(File.read(data_file_name(sheet_name)))
41
+
42
+ excel.workbook.add_worksheet(name: sheet_name.to_s) do |s|
43
+ red_color = Axlsx::Color.new
44
+ red_color.rgb = 'C40101'
45
+
46
+ white_color = Axlsx::Color.new
47
+ white_color.rgb = 'FFFFFF'
48
+
49
+ header_style = s.styles.add_style bg_color: "43B275", b: true, sz: 16, alignment: {horizontal: :center}, color: white_color
50
+ data_style = s.styles.add_style sz: 13, alignment: {:horizontal => :left}
51
+ error_data_style = s.styles.add_style sz: 12, alignment: {:horizontal => :left}, color: red_color, b: true
52
+
53
+ s.add_row ["Field", "Before", "After"], style: header_style
54
+ s.row_style(0, header_style)
55
+
56
+ data.each_with_index do |db_row, index|
57
+ stored_result = data_before_replication[index]
58
+
59
+ db_row.each do |column, value|
60
+ value_not_eql = stored_result[column.to_s].to_s != value.to_s
61
+ data = [column.to_s.upcase, stored_result[column.to_s].to_s, value.to_s]
62
+
63
+ conditional_formatting = value_not_eql ? error_data_style : data_style
64
+ s.add_row data, style: [conditional_formatting, data_style, data_style]
65
+ end
66
+
67
+ s.add_row ["", "", ""]
68
+ s.add_row ["", "", ""], style: [header_style, header_style, header_style]
69
+ s.add_row ["", "", ""]
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,3 @@
1
+ module DataVerifier
2
+ VERSION = '0.0.1'
3
+ end
metadata ADDED
@@ -0,0 +1,108 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: data_verifier
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Ajit Singh
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-06-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: axlsx
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 2.0.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 2.0.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: sequel
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 5.1.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 5.1.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.5'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.5'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description:
70
+ email: jeetsingh.ajit@gamil.com
71
+ executables: []
72
+ extensions: []
73
+ extra_rdoc_files: []
74
+ files:
75
+ - ".gitignore"
76
+ - Gemfile
77
+ - Gemfile.lock
78
+ - data_verifier.gemspec
79
+ - lib/data_verifier.rb
80
+ - lib/data_verifier/baseline_builder.rb
81
+ - lib/data_verifier/config.rb
82
+ - lib/data_verifier/validator.rb
83
+ - lib/data_verifier/version.rb
84
+ homepage: https://github.com/ajitsing/data_verifier
85
+ licenses:
86
+ - MIT
87
+ metadata: {}
88
+ post_install_message:
89
+ rdoc_options: []
90
+ require_paths:
91
+ - lib
92
+ required_ruby_version: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ required_rubygems_version: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ requirements: []
103
+ rubyforge_project:
104
+ rubygems_version: 2.7.6
105
+ signing_key:
106
+ specification_version: 4
107
+ summary: Verify data after performing series of operations
108
+ test_files: []