rocktumbler 0.1.2 → 0.1.3

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: bce5c9401a68c7e3affab0ede028d49a9fa1788c
4
- data.tar.gz: f147131378af6aa520cde277116630d7a165966f
3
+ metadata.gz: 3672a2966e07f824bf93a4fa47783b2a7e6f9db8
4
+ data.tar.gz: e465ca4f509cc7e1c3cd7440864869e11c6c6243
5
5
  SHA512:
6
- metadata.gz: 0dd510df2f24c90f76e5a611936cd4b2aef5df418ee7987144d7fec607bae01b7213f2db454abb8449c2740139420ef6f59b9ee7c0638de9c4e6f1155916dd53
7
- data.tar.gz: 05ea6eec53ec5301afc4f74a4ceefb423642a8267781ed810546425141bcf7f0b8886a1cf9a30ae9b2ee58002a1b3bb53ac50a0cb96cd941cf8f300b60e3a8ab
6
+ metadata.gz: 14d46c2c1a4a47cea7313a327a4dcbfe1823560922b6d87871cba6d7fe534a794038e9775752e941c3886f3e70aa2c27f446d9c1434a3d340e0ab11d677182eb
7
+ data.tar.gz: 9d8850f4559bff799ec5e35afe9e3167fdb041d418bb0d283c539361e3663e8249677e44c9d7c7120e450b3df91a5c65040beb23b1ab44749a2223c03c478bac
data/.gitignore CHANGED
@@ -7,3 +7,4 @@
7
7
  /pkg/
8
8
  /spec/reports/
9
9
  /tmp/
10
+ *.gem
data/.travis.yml CHANGED
@@ -1,3 +1,5 @@
1
- language: ruby
2
1
  rvm:
3
- - 2.1.4
2
+ - 2.2
3
+ - 2.1
4
+ - 2.0.0
5
+ - 1.9.3
data/README.md CHANGED
@@ -1,6 +1,45 @@
1
1
  # Rocktumbler
2
2
 
