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