migration_investigation 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 91513fab4ee07b15ace6022637aac1c4a6b0d63c
4
+ data.tar.gz: 678ac5207077c480991cbf8434c782dad0723d51
5
+ SHA512:
6
+ metadata.gz: 8e932ec123891349b920a8bd9b6d0f7c54eea89e0fd5bc39900635bb7beda5bac25f0bede1f84524e00bed31e51c38f446b60c740ad77f0c706c3f2b4822cc2f
7
+ data.tar.gz: ab1cc4ed15336aae4d5ef5a5409f5f873690db37e5e9b6467272867d691c8da11889ff8786099eae9ca639779c9280dc159445faacb4e5624caa40553d932d5f
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
- source 'https://rubygems.org'
1
+ source "https://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in migration_investigation.gemspec
4
4
  gemspec
data/README.md CHANGED
@@ -1,12 +1,14 @@
1
1
  # MigrationInvestigation
2
2
 
3
- TODO: Write a gem description
3
+ This gem will check to see if you need to run migrations without loading your environment.
4
+ It assumes that you are using [auto_tagger](https://github.com/zilkey/auto_tagger) to tag the SHA
5
+ that has been deployed.
4
6
 
5
7
  ## Installation
6
8
 
7
9
  Add this line to your application's Gemfile:
8
10
 
9
- gem 'migration_investigation'
11
+ gem "migration_investigation"
10
12
 
11
13
  And then execute:
12
14
 
@@ -18,12 +20,22 @@ Or install it yourself as:
18
20
 
19
21
  ## Usage
20
22
 
21
- TODO: Write usage instructions here
23
+ The gem is very simple:
24
+
25
+ $ MigrationInvestigation.pending_migrations? "staging", "abc123"
26
+
27
+ Where `staging` is the name of the tag, and `abc123` is the SHA you're about to deploy.
28
+ You can also pass nil for the SHA you're about to deploy and it will assume you're deloying `HEAD`.
29
+
30
+ If you'd also like to check additional files or directories, say seed data, you can pass in a third
31
+ parameter:
32
+
33
+ $ MigrationInvestigation.pending_migrations? "staging", "abc123", additional_paths: ["db/seed.rb", "app/foo.txt"]
22
34
 
23
35
  ## Contributing
24
36
 
25
37
  1. Fork it
26
38
  2. Create your feature branch (`git checkout -b my-new-feature`)
27
- 3. Commit your changes (`git commit -am 'Add some feature'`)
39
+ 3. Commit your changes (`git commit -am "Add some feature"`)
28
40
  4. Push to the branch (`git push origin my-new-feature`)
29
41
  5. Create new Pull Request
@@ -2,20 +2,23 @@ require "migration_investigation/version"
2
2
 
3
3
  module MigrationInvestigation
4
4
  class << self
5
- def pending_migrations? stage, new_sha
5
+ def pending_migrations?(stage, new_sha, options={})
6
+ interesting_paths = options.fetch(:additional_paths, [])
7
+ interesting_paths = [interesting_paths] unless interesting_paths.is_a?(Array)
8
+ interesting_paths << "db/migrate/"
6
9
  old_sha = get_latest_sha stage
7
- change_count = get_change_count old_sha, new_sha
10
+ change_count = get_change_count old_sha, new_sha, interesting_paths
8
11
  change_count != 0
9
12
  end
10
13
 
11
14
  private
12
15
 
13
- def get_latest_sha stage
16
+ def get_latest_sha(stage)
14
17
  AutoTagger::Base.new({}).refs_for_stage(stage).last.sha
15
18
  end
16
19
 
17
- def get_change_count old_sha, new_sha
18
- changes = `git diff --name-only #{old_sha} #{new_sha} db/migrate/ | wc -l`
20
+ def get_change_count(old_sha, new_sha, interesting_paths)
21
+ changes = `git diff --name-only #{old_sha} #{new_sha} #{interesting_paths.join(" ")} | wc -l`
19
22
  changes.to_i
20
23
  end
21
24
  end
@@ -1,3 +1,3 @@
1
1
  module MigrationInvestigation
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -1,15 +1,15 @@
1
1
  # -*- encoding: utf-8 -*-
2
- lib = File.expand_path('../lib', __FILE__)
2
+ lib = File.expand_path("../lib", __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'migration_investigation/version'
4
+ require "migration_investigation/version"
5
5
 
6
6
  Gem::Specification.new do |gem|
7
7
  gem.name = "migration_investigation"
8
8
  gem.version = MigrationInvestigation::VERSION
9
9
  gem.authors = ["Brent Wheeldon"]
10
10
  gem.email = ["brent.wheeldon@gmail.com"]
11
- gem.description = %q{Checks whether migrations need to be run, without loading your environment}
12
- gem.summary = %q{Checks whether migrations need to be run, without loading your environment}
11
+ gem.description = %q{Checks whether migrations, or other operations, need to be run, without loading your environment}
12
+ gem.summary = %q{Checks whether migrations, or other parts of your repo, have any changes.}
13
13
  gem.homepage = "https://github.com/BrentWheeldon/migration_investigation"
14
14
  gem.license = "MIT"
15
15
 
@@ -18,6 +18,6 @@ Gem::Specification.new do |gem|
18
18
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
19
19
  gem.require_paths = ["lib"]
20
20
 
21
- gem.add_dependency 'auto_tagger'
22
- gem.add_development_dependency 'rspec'
21
+ gem.add_dependency "auto_tagger", "~> 0"
22
+ gem.add_development_dependency "rspec", "~> 3"
23
23
  end
@@ -1,34 +1,59 @@
1
- require 'spec_helper'
1
+ require "spec_helper"
2
2
 
3
3
  describe MigrationInvestigation do
4
4
  describe ".pending_migrations?" do
5
- subject { MigrationInvestigation.pending_migrations? stage, new_sha }
6
-
7
5
  let(:stage) { "stage" }
8
6
  let(:new_sha) { "abc123" }
9
7
 
10
8
  let(:refs) { [ref1, ref2] }
11
- let(:ref1) { stub(:ref1) }
12
- let(:ref2) { stub(:ref2, sha: old_sha) }
9
+ let(:ref1) { double(:ref1) }
10
+ let(:ref2) { double(:ref2, sha: old_sha) }
13
11
  let(:old_sha) { "cba321" }
14
12
 
15
13
  before do
16
- auto_tagger = stub(:auto_tagger)
17
- AutoTagger::Base.stub(:new).with({}) { auto_tagger }
18
- auto_tagger.stub(:refs_for_stage).with(stage) { refs }
19
- MigrationInvestigation.stub(:`).with("git diff --name-only #{old_sha} #{new_sha} db/migrate/ | wc -l") { git_diff }
14
+ auto_tagger = double(:auto_tagger)
15
+ allow(AutoTagger::Base).to receive(:new).with({}).and_return(auto_tagger)
16
+ allow(auto_tagger).to receive(:refs_for_stage).with(stage).and_return(refs)
20
17
  end
21
18
 
22
- context "when there are migrations changed between the last tag for the given change, and the new SHA" do
23
- let(:git_diff) { " 3\n" }
19
+ context "when no additional paths are passed in" do
20
+ subject { MigrationInvestigation.pending_migrations? stage, new_sha }
21
+
22
+ before do
23
+ allow(MigrationInvestigation).to receive(:`).with("git diff --name-only #{old_sha} #{new_sha} db/migrate/ | wc -l").and_return(git_diff)
24
+ end
25
+
26
+ context "when there are migrations changed between the last tag for the given change, and the new SHA" do
27
+ let(:git_diff) { " 3\n" }
28
+
29
+ it { is_expected.to be_truthy }
30
+ end
31
+
32
+ context "when there are no migrations changes between the last tag for the given change, and the new SHA" do
33
+ let(:git_diff) { " 0\n" }
24
34
 
25
- it { should be_true }
35
+ it { is_expected.to be_falsy }
36
+ end
26
37
  end
27
38
 
28
- context "when there are no migrations changes between the last tag for the given change, and the new SHA" do
29
- let(:git_diff) { " 0\n" }
39
+ context "when additional paths are passed in" do
40
+ subject { MigrationInvestigation.pending_migrations? stage, new_sha, additional_paths: ["app/foo.rb"] }
41
+
42
+ before do
43
+ allow(MigrationInvestigation).to receive(:`).with("git diff --name-only #{old_sha} #{new_sha} app/foo.rb db/migrate/ | wc -l").and_return(git_diff)
44
+ end
45
+
46
+ context "when there are changes between the last tag for the given change, and the new SHA" do
47
+ let(:git_diff) { " 3\n" }
48
+
49
+ it { is_expected.to be_truthy }
50
+ end
51
+
52
+ context "when there are no changes between the last tag for the given change, and the new SHA" do
53
+ let(:git_diff) { " 0\n" }
30
54
 
31
- it { should be_false }
55
+ it { is_expected.to be_falsy }
56
+ end
32
57
  end
33
58
  end
34
59
  end
@@ -1,9 +1,6 @@
1
- require 'migration_investigation'
2
- require 'auto_tagger'
1
+ require "migration_investigation"
2
+ require "auto_tagger"
3
3
 
4
4
  RSpec.configure do |config|
5
- config.treat_symbols_as_metadata_keys_with_true_values = true
6
- config.run_all_when_everything_filtered = true
7
- config.filter_run :focus
8
- config.order = 'random'
5
+ config.order = "random"
9
6
  end
metadata CHANGED
@@ -1,57 +1,53 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: migration_investigation
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
5
- prerelease:
4
+ version: 0.0.3
6
5
  platform: ruby
7
6
  authors:
8
7
  - Brent Wheeldon
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-12-29 00:00:00.000000000 Z
11
+ date: 2015-04-30 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: auto_tagger
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - "~>"
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - "~>"
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: rspec
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - "~>"
36
32
  - !ruby/object:Gem::Version
37
- version: '0'
33
+ version: '3'
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - "~>"
44
39
  - !ruby/object:Gem::Version
45
- version: '0'
46
- description: Checks whether migrations need to be run, without loading your environment
40
+ version: '3'
41
+ description: Checks whether migrations, or other operations, need to be run, without
42
+ loading your environment
47
43
  email:
48
44
  - brent.wheeldon@gmail.com
49
45
  executables: []
50
46
  extensions: []
51
47
  extra_rdoc_files: []
52
48
  files:
53
- - .gitignore
54
- - .rspec
49
+ - ".gitignore"
50
+ - ".rspec"
55
51
  - Gemfile
56
52
  - LICENSE.txt
57
53
  - README.md
@@ -64,28 +60,27 @@ files:
64
60
  homepage: https://github.com/BrentWheeldon/migration_investigation
65
61
  licenses:
66
62
  - MIT
63
+ metadata: {}
67
64
  post_install_message:
68
65
  rdoc_options: []
69
66
  require_paths:
70
67
  - lib
71
68
  required_ruby_version: !ruby/object:Gem::Requirement
72
- none: false
73
69
  requirements:
74
- - - ! '>='
70
+ - - ">="
75
71
  - !ruby/object:Gem::Version
76
72
  version: '0'
77
73
  required_rubygems_version: !ruby/object:Gem::Requirement
78
- none: false
79
74
  requirements:
80
- - - ! '>='
75
+ - - ">="
81
76
  - !ruby/object:Gem::Version
82
77
  version: '0'
83
78
  requirements: []
84
79
  rubyforge_project:
85
- rubygems_version: 1.8.24
80
+ rubygems_version: 2.4.6
86
81
  signing_key:
87
- specification_version: 3
88
- summary: Checks whether migrations need to be run, without loading your environment
82
+ specification_version: 4
83
+ summary: Checks whether migrations, or other parts of your repo, have any changes.
89
84
  test_files:
90
85
  - spec/migration_investigation_spec.rb
91
86
  - spec/spec_helper.rb