3
- Rocktumbler is a gem that will take your existing Gemfile and rewrite it to ensure that it remains formatted and consistent.
3
+ [![Build Status](https://travis-ci.org/simonreed/rocktumbler.svg)](https://travis-ci.org/simonreed/rocktumbler)
4
+
5
+ Rocktumbler is a gem that will take your existing Gemfile and ensure that it remains formatted and consistent.
6
+
7
+ It enforces a style to your Gemfile to make it easy to read and understand your Gemfile. Including :
8
+
9
+ * Single quotes.
10
+ * Ruby 1.9 hash syntax.
11
+ * 2 Space Indentation.
12
+ * Sort gems alphabetically.
13
+ * Organise groups around the block form.
14
+ * Add Gem description and url, making it easier to document what a gem is used for (optional).
15
+
16
+ It will produce a Gemfile that is compliant with the default config for Rubocop.
17
+
18
+ ## Example
19
+
20
+ Before
21
+
22
+ ```ruby
23
+ source "https://rubygems.org"
24
+ gem 'pg'
25
+ gem "rocktumbler"
26
+ gem 'pry', :require => 'pry', :group => 'development'
27
+ gem 'rubocop', group: 'development'
28
+ ```
29
+
30
+ After
31
+
32
+ ```ruby
33
+ source 'https://rubygems.org'
34
+
35
+ gem 'pg'
36
+ gem 'rocktumbler'
37
+
38
+ group :development do
39
+ gem 'pry', require: 'pry'
40
+ gem 'rubocop'
41
+ end
42
+ ```
4
43
 
5
44
  ## Installation
6
45
 
@@ -14,7 +53,54 @@ And then execute:
14
53
 
15
54
  $ tumble
16
55
 
17
- This will then rewrite your Gemfile making sure that you use single quotes and gives a brief description of what each gem does.
56
+ This will then rewrite your Gemfile giving you a fresh, clean and consistent Gemfile.
57
+
58
+ ## CLI Options
59
+
60
+ ```
61
+ Usage: tumble [options]
62
+
63
+ Specific options:
64
+ -i, --info Display gem info comment.
65
+ -d, --homepage Display gem homepage comment.
66
+ -s, --skip-write Skip writing of Gemfile
67
+
68
+ Common options:
69
+ -h, --help Show this message
70
+ --version Show version
71
+ ```
72
+
73
+ ### Gem Info Comments
74
+
75
+ If you wish to display Gem info within your Gemfile to aid readablility you can specify the `-i` or `--info` option on the CLI. The gem homepage url can be added with the `-d` or `--homepage` option.
76
+
77
+ `tumble --info --homepage`
78
+
79
+ will give you :
80
+
81
+ ```ruby
82
+ source 'https://rubygems.org'
83
+
84
+ # Pg is the Ruby interface to the {PostgreSQL RDBMS}[http://www.postgresql.org/]
85
+ # https://bitbucket.org/ged/ruby-pg
86
+ gem 'pg'
87
+ # Polish your Gemfile to make sure it remains consistent.
88
+ # https://github.com/simonreed/rocktumbler
89
+ gem 'rocktumbler'
90
+
91
+ group :development do
92
+ # An IRB alternative and runtime developer console
93
+ # http://pryrepl.org
94
+ gem 'pry', require: 'pry'
95
+ # Automatic Ruby code style checking tool.
96
+ # http://github.com/bbatsov/rubocop
97
+ gem 'rubocop'
98
+ end
99
+ ```
100
+
101
+ ## Bundler integration
102
+
103
+ All generated Gemfiles are parsed and verified against the original Gemfile using Bundler to ensure the Bundler configuration remains unchanged. No need to worry about Gems going missing.
18
104
 
19
105
  ## Development
20
106
 
@@ -22,7 +108,7 @@ After checking out the repo, run `bin/setup` to install dependencies. Then, run
22
108
 
23
109
  To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release` to create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
24
110
 
25
- TODO: Add tests!
111
+ TODO: Add more test coverage!
26
112
 
27
113
  ## Contributing
28
114
 
data/Rakefile CHANGED
@@ -1,2 +1,12 @@
1
- require "bundler/gem_tasks"
1
+ # encoding: utf-8
2
2
 
3
+ require 'rubygems'
4
+ require 'bundler'
5
+ require 'bundler/gem_tasks'
6
+
7
+ require 'rake'
8
+ require 'rspec/core'
9
+ require 'rspec/core/rake_task'
10
+ RSpec::Core::RakeTask.new(:spec)
11
+
12
+ task default: [:spec]
data/bin/tumble CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  # Exit cleanly from an early interrupt
4
- Signal.trap("INT") { exit 1 }
4
+ Signal.trap('INT') { exit 1 }
5
5
 
6
6
  require 'rocktumbler'
7
7
  Rocktumbler::Tumbler.new.tumble
@@ -1,28 +1,48 @@
1
1
  require_relative 'exceptions'
2
2
 
3
3
  module Rocktumbler
4
+ # The Gem is a class responsible for handling outputting info on a Rubygem
4
5
  class Gem
5
- def initialize(gem_dependency)
6
- @gem_dependency = gem_dependency
6
+ def initialize(gem_dep, opts)
7
+ @gem_dep = gem_dep
8
+ @opts = opts
7
9
  end
8
10
 
9
- def print(prepend="")
10
- gem_info = retrieve_gem_information(@gem_dependency.name)
11
- str = "#{prepend}# #{gem_info.summary}\n"
12
- str += "#{prepend}# #{gem_info.homepage}\n"
13
- str += "#{prepend}gem '#{@gem_dependency.name}'"
14
- str += ",'#{@gem_dependency.requirement}'" unless @gem_dependency.requirement.none?
15
- str += generate_gem_source(@gem_dependency.source.options) if @gem_dependency.source
16
- str += generate_require(@gem_dependency.autorequire) if @gem_dependency.autorequire
17
- str += "\n\n"
11
+ def print(prepend = '')
12
+ max_length = 80 - 2 - prepend.chars.count
13
+ gem_info = retrieve_gem_information(@gem_dep.name, max_length)
14
+ formatted_line(prepend, gem_info)
18
15
  end
19
16
 
20
17
  private
21
18
 
22
- def generate_require(autorequire)
19
+ def formatted_line(prepend, gem_info)
20
+ if @opts.gem_info
21
+ str = "#{prepend}# #{gem_info.summary.strip}\n"
22
+ else
23
+ str = ''
24
+ end
25
+ str += format_homepage(gem_info.homepage, prepend) if @opts.gem_homepage
26
+ str += "#{prepend}gem '#{@gem_dep.name}'"
27
+ str += format_requirement || ''
28
+ str += format_source
29
+ str += format_require(@gem_dep.autorequire)
30
+ str
31
+ end
32
+
33
+ def format_requirement
34
+ ", '#{@gem_dep.requirement}'" unless @gem_dep.requirement.none?
35
+ end
36
+
37
+ def format_homepage(homepage, prepend)
38
+ (homepage.nil?) ? "#{prepend}#\n" : "#{prepend}# #{homepage}\n"
39
+ end
40
+
41
+ def format_require(autorequire)
42
+ return '' unless autorequire
23
43
  if autorequire.count > 1
24
44
  # Array.to_s will output double quotes so we gsub them to singles.
25
- return ", require: #{autorequire.to_s.gsub(/"/,'\'')}"
45
+ return ", require: #{autorequire.to_s.tr('"', '\'')}"
26
46
  elsif autorequire.first.is_a?(String)
27
47
  return ", require: '#{autorequire.first}'"
28
48
  else
@@ -30,33 +50,41 @@ module Rocktumbler
30
50
  end
31
51
  end
32
52
 
33
- def generate_gem_source(source_options)
34
- ['git','github','git_source','source','path','gist','bitbucket'].each do | source_type |
35
- return ", #{source_type}: '#{source_options[source_type]}'" if source_options[source_type]
53
+ def format_source
54
+ return '' unless @gem_dep.source
55
+ source_options = @gem_dep.source.options
56
+ %w(git github git_source source path gist bitbucket).each do |source_type|
57
+ next unless source_options[source_type]
58
+ return ", #{source_type}: '#{source_options[source_type]}'"
36
59
  end
37
60
  end
38
61
 
39
- def retrieve_gem_information(gem_name)
40
- bundled_gem = Bundler.definition.specs.select{|g| g.name == gem_name}.first
62
+ def retrieve_gem_information(gem_name, max_length = 80)
63
+ bundled_gem = Bundler.definition.specs.find { |g| g.name == gem_name }
41
64
  if bundled_gem
42
- OpenStruct.new(summary: bundled_gem.summary.slice(0,80), homepage: bundled_gem.homepage)
65
+ OpenStruct.new(summary: bundled_gem.summary.slice(0, max_length),
66
+ homepage: bundled_gem.homepage)
43
67
  else
44
- rubygems_gem_information(gem_name)
68
+ rubygems_gem_info(gem_name, max_length)
45
69
  end
46
70
  end
47
71
 
48
- def rubygems_gem_information(gem_name)
49
- begin
50
- json = open("https://rubygems.org/api/v1/gems/#{gem_name}.json").read
51
- gem_info = JSON.parse(json)
52
- OpenStruct.new(summary: gem_info['info'].slice(0,80), homepage: gem_info['homepage_uri'])
53
- rescue OpenURI::HTTPError => e
54
- if e.message == '404 Not Found'
55
- raise GemInformationNotFoundError, "No details found locally or on rubygems for '#{gem_name}'"
56
- else
57
- raise e
58
- end
72
+ def rubygems_gem_info(gem_name, max_length = 80)
73
+ gem_info = rubygems_gem_info_json(gem_name)
74
+ OpenStruct.new(summary: gem_info['info'].slice(0, max_length),
75
+ homepage: gem_info['homepage_uri'])
76
+ rescue OpenURI::HTTPError => e
77
+ if e.message == '404 Not Found'
78
+ raise GemInformationNotFoundError,
79
+ "No details found locally or on rubygems for '#{gem_name}'"
80
+ else
81
+ raise e
59
82
  end
60
83
  end
84
+
85
+ def rubygems_gem_info_json(gem_name)
86
+ json = open("https://rubygems.org/api/v1/gems/#{gem_name}.json").read
87
+ JSON.parse(json)
88
+ end
61
89
  end
62
90
  end
@@ -1,6 +1,7 @@
1
1
  require_relative 'exceptions'
2
2
 
3
3
  module Rocktumbler
4
+ # The Gemfile is a class responsible for reading and parsing a Gemfile
4
5
  class Gemfile
5
6
  attr_accessor :ruby, :source
6
7
 
@@ -12,27 +13,25 @@ module Rocktumbler
12
13
  end
13
14
 
14
15
  def read_contents
15
- gemfile = File.open(@gemfile_location,'r')
16
+ gemfile = File.open(@gemfile_location, 'r')
16
17
  str = gemfile.read
17
18
  gemfile.close
18
19
  str
19
20
  end
20
21
 
21
22
  def print_source_and_ruby
22
- str = ""
23
- str += "#{@source.gsub(/"/,'\'')}\n\n" if @source
24
- str += "#{@ruby.gsub(/"/,'\'')}\n\n" if @ruby
23
+ str = ''
24
+ str += "#{@source.tr('\"', '\'')}\n" if @source
25
+ str += "\n#{@ruby.tr('\"', '\'')}\n" if @ruby
25
26
  str
26
27
  end
27
28
 
28
29
  def parse_ruby
29
- /^(ruby.*)/.match(@gemfile_contents)
30
- $1
30
+ /^(ruby.*)/.match(@gemfile_contents)[1] if @gemfile_contents =~ /^(ruby.*)/
31
31
  end
32
32
 
33
33
  def parse_source
34
- /^(source.*)/.match(@gemfile_contents)
35
- $1
34
+ /^(source.*)/.match(@gemfile_contents)[1]
36
35
  end
37
36
  end
38
37
  end
@@ -1,20 +1,23 @@
1
1
  module Rocktumbler
2
+ # The Group is a class responsible for outputting a gem group
2
3
  class Group
3
-
4
4
  attr_accessor :name
5
5
 
6
- def initialize(name,gem_dependencies)
6
+ def initialize(name, gem_dependencies, opts)
7
7
  @name = name
8
- @gems = gem_dependencies.map{|g| Rocktumbler::Gem.new(g)}
8
+ @opts = opts
9
+ @gems = gem_dependencies.map { |g| Rocktumbler::Gem.new(g, @opts) }
9
10
  end
10
11
 
11
12
  def print
12
- str = ''
13
+ str = "\n"
13
14
  prepend_spacing = (@name == :default) ? '' : ' '
14
- str += "\n\ngroup #{@name.to_s.gsub(/[\[\]]/,'')} do\n" if @name != :default
15
- str += @gems.map{|g|g.print(prepend_spacing)}.join
16
- str += "end\n" if @name != :default
17
- return str
15
+ if @name != :default
16
+ str += "\ngroup #{@name.to_s.gsub(/[\[\]]/, '')} do\n"
17
+ end
18
+ str += @gems.map { |g| g.print(prepend_spacing) }.join("\n")
19
+ str += "\nend\n" if @name != :default
20
+ str
18
21
  end
19
22
  end
20
23
  end
@@ -1,7 +1,10 @@
1
1
  module Rocktumbler
2
+ # The GroupFilter is a class responsible for filtering gems into group
3
+ # and sorting the groups and their gems alphabetically.
2
4
  class GroupFilter
3
- def initialize(gem_dependencies)
5
+ def initialize(gem_dependencies, opts)
4
6
  @gem_dependencies = gem_dependencies
7
+ @opts = opts
5
8
  end
6
9
 
7
10
  def filter
@@ -9,16 +12,22 @@ module Rocktumbler
9
12
 
10
13
  default_gems = gems_by_group.delete([:default])
11
14
  default_gems.sort!
12
- groups = [Rocktumbler::Group.new(:default,default_gems)]
15
+ groups = [Rocktumbler::Group.new(:default, default_gems, @opts)]
13
16
 
14
- gems_by_group.each do | group, gems |
17
+ gems_by_group_sorted = sort_groups(gems_by_group, default_gems)
18
+
19
+ groups.concat(gems_by_group_sorted)
20
+ end
21
+
22
+ private
23
+
24
+ def sort_groups(gems_by_group, default_gems)
25
+ gems_by_group.inject([]) do |arr, (group, gems)|
15
26
  gems_unique_to_group = gems - default_gems
16
27
  gems_unique_to_group.sort!
17
28
  gems_unique_to_group.uniq!
18
- groups << Rocktumbler::Group.new(group,gems_unique_to_group)
29
+ arr << Rocktumbler::Group.new(group, gems_unique_to_group, @opts)
19
30
  end
20
-
21
- return groups
22
31
  end
23
32
  end
24
33
  end
@@ -0,0 +1,54 @@
1
+ require 'optparse'
2
+ require 'pp'
3
+
4
+ module Rocktumbler
5
+ class Option
6
+ #
7
+ # Return a structure describing the options.
8
+ #
9
+ def self.parse(args)
10
+ # The options specified on the command line will be collected in *options*.
11
+ # We set default values here.
12
+ options = OpenStruct.new
13
+ options.gem_info = false
14
+ options.gem_homepage = false
15
+ options.skip_write = false
16
+
17
+ opt_parser = OptionParser.new do |opts|
18
+ opts.banner = "Usage: tumble [options]"
19
+
20
+ opts.separator ""
21
+ opts.separator "Specific options:"
22
+
23
+ opts.on("-i", "--info", "Display gem info comment.") do |docs|
24
+ options.gem_info = true
25
+ end
26
+
27
+ opts.on("-d", "--homepage", "Display gem homepage comment.") do |docs|
28
+ options.gem_homepage = true
29
+ end
30
+
31
+ opts.on("-s", "--skip-write", "Skip writing of Gemfile") do |docs|
32
+ options.skip_write = true
33
+ end
34
+
35
+ opts.separator ""
36
+ opts.separator "Common options:"
37
+
38
+ # No argument, shows at tail. This will print an options summary.
39
+ opts.on_tail("-h", "--help", "Show this message") do
40
+ puts opts
41
+ exit
42
+ end
43
+
44
+ opts.on_tail("--version", "Show version") do
45
+ puts Rocktumbler::VERSION
46
+ exit
47
+ end
48
+ end
49
+
50
+ opt_parser.parse!(args)
51
+ options
52
+ end
53
+ end
54
+ end
@@ -1,44 +1,54 @@
1
1
  require_relative 'exceptions'
2
2
 
3
3
  module Rocktumbler
4
+ # The Tumbler class is responsible for executing the top level tumble method
5
+ # and reads, parses, cleans, writes and verifies the new gemfile.
4
6
  class Tumbler
5
- def initialize(location=Bundler.default_gemfile)
7
+ def initialize(location = Bundler.default_gemfile)
8
+ @opts = {}
6
9
  @gemfile_location = location
7
10
  @bundler_dependencies = parse_gemfile(@gemfile_location)
8
11
  @gemfile = Rocktumbler::Gemfile.new(location)
9
12
  end
10
13
 
11
- def tumble(opts={})
12
- groups = Rocktumbler::GroupFilter.new(@bundler_dependencies).filter
14
+ def tumble(args = ARGV)
15
+ @opts = Option.parse(args)
16
+ groups = Rocktumbler::GroupFilter.new(@bundler_dependencies, @opts).filter
13
17
  clean_gemfile_str = @gemfile.print_source_and_ruby
14
18
  clean_gemfile_str << groups.map(&:print).join
15
19
  compare_to_original_gemfile(clean_gemfile_str)
16
- write(clean_gemfile_str) unless opts[:skip_write]
17
- return clean_gemfile_str
20
+ write(clean_gemfile_str) unless @opts.skip_write
21
+ clean_gemfile_str
18
22
  end
19
23
 
20
24
  def compare_to_original_gemfile(clean_gemfile_str)
21
- temp_gemfile = Tempfile.new('Gemfile.temp')
22
- temp_gemfile.write(clean_gemfile_str)
23
- temp_gemfile.close
25
+ temp_gemfile = write_temp_gemfile(clean_gemfile_str)
24
26
  temp_bundler_dependencies = parse_gemfile(temp_gemfile.path)
25
27
  diff = @bundler_dependencies - temp_bundler_dependencies
26
28
 
27
29
  if diff.empty?
28
30
  return true
29
31
  else
30
- raise IncomparableGemfileError, "Clean Gemfile is not comparable to the existing Gemfile. The following gems are missing : #{diff.map(&:name).to_s}."
32
+ fail IncomparableGemfileError, "Clean Gemfile is not comparable to the\
33
+ existing Gemfile. The following gems are missing : #{diff.map(&:name)}."
31
34
  end
32
35
  end
33
36
 
34
37
  def write(clean_gemfile_str)
35
- gemfile = File.open(@gemfile_location,'w')
38
+ gemfile = File.open(@gemfile_location, 'w')
36
39
  gemfile.write(clean_gemfile_str)
37
40
  gemfile.close
38
41
  end
39
42
 
40
43
  private
41
44
 
45
+ def write_temp_gemfile(clean_gemfile_str)
46
+ temp_gemfile = Tempfile.new('Gemfile.temp')
47
+ temp_gemfile.write(clean_gemfile_str)
48
+ temp_gemfile.close
49
+ temp_gemfile
50
+ end
51
+
42
52
  def parse_gemfile(location)
43
53
  builder = Bundler::Dsl.new
44
54
  builder.eval_gemfile(location)
@@ -1,3 +1,4 @@
1
+ # Rocktumbler module
1
2
  module Rocktumbler
2
- VERSION = "0.1.2"
3
+ VERSION = '0.1.3'
3
4
  end
data/lib/rocktumbler.rb CHANGED
@@ -3,11 +3,13 @@ require 'ostruct'
3
3
  require 'tempfile'
4
4
  require 'bundler'
5
5
 
6
+ # Rocktumbler module
6
7
  module Rocktumbler
7
8
  autoload :Tumbler, 'rocktumbler/tumbler'
8
9
  autoload :Group, 'rocktumbler/group'
9
10
  autoload :GroupFilter, 'rocktumbler/group_filter'
10
11
  autoload :Gem, 'rocktumbler/gem'
11
12
  autoload :Gemfile, 'rocktumbler/gemfile'
12
- autoload :Version, 'rocktumbler/version'
13
+ autoload :VERSION, 'rocktumbler/version'
14
+ autoload :Option, 'rocktumbler/option'
13
15
  end
data/rocktumbler.gemspec CHANGED
@@ -4,21 +4,24 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require 'rocktumbler/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
- spec.name = "rocktumbler"
7
+ spec.name = 'rocktumbler'
8
8
  spec.version = Rocktumbler::VERSION
9
- spec.authors = ["Simon Reed"]
10
- spec.email = ["simonpreed@gmail.com"]
9
+ spec.authors = ['Simon Reed']
10
+ spec.email = ['simonpreed@gmail.com']
11
11
 
12
- spec.summary = %q{Polish your Gemfile to make sure it remains consistent.}
13
- spec.description = %q{Polish your Gemfile to make sure it remains consistent.}
14
- spec.homepage = "https://github.com/simonreed/rocktumbler"
15
- spec.license = "MIT"
12
+ spec.summary = 'Polish your Gemfile to make sure it remains consistent.'
13
+ spec.description = 'Polish your Gemfile to make sure it remains consistent.'
14
+ spec.homepage = 'https://github.com/simonreed/rocktumbler'
15
+ spec.license = 'MIT'
16
16
 
17
- spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
17
+ spec.files = `git ls-files -z`.split("\x0").reject { |f|
18
+ f.match(%r{^(test|spec|features)/})
19
+ }
18
20
  spec.executables = %w(tumble)
19
- spec.require_paths = ["lib"]
21
+ spec.require_paths = ['lib']
20
22
 
21
- spec.add_development_dependency "rake", "~> 10.0"
23
+ spec.add_development_dependency 'rake', '~> 10.0'
24
+ spec.add_development_dependency('rspec', '~> 3.2.0')
22
25
 
23
- spec.add_runtime_dependency "bundler", "~> 1.8"
26
+ spec.add_runtime_dependency 'bundler', '~> 1.7'
24
27
  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.2
4
+ version: 0.1.3
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-04-24 00:00:00.000000000 Z
11
+ date: 2015-09-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -24,20 +24,34 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '10.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 3.2.0
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 3.2.0
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: bundler
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
45
  - - "~>"
32
46
  - !ruby/object:Gem::Version
33
- version: '1.8'
47
+ version: '1.7'
34
48
  type: :runtime
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
52
  - - "~>"
39
53
  - !ruby/object:Gem::Version
40
- version: '1.8'
54
+ version: '1.7'
41
55
  description: Polish your Gemfile to make sure it remains consistent.
42
56
  email:
43
57
  - simonpreed@gmail.com
@@ -61,10 +75,9 @@ files:
61
75
  - lib/rocktumbler/gemfile.rb
62
76
  - lib/rocktumbler/group.rb
63
77
  - lib/rocktumbler/group_filter.rb
78
+ - lib/rocktumbler/option.rb
64
79
  - lib/rocktumbler/tumbler.rb
65
80
  - lib/rocktumbler/version.rb
66
- - rocktumbler-0.1.0.gem
67
- - rocktumbler-0.1.1.gem
68
81
  - rocktumbler.gemspec
69
82
  homepage: https://github.com/simonreed/rocktumbler
70
83
  licenses:
@@ -86,7 +99,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
86
99
  version: '0'
87
100
  requirements: []
88
101
  rubyforge_project:
89
- rubygems_version: 2.4.2
102
+ rubygems_version: 2.4.5
90
103
  signing_key:
91
104
  specification_version: 4
92
105
  summary: Polish your Gemfile to make sure it remains consistent.
Binary file
Binary file