tweezer 0.1.0 → 0.1.1

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,15 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 6ad1178d16a4af92aadef316c7c05f5c3561386d
4
- data.tar.gz: da60506575893ab5b24b6b8064d38f12c54b0ec6
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ N2MzN2NmNDM3NWRlMDVjNzg3YzRlODkzNTc2ODAyOWQzYzM0MDk1ZQ==
5
+ data.tar.gz: !binary |-
6
+ ODUzNWE4YzRjMzcwZWFjZDJiODZhZjYwZGE4NmU3ODg5NTlkMzBlYQ==
5
7
  SHA512:
6
- metadata.gz: 25753c05a221bf4c438bf21c9fd644bf3c0bebd5e5faf4a541c90a191d485437ad124a162144e1578eb48be2bde3e167e6ee93761ffa8bbefea8ff0ecf0087b4
7
- data.tar.gz: f2c56e0db8dad6ad79d943b98b57c4f25712c90d42a967b63e99e6b148ba754fe7e5cdba7d629d8fe9ce60b53754a91387c09fd22efe3dd79edf1a43f625c775
8
+ metadata.gz: !binary |-
9
+ YmYzZjQ2ZDhiMzI0NTFiN2NmZjhjMzZmZTAwOGU3NjViNTNkYzllY2M2YzIy
10
+ NmM4OTI5NTAzNjRiNzU5MmMzMDFiZjBiNTNiMDRjMTI2NTgzYzVjM2ZmNGNj
11
+ MmIwMzUzOGI4ZDUzYTNjMzQxZTU3ZGMxMTIxMDI5OTkzYWRkMDA=
12
+ data.tar.gz: !binary |-
13
+ ZmIyZTE0MmJkNDQzNjA1MDhmYzMxNzFiNGI4YzU2NGQ0YTMxZDM3ZmIxNzlk
14
+ NTYyYjMzNjJjNjRjZGJiYTIzOWQ2ZGIyYjVmNzM5YWQwYWQ1MTBjOTMzN2Jm
15
+ OTJmNmMxOThmNmQ5ZjM4ZTc0YzczMTAwZDQ1ZDJiNmU1YjA1ZDc=
data/.gitignore CHANGED
@@ -7,3 +7,5 @@
7
7
  /pkg/
8
8
  /spec/reports/
9
9
  /tmp/
10
+
11
+ *.gem
data/.rspec CHANGED
@@ -1,2 +1,2 @@
1
- --format documentation
1
+ --format progress
2
2
  --color
data/.rubocop.yml ADDED
@@ -0,0 +1,2 @@
1
+ Style/Documentation:
2
+ Enabled: false
data/.travis.yml CHANGED
@@ -1,4 +1,13 @@
1
+ sudo: false
1
2
  language: ruby
2
3
  rvm:
3
4
  - 2.2.2
4
5
  before_install: gem install bundler -v 1.10.6
6
+ deploy:
7
+ provider: rubygems
8
+ api_key:
9
+ secure: zkccSICCWfIfzaJWRdb04cR4K7LcRdN96Bx/RKsdmKahza8o7Yu8eRL+yadW5w+Td9iujVcvtGBLcvyJg5NzXFv52ZJERhEW10MGIXYvbRNTwPjioP2PNYFp3xEwnQ4ELS6lITQKEt9odL7VrDkSUUcqVx9+EgMximQqPJCBRLJi6EtOPzvSrp794kt7LMwxJItDTnA7QyXk55iiR93irCB6iy64r0SKtFKsqmUnCsMCK+0Yky0or7Y/fU/+TRK2lkq2qKRt+iZf+EtEPOxoUQiICKFOPc31XR5ln6ZQF43Fvg0jLjfJ0p4DBwyhY9c1OBjK8PRzvKdTPjpq5MFgYWPk9C0xC5ZZI+BteQZowXe52tkTUKP1Px0c1Tx9bsoQW9N5dNlMuse19WlulK1G8kZ3gWWPKE5MGpMQgVGQq8CKSkUmwwBeLGvS5+yFCNOU52X8zVp9PRs4g3cdoauSdXMi+fewCRnIsp+ONJJw3V3IQVRIDoGv81ZO/TECsmDiVOv7AqzR1eG2Mc9PRrFCa7wUOfKG8fL23ZsYMLVct3VtN8TOYwEKtYY+vNM25Rsbxvbx1Q7qN5oywySS5jaKBrYkUmbfqEW6UOCqA/Nu+41OwehfgN74NkiOWDoIhVjHLrJlbuQR0Vzg9zw6s00lIQnY+MyZplsDQ4XvVZy2DDA=
10
+ gem: tweezer
11
+ on:
12
+ tags: true
13
+ repo: glittershark/tweezer
data/Gemfile CHANGED
@@ -2,5 +2,4 @@ source 'https://rubygems.org'
2
2
 
