brillo 1.1.0 → 1.1.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 +4 -4
- data/CHANGELOG.md +3 -0
- data/lib/brillo/adapter/base.rb +4 -0
- data/lib/brillo/adapter/postgres.rb +10 -0
- data/lib/brillo/config.rb +9 -9
- data/lib/brillo/scrubber.rb +9 -6
- data/lib/brillo/transferrer/s3.rb +2 -0
- data/lib/brillo/version.rb +1 -1
- data/lib/brillo.rb +2 -2
- data/lib/tasks/brillo.rake +2 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c263c71c0f71009368727fa986bca2553feeea80
|
4
|
+
data.tar.gz: 6d529dd2c34696b1e8c5f2c314d0080b0b3228d8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cb5931545ee10c680b82921423315ecbe8aa55bc4a882dc2858fbdef2f8e41d19d4c29095e05327ecd17e3d1f175f0a857a6bcc95225df7772264a47ce4d1a79
|
7
|
+
data.tar.gz: 04f7580eda0674af8f4c60cf77519eaab5c190d333de77f9e62dd51ed1bce18d5f6d75a14cb32942ede04a5147d5c4a9f44fb6d8d6fb1c5ad69e92e193241220
|
data/CHANGELOG.md
CHANGED
data/lib/brillo/adapter/base.rb
CHANGED
@@ -6,6 +6,16 @@ module Brillo
|
|
6
6
|
password = config[:password] ? "-W#{config[:password]}" : ""
|
7
7
|
"psql #{host} -U #{config[:username]} #{password} #{config[:database]}"
|
8
8
|
end
|
9
|
+
|
10
|
+
# pgdump without schema does not set sequences, so we have to do it ourselves, or the first insert
|
11
|
+
# into a scrubbed table will fail on duplicate primary key
|
12
|
+
def table_footer(klass)
|
13
|
+
table_name = klass.table_name
|
14
|
+
<<-SQL
|
15
|
+
SELECT setval(pg_get_serial_sequence('#{table_name}', 'id'), coalesce(MAX(id),0) + 1, false)
|
16
|
+
FROM #{table_name};
|
17
|
+
SQL
|
18
|
+
end
|
9
19
|
end
|
10
20
|
end
|
11
21
|
end
|
data/lib/brillo/config.rb
CHANGED
@@ -3,11 +3,11 @@ module Brillo
|
|
3
3
|
attr_reader :app_name, :compress, :obfuscations, :klass_association_map, :db, :transfer_config
|
4
4
|
|
5
5
|
def initialize(options = {})
|
6
|
-
@app_name = options.fetch(
|
7
|
-
@klass_association_map = options[
|
8
|
-
@compress = options.fetch(
|
9
|
-
@transfer_config = Transferrer::Config.new(options.fetch(
|
10
|
-
@obfuscations = parse_obfuscations(options[
|
6
|
+
@app_name = options.fetch(:name)
|
7
|
+
@klass_association_map = options[:explore] || {}
|
8
|
+
@compress = options.fetch(:compress, true)
|
9
|
+
@transfer_config = Transferrer::Config.new(**options.fetch(:transfer, {}))
|
10
|
+
@obfuscations = parse_obfuscations(options[:obfuscations] || {})
|
11
11
|
rescue KeyError => e
|
12
12
|
raise ConfigParseError, e
|
13
13
|
end
|
@@ -18,7 +18,7 @@ module Brillo
|
|
18
18
|
raise ConfigParseError, "Scrub strategy '#{strategy}' not found, but required by '#{field}'"
|
19
19
|
end
|
20
20
|
@klass_association_map.each do |klass, _|
|
21
|
-
next if klass.camelize.safe_constantize
|
21
|
+
next if klass.to_s.camelize.safe_constantize
|
22
22
|
raise ConfigParseError, "Class #{klass} not found"
|
23
23
|
end
|
24
24
|
self
|
@@ -73,13 +73,13 @@ module Brillo
|
|
73
73
|
end
|
74
74
|
|
75
75
|
# Convert generic cross table obfuscations to symbols so Polo parses them correctly
|
76
|
-
# "my_table.field" => "my_table.field"
|
77
|
-
#
|
76
|
+
# :"my_table.field" => "my_table.field"
|
77
|
+
# :my_field => :my_field
|
78
78
|
def parse_obfuscations(obfuscations)
|
79
79
|
obfuscations.each_pair.with_object({}) do |field_and_strategy, hash|
|
80
80
|
field, strategy = field_and_strategy
|
81
81
|
strategy = strategy.to_sym
|
82
|
-
field.match(/\./) ? hash[field] = strategy : hash[field
|
82
|
+
field.to_s.match(/\./) ? hash[field.to_s] = strategy : hash[field] = strategy
|
83
83
|
end
|
84
84
|
end
|
85
85
|
end
|
data/lib/brillo/scrubber.rb
CHANGED
@@ -46,16 +46,19 @@ module Brillo
|
|
46
46
|
klass_association_map.each do |klass, options|
|
47
47
|
begin
|
48
48
|
klass = deserialize_class(klass)
|
49
|
-
tactic = deserialize_tactic(options)
|
49
|
+
tactic = deserialize_tactic(klass, options)
|
50
50
|
rescue ConfigParseError => e
|
51
51
|
logger.error "Error in brillo.yml: #{e.message}"
|
52
52
|
next
|
53
53
|
end
|
54
|
-
associations = options.fetch(
|
54
|
+
associations = options.fetch(:associations, [])
|
55
55
|
explore_class(klass, tactic, associations) do |insert|
|
56
56
|
sql_file.puts(insert)
|
57
57
|
end
|
58
58
|
end
|
59
|
+
ActiveRecord::Base.descendants.each do |klass|
|
60
|
+
sql_file.puts(adapter.table_footer(klass))
|
61
|
+
end
|
59
62
|
sql_file.puts(adapter.footer)
|
60
63
|
end
|
61
64
|
end
|
@@ -97,13 +100,13 @@ module Brillo
|
|
97
100
|
end
|
98
101
|
|
99
102
|
def deserialize_class(klass)
|
100
|
-
klass.camelize.constantize
|
103
|
+
klass.to_s.camelize.constantize
|
101
104
|
rescue
|
102
|
-
raise
|
105
|
+
raise ConfigParseError, "Could not process class '#{klass}'"
|
103
106
|
end
|
104
107
|
|
105
|
-
def deserialize_tactic(options)
|
106
|
-
options.fetch(
|
108
|
+
def deserialize_tactic(klass, options)
|
109
|
+
options.fetch(:tactic).to_sym
|
107
110
|
rescue KeyError
|
108
111
|
raise ConfigParseError, "Tactic not specified for class #{klass}"
|
109
112
|
end
|
@@ -24,6 +24,7 @@ module Brillo
|
|
24
24
|
|
25
25
|
def download
|
26
26
|
return unless enabled
|
27
|
+
logger.info("download from s3 #{bucket} #{path}")
|
27
28
|
FileUtils.rm path, force: true
|
28
29
|
client.get_object({bucket: bucket, key: path.to_s}, target: path)
|
29
30
|
rescue Aws::S3::Errors::NoSuchBucket
|
@@ -33,6 +34,7 @@ module Brillo
|
|
33
34
|
|
34
35
|
def upload
|
35
36
|
return unless enabled
|
37
|
+
logger.info("uploading to s3 #{bucket} #{path}")
|
36
38
|
object = resource.bucket(bucket).object(path.to_s)
|
37
39
|
object.upload_file(path)
|
38
40
|
rescue Aws::S3::Errors::NoSuchBucket
|
data/lib/brillo/version.rb
CHANGED
data/lib/brillo.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'yaml'
|
2
|
-
require 'active_support'
|
2
|
+
require 'active_support/hash_with_indifferent_access'
|
3
3
|
require 'active_support/core_ext/string/inflections'
|
4
4
|
require 'active_record'
|
5
5
|
require "brillo/version"
|
@@ -44,7 +44,7 @@ module Brillo
|
|
44
44
|
|
45
45
|
def self.config
|
46
46
|
@config ||= begin
|
47
|
-
static_config = YAML.load_file("#{Rails.root.to_s}/config/brillo.yml")
|
47
|
+
static_config = YAML.load_file("#{Rails.root.to_s}/config/brillo.yml").deep_symbolize_keys
|
48
48
|
Config.new(static_config)
|
49
49
|
end
|
50
50
|
end
|
data/lib/tasks/brillo.rake
CHANGED
@@ -8,7 +8,7 @@ namespace :db do
|
|
8
8
|
logger.level = ENV["VERBOSE"] ? Logger::DEBUG : Logger::WARN
|
9
9
|
begin
|
10
10
|
Brillo.scrub!(logger: logger)
|
11
|
-
rescue CredentialsError => e
|
11
|
+
rescue Brillo::CredentialsError => e
|
12
12
|
puts e
|
13
13
|
exit(1)
|
14
14
|
end
|
@@ -18,7 +18,7 @@ namespace :db do
|
|
18
18
|
task :load => :environment do
|
19
19
|
begin
|
20
20
|
Brillo.load!
|
21
|
-
rescue CredentialsError => e
|
21
|
+
rescue Brillo::CredentialsError => e
|
22
22
|
puts e
|
23
23
|
exit(1)
|
24
24
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: brillo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Bessey
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-06-
|
11
|
+
date: 2016-06-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|