branchinator 0.1.0

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