3
3
  ruby '2.2.2'
4
4
 
5
- # Specify your gem's dependencies in tweezer.gemspec
6
5
  gemspec
data/README.md CHANGED
@@ -1,41 +1 @@
1
- # Tweezer
2
-
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/tweezer`. To experiment with that code, run `bin/console` for an interactive prompt.
4
-
5
- TODO: Delete this and the text above, and describe your gem
6
-
7
- ## Installation
8
-
9
- Add this line to your application's Gemfile:
10
-
11
- ```ruby
12
- gem 'tweezer'
13
- ```
14
-
15
- And then execute:
16
-
17
- $ bundle
18
-
19
- Or install it yourself as:
20
-
21
- $ gem install tweezer
22
-
23
- ## Usage
24
-
25
- TODO: Write usage instructions here
26
-
27
- ## Development
28
-
29
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment. Run `bundle exec tweezer` to use the gem in this directory, ignoring other installed copies of this gem.
30
-
31
- 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`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
32
-
33
- ## Contributing
34
-
35
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/tweezer.
36
-
37
-
38
- ## License
39
-
40
- The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
41
-
1
+ # Tweezer [![Build Status](https://travis-ci.org/glittershark/tweezer.svg?branch=master)](https://travis-ci.org/glittershark/tweezer)
data/Rakefile CHANGED
@@ -1,6 +1,8 @@
1
1
  require 'bundler/gem_tasks'
2
2
  require 'rspec/core/rake_task'
3
+ require 'rubocop/rake_task'
3
4
 
4
5
  RSpec::Core::RakeTask.new(:spec)
6
+ RuboCop::RakeTask.new
5
7
 
6
- task default: :spec
8
+ task default: %i(spec rubocop)
data/bin/rake ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # This file was generated by Bundler.
4
+ #
5
+ # The application 'rake' is installed as part of a gem, and
6
+ # this file is here to facilitate running it.
7
+ #
8
+
9
+ require 'pathname'
10
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile',
11
+ Pathname.new(__FILE__).realpath)
12
+
13
+ require 'rubygems'
14
+ require 'bundler/setup'
15
+
16
+ load Gem.bin_path('rake', 'rake')
data/bin/rspec ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # This file was generated by Bundler.
4
+ #
5
+ # The application 'rspec' is installed as part of a gem, and
6
+ # this file is here to facilitate running it.
7
+ #
8
+
9
+ require 'pathname'
10
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile',
11
+ Pathname.new(__FILE__).realpath)
12
+
13
+ require 'rubygems'
14
+ require 'bundler/setup'
15
+
16
+ load Gem.bin_path('rspec-core', 'rspec')
data/exe/tweezer CHANGED
@@ -1,3 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require "tweezer"
3
+ require 'tweezer'
4
+
5
+ Tweezer::CLI.start(ARGV)
data/lib/tweezer.rb CHANGED
@@ -1,4 +1,23 @@
1
- require 'tweezer/version'
1
+ require 'set'
2
2
 
3
3
  module Tweezer
4
+ UNPARENTHESIZED_METHODS = Set[*%i(source ruby git path group platforms gem)]
5
+
6
+ def self.unparenthesized_method?(method)
7
+ UNPARENTHESIZED_METHODS.include?(method)
8
+ end
4
9
  end
