rocktumbler 0.1.3 → 0.2.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 +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
|
-
[](https://travis-ci.org/simonreed/rocktumbler)
|
3
|
+
[](https://travis-ci.org/simonreed/rocktumbler) [](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
|