gemdiff 0.3.1 → 0.4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f8d9b69ba8b19e234495e6807c0b6617046fc6c1
4
- data.tar.gz: 7afe601707ea661c706106b860572a7b5dfc4447
3
+ metadata.gz: 0a91837ca05f7dba3fc3eb2cefeac019346a9d3c
4
+ data.tar.gz: efeb3363bdf56d03c5b545f7243f41868bb14bd8
5
5
  SHA512:
6
- metadata.gz: ad60a0e67b43aa9f4d34f0a0eef558e92709072061bfc541b332fb3dc62ba133d0ba7e36e04934f9eb1d717377376a0ccdfe5c7ecb5ef238d856ab9e45609106
7
- data.tar.gz: 1bfe630c80b0b209f5109226ac0c06d1d4d1badc26f963f8d96547664996dc68c21d694aa9384d4c37322efad4be16b2d2a17dadd61a0d0a51017ec49c2d2a54
6
+ metadata.gz: 22961ac6e18e487fc6583291052c4ddecd19f584fc1a71055297a3f0bbfaf9311dc82ace8313378d353a09e56f8ed58143ff4e5796b6677262fdd71e06cbee1f
7
+ data.tar.gz: 15a9367f60bc852519a2bd453a21b11d71d02f476f5fbd38289b570b758ac2db8e263d672a683ed148483b5b17f3531a9bbed2895f126a16701a6502d6d9df41
data/README.md CHANGED
@@ -42,10 +42,45 @@ Open? (y to open, else skip)
42
42
 
43
43
  You can use `gemdiff` bypassing bundler and query a gem by entering explicit version numbers.
44
44
 
45
- For example, open the GitHub compare view in browser for difference between `arel` versions 4.0.2 and 5.0.0:
45
+ For example, open the GitHub compare view in browser for difference between `haml` versions 4.0.4 and 4.0.5:
46
46
 
47
47
  ```sh
48
- $ gemdiff compare arel --new=5.0.0 --old=4.0.2
48
+ $ gemdiff compare haml --new=4.0.5 --old=4.0.4
49
+ ```
50
+
51
+ ### `update`
52
+
53
+ `gemdiff` can simplify your git workflow around updating gems. Use `update` to update a gem in your
54
+ bundle and commit the change to your repository. You will be shown a preview of the `git diff` and
55
+ you may choose to commit or reset the change.
56
+
57
+ ```sh
58
+ $ gemdiff update haml
59
+
60
+ Updating haml...
61
+ diff --git a/Gemfile.lock b/Gemfile.lock
62
+ index d5544ef..2d5def8 100644
63
+ --- a/Gemfile.lock
64
+ +++ b/Gemfile.lock
65
+ @@ -38,7 +38,7 @@ GEM
66
+ dalli (2.7.0)
67
+ debugger-linecache (1.2.0)
68
+ erubis (2.7.0)
69
+ - haml (4.0.4)
70
+ + haml (4.0.5)
71
+ tilt
72
+ hike (1.2.3)
73
+ i18n (0.6.9)
74
+
75
+ Commit? (c to commit, r to reset, else do nothing) c
76
+
77
+ commit ebcc13f4c9a43f2e844d9d185e527652021c6a8f
78
+ Author: Tee Parham
79
+ Date: Mon Mar 3 16:38:32 2014 -0700
80
+
81
+ Update haml to 4.0.5
82
+
83
+ diff --git a/Gemfile.lock
49
84
  ```
50
85
 
51
86
  ### `find`
@@ -53,8 +88,8 @@ $ gemdiff compare arel --new=5.0.0 --old=4.0.2
53
88
  Lookup the repository URL using the gemspec. If a GitHub URL is not found, hit the GitHub search API.
54
89
 
55
90
  ```sh
56
- $ gemdiff find arel
57
- http://github.com/rails/arel
91
+ $ gemdiff find haml
92
+ http://github.com/haml/haml
58
93
  ```
59
94
 
60
95
  ### `open`