10
+
11
+ require 'unparser'
12
+ require 'tweezer/unparser/buffer'
13
+ require 'tweezer/unparser/emitter'
14
+ require 'tweezer/unparser/emitter/literal/primitive/inspect'
15
+ require 'tweezer/unparser/emitter/send/regular'
16
+ require 'tweezer/unparser/emitter/unparenthesized_arguments'
17
+ require 'tweezer/unparser/emitter/blank_line'
18
+ require 'tweezer/version'
19
+ require 'tweezer/errors'
20
+ require 'tweezer/ast_helper'
21
+ require 'tweezer/gem'
22
+ require 'tweezer/gemfile'
23
+ require 'tweezer/cli'
@@ -0,0 +1,62 @@
1
+ module Tweezer
2
+ module ASTHelper
3
+ def s(type, *children)
4
+ Parser::AST::Node.new(type, children)
5
+ end
6
+
7
+ def blank_line
8
+ Parser::AST::Node.new(:blank_line)
9
+ end
10
+
11
+ def block?(node)
12
+ node.type == :block
13
+ end
14
+
15
+ def source_block?(node)
16
+ block?(node) &&
17
+ node.children[0].type == :send &&
18
+ node.children[0].children[1] == :source
19
+ end
20
+
21
+ def group_block?(node)
22
+ block?(node) &&
23
+ node.children[0].type == :send &&
24
+ node.children[0].children[1] == :group
25
+ end
26
+
27
+ def block_children(node)
28
+ child = node.children[2]
29
+ children = child.type == :begin ? child.children : [child]
30
+ return children unless block_given?
31
+ children.each { |c| yield c }
32
+ end
33
+
34
+ def groups_from_group_block(node)
35
+ node.children[0].children[2..-1].flat_map(&:children)
36
+ end
37
+
38
+ def unparse_hash_node(node)
39
+ fail ArgumentError unless node.type == :hash
40
+ node.children.map do |child|
41
+ [child.children[0].children[0], child.children[1]]
42
+ end.to_h
43
+ end
44
+
45
+ def append_block_child(block, node)
46
+ new_children = block.children[0..1]
47
+ old_child = block.children[2]
48
+
49
+ if old_child.type == :begin
50
+ new_children << old_child.append(node)
51
+ else
52
+ new_children << s(:begin, old_child, node)
53
+ end
54
+
55
+ block.updated(nil, new_children)
56
+ end
57
+
58
+ module_function :s, :block?, :source_block?, :group_block?, :block_children,
59
+ :groups_from_group_block, :unparse_hash_node,
60
+ :append_block_child
61
+ end
62
+ end
@@ -0,0 +1,27 @@
1
+ require 'thor'
2
+ require 'bundler'
3
+
4
+ module Tweezer
5
+ class CLI < Thor
6
+ def initialize(*)
7
+ super
8
+
9
+ custom_gemfile = options[:gemfile] || Bundler.settings[:gemfile]
10
+ if custom_gemfile && !custom_gemfile.empty?
11
+ ENV['BUNDLE_GEMFILE'] = File.expand_path(custom_gemfile)
12
+ end
13
+
14
+ @gemfile = Tweezer::Gemfile.load
15
+ end
16
+
17
+ desc 'add GEM [VERSION]',
18
+ 'add GEM to the gemfile, optionally pinned to VERSION'
19
+ option :groups, type: :array, aliases: '-g',
20
+ desc: 'Groups to add the gem to'
21
+ def add(name, version = nil)
22
+ groups = options[:groups].map(&:to_sym) if options[:groups]
23
+ @gemfile.add_gem(name, version, groups: groups || [])
24
+ @gemfile.save!
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,3 @@
1
+ module Tweezer
2
+ GemAlreadyPresent = Class.new(RuntimeError)
3
+ end
@@ -0,0 +1,84 @@
1
+ module Tweezer
2
+ class Gem
3
+ include Tweezer::ASTHelper
4
+
5
+ def initialize(node_or_name, version = nil, opts = {})
6
+ return init_from_node(node_or_name) if node_or_name.is_a?(
7
+ Parser::AST::Node)
8
+
9
+ @name = node_or_name
10
+
11
+ if version.is_a? Hash
12
+ @version = nil
13
+ opts = version
14
+ else
15
+ @version = version
16
+ end
17
+
18
+ @groups = opts[:groups]
19
+ end
20
+
21
+ def to_node
22
+ args = [nil, :gem, s(:str, name)]
23
+ args << s(:str, version) if version
24
+ args << s(:hash, groups_to_node) unless groups.empty?
25
+
26
+ Parser::AST::Node.new(:send, args)
27
+ end
28
+
29
+ def ==(other)
30
+ name == other.name &&
31
+ version == other.version
32
+ end
33
+
34
+ def self.gem_node?(node)
35
+ node.children[1] == :gem
36
+ end
37
+
38
+ attr_reader :name, :version
39
+ attr_writer :groups
40
+
41
+ def groups
42
+ @groups ||= []
43
+ end
44
+
45
+ private
46
+
47
+ # rubocop:disable Metrics/AbcSize
48
+ def init_from_node(node)
49
+ check_node!(node)
50
+ arguments = node.children[2..-1]
51
+ opts = arguments.pop if arguments[-1].type == :hash
52
+
53
+ @name = arguments[0].children[0]
54
+ @version = arguments[1].children[0] if arguments[1]
55
+
56
+ return unless opts
57
+ @groups = groups_from_node(unparse_hash_node(opts)[:group])
58
+ end
59
+ # rubocop:enable Metrics/AbcSize
60
+
61
+ def groups_to_node
62
+ s(:pair,
63
+ s(:sym, :group),
64
+ if groups.length == 1
65
+ s(:sym, groups[0])
66
+ else
67
+ s(:array, groups.map { |g| s(:sym, g) })
68
+ end)
69
+ end
70
+
71
+ def groups_from_node(node)
72
+ case node.type
73
+ when :sym then [node.children[0]]
74
+ when :array then node.children.flat_map(&:children)
75
+ else fail ArgumentError
76
+ end
77
+ end
78
+
79
+ def check_node!(node)
80
+ return if self.class.gem_node?(node)
81
+ fail ArgumentError, "Not a call to `gem`: #{node.inspect}"
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,129 @@
1
+ require 'bundler'
2
+ require 'parser/current'
3
+ require 'unparser'
4
+
5
+ module Tweezer
6
+ class Gemfile
7
+ include Tweezer::ASTHelper
8
+
9
+ def initialize(source, file = nil)
10
+ @ast, @comments = Parser::CurrentRuby.parse_with_comments(source, file)
11
+ @file = file
12
+
13
+ load_nodes!(@ast.children)
14
+ end
15
+
16
+ def self.load(file = Bundler.default_gemfile)
17
+ new(File.read(file), file)
18
+ end
19
+
20
+ def save!
21
+ fail unless @file
22
+ File.write(@file, dump)
23
+ end
24
+
25
+ def gems
26
+ @gems ||= []
27
+ end
28
+
29
+ # Maps arrays of groups to arrays of Gems
30
+ def groups
31
+ @groups ||= Hash.new { |h, k| h[k] = [] }
32
+ end
33
+
34
+ # rubocop:disable Metrics/AbcSize
35
+ # rubocop:disable Metrics/MethodLength
36
+ def add_gem(*args)
37
+ gem = Gem.new(*args)
38
+ fail GemAlreadyPresent if gems.include? gem
39
+ gems << gem
40
+
41
+ if groups.include?(gem.groups)
42
+ gem_groups = gem.groups
43
+ gem.groups = []
44
+
45
+ if groups[gem_groups].size == 1
46
+ gem_to_group_block!(groups[gem_groups].first)
47
+ end
48
+
49
+ append_to_group_block! gem.to_node, groups: gem_groups
50
+ else
51
+ groups[gem.groups] = [gem] unless gem.groups.empty?
52
+ append_before_first_block! gem.to_node
53
+ end
54
+ end
55
+ # rubocop:enable Metrics/MethodLength
56
+ # rubocop:enable Metrics/AbcSize
57
+
58
+ def dump
59
+ Unparser.unparse(ast, comments)
60
+ end
61
+
62
+ private
63
+
64
+ attr_reader :ast, :comments
65
+
66
+ def load_nodes!(nodes)
67
+ nodes.map { |node| load_node! node }.compact
68
+ end
69
+
70
+ def load_node!(node)
71
+ return load_block_node!(node) if block? node
72
+ return unless Gem.gem_node?(node)
73
+
74
+ gem = Gem.new(node)
75
+ gems << gem
76
+ groups[gem.groups] << gem unless gem.groups.empty?
77
+ gem
78
+ end
79
+
80
+ def load_block_node!(node)
81
+ fail ArgumentError unless block?(node)
82
+ gems = load_nodes!(block_children(node))
83
+ groups[groups_from_group_block(node)].concat(gems) if group_block?(node)
84
+ nil
85
+ end
86
+
87
+ def append_before_first_block!(new_node)
88
+ nodes = ast.children.flat_map do |node|
89
+ block?(node) ? [new_node, blank_line, node] : [node]
90
+ end
91
+ nodes << new_node unless nodes.include? new_node
92
+
93
+ @ast = @ast.updated(nil, nodes)
94
+ end
95
+
96
+ def append_to_group_block!(new_node, groups: [])
97
+ nodes = ast.children.map do |node|
98
+ if group_block?(node) && groups_from_group_block(node) == groups
99
+ append_block_child(node, new_node)
100
+ else
101
+ node
102
+ end
103
+ end
104
+
105
+ @ast = @ast.updated(nil, nodes)
106
+ end
107
+
108
+ def gem_to_group_block!(gem)
109
+ nodes = ast.children.flat_map do |node|
110
+ next [node] unless node == gem.to_node
111
+
112
+ gem_groups = gem.groups
113
+ gem.groups = []
114
+
115
+ [blank_line, group_block(gem_groups, gem), blank_line]
116
+ end
117
+
118
+ @ast = @ast.updated(nil, nodes)
119
+ end
120
+
121
+ def group_block(groups, *gems)
122
+ s(:block,
123
+ s(:send, nil, :group,
124
+ *(groups.map { |group| s(:sym, group) })),
125
+ s(:args),
126
+ *gems.map(&:to_node))
127
+ end
128
+ end
129
+ end
@@ -0,0 +1,7 @@
1
+ module Unparser
2
+ class Buffer
3
+ def current_line
4
+ content.count("\n") + 1
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,16 @@
1
+ module Unparser
2
+ class Emitter
3
+ def write_to_buffer
4
+ emit_comments_before if buffer.fresh_line?
5
+ fix_newlines
6
+ dispatch
7
+ comments.consume(node)
8
+ emit_eof_comments if parent.is_a?(Root)
9
+ self
10
+ end
11
+
12
+ def fix_newlines
13
+ (node.loc.line - buffer.current_line).times { buffer.nl } if node.loc
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,19 @@
1
+ require 'unparser'
2
+
3
+ module Unparser
4
+ class Emitter
5
+ old = REGISTRY.dup
6
+ remove_const :REGISTRY
7
+ const_set :REGISTRY, old.dup
8
+
9
+ class BlankLine < self
10
+ handle :blank_line
11
+
12
+ private
13
+
14
+ def dispatch; end
15
+ end
16
+
17
+ REGISTRY.freeze
18
+ end
19
+ end
@@ -0,0 +1,22 @@
1
+ module Unparser
2
+ class Emitter
3
+ class Literal
4
+ class Primitive < self
5
+ class Inspect < self
6
+ def dispatch
7
+ return write_inspect unless value.is_a? String
8
+ return write_inspect if value.include? "'"
9
+
10
+ write("'#{value}'")
11
+ end
12
+
13
+ private
14
+
15
+ def write_inspect
16
+ write(value.inspect)
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,18 @@
1
+ module Unparser
2
+ class Emitter
3
+ class Send
4
+ class Regular < self
5
+ def emit_arguments
6
+ case
7
+ when arguments.empty? && receiver.nil? && local_variable_clash?
8
+ write('()')
9
+ when Tweezer.unparenthesized_method?(selector)
10
+ run(UnparenthesizedArguments, n(:arguments, arguments))
11
+ else
12
+ run(Arguments, n(:arguments, arguments))
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,15 @@
1
+ require 'unparser'
2
+
3
+ module Unparser
4
+ class Emitter
5
+ class UnparenthesizedArguments < Unparser::Emitter::Send::Arguments
6
+ private
7
+
8
+ def dispatch
9
+ return if children.empty?
10
+ write(' ')
11
+ delimited_plain(effective_arguments)
12
+ end
13
+ end
14
+ end
15
+ end
@@ -1,3 +1,3 @@
1
1
  module Tweezer
