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.
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: []