@@ -62,7 +97,7 @@ http://github.com/rails/arel
62
97
  Open the repository URL:
63
98
 
64
99
  ```sh
65
- $ gemdiff open arel
100
+ $ gemdiff open haml
66
101
  ```
67
102
 
68
103
  ### `releases`
@@ -70,7 +105,7 @@ $ gemdiff open arel
70
105
  Open the repository's release history page:
71
106
 
72
107
  ```sh
73
- $ gemdiff releases arel
108
+ $ gemdiff releases haml
74
109
  ```
75
110
 
76
111
  ### `commits`
@@ -78,7 +113,7 @@ $ gemdiff releases arel
78
113
  Open the repository's master branch commit history page:
79
114
 
80
115
  ```sh
81
- $ gemdiff commits arel
116
+ $ gemdiff commits haml
82
117
  ```
83
118
 
84
119
  ### `help`
@@ -1,5 +1,7 @@
1
1
  require 'gemdiff/version'
2
+ require 'gemdiff/colorize'
2
3
  require 'gemdiff/cli'
3
4
  require 'gemdiff/bundle_inspector'
4
5
  require 'gemdiff/outdated_gem'
5
6
  require 'gemdiff/repo_finder'
7
+ require 'gemdiff/gem_updater'
@@ -2,9 +2,8 @@ module Gemdiff
2
2
  class BundleInspector
3
3
  def list
4
4
  @list ||= begin
5
- output = bundle_outdated_strict
6
5
  gems = []
7
- output.split("\n").each do |line|
6
+ outdated.split("\n").each do |line|
8
7
  next unless (outdated_gem = new_outdated_gem(line))
9
8
  gems << outdated_gem
10
9
  end
@@ -12,6 +11,10 @@ module Gemdiff
12
11
  end
13
12
  end
14
13
 
14
+ def outdated
15
+ @outdated ||= bundle_outdated_strict
16
+ end
17
+
15
18
  def get(gem_name)
16
19
  list.select{ |gem| gem.name == gem_name }.first
17
20
  end
@@ -2,8 +2,12 @@ require 'thor'
2
2
 
3
3
  module Gemdiff
4
4
  class CLI < Thor
5
+ include Colorize
6
+
5
7
  default_task :outdated
6
8
 
9
+ CHECKING_FOR_OUTDATED = "Checking for outdated gems in your bundle..."
10
+
7
11
  desc 'find <gem>', 'Find the github repository URL for a gem'
8
12
  def find(gem_name)
9
13
  gem = OutdatedGem.new(gem_name)
@@ -45,7 +49,7 @@ DESC
45
49
  return unless gem.repo?
46
50
  gem.set_versions options
47
51
  if gem.missing_versions?
48
- puts "Checking for outdated gems in your bundle..."
52
+ puts CHECKING_FOR_OUTDATED
49
53
  unless gem.load_bundle_versions
50
54
  puts "#{gem_name} is not outdated in your bundle. Specify versions."
51
55
  return
@@ -57,13 +61,29 @@ DESC
57
61
 
58
62
  desc 'outdated', 'Compare each outdated gem in the bundle. You will be prompted to open each compare view.'
59
63
  def outdated
60
- puts "Checking for outdated gems in your bundle..."
64
+ puts CHECKING_FOR_OUTDATED
61
65
  inspector = BundleInspector.new
66
+ puts inspector.outdated
62
67
  inspector.list.each do |gem|
63
68
  puts gem.compare_message
64
69
  response = ask("Open? (y to open, else skip)")
65
70
  gem.compare if response == 'y'
66
71
  end
67
72
  end
73
+
74
+ desc 'update <gem>', 'Update a gem, show a git diff of the update, and commit or reset'
75
+ def update(name)
76
+ puts "Updating #{name}..."
77
+ gem = GemUpdater.new(name)
78
+ gem.update
79
+ puts colorize_git_output(gem.diff)
80
+ response = ask("\nCommit? (c to commit, r to reset, else do nothing)")
81
+ if response == 'c'
82
+ gem.commit
83
+ puts "\n" + colorize_git_output(gem.show)
84
+ elsif response == 'r'
85
+ puts gem.reset
86
+ end
87
+ end
68
88
  end