2
- VERSION = '0.1.0'
2
+ VERSION = '0.1.1'
3
3
  end
data/tweezer.gemspec CHANGED
@@ -27,9 +27,15 @@ Gem::Specification.new do |spec|
27
27
  spec.require_paths = ['lib']
28
28
 
29
29
  spec.add_dependency 'parser', '~> 2.2'
30
+ spec.add_dependency 'thor', '~> 0.19'
31
+ spec.add_dependency 'unparser', '~> 0.2'
32
+ spec.add_dependency 'bundler', '~> 1.10'
33
+ spec.add_dependency 'activesupport', '~> 4.2'
30
34
 
31
- spec.add_development_dependency 'bundler', '~> 1.10'
32
35
  spec.add_development_dependency 'rake', '~> 10.0'
33
- spec.add_development_dependency 'rspec'
34
- spec.add_development_dependency 'pry'
36
+ spec.add_development_dependency 'rspec', '~> 3.3'
37
+ spec.add_development_dependency 'rspec-its', '~> 1.2'
38
+ spec.add_development_dependency 'rspec-collection_matchers', '~> 1.1'
39
+ spec.add_development_dependency 'rubocop', '~> 0.34'
40
+ spec.add_development_dependency 'pry', '~> 0.10'
35
41
  end
metadata CHANGED
@@ -1,88 +1,171 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tweezer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Griffin Smith
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-09-20 00:00:00.000000000 Z
11
+ date: 2015-10-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parser
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ~>
18
18
  - !ruby/object:Gem::Version
