pg_seeder 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 +7 -0
- data/lib/pg_seeder.rb +122 -0
- metadata +44 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 81528484a4aec2dfe326d81f106849c994b0e481
|
4
|
+
data.tar.gz: fe5ce8e2ee70bc9c7c4808f28d0ebbb842026642
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 1cd1d9654f4d39100d40c701f6a28e1433359f2681f8acebb281ef6521ec84a72c74438d2fd48c7f75ae65699035fdb2e9938a81a80f1c23f83b531a5a1c9701
|
7
|
+
data.tar.gz: cdb47fad28e37ae0008ccdc2af98beb93702884eed8e3721fc634ea0c5bb0cf320cdbee3a6c3479dfff8fb3c0d18e287befa1b89ab87065b6bbe46910d81a3c6
|
data/lib/pg_seeder.rb
ADDED
@@ -0,0 +1,122 @@
|
|
1
|
+
require "pathname"
|
2
|
+
|
3
|
+
class PgSeeder
|
4
|
+
|
5
|
+
class CommandFailed < StandardError; end
|
6
|
+
|
7
|
+
attr_reader :current_env, :version, :root
|
8
|
+
|
9
|
+
def initialize(current_env: Rails.env, version: Time.now.to_i.to_s, root: Rails.root)
|
10
|
+
@current_env = current_env
|
11
|
+
@version = version
|
12
|
+
@root = root
|
13
|
+
@setups = []
|
14
|
+
@generates = []
|
15
|
+
end
|
16
|
+
|
17
|
+
def stored_version
|
18
|
+
File.read(directory.join("SEED_VERSION")).strip
|
19
|
+
rescue
|
20
|
+
nil
|
21
|
+
end
|
22
|
+
|
23
|
+
def restorable?
|
24
|
+
version_match? &&
|
25
|
+
dump_restorable? &&
|
26
|
+
attachment_data_restorable?
|
27
|
+
end
|
28
|
+
|
29
|
+
def version_match?
|
30
|
+
version == stored_version
|
31
|
+
end
|
32
|
+
|
33
|
+
def dump_restorable?
|
34
|
+
directory.join("seed.pg_dump").exist?
|
35
|
+
end
|
36
|
+
|
37
|
+
def attachment_data_restorable?
|
38
|
+
directory.join("seed.tar.bz2").exist?
|
39
|
+
end
|
40
|
+
|
41
|
+
def setup(env: current_env, &block)
|
42
|
+
@setups << block if [*env].include?(current_env)
|
43
|
+
end
|
44
|
+
|
45
|
+
def generate(env: current_env, &block)
|
46
|
+
@generates << block if [*env].include?(current_env)
|
47
|
+
end
|
48
|
+
|
49
|
+
def execute(with_dump: true, ignore_restore: false)
|
50
|
+
return restore if !ignore_restore && restorable?
|
51
|
+
puts "\033[33;5;7m Generating seed data \033[0m"
|
52
|
+
(@setups + @generates).each(&:call)
|
53
|
+
store if with_dump
|
54
|
+
end
|
55
|
+
|
56
|
+
def restore
|
57
|
+
puts "\033[33;5;7m Restoring \033[0m from db/seed.psql and attachment data from db/seed.tar.bz2"
|
58
|
+
restore_dump
|
59
|
+
restore_attachment_data
|
60
|
+
end
|
61
|
+
|
62
|
+
def restore_dump
|
63
|
+
cmd "pg_restore " + %W[
|
64
|
+
--username='#{db_config[:username]}'
|
65
|
+
--host='#{db_config[:hostname]}'
|
66
|
+
--clean
|
67
|
+
--if-exists
|
68
|
+
--jobs 4
|
69
|
+
--no-acl
|
70
|
+
--dbname='#{db_config[:database]}'
|
71
|
+
'#{directory.join("seed.pg_dump")}'
|
72
|
+
].join(" ")
|
73
|
+
end
|
74
|
+
|
75
|
+
def restore_attachment_data
|
76
|
+
cmd "tar xjf '#{directory.join("seed.tar.bz2")}'"
|
77
|
+
end
|
78
|
+
|
79
|
+
def store
|
80
|
+
puts "\033[33;5;7m Storing \033[0m database to db/seed/seed.pg_dump and attachment data to db/seed/seed.tar.bz2"
|
81
|
+
store_dump
|
82
|
+
store_attachment_data
|
83
|
+
puts "\033[33;5;7m Writing new seed version \033[0m #{version}"
|
84
|
+
File.open(directory.join("SEED_VERSION"), "w") { |f| f.write(version) }
|
85
|
+
end
|
86
|
+
|
87
|
+
def store_dump
|
88
|
+
cmd "pg_dump " + %W[
|
89
|
+
--username='#{db_config[:username]}'
|
90
|
+
--host='#{db_config[:hostname]}'
|
91
|
+
--clean
|
92
|
+
--no-owner
|
93
|
+
--no-acl
|
94
|
+
--compress=9
|
95
|
+
--format=c
|
96
|
+
'#{db_config[:database]}'
|
97
|
+
> '#{directory.join("seed.pg_dump")}'
|
98
|
+
].join(" ")
|
99
|
+
end
|
100
|
+
|
101
|
+
def store_attachment_data
|
102
|
+
cmd "tar cjf '#{directory.join("seed.tar.bz2")}' public/system 2>&1" if root.join("public/system").exist?
|
103
|
+
end
|
104
|
+
|
105
|
+
def cmd(line)
|
106
|
+
unless system(line)
|
107
|
+
raise CommandFailed, "command failed '#{line}'"
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
def db_config
|
112
|
+
ActiveRecord::Base.connection_config
|
113
|
+
end
|
114
|
+
|
115
|
+
def directory
|
116
|
+
directory = root.join("db/seed")
|
117
|
+
ensure
|
118
|
+
FileUtils.mkdir_p(directory)
|
119
|
+
end
|
120
|
+
|
121
|
+
end
|
122
|
+
|
metadata
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: pg_seeder
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Lukas Rieder
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-12-05 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description:
|
14
|
+
email: l.rieder@gmail.com
|
15
|
+
executables: []
|
16
|
+
extensions: []
|
17
|
+
extra_rdoc_files: []
|
18
|
+
files:
|
19
|
+
- lib/pg_seeder.rb
|
20
|
+
homepage: https://github.com/Overbryd/pg_seeder
|
21
|
+
licenses:
|
22
|
+
- MIT
|
23
|
+
metadata: {}
|
24
|
+
post_install_message:
|
25
|
+
rdoc_options: []
|
26
|
+
require_paths:
|
27
|
+
- lib
|
28
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
29
|
+
requirements:
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
34
|
+
requirements:
|
35
|
+
- - ">="
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
requirements: []
|
39
|
+
rubyforge_project:
|
40
|
+
rubygems_version: 2.5.2
|
41
|
+
signing_key:
|
42
|
+
specification_version: 4
|
43
|
+
summary: Enhance seed data generation with restore/dump
|
44
|
+
test_files: []
|