monkey_butler 1.2.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.
- checksums.yaml +7 -0
- data/.bundle/config +2 -0
- data/.gitignore +3 -0
- data/.ruby-version +1 -0
- data/CHANGELOG.md +28 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +122 -0
- data/Guardfile +8 -0
- data/LICENSE +202 -0
- data/README.md +221 -0
- data/Rakefile +16 -0
- data/bin/mb +6 -0
- data/lib/monkey_butler.rb +1 -0
- data/lib/monkey_butler/actions.rb +38 -0
- data/lib/monkey_butler/cli.rb +354 -0
- data/lib/monkey_butler/databases/abstract_database.rb +49 -0
- data/lib/monkey_butler/databases/cassandra_database.rb +69 -0
- data/lib/monkey_butler/databases/sqlite_database.rb +105 -0
- data/lib/monkey_butler/migrations.rb +52 -0
- data/lib/monkey_butler/project.rb +90 -0
- data/lib/monkey_butler/targets/base.rb +85 -0
- data/lib/monkey_butler/targets/cassandra/cassandra_target.rb +72 -0
- data/lib/monkey_butler/targets/cassandra/create_schema_migrations.cql.erb +16 -0
- data/lib/monkey_butler/targets/cassandra/migration.cql.erb +0 -0
- data/lib/monkey_butler/targets/cocoapods/cocoapods_target.rb +43 -0
- data/lib/monkey_butler/targets/cocoapods/podspec.erb +12 -0
- data/lib/monkey_butler/targets/maven/maven_target.rb +60 -0
- data/lib/monkey_butler/targets/maven/project/.gitignore +6 -0
- data/lib/monkey_butler/targets/maven/project/MonkeyButler.iml +19 -0
- data/lib/monkey_butler/targets/maven/project/build.gradle +54 -0
- data/lib/monkey_butler/targets/sqlite/create_monkey_butler_tables.sql.erb +15 -0
- data/lib/monkey_butler/targets/sqlite/migration.sql.erb +11 -0
- data/lib/monkey_butler/targets/sqlite/sqlite_target.rb +91 -0
- data/lib/monkey_butler/templates/Gemfile.erb +4 -0
- data/lib/monkey_butler/templates/gitignore.erb +1 -0
- data/lib/monkey_butler/util.rb +71 -0
- data/lib/monkey_butler/version.rb +3 -0
- data/logo.jpg +0 -0
- data/monkey_butler.gemspec +33 -0
- data/spec/cli_spec.rb +700 -0
- data/spec/databases/cassandra_database_spec.rb +241 -0
- data/spec/databases/sqlite_database_spec.rb +181 -0
- data/spec/migrations_spec.rb +4 -0
- data/spec/project_spec.rb +128 -0
- data/spec/sandbox/cassandra/.gitignore +2 -0
- data/spec/sandbox/cassandra/.monkey_butler.yml +7 -0
- data/spec/sandbox/cassandra/migrations/20140523123443021_create_sandbox.cql.sql +14 -0
- data/spec/sandbox/cassandra/sandbox.cql +0 -0
- data/spec/sandbox/sqlite/.gitignore +2 -0
- data/spec/sandbox/sqlite/.monkey_butler.yml +7 -0
- data/spec/sandbox/sqlite/migrations/20140523123443021_create_sandbox.sql +14 -0
- data/spec/sandbox/sqlite/sandbox.sql +0 -0
- data/spec/spec_helper.rb +103 -0
- data/spec/targets/cassandra_target_spec.rb +191 -0
- data/spec/targets/cocoapods_target_spec.rb +197 -0
- data/spec/targets/maven_target_spec.rb +156 -0
- data/spec/targets/sqlite_target_spec.rb +103 -0
- data/spec/util_spec.rb +13 -0
- metadata +260 -0
@@ -0,0 +1,156 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'monkey_butler/targets/base'
|
3
|
+
require 'monkey_butler/targets/maven/maven_target'
|
4
|
+
|
5
|
+
describe MonkeyButler::Targets::MavenTarget do
|
6
|
+
let(:thor_class) { MonkeyButler::Targets::MavenTarget }
|
7
|
+
let!(:project_root) { clone_temp_sandbox }
|
8
|
+
|
9
|
+
describe "#init" do
|
10
|
+
it "asks for Maven Java repository URL and credentials" do
|
11
|
+
remove_maven_repo_from_config
|
12
|
+
remove_maven_username_from_config
|
13
|
+
remove_maven_password_from_config
|
14
|
+
expect(Thor::LineEditor).to receive(:readline).with("What is the URL of your Java Maven repo? ", {}).and_return(File.join(project_root, "maven"))
|
15
|
+
expect(Thor::LineEditor).to receive(:readline).with("What is the username for your Java Maven repo? ", {}).and_return("none")
|
16
|
+
expect(Thor::LineEditor).to receive(:readline).with("What is the password for your Java Maven repo? ", {}).and_return("none")
|
17
|
+
invoke!(['init'])
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe '#generate' do
|
22
|
+
before(:all) do
|
23
|
+
# Put config into the YAML
|
24
|
+
yaml_path = File.join(project_root, '.monkey_butler.yml')
|
25
|
+
project = YAML.load(File.read(yaml_path))
|
26
|
+
project['config']['maven.url'] = 'maven'
|
27
|
+
project['config']['maven.username'] = 'none'
|
28
|
+
project['config']['maven.password'] = 'none'
|
29
|
+
File.open(yaml_path, 'w') { |f| f << YAML.dump(project) }
|
30
|
+
|
31
|
+
invoke!(['generate', '--quiet'])
|
32
|
+
end
|
33
|
+
|
34
|
+
# Shadow the let! declarations so we can use before(:all)
|
35
|
+
def thor_class
|
36
|
+
MonkeyButler::Targets::MavenTarget
|
37
|
+
end
|
38
|
+
|
39
|
+
def project_root
|
40
|
+
@project_root ||= clone_temp_sandbox
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should have project/build.gradle" do
|
44
|
+
expect(File.directory?(File.join(project_root, 'project'))).to eq(true)
|
45
|
+
expect(File.file?(File.join(project_root, 'project/build.gradle'))).to eq(true)
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should have a schema file in resources/schema" do
|
49
|
+
expect(File.directory?(File.join(project_root, 'project/src/main/resources/schema'))).to eq(true)
|
50
|
+
expect(File.file?(File.join(project_root, 'project/src/main/resources/schema/schema.sql'))).to eq(true)
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should have migration files in resources/migrations" do
|
54
|
+
expect(File.directory?(File.join(project_root, 'project/src/main/resources/migrations'))).to eq(true)
|
55
|
+
expect(Dir.entries(File.join(project_root, 'project/src/main/resources/migrations')).size).not_to eq(2)
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should have project/build/libs/monkeybutler-[version].jar files" do
|
59
|
+
expect(File.file?(built_jar_path)).to eq(true)
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should have a schema packaged in the JAR" do
|
63
|
+
jar_schema = `jar tf #{built_jar_path} | grep -e schema/.*[.]sql`.strip
|
64
|
+
expect(jar_schema).to eq("schema/schema.sql")
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should have all migrations packaged in the JAR" do
|
68
|
+
# Create a hash of all expected migrations
|
69
|
+
expected_migrations = Hash.new
|
70
|
+
Dir.foreach(File.join(project_root, "migrations")) do |entry|
|
71
|
+
if !entry.end_with? ".sql" then
|
72
|
+
next
|
73
|
+
end
|
74
|
+
expected_migrations[entry] = true
|
75
|
+
end
|
76
|
+
|
77
|
+
# Create a array of all migrations packaged in the JAR
|
78
|
+
jar_migrations = `jar tf #{built_jar_path} | grep -e migrations/.*[.]sql`
|
79
|
+
jar_migration_array = jar_migrations.split(/\r?\n/)
|
80
|
+
|
81
|
+
# Verify that the expected and actual have the same size
|
82
|
+
expect(jar_migration_array.length).to eq(expected_migrations.length)
|
83
|
+
|
84
|
+
# Verify that all JAR'd migrations were expected
|
85
|
+
jar_migration_array.each { |jar_migration|
|
86
|
+
length = jar_migration.length - "migrations/".length
|
87
|
+
migration = jar_migration[-length, length]
|
88
|
+
expect(expected_migrations[migration]).to eq(true)
|
89
|
+
}
|
90
|
+
end
|
91
|
+
|
92
|
+
it "should clear java project between `generate` invocations" do
|
93
|
+
# Create a random file in the project directory.
|
94
|
+
yaml_path = File.join(project_root, '.monkey_butler.yml')
|
95
|
+
project = YAML.load(File.read(yaml_path))
|
96
|
+
File.open(File.join(project_root, 'project/deleteme.txt'), 'w') { |f| f << YAML.dump(project) }
|
97
|
+
expect(File.file?(File.join(project_root, 'project/deleteme.txt'))).to eq(true)
|
98
|
+
invoke!(['generate', '--quiet'])
|
99
|
+
expect(File.file?(File.join(project_root, 'project/deleteme.txt'))).to eq(false)
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
describe '#push' do
|
104
|
+
before(:each) do
|
105
|
+
set_config
|
106
|
+
invoke!(%w{generate --quiet})
|
107
|
+
invoke!(%w{push --quiet})
|
108
|
+
end
|
109
|
+
|
110
|
+
it "should have monkeybutler-[version].jar file in the local Maven" do
|
111
|
+
expect(File.file?(maven_jar_path)).to eq(true)
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
private
|
116
|
+
|
117
|
+
def remove_maven_repo_from_config
|
118
|
+
yaml_path = File.join(project_root, '.monkey_butler.yml')
|
119
|
+
project = YAML.load(File.read(yaml_path))
|
120
|
+
project['config'].delete 'maven.url'
|
121
|
+
File.open(yaml_path, 'w') { |f| f << YAML.dump(project) }
|
122
|
+
end
|
123
|
+
|
124
|
+
def remove_maven_username_from_config
|
125
|
+
yaml_path = File.join(project_root, '.monkey_butler.yml')
|
126
|
+
project = YAML.load(File.read(yaml_path))
|
127
|
+
project['config'].delete 'maven.username'
|
128
|
+
File.open(yaml_path, 'w') { |f| f << YAML.dump(project) }
|
129
|
+
end
|
130
|
+
|
131
|
+
def remove_maven_password_from_config
|
132
|
+
yaml_path = File.join(project_root, '.monkey_butler.yml')
|
133
|
+
project = YAML.load(File.read(yaml_path))
|
134
|
+
project['config'].delete 'maven.password'
|
135
|
+
File.open(yaml_path, 'w') { |f| f << YAML.dump(project) }
|
136
|
+
end
|
137
|
+
|
138
|
+
def set_config
|
139
|
+
remove_maven_repo_from_config
|
140
|
+
remove_maven_username_from_config
|
141
|
+
remove_maven_password_from_config
|
142
|
+
expect(Thor::LineEditor).to receive(:readline).with("What is the URL of your Java Maven repo? ", {}).and_return(File.join(project_root, "maven"))
|
143
|
+
expect(Thor::LineEditor).to receive(:readline).with("What is the username for your Java Maven repo? ", {}).and_return("none")
|
144
|
+
expect(Thor::LineEditor).to receive(:readline).with("What is the password for your Java Maven repo? ", {}).and_return("none")
|
145
|
+
invoke!(['init'])
|
146
|
+
end
|
147
|
+
|
148
|
+
def maven_jar_path
|
149
|
+
File.join(project_root, "maven/com/layer/monkeybutler/20140523123443021/monkeybutler-20140523123443021.jar")
|
150
|
+
end
|
151
|
+
|
152
|
+
def built_jar_path
|
153
|
+
File.join(project_root, "project/build/libs/monkeybutler-20140523123443021.jar")
|
154
|
+
end
|
155
|
+
|
156
|
+
end
|
@@ -0,0 +1,103 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'monkey_butler/targets/sqlite/sqlite_target'
|
3
|
+
require 'monkey_butler/databases/sqlite_database'
|
4
|
+
|
5
|
+
describe MonkeyButler::Targets::SqliteTarget do
|
6
|
+
let(:thor_class) { MonkeyButler::CLI }
|
7
|
+
let!(:project_root) { clone_temp_sandbox }
|
8
|
+
let(:project) { MonkeyButler::Project.load(project_root) }
|
9
|
+
let(:schema_path) { File.join(project_root, project.schema_path) }
|
10
|
+
let(:db_path) { File.join(project_root, 'sandbox.sqlite') }
|
11
|
+
|
12
|
+
describe "#new" do
|
13
|
+
it "generates a new migration with the given name" do
|
14
|
+
invoke!(%w{new add_column_to_table})
|
15
|
+
migration = Dir.entries(File.join(project_root, 'migrations')).detect { |f| f =~ /add_column_to_table\.sql/ }
|
16
|
+
migration.should_not be_nil
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe '#dump' do
|
21
|
+
before(:each) do
|
22
|
+
db = MonkeyButler::Databases::SqliteDatabase.new(URI(db_path))
|
23
|
+
db.drop
|
24
|
+
db.execute_migration MonkeyButler::Util.strip_leading_whitespace(
|
25
|
+
<<-SQL
|
26
|
+
#{MonkeyButler::Databases::SqliteDatabase.create_schema_migrations_sql}
|
27
|
+
CREATE TABLE table1(version INTEGER UNIQUE NOT NULL, name STRING NOT NULL);
|
28
|
+
CREATE TABLE table2(version INTEGER UNIQUE NOT NULL, name STRING NOT NULL);
|
29
|
+
CREATE INDEX name1 ON table1(name);
|
30
|
+
CREATE VIEW full_name AS SELECT table1.name || table2.name AS full_name FROM table1, table2;
|
31
|
+
CREATE TRIGGER kill_overlapping_names AFTER DELETE ON table1
|
32
|
+
BEGIN
|
33
|
+
DELETE FROM table2 WHERE name = OLD.name;
|
34
|
+
END;
|
35
|
+
INSERT INTO schema_migrations(version) VALUES (201405233443021)
|
36
|
+
SQL
|
37
|
+
)
|
38
|
+
end
|
39
|
+
|
40
|
+
let(:dumped_schema) { File.read(schema_path) }
|
41
|
+
|
42
|
+
it "dumps tables" do
|
43
|
+
output = invoke!(%w{dump})
|
44
|
+
dumped_schema.should =~ /CREATE TABLE schema_migrations/
|
45
|
+
output[:stdout].should =~ /wrote table: schema_migrations/
|
46
|
+
dumped_schema.should =~ /CREATE TABLE table1\(version INTEGER UNIQUE NOT NULL, name STRING NOT NULL\);/
|
47
|
+
output[:stdout].should =~ /wrote table: table1/
|
48
|
+
dumped_schema.should =~ /CREATE TABLE table2\(version INTEGER UNIQUE NOT NULL, name STRING NOT NULL\);/
|
49
|
+
output[:stdout].should =~ /wrote table: table2/
|
50
|
+
end
|
51
|
+
|
52
|
+
it "dumps indexes" do
|
53
|
+
output = invoke!(%w{dump})
|
54
|
+
dumped_schema.should =~ /CREATE INDEX name1 ON table1\(name\);/
|
55
|
+
output[:stdout].should =~ /wrote index: name1/
|
56
|
+
end
|
57
|
+
|
58
|
+
it "dumps triggers" do
|
59
|
+
output = invoke!(%w{dump})
|
60
|
+
dumped_schema.should =~ /CREATE TRIGGER kill_overlapping_names AFTER DELETE ON table1/
|
61
|
+
output[:stdout].should =~ /wrote trigger: kill_overlapping_names/
|
62
|
+
end
|
63
|
+
|
64
|
+
it "dumps views" do
|
65
|
+
output = invoke!(%w{dump})
|
66
|
+
dumped_schema.should =~ /CREATE VIEW full_name AS SELECT table1.name || table2.name AS full_name FROM table1, table2;/
|
67
|
+
output[:stdout].should =~ /wrote view: full_name/
|
68
|
+
end
|
69
|
+
|
70
|
+
it "dumps rows from schema_migrations" do
|
71
|
+
output = invoke!(%w{dump})
|
72
|
+
dumped_schema.should =~ /INSERT INTO schema_migrations\(version\) VALUES \(201405233443021\);/
|
73
|
+
output[:stdout].should =~ /wrote version: 201405233443021/
|
74
|
+
end
|
75
|
+
|
76
|
+
it "informs the user of completion" do
|
77
|
+
output = invoke!(%w{dump})
|
78
|
+
output[:stdout].should =~ /Dump complete. Schema written to sandbox\.sql/
|
79
|
+
end
|
80
|
+
|
81
|
+
context "when given a database parameter" do
|
82
|
+
it "dumps the specified database" do
|
83
|
+
output = invoke!(%W{dump -d #{db_path}})
|
84
|
+
output[:stdout].should =~ /Dumping schema from database '#{db_path}'/
|
85
|
+
end
|
86
|
+
|
87
|
+
context "that does not exist" do
|
88
|
+
it "fails with error" do
|
89
|
+
output = invoke!(%w{dump -d /tmp/invalid_path})
|
90
|
+
output[:stderr].should =~ /Cannot dump database: no file at path '\/tmp\/invalid_path'/
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
describe "#drop" do
|
97
|
+
it "truncates the database file" do
|
98
|
+
File.open(db_path, 'w+') { |f| f << "test" }
|
99
|
+
output = invoke!(%w{drop})
|
100
|
+
File.size(db_path).should == 0
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
data/spec/util_spec.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe MonkeyButler::Util do
|
4
|
+
describe '#migrations_by_version' do
|
5
|
+
it "returns a Hash keyed by version" do
|
6
|
+
paths = %w{migrations/20140523123443021_create_sandbox.sql migrations/20140523123845031_add_comments_table.sql}
|
7
|
+
hash = MonkeyButler::Util.migrations_by_version(paths)
|
8
|
+
hash.size.should == 2
|
9
|
+
hash[20140523123443021].should == 'migrations/20140523123443021_create_sandbox.sql'
|
10
|
+
hash[20140523123845031].should == 'migrations/20140523123845031_add_comments_table.sql'
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
metadata
ADDED
@@ -0,0 +1,260 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: monkey_butler
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.2.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Blake Watters
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-06-15 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: thor
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.19.1
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.19.1
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: sqlite3
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.3.9
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.3.9
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: cql-rb
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ~>
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 2.0.0
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 2.0.0
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: bundler
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.6'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ~>
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.6'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rake
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rspec
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ~>
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 2.14.1
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ~>
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 2.14.1
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: guard-rspec
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ~>
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 4.2.9
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ~>
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 4.2.9
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: simplecov
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ~>
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: 0.8.2
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ~>
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: 0.8.2
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: byebug
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ~>
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: 3.1.2
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ~>
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: 3.1.2
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: cocoapods
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ~>
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: 0.33.1
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ~>
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: 0.33.1
|
153
|
+
description: A simple hello world gem
|
154
|
+
email: blake@layer.com
|
155
|
+
executables:
|
156
|
+
- mb
|
157
|
+
extensions: []
|
158
|
+
extra_rdoc_files: []
|
159
|
+
files:
|
160
|
+
- .bundle/config
|
161
|
+
- .gitignore
|
162
|
+
- .ruby-version
|
163
|
+
- CHANGELOG.md
|
164
|
+
- Gemfile
|
165
|
+
- Gemfile.lock
|
166
|
+
- Guardfile
|
167
|
+
- LICENSE
|
168
|
+
- README.md
|
169
|
+
- Rakefile
|
170
|
+
- bin/mb
|
171
|
+
- lib/monkey_butler.rb
|
172
|
+
- lib/monkey_butler/actions.rb
|
173
|
+
- lib/monkey_butler/cli.rb
|
174
|
+
- lib/monkey_butler/databases/abstract_database.rb
|
175
|
+
- lib/monkey_butler/databases/cassandra_database.rb
|
176
|
+
- lib/monkey_butler/databases/sqlite_database.rb
|
177
|
+
- lib/monkey_butler/migrations.rb
|
178
|
+
- lib/monkey_butler/project.rb
|
179
|
+
- lib/monkey_butler/targets/base.rb
|
180
|
+
- lib/monkey_butler/targets/cassandra/cassandra_target.rb
|
181
|
+
- lib/monkey_butler/targets/cassandra/create_schema_migrations.cql.erb
|
182
|
+
- lib/monkey_butler/targets/cassandra/migration.cql.erb
|
183
|
+
- lib/monkey_butler/targets/cocoapods/cocoapods_target.rb
|
184
|
+
- lib/monkey_butler/targets/cocoapods/podspec.erb
|
185
|
+
- lib/monkey_butler/targets/maven/maven_target.rb
|
186
|
+
- lib/monkey_butler/targets/maven/project/.gitignore
|
187
|
+
- lib/monkey_butler/targets/maven/project/MonkeyButler.iml
|
188
|
+
- lib/monkey_butler/targets/maven/project/build.gradle
|
189
|
+
- lib/monkey_butler/targets/sqlite/create_monkey_butler_tables.sql.erb
|
190
|
+
- lib/monkey_butler/targets/sqlite/migration.sql.erb
|
191
|
+
- lib/monkey_butler/targets/sqlite/sqlite_target.rb
|
192
|
+
- lib/monkey_butler/templates/Gemfile.erb
|
193
|
+
- lib/monkey_butler/templates/gitignore.erb
|
194
|
+
- lib/monkey_butler/util.rb
|
195
|
+
- lib/monkey_butler/version.rb
|
196
|
+
- logo.jpg
|
197
|
+
- monkey_butler.gemspec
|
198
|
+
- spec/cli_spec.rb
|
199
|
+
- spec/databases/cassandra_database_spec.rb
|
200
|
+
- spec/databases/sqlite_database_spec.rb
|
201
|
+
- spec/migrations_spec.rb
|
202
|
+
- spec/project_spec.rb
|
203
|
+
- spec/sandbox/cassandra/.gitignore
|
204
|
+
- spec/sandbox/cassandra/.monkey_butler.yml
|
205
|
+
- spec/sandbox/cassandra/migrations/20140523123443021_create_sandbox.cql.sql
|
206
|
+
- spec/sandbox/cassandra/sandbox.cql
|
207
|
+
- spec/sandbox/sqlite/.gitignore
|
208
|
+
- spec/sandbox/sqlite/.monkey_butler.yml
|
209
|
+
- spec/sandbox/sqlite/migrations/20140523123443021_create_sandbox.sql
|
210
|
+
- spec/sandbox/sqlite/sandbox.sql
|
211
|
+
- spec/spec_helper.rb
|
212
|
+
- spec/targets/cassandra_target_spec.rb
|
213
|
+
- spec/targets/cocoapods_target_spec.rb
|
214
|
+
- spec/targets/maven_target_spec.rb
|
215
|
+
- spec/targets/sqlite_target_spec.rb
|
216
|
+
- spec/util_spec.rb
|
217
|
+
homepage: http://github.com/layerhq/monkey_butler
|
218
|
+
licenses:
|
219
|
+
- Apache 2
|
220
|
+
metadata: {}
|
221
|
+
post_install_message:
|
222
|
+
rdoc_options: []
|
223
|
+
require_paths:
|
224
|
+
- lib
|
225
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
226
|
+
requirements:
|
227
|
+
- - '>='
|
228
|
+
- !ruby/object:Gem::Version
|
229
|
+
version: '0'
|
230
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
231
|
+
requirements:
|
232
|
+
- - '>='
|
233
|
+
- !ruby/object:Gem::Version
|
234
|
+
version: '0'
|
235
|
+
requirements: []
|
236
|
+
rubyforge_project:
|
237
|
+
rubygems_version: 2.0.14
|
238
|
+
signing_key:
|
239
|
+
specification_version: 4
|
240
|
+
summary: Monkey Butler is a schema management system for SQLite
|
241
|
+
test_files:
|
242
|
+
- spec/cli_spec.rb
|
243
|
+
- spec/databases/cassandra_database_spec.rb
|
244
|
+
- spec/databases/sqlite_database_spec.rb
|
245
|
+
- spec/migrations_spec.rb
|
246
|
+
- spec/project_spec.rb
|
247
|
+
- spec/sandbox/cassandra/.gitignore
|
248
|
+
- spec/sandbox/cassandra/.monkey_butler.yml
|
249
|
+
- spec/sandbox/cassandra/migrations/20140523123443021_create_sandbox.cql.sql
|
250
|
+
- spec/sandbox/cassandra/sandbox.cql
|
251
|
+
- spec/sandbox/sqlite/.gitignore
|
252
|
+
- spec/sandbox/sqlite/.monkey_butler.yml
|
253
|
+
- spec/sandbox/sqlite/migrations/20140523123443021_create_sandbox.sql
|
254
|
+
- spec/sandbox/sqlite/sandbox.sql
|
255
|
+
- spec/spec_helper.rb
|
256
|
+
- spec/targets/cassandra_target_spec.rb
|
257
|
+
- spec/targets/cocoapods_target_spec.rb
|
258
|
+
- spec/targets/maven_target_spec.rb
|
259
|
+
- spec/targets/sqlite_target_spec.rb
|
260
|
+
- spec/util_spec.rb
|