19
19
  version: '2.2'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ~>
25
25
  - !ruby/object:Gem::Version
26
26
  version: '2.2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: thor
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '0.19'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '0.19'
41
+ - !ruby/object:Gem::Dependency
42
+ name: unparser
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '0.2'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '0.2'
27
55
  - !ruby/object:Gem::Dependency
28
56
  name: bundler
29
57
  requirement: !ruby/object:Gem::Requirement
30
58
  requirements:
31
- - - "~>"
59
+ - - ~>
32
60
  - !ruby/object:Gem::Version
33
61
  version: '1.10'
34
- type: :development
62
+ type: :runtime
35
63
  prerelease: false
36
64
  version_requirements: !ruby/object:Gem::Requirement
37
65
  requirements:
38
- - - "~>"
66
+ - - ~>
39
67
  - !ruby/object:Gem::Version
40
68
  version: '1.10'
69
+ - !ruby/object:Gem::Dependency
70
+ name: activesupport
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: '4.2'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: '4.2'
41
83
  - !ruby/object:Gem::Dependency
42
84
  name: rake
43
85
  requirement: !ruby/object:Gem::Requirement
44
86
  requirements:
45
- - - "~>"
87
+ - - ~>
46
88
  - !ruby/object:Gem::Version
47
89
  version: '10.0'
