rocktumbler 0.1.3 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +2 -1
- data/bin/tumble +9 -1
- data/lib/rocktumbler/cli.rb +18 -0
- data/lib/rocktumbler/gem.rb +0 -1
- data/lib/rocktumbler/group.rb +5 -1
- data/lib/rocktumbler/group_filter.rb +0 -1
- data/lib/rocktumbler/option.rb +5 -0
- data/lib/rocktumbler/tumbler.rb +30 -15
- data/lib/rocktumbler/version.rb +1 -1
- data/lib/rocktumbler.rb +3 -0
- data/rocktumbler.gemspec +5 -2
- metadata +40 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cfffcc07e1c5c9f09a99f2f68545b44909d6cfa6
|
4
|
+
data.tar.gz: e419bfb6576fdc80c32b1cca3bd8bf349d693911
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5d6011de66d607bf616da77f0f60dac3742ec7dedc95b9ef38d8013e55c785316d4eab64fd5481b94169e3c16b91dc2eba1cd414a0ff54407b3181d44b20fa0b
|
7
|
+
data.tar.gz: 48cd577fa16a238d5958011ac271e024fb86b617b839b2f7a47da4323758e4400b04b95e2c1fb82ebec6ae8f9bd97d951c9594f8df986e16d17f70e6e0ce7412
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Rocktumbler
|
2
2
|
|
3
|
-
[![Build Status](https://travis-ci.org/simonreed/rocktumbler.svg)](https://travis-ci.org/simonreed/rocktumbler)
|
3
|
+
[![Build Status](https://travis-ci.org/simonreed/rocktumbler.svg)](https://travis-ci.org/simonreed/rocktumbler) [![Code Climate](https://codeclimate.com/github/simonreed/rocktumbler/badges/gpa.svg)](https://codeclimate.com/github/simonreed/rocktumbler)
|
4
4
|
|
5
5
|
Rocktumbler is a gem that will take your existing Gemfile and ensure that it remains formatted and consistent.
|
6
6
|
|
@@ -64,6 +64,7 @@ Specific options:
|
|
64
64
|
-i, --info Display gem info comment.
|
65
65
|
-d, --homepage Display gem homepage comment.
|
66
66
|
-s, --skip-write Skip writing of Gemfile
|
67
|
+
-l, --verbose Display formatted output to STDOUT
|
67
68
|
|
68
69
|
Common options:
|
69
70
|
-h, --help Show this message
|
data/bin/tumble
CHANGED
@@ -4,4 +4,12 @@
|
|
4
4
|
Signal.trap('INT') { exit 1 }
|
5
5
|
|
6
6
|
require 'rocktumbler'
|
7
|
-
|
7
|
+
require 'benchmark'
|
8
|
+
|
9
|
+
cli = Rocktumbler::CLI.new
|
10
|
+
|
11
|
+
time = Benchmark.realtime do
|
12
|
+
cli.run
|
13
|
+
end
|
14
|
+
|
15
|
+
puts "Rocktumbler finished in #{time} seconds" if cli.opts.verbose
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require_relative 'exceptions'
|
2
|
+
|
3
|
+
module Rocktumbler
|
4
|
+
# The CLI is a class responsible of handling all the command line interface
|
5
|
+
# logic.
|
6
|
+
class CLI
|
7
|
+
attr_reader :opts
|
8
|
+
|
9
|
+
def initialize()
|
10
|
+
@opts = {}
|
11
|
+
end
|
12
|
+
|
13
|
+
def run(args = ARGV)
|
14
|
+
@opts = Option.parse(args)
|
15
|
+
Rocktumbler::Tumbler.new(@opts).tumble
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/lib/rocktumbler/gem.rb
CHANGED
data/lib/rocktumbler/group.rb
CHANGED
@@ -6,7 +6,7 @@ module Rocktumbler
|
|
6
6
|
def initialize(name, gem_dependencies, opts)
|
7
7
|
@name = name
|
8
8
|
@opts = opts
|
9
|
-
@gems = gem_dependencies
|
9
|
+
@gems = gems_from_dependencies(gem_dependencies)
|
10
10
|
end
|
11
11
|
|
12
12
|
def print
|
@@ -19,5 +19,9 @@ module Rocktumbler
|
|
19
19
|
str += "\nend\n" if @name != :default
|
20
20
|
str
|
21
21
|
end
|
22
|
+
|
23
|
+
def gems_from_dependencies(gem_dependencies)
|
24
|
+
gem_dependencies.map { |g| Rocktumbler::Gem.new(g, @opts) }
|
25
|
+
end
|
22
26
|
end
|
23
27
|
end
|
data/lib/rocktumbler/option.rb
CHANGED
@@ -13,6 +13,7 @@ module Rocktumbler
|
|
13
13
|
options.gem_info = false
|
14
14
|
options.gem_homepage = false
|
15
15
|
options.skip_write = false
|
16
|
+
options.verbose = false
|
16
17
|
|
17
18
|
opt_parser = OptionParser.new do |opts|
|
18
19
|
opts.banner = "Usage: tumble [options]"
|
@@ -32,6 +33,10 @@ module Rocktumbler
|
|
32
33
|
options.skip_write = true
|
33
34
|
end
|
34
35
|
|
36
|
+
opts.on("-l", "--verbose", "Display formatted output to STDOUT") do |docs|
|
37
|
+
options.verbose = true
|
38
|
+
end
|
39
|
+
|
35
40
|
opts.separator ""
|
36
41
|
opts.separator "Common options:"
|
37
42
|
|
data/lib/rocktumbler/tumbler.rb
CHANGED
@@ -4,21 +4,44 @@ module Rocktumbler
|
|
4
4
|
# The Tumbler class is responsible for executing the top level tumble method
|
5
5
|
# and reads, parses, cleans, writes and verifies the new gemfile.
|
6
6
|
class Tumbler
|
7
|
-
|
8
|
-
|
7
|
+
|
8
|
+
def initialize(opts, location = Bundler.default_gemfile)
|
9
|
+
@opts = opts
|
9
10
|
@gemfile_location = location
|
10
11
|
@bundler_dependencies = parse_gemfile(@gemfile_location)
|
12
|
+
@original_gemfile_str = File.open(@gemfile_location).read
|
11
13
|
@gemfile = Rocktumbler::Gemfile.new(location)
|
12
14
|
end
|
13
15
|
|
14
|
-
def tumble
|
15
|
-
@opts = Option.parse(args)
|
16
|
+
def tumble
|
16
17
|
groups = Rocktumbler::GroupFilter.new(@bundler_dependencies, @opts).filter
|
17
18
|
clean_gemfile_str = @gemfile.print_source_and_ruby
|
18
19
|
clean_gemfile_str << groups.map(&:print).join
|
19
|
-
|
20
|
-
|
21
|
-
|
20
|
+
if clean_gemfile_str == @original_gemfile_str
|
21
|
+
print Rainbow("No changes required to Gemfile\n").yellow
|
22
|
+
else
|
23
|
+
compare_to_original_gemfile(clean_gemfile_str)
|
24
|
+
write(clean_gemfile_str) unless @opts.skip_write
|
25
|
+
print Rainbow("New Gemfile generated and written to \
|
26
|
+
#{@gemfile_location}\n").green
|
27
|
+
verbose_highlight(clean_gemfile_str) if @opts.verbose
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def verbose_highlight(source)
|
34
|
+
print "\n"
|
35
|
+
formatter = Rouge::Formatters::Terminal256.new(theme: 'github')
|
36
|
+
lexer = Rouge::Lexers::Ruby.new
|
37
|
+
print formatter.format(lexer.lex(source))
|
38
|
+
print "\n"
|
39
|
+
end
|
40
|
+
|
41
|
+
def write(clean_gemfile_str)
|
42
|
+
gemfile = File.open(@gemfile_location, 'w')
|
43
|
+
gemfile.write(clean_gemfile_str)
|
44
|
+
gemfile.close
|
22
45
|
end
|
23
46
|
|
24
47
|
def compare_to_original_gemfile(clean_gemfile_str)
|
@@ -34,14 +57,6 @@ module Rocktumbler
|
|
34
57
|
end
|
35
58
|
end
|
36
59
|
|
37
|
-
def write(clean_gemfile_str)
|
38
|
-
gemfile = File.open(@gemfile_location, 'w')
|
39
|
-
gemfile.write(clean_gemfile_str)
|
40
|
-
gemfile.close
|
41
|
-
end
|
42
|
-
|
43
|
-
private
|
44
|
-
|
45
60
|
def write_temp_gemfile(clean_gemfile_str)
|
46
61
|
temp_gemfile = Tempfile.new('Gemfile.temp')
|
47
62
|
temp_gemfile.write(clean_gemfile_str)
|
data/lib/rocktumbler/version.rb
CHANGED
data/lib/rocktumbler.rb
CHANGED
@@ -2,9 +2,12 @@ require 'open-uri'
|
|
2
2
|
require 'ostruct'
|
3
3
|
require 'tempfile'
|
4
4
|
require 'bundler'
|
5
|
+
require 'rainbow'
|
6
|
+
require 'rouge'
|
5
7
|
|
6
8
|
# Rocktumbler module
|
7
9
|
module Rocktumbler
|
10
|
+
autoload :CLI, 'rocktumbler/cli'
|
8
11
|
autoload :Tumbler, 'rocktumbler/tumbler'
|
9
12
|
autoload :Group, 'rocktumbler/group'
|
10
13
|
autoload :GroupFilter, 'rocktumbler/group_filter'
|
data/rocktumbler.gemspec
CHANGED
@@ -10,7 +10,8 @@ Gem::Specification.new do |spec|
|
|
10
10
|
spec.email = ['simonpreed@gmail.com']
|
11
11
|
|
12
12
|
spec.summary = 'Polish your Gemfile to make sure it remains consistent.'
|
13
|
-
spec.description = '
|
13
|
+
spec.description = 'Rocktumbler is a gem that will take your existing \
|
14
|
+
Gemfile and ensures that it remains formatted and consistent.'
|
14
15
|
spec.homepage = 'https://github.com/simonreed/rocktumbler'
|
15
16
|
spec.license = 'MIT'
|
16
17
|
|
@@ -21,7 +22,9 @@ Gem::Specification.new do |spec|
|
|
21
22
|
spec.require_paths = ['lib']
|
22
23
|
|
23
24
|
spec.add_development_dependency 'rake', '~> 10.0'
|
24
|
-
spec.add_development_dependency('rspec', '~> 3.2.0')
|
25
|
+
spec.add_development_dependency('rspec', '~> 3.2.0', '>= 3.2.0')
|
25
26
|
|
26
27
|
spec.add_runtime_dependency 'bundler', '~> 1.7'
|
28
|
+
spec.add_runtime_dependency 'rainbow', '2.0.0'
|
29
|
+
spec.add_runtime_dependency 'rouge', '1.9.0'
|
27
30
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rocktumbler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Simon Reed
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-09-
|
11
|
+
date: 2015-09-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -31,6 +31,9 @@ dependencies:
|
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: 3.2.0
|
34
|
+
- - ">="
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: 3.2.0
|
34
37
|
type: :development
|
35
38
|
prerelease: false
|
36
39
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -38,6 +41,9 @@ dependencies:
|
|
38
41
|
- - "~>"
|
39
42
|
- !ruby/object:Gem::Version
|
40
43
|
version: 3.2.0
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 3.2.0
|
41
47
|
- !ruby/object:Gem::Dependency
|
42
48
|
name: bundler
|
43
49
|
requirement: !ruby/object:Gem::Requirement
|
@@ -52,7 +58,37 @@ dependencies:
|
|
52
58
|
- - "~>"
|
53
59
|
- !ruby/object:Gem::Version
|
54
60
|
version: '1.7'
|
55
|
-
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: rainbow
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - '='
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: 2.0.0
|
68
|
+
type: :runtime
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - '='
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: 2.0.0
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
name: rouge
|
77
|
+
requirement: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - '='
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: 1.9.0
|
82
|
+
type: :runtime
|
83
|
+
prerelease: false
|
84
|
+
version_requirements: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - '='
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: 1.9.0
|
89
|
+
description: |-
|
90
|
+
Rocktumbler is a gem that will take your existing \
|
91
|
+
Gemfile and ensures that it remains formatted and consistent.
|
56
92
|
email:
|
57
93
|
- simonpreed@gmail.com
|
58
94
|
executables:
|
@@ -70,6 +106,7 @@ files:
|
|
70
106
|
- Rakefile
|
71
107
|
- bin/tumble
|
72
108
|
- lib/rocktumbler.rb
|
109
|
+
- lib/rocktumbler/cli.rb
|
73
110
|
- lib/rocktumbler/exceptions.rb
|
74
111
|
- lib/rocktumbler/gem.rb
|
75
112
|
- lib/rocktumbler/gemfile.rb
|