poring_backup 0.0.4 → 0.0.5
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/README.rdoc +3 -0
- data/lib/generators/poring_backup/templates/init_backup.rb +7 -1
- data/lib/poring_backup/database.rb +3 -1
- data/lib/poring_backup/databases/postgresql.rb +8 -4
- data/lib/poring_backup/notifier.rb +38 -0
- data/lib/poring_backup/notifiers/slack.rb +107 -0
- data/lib/poring_backup/setting.rb +16 -3
- data/lib/poring_backup/storage.rb +1 -0
- data/lib/poring_backup/storages/s3.rb +4 -0
- data/lib/poring_backup/version.rb +1 -1
- data/lib/poring_backup.rb +6 -2
- data/test/dummy/config/database.yml +1 -1
- data/test/dummy/config/initializers/poring_backup.rb +19 -8
- data/test/dummy/log/backup_development.log +78 -76
- data/test/dummy/log/backup_test.log +49 -20
- data/test/dummy/log/development.log +5 -2
- data/test/dummy/log/test.log +1425 -662
- data/test/dummy/spec/lib/database_spec.rb +3 -3
- data/test/dummy/spec/lib/databases/postgresql_spec.rb +2 -2
- data/test/dummy/spec/lib/notifiers/slack_spec.rb +129 -0
- data/test/dummy/spec/lib/setting_spec.rb +15 -0
- data/test/dummy/spec/lib/storages/s3_spec.rb +1 -1
- data/test/dummy/spec/rails_helper.rb +7 -0
- data/test/dummy/spec/spec_helper.rb +1 -0
- metadata +21 -4
- data/test/dummy/config/secrets.yml +0 -22
@@ -15,19 +15,19 @@ module PoringBackup
|
|
15
15
|
expect(db.path).to eq 'db_backups'
|
16
16
|
end
|
17
17
|
it "backup file name" do
|
18
|
-
expect(db.file).to eq 'db_backup.
|
18
|
+
expect(db.file).to eq 'db_backup.sql'
|
19
19
|
end
|
20
20
|
it "backup file dir" do
|
21
21
|
expect(db.file_dir).to eq 'db_backups/date_time_dir'
|
22
22
|
end
|
23
23
|
it "backup file path" do
|
24
|
-
expect(db.file_path).to eq 'db_backups/date_time_dir/db_backup.
|
24
|
+
expect(db.file_path).to eq 'db_backups/date_time_dir/db_backup.sql'
|
25
25
|
end
|
26
26
|
it "backup tmp dir" do
|
27
27
|
expect(db.tmp_dir).to eq 'tmp/poring_backups/db_backups/date_time_dir'
|
28
28
|
end
|
29
29
|
it "backup tmp file path" do
|
30
|
-
expect(db.tmp_file_path).to eq 'tmp/poring_backups/db_backups/date_time_dir/db_backup.
|
30
|
+
expect(db.tmp_file_path).to eq 'tmp/poring_backups/db_backups/date_time_dir/db_backup.sql'
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
@@ -13,8 +13,8 @@ module PoringBackup
|
|
13
13
|
end
|
14
14
|
}
|
15
15
|
context "block" do
|
16
|
-
it 'sets
|
17
|
-
expect(pg.instance_variable_get(:@
|
16
|
+
it 'sets db_name' do
|
17
|
+
expect(pg.instance_variable_get(:@db_name)).to eq 'new_database_name'
|
18
18
|
end
|
19
19
|
it 'sets host' do
|
20
20
|
expect(pg.instance_variable_get(:@host)).to eq 'new_host_name'
|
@@ -0,0 +1,129 @@
|
|
1
|
+
require "rails_helper"
|
2
|
+
|
3
|
+
|
4
|
+
module PoringBackup
|
5
|
+
module Notifiers
|
6
|
+
describe Slack do
|
7
|
+
let(:setting) {
|
8
|
+
PoringBackup.config('My Brand') do
|
9
|
+
|
10
|
+
# before do |logger|
|
11
|
+
# #do somethings before backup
|
12
|
+
# end
|
13
|
+
|
14
|
+
# after do |logger|
|
15
|
+
# #do somethings after backup
|
16
|
+
# end
|
17
|
+
database :PostgreSQL do
|
18
|
+
database 'database_name_2'
|
19
|
+
username 'username'
|
20
|
+
password 'password'
|
21
|
+
end
|
22
|
+
|
23
|
+
database :PostgreSQL do
|
24
|
+
database 'database_name_1'
|
25
|
+
username 'username'
|
26
|
+
password 'password'
|
27
|
+
end
|
28
|
+
|
29
|
+
store_with :S3 do
|
30
|
+
access_key_id 'access_key_id'
|
31
|
+
secret_access_key 'secret_access_key'
|
32
|
+
bucket 'bucket_name'
|
33
|
+
region 'region'
|
34
|
+
path 'your/path'
|
35
|
+
end
|
36
|
+
|
37
|
+
notifier :Slack do
|
38
|
+
webhook "https://slack.webhook.uri"
|
39
|
+
channel "#channel_name"
|
40
|
+
# only_env [:development, :production]
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
@setting = PoringBackup.model
|
45
|
+
}
|
46
|
+
let(:slack) {
|
47
|
+
@slack = PoringBackup::Notifiers::Slack.new(PoringBackup::Setting.new) do
|
48
|
+
webhook 'https://slack.webhook.uri'
|
49
|
+
channel '#channel_name'
|
50
|
+
only_env [:development, :production]
|
51
|
+
end
|
52
|
+
}
|
53
|
+
context "initialize" do
|
54
|
+
|
55
|
+
it "webhook_uri" do
|
56
|
+
expect(slack.webhook_uri).to eq 'https://slack.webhook.uri'
|
57
|
+
end
|
58
|
+
it "channel_name" do
|
59
|
+
expect(slack.channel_name).to eq '#channel_name'
|
60
|
+
end
|
61
|
+
it "on_envs" do
|
62
|
+
expect(slack.on_envs).to eq(["development", "production"])
|
63
|
+
end
|
64
|
+
end
|
65
|
+
context "#notify!" do
|
66
|
+
it "return :disabled if env does not in on_envs" do
|
67
|
+
slack.only_env [:woring_env]
|
68
|
+
expect(slack.notify!).to eq :disabled
|
69
|
+
end
|
70
|
+
it "return :success if env work" do
|
71
|
+
slack.only_env []
|
72
|
+
Excon.stub({}, {:body => 'ok', :status => 200})
|
73
|
+
expect(slack.notify!).to eq :success
|
74
|
+
end
|
75
|
+
it "return errors if failure" do
|
76
|
+
slack.only_env []
|
77
|
+
error_message = 'failed : Invalid channel specified'
|
78
|
+
Excon.stub({}, {:body => error_message, :status => 500})
|
79
|
+
expect(slack.notify!).to eq error_message
|
80
|
+
end
|
81
|
+
end
|
82
|
+
it "#data" do
|
83
|
+
slack = setting.notifiers.first
|
84
|
+
data = slack.send :data
|
85
|
+
expect_data = {
|
86
|
+
:channel=>"#channel_name",
|
87
|
+
:username=>"Poring Backup",
|
88
|
+
:icon_emoji=>":ghost:",
|
89
|
+
:attachments=>[
|
90
|
+
{
|
91
|
+
:fallback=>"more information at <https://github.com/piya23300/poring_backup|poring_backup gem>",
|
92
|
+
:pretext=>"backup at #{setting.created_at}",
|
93
|
+
:title=> "My Brand",
|
94
|
+
:color=>"#7CD197",
|
95
|
+
:fields=>[
|
96
|
+
{
|
97
|
+
:title=>"Environment",
|
98
|
+
:value=>"test",
|
99
|
+
:short=>true
|
100
|
+
},
|
101
|
+
{
|
102
|
+
:title=>"Contect",
|
103
|
+
:value=>"<https://github.com/piya23300/poring_backup|poring_backup gem>",
|
104
|
+
:short=>true
|
105
|
+
},
|
106
|
+
{
|
107
|
+
:title=>"Databases",
|
108
|
+
:value=>"[PostgreSQL] database_name_2\n[PostgreSQL] database_name_1",
|
109
|
+
:short=>false
|
110
|
+
},
|
111
|
+
{
|
112
|
+
:title=>"Storages",
|
113
|
+
:value=>"[S3] bucket: bucket_name, path: your/path",
|
114
|
+
:short=>false
|
115
|
+
},
|
116
|
+
{
|
117
|
+
:title=>"Notifier",
|
118
|
+
:value=>"[Slack] #channel_name",
|
119
|
+
:short=>false
|
120
|
+
}
|
121
|
+
]
|
122
|
+
}
|
123
|
+
]
|
124
|
+
}
|
125
|
+
expect(data).to eq expect_data
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
@@ -4,11 +4,15 @@ module PoringBackup
|
|
4
4
|
describe Setting do
|
5
5
|
it "initialize" do
|
6
6
|
setting = PoringBackup::Setting.new
|
7
|
+
expect(setting.app_name).to eq nil
|
7
8
|
expect(setting.tmp_dir).to eq 'tmp/poring_backups'
|
8
9
|
expect(setting.dir).to eq 'poring_backups'
|
9
10
|
expect(setting.databases).to eq []
|
10
11
|
expect(setting.storages).to eq []
|
11
12
|
expect(setting.created_at).not_to eq nil
|
13
|
+
|
14
|
+
setting = PoringBackup::Setting.new('MyBrandName')
|
15
|
+
expect(setting.app_name).to eq 'MyBrandName'
|
12
16
|
end
|
13
17
|
it "generate database object" do
|
14
18
|
setting = PoringBackup::Setting.new do
|
@@ -34,6 +38,17 @@ module PoringBackup
|
|
34
38
|
expect(setting.storages.size).to eq 1
|
35
39
|
expect(setting.storages.first).to be_a(Storages::S3)
|
36
40
|
end
|
41
|
+
it "generate notifier object" do
|
42
|
+
setting = PoringBackup::Setting.new do
|
43
|
+
notifier :Slack do
|
44
|
+
webhook 'https://slack.webhook.uri'
|
45
|
+
channel '#channel_name'
|
46
|
+
only_env [:development, :production]
|
47
|
+
end
|
48
|
+
end
|
49
|
+
expect(setting.notifiers.size).to eq 1
|
50
|
+
expect(setting.notifiers.first).to be_a(Notifiers::Slack)
|
51
|
+
end
|
37
52
|
it "#clear_tmp! will delete tmp directory" do
|
38
53
|
setting = PoringBackup::Setting.new
|
39
54
|
FileUtils.mkdir_p(setting.tmp_dir)
|
@@ -5,6 +5,7 @@ require File.expand_path('../../config/environment', __FILE__)
|
|
5
5
|
require 'rspec/rails'
|
6
6
|
# Add additional requires below this line. Rails is not loaded until this point!
|
7
7
|
require 'fakefs/spec_helpers'
|
8
|
+
require 'excon'
|
8
9
|
# require 'vcr'
|
9
10
|
# require 'aws-sdk'
|
10
11
|
|
@@ -37,6 +38,12 @@ ActiveRecord::Migration.maintain_test_schema!
|
|
37
38
|
|
38
39
|
RSpec.configure do |config|
|
39
40
|
|
41
|
+
config.before(:all) do
|
42
|
+
Excon.defaults[:mock] = true
|
43
|
+
end
|
44
|
+
config.after(:each) do
|
45
|
+
Excon.stubs.clear
|
46
|
+
end
|
40
47
|
|
41
48
|
# config.around(:each) do |example|
|
42
49
|
# VCR.use_cassette(example.metadata[:full_description]) do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: poring_backup
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- PiYa
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-05-
|
11
|
+
date: 2015-05-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - '>='
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: 2.0.0
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: excon
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
69
83
|
description: Poring Backup is database backup that support rails.
|
70
84
|
email:
|
71
85
|
- piya23300@gmail.com
|
@@ -74,6 +88,7 @@ extensions: []
|
|
74
88
|
extra_rdoc_files: []
|
75
89
|
files:
|
76
90
|
- MIT-LICENSE
|
91
|
+
- README.rdoc
|
77
92
|
- Rakefile
|
78
93
|
- lib/generators/poring_backup/install_generator.rb
|
79
94
|
- lib/generators/poring_backup/templates/init_backup.rb
|
@@ -82,6 +97,8 @@ files:
|
|
82
97
|
- lib/poring_backup/database.rb
|
83
98
|
- lib/poring_backup/databases/postgresql.rb
|
84
99
|
- lib/poring_backup/logger.rb
|
100
|
+
- lib/poring_backup/notifier.rb
|
101
|
+
- lib/poring_backup/notifiers/slack.rb
|
85
102
|
- lib/poring_backup/railtie.rb
|
86
103
|
- lib/poring_backup/setting.rb
|
87
104
|
- lib/poring_backup/storage.rb
|
@@ -121,7 +138,6 @@ files:
|
|
121
138
|
- test/dummy/config/locales/en.yml
|
122
139
|
- test/dummy/config/routes.rb
|
123
140
|
- test/dummy/config/secrets.sample.yml
|
124
|
-
- test/dummy/config/secrets.yml
|
125
141
|
- test/dummy/db/schema.rb
|
126
142
|
- test/dummy/log/backup_development.log
|
127
143
|
- test/dummy/log/backup_test.log
|
@@ -133,6 +149,7 @@ files:
|
|
133
149
|
- test/dummy/public/favicon.ico
|
134
150
|
- test/dummy/spec/lib/database_spec.rb
|
135
151
|
- test/dummy/spec/lib/databases/postgresql_spec.rb
|
152
|
+
- test/dummy/spec/lib/notifiers/slack_spec.rb
|
136
153
|
- test/dummy/spec/lib/setting_spec.rb
|
137
154
|
- test/dummy/spec/lib/storage_spec.rb
|
138
155
|
- test/dummy/spec/lib/storages/s3_spec.rb
|
@@ -195,7 +212,6 @@ test_files:
|
|
195
212
|
- test/dummy/config/locales/en.yml
|
196
213
|
- test/dummy/config/routes.rb
|
197
214
|
- test/dummy/config/secrets.sample.yml
|
198
|
-
- test/dummy/config/secrets.yml
|
199
215
|
- test/dummy/config.ru
|
200
216
|
- test/dummy/db/schema.rb
|
201
217
|
- test/dummy/log/backup_development.log
|
@@ -210,6 +226,7 @@ test_files:
|
|
210
226
|
- test/dummy/README.rdoc
|
211
227
|
- test/dummy/spec/lib/database_spec.rb
|
212
228
|
- test/dummy/spec/lib/databases/postgresql_spec.rb
|
229
|
+
- test/dummy/spec/lib/notifiers/slack_spec.rb
|
213
230
|
- test/dummy/spec/lib/setting_spec.rb
|
214
231
|
- test/dummy/spec/lib/storage_spec.rb
|
215
232
|
- test/dummy/spec/lib/storages/s3_spec.rb
|
@@ -1,22 +0,0 @@
|
|
1
|
-
# Be sure to restart your server when you modify this file.
|
2
|
-
|
3
|
-
# Your secret key is used for verifying the integrity of signed cookies.
|
4
|
-
# If you change this key, all old signed cookies will become invalid!
|
5
|
-
|
6
|
-
# Make sure the secret is at least 30 characters and all random,
|
7
|
-
# no regular words or you'll be exposed to dictionary attacks.
|
8
|
-
# You can use `rake secret` to generate a secure secret key.
|
9
|
-
|
10
|
-
# Make sure the secrets in this file are kept private
|
11
|
-
# if you're sharing your code publicly.
|
12
|
-
|
13
|
-
development:
|
14
|
-
secret_key_base: 4459d6f08c8cda3f955197392612dd73e888830d77ce3bdd541457e2239b1fbb7d0fd30c5fe809fb03f62ce2b696b7a7b608590934d110135f63f56d854e2aaf
|
15
|
-
|
16
|
-
test:
|
17
|
-
secret_key_base: 96ee0aa59437e1f8736bd397e2c60b853e69adad08e0a250294c0ddd7b3edfcb39e193d10edd3fca669c1d3f01dd05d27aa23e194b7f18ca96f995053a90e281
|
18
|
-
|
19
|
-
# Do not keep production secrets in the repository,
|
20
|
-
# instead read values from the environment.
|
21
|
-
production:
|
22
|
-
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
|