48
90
  type: :development
49
91
  prerelease: false
50
92
  version_requirements: !ruby/object:Gem::Requirement
51
93
  requirements:
52
- - - "~>"
94
+ - - ~>
53
95
  - !ruby/object:Gem::Version
54
96
  version: '10.0'
55
97
  - !ruby/object:Gem::Dependency
56
98
  name: rspec
57
99
  requirement: !ruby/object:Gem::Requirement
58
100
  requirements:
59
- - - ">="
101
+ - - ~>
102
+ - !ruby/object:Gem::Version
103
+ version: '3.3'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ~>
109
+ - !ruby/object:Gem::Version
110
+ version: '3.3'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rspec-its
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ~>
116
+ - !ruby/object:Gem::Version
117
+ version: '1.2'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ~>
123
+ - !ruby/object:Gem::Version
124
+ version: '1.2'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rspec-collection_matchers
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ~>
130
+ - !ruby/object:Gem::Version
131
+ version: '1.1'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ~>
137
+ - !ruby/object:Gem::Version
138
+ version: '1.1'
139
+ - !ruby/object:Gem::Dependency
140
+ name: rubocop
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ~>
60
144
  - !ruby/object:Gem::Version
61
- version: '0'
145
+ version: '0.34'
62
146
  type: :development
63
147
  prerelease: false