69
89
  end
@@ -0,0 +1,44 @@
1
+ module Gemdiff
2
+ module Colorize
3
+ COLORS =
4
+ {
5
+ red: 31,
6
+ green: 32,
7
+ yellow: 33,
8
+ blue: 34,
9
+ magenta: 35,
10
+ }
11
+
12
+ # works with `git show` and `git diff`
13
+ def colorize_git_output(lines)
14
+ out = []
15
+ lines.split("\n").each do |line|
16
+ out <<
17
+ if line.start_with?("---") || line.start_with?("+++") || line.start_with?("diff") || line.start_with?("index")
18
+ colorize line, :blue
19
+ elsif line.start_with?("@@")
20
+ colorize line, :magenta
21
+ elsif line.start_with?("commit")
22
+ colorize line, :yellow
23
+ elsif line.start_with?("-")
24
+ colorize line, :red
25
+ elsif line.start_with?("+")
26
+ colorize line, :green
27
+ else
28
+ line
29
+ end
30
+ end
31
+ out.join("\n")
32
+ end
33
+
34
+ def colorize(string, color)
35
+ "\e[#{to_color_code(color)}m#{string}\e[0m"
36
+ end
37
+
38
+ private
39
+
40
+ def to_color_code(color)
41
+ COLORS[color] || 30
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,64 @@
1
+ module Gemdiff
2
+ class GemUpdater
3
+ attr_accessor :name
4
+
5
+ def initialize(name)
6
+ @name = name
7
+ end
8
+
9
+ def update
10
+ bundle_update
11
+ end
12
+
13
+ def diff
14
+ git_diff
15
+ end
16
+
17
+ def show
18
+ git_show
19
+ end
20
+
21
+ def commit
22
+ git_commit
23
+ end
24
+
25
+ def reset
26
+ git_reset
27
+ end
28
+
29
+ private
30
+
31
+ def git_show
32
+ `git show`
33
+ end
34
+
35
+ def git_diff
36
+ `git diff`
37
+ end
38
+
39
+ def git_commit
40
+ added = git_changed_line
41
+ return false if added.empty?
42
+ version = added.split(' ').last.gsub(/[()]/, '')
43
+ git_add_and_commit_lockfile version
44
+ true
45
+ end
46
+
47
+ def git_changed_line
48
+ `git diff | grep #{name} | grep '+ '`
49
+ end
50
+
51
+ def git_add_and_commit_lockfile(version)
52
+ `git add Gemfile.lock && git commit -m 'Update #{name} to #{version}'`
53
+ end
54
+
55
+ def git_reset
56
+ `git checkout Gemfile.lock`
57
+ end
58
+
59
+ def bundle_update
60
+ `bundle update #{name}`
61
+ end
62
+
63
+ end
64
+ end
@@ -1,3 +1,3 @@
1
1
  module Gemdiff
2
- VERSION = '0.3.1'
2
+ VERSION = '0.4.0'
3
3
  end
