tweezer 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- N2MzN2NmNDM3NWRlMDVjNzg3YzRlODkzNTc2ODAyOWQzYzM0MDk1ZQ==
4
+ OTgwOTUyZTM1ZmY3M2Y5MTdiZjU1NTgwOTA5MjYxZmY1NzQwNWFmOA==
5
5
  data.tar.gz: !binary |-
6
- ODUzNWE4YzRjMzcwZWFjZDJiODZhZjYwZGE4NmU3ODg5NTlkMzBlYQ==
6
+ NWIzZjczZGZjNzUyNmVmY2E0NmMyNTcxNzQ1YzU4YTM1Y2U5NGRjZQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- YmYzZjQ2ZDhiMzI0NTFiN2NmZjhjMzZmZTAwOGU3NjViNTNkYzllY2M2YzIy
10
- NmM4OTI5NTAzNjRiNzU5MmMzMDFiZjBiNTNiMDRjMTI2NTgzYzVjM2ZmNGNj
11
- MmIwMzUzOGI4ZDUzYTNjMzQxZTU3ZGMxMTIxMDI5OTkzYWRkMDA=
9
+ ZTUwNzFhZWQxZjQ3MGMxN2IzY2NlODAxYzAxZGIzZWI2MDUyM2E4YzNjNzhj
10
+ NDg2MWI0NGUwYmRkNjg1NjhmNTdjYWY2OGVlMjIxNWUyZTIwYTQ0YWFhNGJk
11
+ M2MwODY5ODg0NzY3MWVmOTVlNmJjMzc4ODE5ZTQ0MDQ1OTM0MzI=
12
12
  data.tar.gz: !binary |-
13
- ZmIyZTE0MmJkNDQzNjA1MDhmYzMxNzFiNGI4YzU2NGQ0YTMxZDM3ZmIxNzlk
14
- NTYyYjMzNjJjNjRjZGJiYTIzOWQ2ZGIyYjVmNzM5YWQwYWQ1MTBjOTMzN2Jm
15
- OTJmNmMxOThmNmQ5ZjM4ZTc0YzczMTAwZDQ1ZDJiNmU1YjA1ZDc=
13
+ MjMyZDVjYTJlYWRmODRiNzhmY2Q3YzZlNTRlZjlmZDkwNTFjYzBmOWZhYTRl
14
+ MTY4YTA1YzVjMTU0NmViODRlODhkZmNkMDZlMjQwNDY2MDM5OTFmZmRjNWE0
15
+ NGJkNDhjZjM2MzM5NmEzNmUwN2IwNmY0OGMzZjhjNWExNDA0ZDM=
data/README.md CHANGED
@@ -1 +1,53 @@
1
1
  # Tweezer [![Build Status](https://travis-ci.org/glittershark/tweezer.svg?branch=master)](https://travis-ci.org/glittershark/tweezer)
2
+
3
+ **Tweezer** is a CLI tool for editing your Gemfile.
4
+
5
+ Tweezer is currently usable, but should be considered a WIP in that it's
6
+ reasonably untested and might muck up your Gemfile in any number of nasty ways
7
+ (which is irrelevant if your Gemfile is in source control (and if it's not
8
+ what're you doing with your life)), and that it doesn't actually provide for the
9
+ use-case that I started writing it for yet.
10
+
11
+ ## Installation
12
+
13
+ ```sh
14
+ gem install tweezer
15
+ ```
16
+
17
+ ## Usage
18
+
19
+ ```sh
20
+ tweezer add rake # Adds rake to the end of the default group in your Gemfile
21
+
22
+ tweezer add rake '~> 0.9.6' # Adds rake ~> 0.9.6 to the end of the default group
23
+ # in your Gemfile
24
+
25
+ tweezer add rspec --group test # Adds rspec to the 'test' group in your gemfile.
26
+ # Tweezer will do this in a way that results in
27
+ # the most idiomatic possible Gemfile
28
+ ```
29
+
30
+ For further documentation, run `tweezer help` and `tweezer help COMMAND`.
31
+
32
+ ## Why?
33
+
34
+ [Gemrat][] exists and is pretty cool, but has two problems with it that prevent
35
+ it from serving my use-case:
36
+
37
+ 1. It uses naïve string-manipulation to edit the Gemfile. **Tweezer**, by
38
+ comparison, uses the [parser][] and [unparser][] gems to do an actual
39
+ modification of the AST of your gemfile.
40
+
41
+ 2. Gemrat only really satisfies the use-case of "install and save to Gemfile",
42
+ covered by tools like `npm install --save` for other languages. **Tweezer**,
43
+ by comparison, either allows or will allow much more advanced modifications
44
+ of the gemfile, including adding gems to groups, deleting groups, modifying
45
+ versions, sources, etc. of gems, and more.
46
+
47
+ My original use-case was for local-development of a gem that was used by one of
48
+ my apps, which required rather frequently switching my gemfile between `gem
49
+ 'mygem', '~> 1.0.0'` and `gem 'mygem', path: '/path/to/local/gem'`.
50
+
51
+ [Gemrat]: https://github.com/DruRly/gemrat
52
+ [parser]: https://github.com/whitequark/parser
53
+ [unparser]: https://github.com/mbj/unparser
@@ -56,7 +56,9 @@ module Tweezer
56
56
  # rubocop:enable Metrics/AbcSize
57
57
 
58
58
  def dump
59
- Unparser.unparse(ast, comments)
59
+ dumped = Unparser.unparse(ast, comments).dup
60
+ dumped << "\n" unless dumped.last == "\n"
61
+ dumped
60
62
  end
61
63
 
62
64
  private
@@ -85,8 +87,14 @@ module Tweezer
85
87
  end
86
88
 
87
89
  def append_before_first_block!(new_node)
90
+ appended = false
88
91
  nodes = ast.children.flat_map do |node|
89
- block?(node) ? [new_node, blank_line, node] : [node]
92
+ if block?(node) && !appended
93
+ appended = true
94
+ next [new_node, blank_line, node, blank_line]
95
+ end
96
+
97
+ [node]
90
98
  end
91
99
  nodes << new_node unless nodes.include? new_node
92
100
 
@@ -1,3 +1,3 @@
1
1
  module Tweezer
2
- VERSION = '0.1.1'
2
+ VERSION = '0.1.2'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tweezer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
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-10-04 00:00:00.000000000 Z
11
+ date: 2015-10-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parser