64
148
  version_requirements: !ruby/object:Gem::Requirement
65
149
  requirements:
66
- - - ">="
150
+ - - ~>
67
151
  - !ruby/object:Gem::Version
68
- version: '0'
152
+ version: '0.34'
69
153
  - !ruby/object:Gem::Dependency
70
154
  name: pry
71
155
  requirement: !ruby/object:Gem::Requirement
72
156
  requirements:
73
- - - ">="
157
+ - - ~>
74
158
  - !ruby/object:Gem::Version
75
- version: '0'
159
+ version: '0.10'
76
160
  type: :development
77
161
  prerelease: false
78
162
  version_requirements: !ruby/object:Gem::Requirement
79
163
  requirements:
80
- - - ">="
164
+ - - ~>
81
165
  - !ruby/object:Gem::Version
82
- version: '0'
83
- description: |2
84
- Tweezer is a CLI to add, remove, and edit Gemfile dependencies in an
85
- automated way
166
+ version: '0.10'
167
+ description: ! " Tweezer is a CLI to add, remove, and edit Gemfile dependencies
168
+ in an\n automated way\n"
86
169
  email:
87
170
  - wildgriffin45@gmail.com
88
171
  executables:
@@ -90,17 +173,31 @@ executables:
90
173
  extensions: []
91
174
  extra_rdoc_files: []
92
175
  files:
93
- - ".gitignore"
94
- - ".rspec"
95
- - ".travis.yml"
176
+ - .gitignore
177
+ - .rspec
178
+ - .rubocop.yml
179
+ - .travis.yml
96
180
  - Gemfile
97
181
  - LICENSE.txt
98
182
  - README.md
99
183
  - Rakefile
100
184
  - bin/console
185
+ - bin/rake
186
+ - bin/rspec
101
187
  - bin/setup
102
188
  - exe/tweezer
103
189
  - lib/tweezer.rb
190
+ - lib/tweezer/ast_helper.rb
191
+ - lib/tweezer/cli.rb
192
+ - lib/tweezer/errors.rb
193
+ - lib/tweezer/gem.rb
194
+ - lib/tweezer/gemfile.rb
195
+ - lib/tweezer/unparser/buffer.rb
196
+ - lib/tweezer/unparser/emitter.rb
197
+ - lib/tweezer/unparser/emitter/blank_line.rb
198
+ - lib/tweezer/unparser/emitter/literal/primitive/inspect.rb
199
+ - lib/tweezer/unparser/emitter/send/regular.rb
200
+ - lib/tweezer/unparser/emitter/unparenthesized_arguments.rb
104
201
  - lib/tweezer/version.rb
105
202
  - tweezer.gemspec
106
203
  homepage: https://github.com/glittershark/tweezer
@@ -113,12 +210,12 @@ require_paths:
113
210
  - lib
114
211
  required_ruby_version: !ruby/object:Gem::Requirement
115
212
  requirements:
116
- - - ">="
213
+ - - ! '>='
117
214
  - !ruby/object:Gem::Version
118
215
  version: '0'
119
216
  required_rubygems_version: !ruby/object:Gem::Requirement
120
217
  requirements:
121
- - - ">="
218
+ - - ! '>='
122
219
  - !ruby/object:Gem::Version
123
220
  version: '0'
124
221
  requirements: []