data_verifier 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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: []