slodd 0.1.1 → 0.1.2
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.
- data/.rubocop.yml +6 -0
- data/README.md +8 -4
- data/Rakefile +4 -1
- data/bin/gurl +7 -6
- data/bin/slodd +12 -11
- data/lib/slodd/config.rb +13 -22
- data/lib/slodd/github.rb +1 -0
- data/lib/slodd/http.rb +1 -0
- data/lib/slodd/local.rb +1 -0
- data/lib/slodd/runner.rb +17 -6
- data/lib/slodd/version.rb +2 -1
- data/lib/slodd.rb +6 -5
- data/slodd.gemspec +3 -1
- data/spec/lib/config_spec.rb +1 -0
- data/spec/lib/gitub_spec.rb +7 -6
- data/spec/lib/http_spec.rb +15 -0
- data/spec/lib/local_spec.rb +12 -0
- data/spec/lib/runner_spec.rb +71 -0
- data/spec/spec_helper.rb +44 -2
- data/spec/support/schema.rb +6 -0
- metadata +45 -4
data/.rubocop.yml
ADDED
data/README.md
CHANGED
@@ -9,16 +9,20 @@ Examples:
|
|
9
9
|
|
10
10
|
###Loading schema from github:
|
11
11
|
|
12
|
-
slodd -g errm/awesome_rails_app -t my-secret-oauth-token -d "awesome_app awesome_test"
|
12
|
+
`slodd -g errm/awesome_rails_app -t my-secret-oauth-token -d "awesome_app awesome_test"`
|
13
13
|
|
14
14
|
or from a specific branch:
|
15
15
|
|
16
|
-
slodd -g errm/awesome_rails_app -t my-secret-oauth-token -r my-brillant-branch -d "awesome_app awesome_test"
|
16
|
+
`slodd -g errm/awesome_rails_app -t my-secret-oauth-token -r my-brillant-branch -d "awesome_app awesome_test"`
|
17
17
|
|
18
18
|
###Loading schema from a file (defaults to db/schema.rb):
|
19
19
|
|
20
|
-
slodd -d awesome_test
|
20
|
+
`slodd -d awesome_test`
|
21
21
|
|
22
22
|
or
|
23
23
|
|
24
|
-
slodd -f db/second_database.schema.rb -d awesome_test
|
24
|
+
`slodd -f db/second_database.schema.rb -d awesome_test`
|
25
|
+
|
26
|
+
###Downloading a schema (or any text file) from github
|
27
|
+
|
28
|
+
`gurl -g errm/awesome_rails_app -t my-secret-oauth-token -r my-fancy-branch`
|
data/Rakefile
CHANGED
data/bin/gurl
CHANGED
@@ -1,22 +1,23 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
# encoding: utf-8
|
2
3
|
|
3
|
-
require
|
4
|
-
require
|
4
|
+
require "slodd"
|
5
|
+
require "optparse"
|
5
6
|
|
6
7
|
OptionParser.new do |opt|
|
7
|
-
opt.on(
|
8
|
+
opt.on("-g", "--github USER/REPO", "github repo") do |g|
|
8
9
|
Slodd::Config.github = g
|
9
10
|
end
|
10
11
|
|
11
|
-
opt.on(
|
12
|
+
opt.on("-t", "--token TOKEN", "github token") do |t|
|
12
13
|
Slodd::Config.token = t
|
13
14
|
end
|
14
15
|
|
15
|
-
opt.on(
|
16
|
+
opt.on("-r", "--ref REF", "github ref") do |r|
|
16
17
|
Slodd::Config.ref = g
|
17
18
|
end
|
18
19
|
|
19
|
-
opt.on(
|
20
|
+
opt.on("-f", "--file-schema-path PATH", "Path to schema.rb") do |f|
|
20
21
|
Slodd::Config.path = f
|
21
22
|
end
|
22
23
|
end.parse!
|
data/bin/slodd
CHANGED
@@ -1,42 +1,43 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
# encoding: utf-8
|
2
3
|
|
3
|
-
require
|
4
|
-
require
|
4
|
+
require "slodd"
|
5
|
+
require "optparse"
|
5
6
|
|
6
7
|
OptionParser.new do |opt|
|
7
|
-
opt.on(
|
8
|
+
opt.on("-d", "--database DATABASES", "Database names") do |d|
|
8
9
|
Slodd::Config.databases = d
|
9
10
|
end
|
10
11
|
|
11
|
-
opt.on(
|
12
|
+
opt.on("-s", "--schema URI", "URI for schema.rb") do |s|
|
12
13
|
Slodd::Config.url = s
|
13
14
|
end
|
14
15
|
|
15
|
-
opt.on(
|
16
|
+
opt.on("-g", "--github USER/REPO", "github repo") do |g|
|
16
17
|
Slodd::Config.github = g
|
17
18
|
end
|
18
19
|
|
19
|
-
opt.on(
|
20
|
+
opt.on("-t", "--token TOKEN", "github token") do |t|
|
20
21
|
Slodd::Config.token = t
|
21
22
|
end
|
22
23
|
|
23
|
-
opt.on(
|
24
|
+
opt.on("-r", "--ref REF", "github ref") do |r|
|
24
25
|
Slodd::Config.ref = g
|
25
26
|
end
|
26
27
|
|
27
|
-
opt.on(
|
28
|
+
opt.on("-f", "--file-schema-path PATH", "Path to schema.rb") do |f|
|
28
29
|
Slodd::Config.path = f
|
29
30
|
end
|
30
31
|
|
31
|
-
opt.on(
|
32
|
+
opt.on("-u", "--username USERNAME", "MySQL Username") do |u|
|
32
33
|
Slodd::Config.username = u
|
33
34
|
end
|
34
35
|
|
35
|
-
opt.on(
|
36
|
+
opt.on("-p", "--password PASSWORD", "MySQL Password") do |p|
|
36
37
|
Slodd::Config.password = p
|
37
38
|
end
|
38
39
|
|
39
|
-
opt.on(
|
40
|
+
opt.on("-h", "--host HOST", "MySQL Hostname") do |h|
|
40
41
|
Slodd::Config.host = h
|
41
42
|
end
|
42
43
|
end.parse!
|
data/lib/slodd/config.rb
CHANGED
@@ -1,21 +1,23 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
require "active_support/core_ext"
|
2
3
|
|
3
4
|
module Slodd
|
4
5
|
module Config
|
5
|
-
mattr_accessor :path, :github, :username, :password,
|
6
|
+
mattr_accessor :path, :github, :username, :password,
|
7
|
+
:host, :url, :token, :ref
|
6
8
|
mattr_writer :databases
|
7
9
|
|
8
10
|
def self.defaults
|
9
11
|
self.path = "db/schema.rb"
|
10
12
|
self.username = "root"
|
11
13
|
self.host = "localhost"
|
14
|
+
self.databases = nil
|
12
15
|
end
|
13
16
|
|
14
17
|
defaults
|
15
18
|
|
16
19
|
def self.databases
|
17
|
-
|
18
|
-
[]
|
20
|
+
@@databases ? @@databases.split : []
|
19
21
|
end
|
20
22
|
|
21
23
|
def self.database_settings
|
@@ -47,25 +49,14 @@ module Slodd
|
|
47
49
|
end
|
48
50
|
|
49
51
|
def self.attributes
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
end
|
59
|
-
|
60
|
-
def self.reset
|
61
|
-
defaults
|
62
|
-
self.github = nil
|
63
|
-
self.password = nil
|
64
|
-
self.url = nil
|
65
|
-
self.token = nil
|
66
|
-
self.databases = nil
|
67
|
-
self.ref = nil
|
68
|
-
instance_eval { remove_class_variable "@@databases" } if defined?(@@databases)
|
52
|
+
{
|
53
|
+
owner: owner,
|
54
|
+
repo: repo,
|
55
|
+
token: token,
|
56
|
+
path: path,
|
57
|
+
ref: ref,
|
58
|
+
url: url,
|
59
|
+
}.delete_if { |_, v| v.nil? }
|
69
60
|
end
|
70
61
|
end
|
71
62
|
end
|
data/lib/slodd/github.rb
CHANGED
data/lib/slodd/http.rb
CHANGED
data/lib/slodd/local.rb
CHANGED
data/lib/slodd/runner.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
require "active_record"
|
2
3
|
require "mysql2"
|
3
4
|
|
@@ -19,22 +20,32 @@ module Slodd
|
|
19
20
|
end
|
20
21
|
|
21
22
|
private
|
23
|
+
|
22
24
|
def create_database(database)
|
23
|
-
|
25
|
+
puts "create_database(#{database})"
|
24
26
|
|
25
27
|
begin
|
26
28
|
ActiveRecord::Base.establish_connection database_settings
|
27
29
|
ActiveRecord::Base.connection.drop_database database
|
28
30
|
ActiveRecord::Base.connection.create_database database, options
|
29
|
-
ActiveRecord::Base.establish_connection database_settings
|
31
|
+
ActiveRecord::Base.establish_connection database_settings(database)
|
30
32
|
rescue Mysql2::Error => sqlerr
|
31
|
-
|
32
|
-
$stderr.puts "Couldn't create database: #{database} settings: #{database_settings.inspect}, charset: utf8, collation: utf8_unicode_ci"
|
33
|
+
error_message(sqlerr, database)
|
33
34
|
end
|
34
35
|
end
|
35
36
|
|
36
|
-
def database_settings
|
37
|
-
Config.database_settings
|
37
|
+
def database_settings(database = nil)
|
38
|
+
Config.database_settings.merge(database: database)
|
39
|
+
end
|
40
|
+
|
41
|
+
def options
|
42
|
+
{ charset: "utf8", collation: "utf8_unicode_ci" }
|
43
|
+
end
|
44
|
+
|
45
|
+
def error_message(sqlerr, database)
|
46
|
+
$stderr.puts sqlerr.error
|
47
|
+
settings = database_settings(database).merge(options).inspect
|
48
|
+
$stderr.puts "Couldn't create database with settings: #{settings}"
|
38
49
|
end
|
39
50
|
|
40
51
|
attr_accessor :schema
|
data/lib/slodd/version.rb
CHANGED
data/lib/slodd.rb
CHANGED
@@ -1,10 +1,11 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
require "slodd/version"
|
2
3
|
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
4
|
+
require "slodd/github"
|
5
|
+
require "slodd/local"
|
6
|
+
require "slodd/http"
|
7
|
+
require "slodd/config"
|
8
|
+
require "slodd/runner"
|
8
9
|
|
9
10
|
module Slodd
|
10
11
|
end
|
data/slodd.gemspec
CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |gem|
|
|
10
10
|
gem.email = ["ed.robinson@reevoo.com"]
|
11
11
|
gem.description = %q{Schema Loading On Dependent Databases}
|
12
12
|
gem.summary = %q{Schema Loading On Dependent Databases}
|
13
|
-
gem.homepage = ""
|
13
|
+
gem.homepage = "https://github.com/errm/slodd"
|
14
14
|
|
15
15
|
gem.files = `git ls-files`.split($/)
|
16
16
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
@@ -20,4 +20,6 @@ Gem::Specification.new do |gem|
|
|
20
20
|
gem.add_dependency('mysql2')
|
21
21
|
gem.add_development_dependency('rspec')
|
22
22
|
gem.add_development_dependency('rake')
|
23
|
+
gem.add_development_dependency('simplecov')
|
24
|
+
gem.add_development_dependency('rubocop')
|
23
25
|
end
|
data/spec/lib/config_spec.rb
CHANGED
data/spec/lib/gitub_spec.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
require "spec_helper"
|
2
3
|
|
3
4
|
describe Slodd::Github do
|
@@ -19,12 +20,14 @@ describe Slodd::Github do
|
|
19
20
|
)
|
20
21
|
end
|
21
22
|
|
23
|
+
let(:expected_url) do
|
24
|
+
"https://api.github.com/repos/#{owner}/#{repo}/contents/#{path}"
|
25
|
+
end
|
26
|
+
|
22
27
|
describe "#schema" do
|
23
28
|
it "hits the correct url" do
|
24
29
|
allow(subject).to receive(:open) do |url, _|
|
25
|
-
expect(url).to eq(
|
26
|
-
"https://api.github.com/repos/#{owner}/#{repo}/contents/#{path}"
|
27
|
-
)
|
30
|
+
expect(url).to eq(expected_url)
|
28
31
|
schema
|
29
32
|
end
|
30
33
|
|
@@ -36,9 +39,7 @@ describe Slodd::Github do
|
|
36
39
|
|
37
40
|
it "hits a url including the ref param" do
|
38
41
|
allow(subject).to receive(:open) do |url, _|
|
39
|
-
expect(url).to eq(
|
40
|
-
"https://api.github.com/repos/#{owner}/#{repo}/contents/#{path}?ref=#{ref}"
|
41
|
-
)
|
42
|
+
expect(url).to eq(expected_url + "?ref=#{ref}")
|
42
43
|
schema
|
43
44
|
end
|
44
45
|
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require "spec_helper"
|
3
|
+
|
4
|
+
describe Slodd::Http do
|
5
|
+
let(:url) { double }
|
6
|
+
let(:schema_file) { double(read: "the schema") }
|
7
|
+
subject { described_class.new(url: url) }
|
8
|
+
|
9
|
+
describe "#schema" do
|
10
|
+
it "downloads the schema from the url given" do
|
11
|
+
expect(subject).to receive(:open).with(url).and_return(schema_file)
|
12
|
+
expect(subject.schema).to eq "the schema"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require "spec_helper"
|
3
|
+
|
4
|
+
describe Slodd::Runner do
|
5
|
+
subject { described_class }
|
6
|
+
|
7
|
+
describe "#run" do
|
8
|
+
before do
|
9
|
+
Slodd::Config.path = schema_path
|
10
|
+
Slodd::Config.databases = "slodd_test"
|
11
|
+
end
|
12
|
+
|
13
|
+
after do
|
14
|
+
Slodd::Config.reset
|
15
|
+
end
|
16
|
+
|
17
|
+
it "creates the database ready for testing" do
|
18
|
+
output = capture_stdout do
|
19
|
+
subject.run!
|
20
|
+
end
|
21
|
+
|
22
|
+
expect(output).to match(/create_database\(slodd_test\)/)
|
23
|
+
|
24
|
+
expect(Test.count).to eq 0
|
25
|
+
Test.create(name: "James")
|
26
|
+
|
27
|
+
expect(Test.count).to eq 1
|
28
|
+
expect(Test.last.name).to eq "James"
|
29
|
+
expect(`mysql -uroot -e "show databases;"`).to match(/slodd_test/)
|
30
|
+
|
31
|
+
subject.run!
|
32
|
+
|
33
|
+
expect(Test.count).to eq 0
|
34
|
+
end
|
35
|
+
|
36
|
+
context "with multiple databases" do
|
37
|
+
before do
|
38
|
+
Slodd::Config.databases = "slodd_test slodd_test_2"
|
39
|
+
end
|
40
|
+
|
41
|
+
it "creates both databases" do
|
42
|
+
output = capture_stdout do
|
43
|
+
subject.run!
|
44
|
+
end
|
45
|
+
|
46
|
+
expect(output).to match(/create_database\(slodd_test\)/)
|
47
|
+
expect(output).to match(/create_database\(slodd_test_2\)/)
|
48
|
+
|
49
|
+
databases = `mysql -uroot -e "show databases;"`
|
50
|
+
expect(databases).to match(/slodd_test/)
|
51
|
+
expect(databases).to match(/slodd_test_2/)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
context "when something is failing" do
|
56
|
+
before do
|
57
|
+
allow(ActiveRecord::Base).to receive(:establish_connection)
|
58
|
+
.and_raise(Mysql2::Error, "mysql error")
|
59
|
+
end
|
60
|
+
|
61
|
+
it "ouputs a usefull message to stderr" do
|
62
|
+
message = capture_stderr do
|
63
|
+
subject.run!
|
64
|
+
end
|
65
|
+
expect(message).to match(/mysql error/)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
class Test < ActiveRecord::Base; end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,9 +1,51 @@
|
|
1
|
-
|
1
|
+
# encoding: utf-8
|
2
|
+
require "simplecov"
|
3
|
+
SimpleCov.minimum_coverage 100
|
4
|
+
SimpleCov.start
|
5
|
+
|
6
|
+
require "slodd"
|
7
|
+
require "stringio"
|
2
8
|
|
3
9
|
RSpec.configure do |config|
|
4
10
|
config.treat_symbols_as_metadata_keys_with_true_values = true
|
5
11
|
config.run_all_when_everything_filtered = true
|
6
12
|
config.filter_run :focus
|
7
|
-
config.order =
|
13
|
+
config.order = "random"
|
14
|
+
end
|
15
|
+
|
16
|
+
module Slodd
|
17
|
+
module Config
|
18
|
+
def self.reset
|
19
|
+
defaults
|
20
|
+
self.github = nil
|
21
|
+
self.password = nil
|
22
|
+
self.url = nil
|
23
|
+
self.token = nil
|
24
|
+
self.ref = nil
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def capture_stderr
|
30
|
+
old_stderr = $stderr
|
31
|
+
fake_stderr = StringIO.new
|
32
|
+
$stderr = fake_stderr
|
33
|
+
yield
|
34
|
+
fake_stderr.string
|
35
|
+
ensure
|
36
|
+
$stderr = old_stderr
|
37
|
+
end
|
38
|
+
|
39
|
+
def capture_stdout
|
40
|
+
old_stdout = $stdout
|
41
|
+
fake_stdout = StringIO.new
|
42
|
+
$stdout = fake_stdout
|
43
|
+
yield
|
44
|
+
fake_stdout.string
|
45
|
+
ensure
|
46
|
+
$stdout = old_stdout
|
8
47
|
end
|
9
48
|
|
49
|
+
def schema_path
|
50
|
+
File.join(File.dirname(__FILE__), "support", "schema.rb")
|
51
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: slodd
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -75,6 +75,38 @@ dependencies:
|
|
75
75
|
- - ! '>='
|
76
76
|
- !ruby/object:Gem::Version
|
77
77
|
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: simplecov
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: rubocop
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
78
110
|
description: Schema Loading On Dependent Databases
|
79
111
|
email:
|
80
112
|
- ed.robinson@reevoo.com
|
@@ -85,6 +117,7 @@ extensions: []
|
|
85
117
|
extra_rdoc_files: []
|
86
118
|
files:
|
87
119
|
- .gitignore
|
120
|
+
- .rubocop.yml
|
88
121
|
- .travis.yml
|
89
122
|
- Gemfile
|
90
123
|
- README.md
|
@@ -101,8 +134,12 @@ files:
|
|
101
134
|
- slodd.gemspec
|
102
135
|
- spec/lib/config_spec.rb
|
103
136
|
- spec/lib/gitub_spec.rb
|
137
|
+
- spec/lib/http_spec.rb
|
138
|
+
- spec/lib/local_spec.rb
|
139
|
+
- spec/lib/runner_spec.rb
|
104
140
|
- spec/spec_helper.rb
|
105
|
-
|
141
|
+
- spec/support/schema.rb
|
142
|
+
homepage: https://github.com/errm/slodd
|
106
143
|
licenses: []
|
107
144
|
post_install_message:
|
108
145
|
rdoc_options: []
|
@@ -116,7 +153,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
116
153
|
version: '0'
|
117
154
|
segments:
|
118
155
|
- 0
|
119
|
-
hash: -
|
156
|
+
hash: -4230072505507451069
|
120
157
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
121
158
|
none: false
|
122
159
|
requirements:
|
@@ -125,7 +162,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
125
162
|
version: '0'
|
126
163
|
segments:
|
127
164
|
- 0
|
128
|
-
hash: -
|
165
|
+
hash: -4230072505507451069
|
129
166
|
requirements: []
|
130
167
|
rubyforge_project:
|
131
168
|
rubygems_version: 1.8.25
|
@@ -135,4 +172,8 @@ summary: Schema Loading On Dependent Databases
|
|
135
172
|
test_files:
|
136
173
|
- spec/lib/config_spec.rb
|
137
174
|
- spec/lib/gitub_spec.rb
|
175
|
+
- spec/lib/http_spec.rb
|
176
|
+
- spec/lib/local_spec.rb
|
177
|
+
- spec/lib/runner_spec.rb
|
138
178
|
- spec/spec_helper.rb
|
179
|
+
- spec/support/schema.rb
|