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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3672a2966e07f824bf93a4fa47783b2a7e6f9db8
4
- data.tar.gz: e465ca4f509cc7e1c3cd7440864869e11c6c6243
3
+ metadata.gz: cfffcc07e1c5c9f09a99f2f68545b44909d6cfa6
4
+ data.tar.gz: e419bfb6576fdc80c32b1cca3bd8bf349d693911
5
5
  SHA512:
6
- metadata.gz: 14d46c2c1a4a47cea7313a327a4dcbfe1823560922b6d87871cba6d7fe534a794038e9775752e941c3886f3e70aa2c27f446d9c1434a3d340e0ab11d677182eb
7
- data.tar.gz: 9d8850f4559bff799ec5e35afe9e3167fdb041d418bb0d283c539361e3663e8249677e44c9d7c7120e450b3df91a5c65040beb23b1ab44749a2223c03c478bac
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
- Rocktumbler::Tumbler.new.tumble
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
@@ -27,7 +27,6 @@ module Rocktumbler
27
27
  str += format_requirement || ''
28
28
  str += format_source
29
29
  str += format_require(@gem_dep.autorequire)
30
- str
31
30
  end
32
31
 
33
32
  def format_requirement
@@ -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.map { |g| Rocktumbler::Gem.new(g, @opts) }
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
@@ -9,7 +9,6 @@ module Rocktumbler
9
9
 
10
10
  def filter
11
11
  gems_by_group = @gem_dependencies.group_by(&:groups)
12
-
13
12
  default_gems = gems_by_group.delete([:default])
14
13
  default_gems.sort!
15
14
  groups = [Rocktumbler::Group.new(:default, default_gems, @opts)]
@@ -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
 
@@ -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
- def initialize(location = Bundler.default_gemfile)
8
- @opts = {}
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(args = ARGV)
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
- compare_to_original_gemfile(clean_gemfile_str)
20
- write(clean_gemfile_str) unless @opts.skip_write
21
- clean_gemfile_str
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)
@@ -1,4 +1,4 @@
1
1
  # Rocktumbler module
2
2
  module Rocktumbler
3
- VERSION = '0.1.3'
3
+ VERSION = '0.2.0'
4
4
  end
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 = 'Polish your Gemfile to make sure it remains consistent.'
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.1.3
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-05 00:00:00.000000000 Z
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
- description: Polish your Gemfile to make sure it remains consistent.
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