branchinator 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: a0cf45cc27acc050d49ebd0664f226c6c173d071
4
+ data.tar.gz: 9bb2f0d872cdb384a209a7211214669ee19ba7e5
5
+ SHA512:
6
+ metadata.gz: 68d4bea6aeef2e4fa2add8bc657e005f96e2aec5bee3bd157baa93b154a0edbfbaf7911db31071f6fbb78cc71b39ce127717bbd27a1f6fe40eb32bc2bffc0790
7
+ data.tar.gz: 78b99b7bdf77abb06020234762d0268e3d775983ecc412bb890a88eaa3753dc6c973f0c25c96318d1c5a11e4616a3aba82f5d64e7846991f1a9656fe7022d4e5
data/README.md ADDED
@@ -0,0 +1,41 @@
1
+ Branchinator
2
+ ============
3
+
4
+ Database per branch so you can easily switch between database models.
5
+
6
+ # How to use
7
+
8
+ `bin/rails db:branch`
9
+
10
+ Will create a new database and load it with seed. It will create `.branchinator` with db name for each env.
11
+
12
+ `bin/rails db:unbranch`
13
+
14
+ Will remove the database and `.branchinator`
15
+
16
+ `bin/rails db:branch:reset`
17
+
18
+ Shortcut for branch remove + create.
19
+
20
+ # How to install
21
+
22
+ Put it into:
23
+
24
+ ```ruby
25
+ group :development, :test do
26
+ gem 'branchinator', github: 'pawelniewie/branchinator'
27
+ end
28
+ ```
29
+
30
+ In you `database.yml` put:
31
+
32
+ ```yaml
33
+ development:
34
+ <<: *default
35
+ database: <%= Branchinator.database %>
36
+
37
+ test:
38
+ <<: *default
39
+ database: <%= Branchinator.database %>
40
+ ```
41
+
@@ -0,0 +1,30 @@
1
+ module Branchinator
2
+ class BranchedDatabase
3
+ def self.name(*args)
4
+ new(*args).branch_database
5
+ end
6
+
7
+ def initialize(prefix: application_name, separator: '_', env: Rails.env)
8
+ @prefix = prefix
9
+ @separator = separator
10
+ @env = env
11
+ end
12
+
13
+ def current_branch
14
+ `git branch | grep "*"`.chomp.split.last.parameterize
15
+ end
16
+
17
+ def branch_database
18
+ [@prefix, current_branch, @env].join(@separator)
19
+ end
20
+
21
+ def default_database
22
+ [@prefix, @env].join(@separator)
23
+ end
24
+
25
+ def application_name
26
+ Rails.application.class.name.split('::').first.downcase
27
+ end
28
+ end
29
+ end
30
+
@@ -0,0 +1,3 @@
1
+ module Branchinator
2
+ FLAG_FILE = '.branchinator'
3
+ end
@@ -0,0 +1,10 @@
1
+ require 'branchinator/branched_database'
2
+ require 'branchinator/constants'
3
+
4
+ module Branchinator
5
+ class Railtie < Rails::Railtie
6
+ rake_tasks do
7
+ require 'tasks/db'
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,3 @@
1
+ module Branchinator
2
+ VERSION = '0.1.0'
3
+ end
@@ -0,0 +1,19 @@
1
+ require 'branchinator/railtie' if defined?(Rails)
2
+ require 'branchinator/version'
3
+
4
+ module Branchinator
5
+
6
+ def self.database()
7
+ dot_file = Rails.root.join(Branchinator::FLAG_FILE)
8
+ if dot_file.exist?
9
+ JSON.load(dot_file)[Rails.env] || self.default_database
10
+ else
11
+ self.default_database
12
+ end
13
+ end
14
+
15
+ def self.default_database()
16
+ BranchedDatabase.new.default_database
17
+ end
18
+
19
+ end
data/lib/tasks/db.rb ADDED
@@ -0,0 +1,41 @@
1
+ require 'branchinator/branched_database'
2
+ require 'branchinator/constants'
3
+
4
+ def create_database(env)
5
+ config = ActiveRecord::Base.configurations.values_at(env.to_s).first
6
+ config['database'] = Branchinator::BranchedDatabase.name(env: env)
7
+
8
+ ActiveRecord::Tasks::DatabaseTasks.create(config)
9
+ ActiveRecord::Base.establish_connection(env)
10
+
11
+ if env == :test
12
+ ActiveRecord::Schema.verbose = false
13
+ end
14
+ ActiveRecord::Tasks::DatabaseTasks.load_schema(config)
15
+ ActiveRecord::Tasks::DatabaseTasks.load_seed
16
+
17
+ config['database']
18
+ end
19
+
20
+ namespace :db do
21
+ desc 'Create branch specific database and load db/schema.rb'
22
+ task :branch => :environment do
23
+ env_with_database = [:development, :test].map do |env|
24
+ [env, create_database(env)]
25
+ end
26
+
27
+ File.write(Rails.root.join(Branchinator::FLAG_FILE), Hash[env_with_database].to_json)
28
+ end
29
+
30
+ desc 'Remove the branch specific database'
31
+ task :unbranch => 'branch:remove'
32
+
33
+ namespace :branch do
34
+ task :remove => :drop do
35
+ File.delete(Rails.root.join(Branchinator::FLAG_FILE))
36
+ end
37
+
38
+ desc 'Remove then Create the branch specific database'
39
+ task :reset => [:remove, :branch]
40
+ end
41
+ end
metadata ADDED
@@ -0,0 +1,64 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: branchinator
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Pawel Niewiadomski
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-08-29 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ description: Rails helper that simplifies database per branch development.
28
+ email: 11110000b@gmail.com
29
+ executables: []
30
+ extensions: []
31
+ extra_rdoc_files: []
32
+ files:
33
+ - README.md
34
+ - lib/branchinator.rb
35
+ - lib/branchinator/branched_database.rb
36
+ - lib/branchinator/constants.rb
37
+ - lib/branchinator/railtie.rb
38
+ - lib/branchinator/version.rb
39
+ - lib/tasks/db.rb
40
+ homepage: https://pawelniewiadomski.com
41
+ licenses:
42
+ - MIT
43
+ metadata: {}
44
+ post_install_message:
45
+ rdoc_options: []
46
+ require_paths:
47
+ - lib
48
+ required_ruby_version: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: '2'
53
+ required_rubygems_version: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: '0'
58
+ requirements: []
59
+ rubyforge_project:
60
+ rubygems_version: 2.5.1
61
+ signing_key:
62
+ specification_version: 4
63
+ summary: Helps you manage database per branch
64
+ test_files: []