@@ -0,0 +1,167 @@
1
+ require 'test_helper'
2
+
3
+ module Gemdiff
4
+ class CLITest < MiniTest::Spec
5
+ before do
6
+ @cli = CLI.new
7
+ end
8
+
9
+ describe "#find" do
10
+ it "finds" do
11
+ mock_gem "haml"
12
+ @cli.expects(:puts).with("http://github.com/haml/haml")
13
+ @cli.find "haml"
14
+ end
15
+
16
+ it "does not find" do
17
+ mock_missing_gem
18
+ @cli.expects(:puts).with("Could not find github repository for notfound.")
19
+ @cli.find "notfound"
20
+ end
21
+ end
22
+
23
+ describe "#open" do
24
+ it "opens repo" do
25
+ gem = mock_gem("haml")
26
+ @cli.expects(:puts).with("http://github.com/haml/haml")
27
+ gem.expects :open
28
+ @cli.open "haml"
29
+ end
30
+ end
31
+
32
+ describe "#releases" do
33
+ it "opens releases page" do
34
+ gem = mock_gem("haml")
35
+ @cli.expects(:puts).with("http://github.com/haml/haml")
36
+ gem.expects :releases
37
+ @cli.releases "haml"
38
+ end
39
+ end
40
+
41
+ describe "#commits" do
42
+ it "opens commits page" do
43
+ gem = mock_gem("haml")
44
+ @cli.expects(:puts).with("http://github.com/haml/haml")
45
+ gem.expects :commits
46
+ @cli.commits "haml"
47
+ end
48
+ end
49
+
50
+ describe "#compare" do
51
+ it "opens compare view" do
52
+ gem = mock_gem("haml")
53
+ gem.expects(:set_versions).with({})
54
+ gem.expects(:missing_versions?).returns(false)
55
+ gem.expects(:compare_message).returns("compare message")
56
+ @cli.expects(:puts).with("http://github.com/haml/haml")
57
+ @cli.expects(:puts).with("compare message")
58
+ gem.expects :compare
59
+ @cli.compare "haml"
60
+ end
61
+
62
+ it "returns when the gem is not found" do
63
+ mock_missing_gem
64
+ @cli.expects(:puts).with("Could not find github repository for notfound.")
65
+ @cli.compare "notfound"
66
+ end
67
+ end
68
+
69
+ describe "#outdated" do
70
+ it "does nothing when nothing to update" do
71
+ mock_inspector = mock do
72
+ stubs list: []
73
+ stubs outdated: ""
74
+ end
75
+ BundleInspector.stubs new: mock_inspector
76
+ @cli.expects(:puts).with(CLI::CHECKING_FOR_OUTDATED)
77
+ @cli.expects(:puts).with("")
78
+ @cli.outdated
79
+ end
80
+
81
+ it "compares outdated gems with responses of y" do
82
+ gem = OutdatedGem.new("haml", "4.0.4", "4.0.5")
83
+ mock_inspector = mock do
84
+ stubs list: [gem]
85
+ stubs outdated: "outdated"
86
+ end
87
+ BundleInspector.stubs new: mock_inspector
88
+ @cli.stubs ask: 'y'
89
+ @cli.expects(:puts).with(CLI::CHECKING_FOR_OUTDATED)
90
+ @cli.expects(:puts).with("outdated")
91
+ @cli.expects(:puts).with("haml: 4.0.5 > 4.0.4")
92
+ gem.expects :compare
93
+ @cli.outdated
94
+ end
95
+
96
+ it "skips outdated gems without responses of y" do
97
+ gem = OutdatedGem.new("haml", "4.0.4", "4.0.5")
98
+ mock_inspector = mock do
99
+ stubs list: [gem]
100
+ stubs outdated: "outdated"
101
+ end
102
+ BundleInspector.stubs new: mock_inspector
103
+ @cli.stubs ask: ''
104
+ @cli.expects(:puts).with(CLI::CHECKING_FOR_OUTDATED)
105
+ @cli.expects(:puts).with("outdated")
106
+ @cli.expects(:puts).with("haml: 4.0.5 > 4.0.4")
107
+ gem.expects(:compare).never
108
+ @cli.outdated
109
+ end
110
+ end
111
+
112
+ describe "#update" do
113
+ before do
114
+ @mock_gem = mock do
115
+ stubs diff: "le diff"
116
+ stubs show: "le show"
117
+ end
118
+ GemUpdater.stubs new: @mock_gem
119
+ end
120
+
121
+ it "updates the gem and returns with no response" do
122
+ @cli.stubs ask: ''
123
+ @cli.expects(:puts).with("Updating haml...")
124
+ @mock_gem.expects :update
125
+ @cli.expects(:puts).with("le diff")
126
+ @cli.update "haml"
127
+ end
128
+
129
+ it "updates the gem and commits with responses of c" do
130
+ @cli.stubs ask: 'c'
131
+ @cli.expects(:puts).with("Updating haml...")
132
+ @mock_gem.expects :update
133
+ @cli.expects(:puts).with("le diff")
134
+ @mock_gem.expects :commit
135
+ @cli.expects(:puts).with("\nle show")
136
+ @cli.update "haml"
137
+ end
138
+
139
+ it "updates the gem and resets with responses of r" do
140
+ @cli.stubs ask: 'r'
141
+ @cli.expects(:puts).with("Updating haml...")
142
+ @mock_gem.expects :update
143
+ @cli.expects(:puts).with("le diff")
144
+ @mock_gem.expects(:reset).returns("le reset")
145
+ @cli.expects(:puts).with("le reset")
146
+ @cli.update "haml"
147
+ end
148
+ end
149
+
150
+ private
151
+
152
+ def mock_gem(name)
153
+ gem = mock do
154
+ stubs repo?: true
155
+ stubs repo: "http://github.com/#{name}/#{name}"
156
+ end
157
+ OutdatedGem.stubs new: gem
158
+ gem
159
+ end
160
+
161
+ def mock_missing_gem
162
+ gem = mock { stubs repo?: false }
163
+ OutdatedGem.stubs new: gem
164
+ gem
165
+ end
166
+ end
167
+ end
@@ -0,0 +1,46 @@
1
+ require 'test_helper'
2
+
3
+ module Gemdiff
4
+ class GemUpdaterTest < MiniTest::Spec
5
+ describe "#update" do
6
+ it "updates the gem" do
7
+ updater = GemUpdater.new("x")
8
+ updater.expects :bundle_update
9
+ updater.update
10
+ end
11
+ end
12
+
13
+ describe "#commit" do
14
+ it "adds a git commit for a gem update" do
15
+ updater = GemUpdater.new("aws-sdk")
16
+ updater.stubs git_changed_line: "+ aws-sdk (1.35.0)"
17
+ updater.expects(:git_add_and_commit_lockfile).with("1.35.0")
18
+ assert updater.commit
19
+ end
20
+ end
21
+
22
+ describe "#reset" do
23
+ it "resets Gemfile.lock" do
24
+ updater = GemUpdater.new("x")
25
+ updater.expects :git_reset
26
+ updater.reset
27
+ end
28
+ end
29
+
30
+ describe "#diff" do
31
+ it "returns git diff" do
32
+ updater = GemUpdater.new("x")
33
+ updater.expects :git_diff
34
+ updater.diff
35
+ end
36
+ end
37
+
38
+ describe "#show" do
39
+ it "returns git show" do
40
+ updater = GemUpdater.new("x")
41
+ updater.expects :git_show
42
+ updater.show
43
+ end
44
+ end
45
+ end
46
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gemdiff
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tee Parham
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-03 00:00:00.000000000 Z
11
+ date: 2014-03-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -141,10 +141,14 @@ files:
141
141
  - lib/gemdiff.rb
142
142
  - lib/gemdiff/bundle_inspector.rb
143
143
  - lib/gemdiff/cli.rb
144
+ - lib/gemdiff/colorize.rb
145
+ - lib/gemdiff/gem_updater.rb
144
146
  - lib/gemdiff/outdated_gem.rb
145
147
  - lib/gemdiff/repo_finder.rb
146
148
  - lib/gemdiff/version.rb
147
149
  - test/bundle_inspector_test.rb
150
+ - test/cli_test.rb
151
+ - test/gem_updater_test.rb
148
152
  - test/outdated_gem_test.rb
149
153
  - test/repo_finder_test.rb
150
154
  - test/test_helper.rb
@@ -174,6 +178,8 @@ specification_version: 4
174
178
  summary: Compare gem versions
175
179
  test_files:
176
180
  - test/bundle_inspector_test.rb
181
+ - test/cli_test.rb
182
+ - test/gem_updater_test.rb
177
183
  - test/outdated_gem_test.rb
178
184
  - test/repo_finder_test.rb
179
185
  - test/test_helper.rb