migration_investigation 0.0.2 → 0.0.3

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.
@@ -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