pg_seeder 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/pg_seeder.rb +122 -0
  3. 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: []