clenver 0.1.9 → 0.1.10

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- MDRlZjU0OGVjZjQ0ZDRlN2UyNDRkZWIxZGI3YmY3ZjY1MDUyZGIwOQ==
5
- data.tar.gz: !binary |-
6
- OWJjNzk2MTUyMmRjOTg5NWE4ZGJkZTZkZmZjYmI1ZWFjMmVkYzU5OQ==
2
+ SHA1:
3
+ metadata.gz: df349ceb9945165a4bf0f2c5e6258e8335544a79
4
+ data.tar.gz: 9f1362e7e826c8329987bf4f701e31a7d017f69a
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- Y2NlYjljNTMzN2ZmNTRkNzA3ZjkxMTMwMzNlMTE4OTIyNzk3NWE1MThlMWI3
10
- ODIxZTg0YThmMzE2MWI3NjIwZjQyYjY2MTMyNzRkYTEzYzYxNDNjODFhYjBi
11
- MzczM2U0N2UwODcwNGNlOTk1ZjRhZDg2NzBjOTQ4NDhmNDk2YjU=
12
- data.tar.gz: !binary |-
13
- OGU0ZjNmN2NiMDM5ZmUwYzE0OTEwMTFlOGMxNjBiODY3Mjc2YjE1MjAzMzQ3
14
- NGFlODM0ZDZiNTY4ZjJiNDc2Y2M1MDgxZjBjZTc0NDFjZTk1ZDI1MGMxNDli
15
- YWNlZmY2OGEwZTU3NGE0YzM1ZWQwMjI3MzQxOGU0MmI4Zjc3OWY=
6
+ metadata.gz: 59fc7a9e72442f9a98e40cf9a949e55b68b8fe9627c7a06b1e890a9b49814304f95ecfd94c8116fcda4dc94866fe1446436f613c12f474c5c08d0a9e52012a90
7
+ data.tar.gz: 12efe8b91b05f0a7cb425fb7f49abbb52e02dcb6fd1a609687388bfc202cc322f539ba054e3717777ee5e07fa36eaaa98e7e17678cc9580a069d38952a2e3659
data/.gitignore ADDED
@@ -0,0 +1,18 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ coverage
6
+ InstalledFiles
7
+ lib/bundler/man
8
+ pkg
9
+ rdoc
10
+ spec/reports
11
+ test/tmp
12
+ test/version_tmp
13
+ tmp
14
+
15
+ # YARD artifacts
16
+ .yardoc
17
+ _yardoc
18
+ doc/
data/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - 2.0.0
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+ gem 'coveralls', require: false
3
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,65 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ clenver (0.1.10)
5
+ git (= 1.2.6)
6
+ gli (= 2.8.0)
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ aruba (0.5.3)
12
+ childprocess (>= 0.3.6)
13
+ cucumber (>= 1.1.1)
14
+ rspec-expectations (>= 2.7.0)
15
+ builder (3.2.2)
16
+ childprocess (0.3.9)
17
+ ffi (~> 1.0, >= 1.0.11)
18
+ coveralls (0.7.0)
19
+ multi_json (~> 1.3)
20
+ rest-client
21
+ simplecov (>= 0.7)
22
+ term-ansicolor
23
+ thor
24
+ cucumber (1.3.8)
25
+ builder (>= 2.1.2)
26
+ diff-lcs (>= 1.1.3)
27
+ gherkin (~> 2.12.1)
28
+ multi_json (>= 1.7.5, < 2.0)
29
+ multi_test (>= 0.0.2)
30
+ diff-lcs (1.2.4)
31
+ ffi (1.9.0)
32
+ gherkin (2.12.1)
33
+ multi_json (~> 1.3)
34
+ git (1.2.6)
35
+ gli (2.8.0)
36
+ json (1.8.0)
37
+ mime-types (1.25)
38
+ multi_json (1.8.1)
39
+ multi_test (0.0.2)
40
+ rake (10.1.0)
41
+ rdoc (4.0.1)
42
+ json (~> 1.4)
43
+ rest-client (1.6.7)
44
+ mime-types (>= 1.16)
45
+ rspec-expectations (2.14.3)
46
+ diff-lcs (>= 1.1.3, < 2.0)
47
+ simplecov (0.7.1)
48
+ multi_json (~> 1.0)
49
+ simplecov-html (~> 0.7.1)
50
+ simplecov-html (0.7.1)
51
+ term-ansicolor (1.2.2)
52
+ tins (~> 0.8)
53
+ thor (0.18.1)
54
+ tins (0.11.0)
55
+
56
+ PLATFORMS
57
+ ruby
58
+
59
+ DEPENDENCIES
60
+ aruba
61
+ clenver!
62
+ coveralls
63
+ rake
64
+ rdoc
65
+ rspec-expectations
data/LICENSE ADDED
@@ -0,0 +1,339 @@
1
+ GNU GENERAL PUBLIC LICENSE
2
+ Version 2, June 1991
3
+
4
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
5
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
6
+ Everyone is permitted to copy and distribute verbatim copies
7
+ of this license document, but changing it is not allowed.
8
+
9
+ Preamble
10
+
11
+ The licenses for most software are designed to take away your
12
+ freedom to share and change it. By contrast, the GNU General Public
13
+ License is intended to guarantee your freedom to share and change free
14
+ software--to make sure the software is free for all its users. This
15
+ General Public License applies to most of the Free Software
16
+ Foundation's software and to any other program whose authors commit to
17
+ using it. (Some other Free Software Foundation software is covered by
18
+ the GNU Lesser General Public License instead.) You can apply it to
19
+ your programs, too.
20
+
21
+ When we speak of free software, we are referring to freedom, not
22
+ price. Our General Public Licenses are designed to make sure that you
23
+ have the freedom to distribute copies of free software (and charge for
24
+ this service if you wish), that you receive source code or can get it
25
+ if you want it, that you can change the software or use pieces of it
26
+ in new free programs; and that you know you can do these things.
27
+
28
+ To protect your rights, we need to make restrictions that forbid
29
+ anyone to deny you these rights or to ask you to surrender the rights.
30
+ These restrictions translate to certain responsibilities for you if you
31
+ distribute copies of the software, or if you modify it.
32
+
33
+ For example, if you distribute copies of such a program, whether
34
+ gratis or for a fee, you must give the recipients all the rights that
35
+ you have. You must make sure that they, too, receive or can get the
36
+ source code. And you must show them these terms so they know their
37
+ rights.
38
+
39
+ We protect your rights with two steps: (1) copyright the software, and
40
+ (2) offer you this license which gives you legal permission to copy,
41
+ distribute and/or modify the software.
42
+
43
+ Also, for each author's protection and ours, we want to make certain
44
+ that everyone understands that there is no warranty for this free
45
+ software. If the software is modified by someone else and passed on, we
46
+ want its recipients to know that what they have is not the original, so
47
+ that any problems introduced by others will not reflect on the original
48
+ authors' reputations.
49
+
50
+ Finally, any free program is threatened constantly by software
51
+ patents. We wish to avoid the danger that redistributors of a free
52
+ program will individually obtain patent licenses, in effect making the
53
+ program proprietary. To prevent this, we have made it clear that any
54
+ patent must be licensed for everyone's free use or not licensed at all.
55
+
56
+ The precise terms and conditions for copying, distribution and
57
+ modification follow.
58
+
59
+ GNU GENERAL PUBLIC LICENSE
60
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
61
+
62
+ 0. This License applies to any program or other work which contains
63
+ a notice placed by the copyright holder saying it may be distributed
64
+ under the terms of this General Public License. The "Program", below,
65
+ refers to any such program or work, and a "work based on the Program"
66
+ means either the Program or any derivative work under copyright law:
67
+ that is to say, a work containing the Program or a portion of it,
68
+ either verbatim or with modifications and/or translated into another
69
+ language. (Hereinafter, translation is included without limitation in
70
+ the term "modification".) Each licensee is addressed as "you".
71
+
72
+ Activities other than copying, distribution and modification are not
73
+ covered by this License; they are outside its scope. The act of
74
+ running the Program is not restricted, and the output from the Program
75
+ is covered only if its contents constitute a work based on the
76
+ Program (independent of having been made by running the Program).
77
+ Whether that is true depends on what the Program does.
78
+
79
+ 1. You may copy and distribute verbatim copies of the Program's
80
+ source code as you receive it, in any medium, provided that you
81
+ conspicuously and appropriately publish on each copy an appropriate
82
+ copyright notice and disclaimer of warranty; keep intact all the
83
+ notices that refer to this License and to the absence of any warranty;
84
+ and give any other recipients of the Program a copy of this License
85
+ along with the Program.
86
+
87
+ You may charge a fee for the physical act of transferring a copy, and
88
+ you may at your option offer warranty protection in exchange for a fee.
89
+
90
+ 2. You may modify your copy or copies of the Program or any portion
91
+ of it, thus forming a work based on the Program, and copy and
92
+ distribute such modifications or work under the terms of Section 1
93
+ above, provided that you also meet all of these conditions:
94
+
95
+ a) You must cause the modified files to carry prominent notices
96
+ stating that you changed the files and the date of any change.
97
+
98
+ b) You must cause any work that you distribute or publish, that in
99
+ whole or in part contains or is derived from the Program or any
100
+ part thereof, to be licensed as a whole at no charge to all third
101
+ parties under the terms of this License.
102
+
103
+ c) If the modified program normally reads commands interactively
104
+ when run, you must cause it, when started running for such
105
+ interactive use in the most ordinary way, to print or display an
106
+ announcement including an appropriate copyright notice and a
107
+ notice that there is no warranty (or else, saying that you provide
108
+ a warranty) and that users may redistribute the program under
109
+ these conditions, and telling the user how to view a copy of this
110
+ License. (Exception: if the Program itself is interactive but
111
+ does not normally print such an announcement, your work based on
112
+ the Program is not required to print an announcement.)
113
+
114
+ These requirements apply to the modified work as a whole. If
115
+ identifiable sections of that work are not derived from the Program,
116
+ and can be reasonably considered independent and separate works in
117
+ themselves, then this License, and its terms, do not apply to those
118
+ sections when you distribute them as separate works. But when you
119
+ distribute the same sections as part of a whole which is a work based
120
+ on the Program, the distribution of the whole must be on the terms of
121
+ this License, whose permissions for other licensees extend to the
122
+ entire whole, and thus to each and every part regardless of who wrote it.
123
+
124
+ Thus, it is not the intent of this section to claim rights or contest
125
+ your rights to work written entirely by you; rather, the intent is to
126
+ exercise the right to control the distribution of derivative or
127
+ collective works based on the Program.
128
+
129
+ In addition, mere aggregation of another work not based on the Program
130
+ with the Program (or with a work based on the Program) on a volume of
131
+ a storage or distribution medium does not bring the other work under
132
+ the scope of this License.
133
+
134
+ 3. You may copy and distribute the Program (or a work based on it,
135
+ under Section 2) in object code or executable form under the terms of
136
+ Sections 1 and 2 above provided that you also do one of the following:
137
+
138
+ a) Accompany it with the complete corresponding machine-readable
139
+ source code, which must be distributed under the terms of Sections
140
+ 1 and 2 above on a medium customarily used for software interchange; or,
141
+
142
+ b) Accompany it with a written offer, valid for at least three
143
+ years, to give any third party, for a charge no more than your
144
+ cost of physically performing source distribution, a complete
145
+ machine-readable copy of the corresponding source code, to be
146
+ distributed under the terms of Sections 1 and 2 above on a medium
147
+ customarily used for software interchange; or,
148
+
149
+ c) Accompany it with the information you received as to the offer
150
+ to distribute corresponding source code. (This alternative is
151
+ allowed only for noncommercial distribution and only if you
152
+ received the program in object code or executable form with such
153
+ an offer, in accord with Subsection b above.)
154
+
155
+ The source code for a work means the preferred form of the work for
156
+ making modifications to it. For an executable work, complete source
157
+ code means all the source code for all modules it contains, plus any
158
+ associated interface definition files, plus the scripts used to
159
+ control compilation and installation of the executable. However, as a
160
+ special exception, the source code distributed need not include
161
+ anything that is normally distributed (in either source or binary
162
+ form) with the major components (compiler, kernel, and so on) of the
163
+ operating system on which the executable runs, unless that component
164
+ itself accompanies the executable.
165
+
166
+ If distribution of executable or object code is made by offering
167
+ access to copy from a designated place, then offering equivalent
168
+ access to copy the source code from the same place counts as
169
+ distribution of the source code, even though third parties are not
170
+ compelled to copy the source along with the object code.
171
+
172
+ 4. You may not copy, modify, sublicense, or distribute the Program
173
+ except as expressly provided under this License. Any attempt
174
+ otherwise to copy, modify, sublicense or distribute the Program is
175
+ void, and will automatically terminate your rights under this License.
176
+ However, parties who have received copies, or rights, from you under
177
+ this License will not have their licenses terminated so long as such
178
+ parties remain in full compliance.
179
+
180
+ 5. You are not required to accept this License, since you have not
181
+ signed it. However, nothing else grants you permission to modify or
182
+ distribute the Program or its derivative works. These actions are
183
+ prohibited by law if you do not accept this License. Therefore, by
184
+ modifying or distributing the Program (or any work based on the
185
+ Program), you indicate your acceptance of this License to do so, and
186
+ all its terms and conditions for copying, distributing or modifying
187
+ the Program or works based on it.
188
+
189
+ 6. Each time you redistribute the Program (or any work based on the
190
+ Program), the recipient automatically receives a license from the
191
+ original licensor to copy, distribute or modify the Program subject to
192
+ these terms and conditions. You may not impose any further
193
+ restrictions on the recipients' exercise of the rights granted herein.
194
+ You are not responsible for enforcing compliance by third parties to
195
+ this License.
196
+
197
+ 7. If, as a consequence of a court judgment or allegation of patent
198
+ infringement or for any other reason (not limited to patent issues),
199
+ conditions are imposed on you (whether by court order, agreement or
200
+ otherwise) that contradict the conditions of this License, they do not
201
+ excuse you from the conditions of this License. If you cannot
202
+ distribute so as to satisfy simultaneously your obligations under this
203
+ License and any other pertinent obligations, then as a consequence you
204
+ may not distribute the Program at all. For example, if a patent
205
+ license would not permit royalty-free redistribution of the Program by
206
+ all those who receive copies directly or indirectly through you, then
207
+ the only way you could satisfy both it and this License would be to
208
+ refrain entirely from distribution of the Program.
209
+
210
+ If any portion of this section is held invalid or unenforceable under
211
+ any particular circumstance, the balance of the section is intended to
212
+ apply and the section as a whole is intended to apply in other
213
+ circumstances.
214
+
215
+ It is not the purpose of this section to induce you to infringe any
216
+ patents or other property right claims or to contest validity of any
217
+ such claims; this section has the sole purpose of protecting the
218
+ integrity of the free software distribution system, which is
219
+ implemented by public license practices. Many people have made
220
+ generous contributions to the wide range of software distributed
221
+ through that system in reliance on consistent application of that
222
+ system; it is up to the author/donor to decide if he or she is willing
223
+ to distribute software through any other system and a licensee cannot
224
+ impose that choice.
225
+
226
+ This section is intended to make thoroughly clear what is believed to
227
+ be a consequence of the rest of this License.
228
+
229
+ 8. If the distribution and/or use of the Program is restricted in
230
+ certain countries either by patents or by copyrighted interfaces, the
231
+ original copyright holder who places the Program under this License
232
+ may add an explicit geographical distribution limitation excluding
233
+ those countries, so that distribution is permitted only in or among
234
+ countries not thus excluded. In such case, this License incorporates
235
+ the limitation as if written in the body of this License.
236
+
237
+ 9. The Free Software Foundation may publish revised and/or new versions
238
+ of the General Public License from time to time. Such new versions will
239
+ be similar in spirit to the present version, but may differ in detail to
240
+ address new problems or concerns.
241
+
242
+ Each version is given a distinguishing version number. If the Program
243
+ specifies a version number of this License which applies to it and "any
244
+ later version", you have the option of following the terms and conditions
245
+ either of that version or of any later version published by the Free
246
+ Software Foundation. If the Program does not specify a version number of
247
+ this License, you may choose any version ever published by the Free Software
248
+ Foundation.
249
+
250
+ 10. If you wish to incorporate parts of the Program into other free
251
+ programs whose distribution conditions are different, write to the author
252
+ to ask for permission. For software which is copyrighted by the Free
253
+ Software Foundation, write to the Free Software Foundation; we sometimes
254
+ make exceptions for this. Our decision will be guided by the two goals
255
+ of preserving the free status of all derivatives of our free software and
256
+ of promoting the sharing and reuse of software generally.
257
+
258
+ NO WARRANTY
259
+
260
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
261
+ FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
262
+ OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
263
+ PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
264
+ OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
265
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
266
+ TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
267
+ PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
268
+ REPAIR OR CORRECTION.
269
+
270
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
271
+ WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
272
+ REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
273
+ INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
274
+ OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
275
+ TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
276
+ YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
277
+ PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
278
+ POSSIBILITY OF SUCH DAMAGES.
279
+
280
+ END OF TERMS AND CONDITIONS
281
+
282
+ How to Apply These Terms to Your New Programs
283
+
284
+ If you develop a new program, and you want it to be of the greatest
285
+ possible use to the public, the best way to achieve this is to make it
286
+ free software which everyone can redistribute and change under these terms.
287
+
288
+ To do so, attach the following notices to the program. It is safest
289
+ to attach them to the start of each source file to most effectively
290
+ convey the exclusion of warranty; and each file should have at least
291
+ the "copyright" line and a pointer to where the full notice is found.
292
+
293
+ Command Line Home Environment Manger
294
+ Copyright (C) 2013 Piotr Król
295
+
296
+ This program is free software; you can redistribute it and/or modify
297
+ it under the terms of the GNU General Public License as published by
298
+ the Free Software Foundation; either version 2 of the License, or
299
+ (at your option) any later version.
300
+
301
+ This program is distributed in the hope that it will be useful,
302
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
303
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
304
+ GNU General Public License for more details.
305
+
306
+ You should have received a copy of the GNU General Public License along
307
+ with this program; if not, write to the Free Software Foundation, Inc.,
308
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
309
+
310
+ Also add information on how to contact you by electronic and paper mail.
311
+
312
+ If the program is interactive, make it output a short notice like this
313
+ when it starts in an interactive mode:
314
+
315
+ Gnomovision version 69, Copyright (C) year name of author
316
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
317
+ This is free software, and you are welcome to redistribute it
318
+ under certain conditions; type `show c' for details.
319
+
320
+ The hypothetical commands `show w' and `show c' should show the appropriate
321
+ parts of the General Public License. Of course, the commands you use may
322
+ be called something other than `show w' and `show c'; they could even be
323
+ mouse-clicks or menu items--whatever suits your program.
324
+
325
+ You should also get your employer (if you work as a programmer) or your
326
+ school, if any, to sign a "copyright disclaimer" for the program, if
327
+ necessary. Here is a sample; alter the names:
328
+
329
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
330
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
331
+
332
+ {signature of Ty Coon}, 1 April 1989
333
+ Ty Coon, President of Vice
334
+
335
+ This General Public License does not permit incorporating your program into
336
+ proprietary programs. If your program is a subroutine library, you may
337
+ consider it more useful to permit linking proprietary applications with the
338
+ library. If this is what you want to do, use the GNU Lesser General
339
+ Public License instead of this License.
data/README.md ADDED
@@ -0,0 +1,56 @@
1
+ clenver
2
+ =======
3
+ [![Gem Version](https://badge.fury.io/rb/clenver.png)](http://badge.fury.io/rb/clenver) [![Build Status](https://travis-ci.org/pietrushnic/clenver.png?branch=master)](https://travis-ci.org/pietrushnic/clenver) [![Code Climate](https://codeclimate.com/github/pietrushnic/clenver.png)](https://codeclimate.com/github/pietrushnic/clenver) [![Coverage Status](https://coveralls.io/repos/pietrushnic/clenver/badge.png)](https://coveralls.io/r/pietrushnic/clenver)
4
+
5
+ clenver (Command Line home ENVironment mangER) is a Ruby gem that bootstrap and manage your shell environment.
6
+
7
+ ## Introduction
8
+
9
+ clenver aims to shorten time of configuring your brand new Linux account to fully featured development envionment of your choice by using:
10
+ * VCS (version control system) repositories
11
+ * directory creation
12
+ * symlinking
13
+
14
+ It also aims to reliably manage your exising environment by:
15
+ * easy switching between project workspaces
16
+ * report on the status of used repositories (like [oh-my-zsh](), [spf13-vim](), ...)
17
+
18
+ ## Installation
19
+ Simply type in you shell:
20
+ ```
21
+ gem install clenver
22
+ ```
23
+ ## Getting Started
24
+ ### Bootstrap
25
+ clenver is able to bootstrap your brand new Linux account according to rules provided through YAML file. For
26
+ xample create `dummy.yml` with below content:
27
+ ```yaml
28
+ https://github.com/pietrushnic/dummy.git:
29
+ links:
30
+ foobar.txt:
31
+ - foobar_link
32
+ foobar:
33
+ - foobar_dir_link
34
+ run:
35
+ - echo "success!!!"
36
+ remotes:
37
+ upstream:
38
+ - https://github.com/pietrushnic/dummy.git
39
+ ```
40
+ After that running
41
+ ```
42
+ clenver init dummy.yaml
43
+ ```
44
+ gives you below tree:
45
+ ```
46
+ dummy
47
+ ├── dummy
48
+ │   ├── foobar
49
+ │   ├── foobar.txt
50
+ │   └── README.md
51
+ ├── foobar_dir_link -> $PWD/dummy/dummy/foobar
52
+ └── foobar_link -> $PWD/dummy/dummy/foobar.txt
53
+ ```
54
+ And of course will display `success!!!` message. Carefully crafted YAML file can bootstrap you clean user account into fully configured user account.
55
+ ## Examples
56
+ ## Contribution
data/Rakefile ADDED
@@ -0,0 +1,44 @@
1
+ require 'rake/clean'
2
+ require 'rubygems'
3
+ require 'rubygems/package_task'
4
+ require 'rdoc/task'
5
+ require 'cucumber'
6
+ require 'cucumber/rake/task'
7
+ Rake::RDocTask.new do |rd|
8
+ rd.main = "README.rdoc"
9
+ rd.rdoc_files.include("README.rdoc","lib/**/*.rb","bin/**/*")
10
+ rd.title = 'Your application title'
11
+ end
12
+
13
+ spec = eval(File.read('clenver.gemspec'))
14
+
15
+ Gem::PackageTask.new(spec) do |pkg|
16
+ end
17
+ CUKE_RESULTS = 'results.html'
18
+ CLEAN << CUKE_RESULTS
19
+ desc 'Run features'
20
+ Cucumber::Rake::Task.new(:features) do |t|
21
+ opts = "features --format html -o #{CUKE_RESULTS} --format progress -x"
22
+ opts += " --tags #{ENV['TAGS']}" if ENV['TAGS']
23
+ t.cucumber_opts = opts
24
+ t.fork = false
25
+ end
26
+
27
+ desc 'Run features tagged as work-in-progress (@wip)'
28
+ Cucumber::Rake::Task.new('features:wip') do |t|
29
+ tag_opts = ' --tags ~@pending'
30
+ tag_opts = ' --tags @wip'
31
+ t.cucumber_opts = "features --format html -o #{CUKE_RESULTS} --format pretty -x -s#{tag_opts}"
32
+ t.fork = false
33
+ end
34
+
35
+ task :cucumber => :features
36
+ task 'cucumber:wip' => 'features:wip'
37
+ task :wip => 'features:wip'
38
+ require 'rake/testtask'
39
+ Rake::TestTask.new do |t|
40
+ t.libs << "test"
41
+ t.test_files = FileList['test/*_test.rb']
42
+ end
43
+
44
+ task :default => [:test,:features]
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env bash
2
+ sudo apt-get -y install curl git
3
+ curl -L https://get.rvm.io | bash -s stable --ruby
4
+ source $HOME/.rvm/scripts/rvm
5
+ rvm use ruby
6
+ gem install clenver
data/clenver.gemspec ADDED
@@ -0,0 +1,29 @@
1
+ # Ensure we require the local version and not one we might have installed already
2
+ require File.join([File.dirname(__FILE__),'lib','clenver','version.rb'])
3
+ spec = Gem::Specification.new do |s|
4
+ s.name = 'clenver'
5
+ s.version = Clenver::VERSION
6
+ s.author = 'Piotr Król'
7
+ s.email = 'pietrushnic@gmail.com'
8
+ s.homepage = 'https://github.com/pietrushnic/clenver'
9
+ s.platform = Gem::Platform::RUBY
10
+ s.summary = 'Command line home directory manager'
11
+ s.license = 'GPLv2'
12
+ s.description = 'clenver aims to shorten time of configuring your brand new *NIX account to fully featured development envionment of your choice'
13
+ # Add your other files here if you make them
14
+ s.files = `git ls-files`.split("\n")
15
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
16
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
17
+ s.require_paths << 'lib'
18
+ s.has_rdoc = true
19
+ s.extra_rdoc_files = ['README.rdoc','clenver.rdoc']
20
+ s.rdoc_options << '--title' << 'clenver' << '--main' << 'README.rdoc' << '-ri'
21
+ s.bindir = 'bin'
22
+ s.executables << 'clenver'
23
+ s.add_development_dependency('rake')
24
+ s.add_development_dependency('rdoc')
25
+ s.add_development_dependency('aruba')
26
+ s.add_development_dependency('rspec-expectations')
27
+ s.add_runtime_dependency('gli','2.8.0')
28
+ s.add_runtime_dependency('git','1.2.6')
29
+ end
@@ -0,0 +1,8 @@
1
+ Feature: My bootstrapped app kinda works
2
+ In order to get going on coding my awesome app
3
+ I want to have aruba and cucumber setup
4
+ So I don't have to do it myself
5
+
6
+ Scenario: App just runs
7
+ When I get help for "clenver"
8
+ Then the exit status should be 0
@@ -0,0 +1,184 @@
1
+ Feature: Initialization
2
+ In order to save time and money
3
+ User should be able to bootstrap project environment ASAP
4
+
5
+ Scenario: Given config file doesn't exist
6
+ When I run `clenver init no_name.yml`
7
+ Then the exit status should be 2
8
+
9
+ Scenario: Valid config file given
10
+ Given The default aruba timeout is 10 seconds
11
+ Given a file named "valid.yml" with:
12
+ """
13
+ https://github.com/pietrushnic/dummy.git:
14
+ links:
15
+ foobar.txt:
16
+ - foobar_link
17
+ foobar:
18
+ - foobar_dir_link
19
+ """
20
+ When I run `clenver init valid.yml`
21
+ Then the exit status should be 0
22
+
23
+ Scenario: Invalid config file given
24
+ Given a file named "invalid.yml" with:
25
+ """
26
+ Lorem:{]}
27
+ ipsum:
28
+ dolor: sit amet,
29
+ consectetur adipisicing elit, sed: do eiusmod tempor
30
+ incididunt: ut
31
+ labore et dolore: magna aliqua.
32
+ """
33
+ When I run `clenver init invalid.yml`
34
+ Then the exit status should be 1
35
+
36
+ Scenario: Init simple project (repo w/ colon)
37
+ Given The default aruba timeout is 10 seconds
38
+ Given a file named "test_repo.yml" with:
39
+ """
40
+ https://github.com/pietrushnic/dummy.git:
41
+ """
42
+ When I run `clenver init test_repo.yml`
43
+ Then the following files should exist:
44
+ | test_repo/dummy/README.md |
45
+
46
+ Scenario: Init simple project (repo w/o colon)
47
+ Given The default aruba timeout is 10 seconds
48
+ Given a file named "test_repo.yml" with:
49
+ """
50
+ https://github.com/pietrushnic/dummy.git
51
+ """
52
+ When I run `clenver init test_repo.yml`
53
+ Then the following files should exist:
54
+ | test_repo/dummy/README.md |
55
+
56
+ Scenario: Init simple project to given directory
57
+ Given The default aruba timeout is 10 seconds
58
+ Given a file named "test_repo.yml" with:
59
+ """
60
+ https://github.com/pietrushnic/dummy.git:
61
+ """
62
+ When I run `clenver init test_repo.yml some_tmp`
63
+ Then the following files should exist:
64
+ | some_tmp/test_repo/dummy/README.md |
65
+
66
+ Scenario: Init project with symbolic links
67
+ Given The default aruba timeout is 10 seconds
68
+ Given a file named "test_repo.yml" with:
69
+ """
70
+ https://github.com/pietrushnic/dummy.git:
71
+ links:
72
+ foobar.txt:
73
+ - foobar_link
74
+ foobar:
75
+ - foobar_dir_link
76
+ """
77
+ When I run `clenver init test_repo.yml some_tmp`
78
+ Then the following links should exist:
79
+ | some_tmp/test_repo/foobar_link |
80
+ | some_tmp/test_repo/foobar_dir_link |
81
+
82
+ Scenario: use system variable in path
83
+ Given The default aruba timeout is 10 seconds
84
+ Given a file named "test_repo.yml" with:
85
+ """
86
+ https://github.com/pietrushnic/dummy.git:
87
+ links:
88
+ $HOME/foobar.txt:
89
+ - $HOME/foobar_link
90
+ """
91
+ When I run `clenver init test_repo.yml some_tmp`
92
+ Then the following links should exist:
93
+ | $HOME/foobar_link |
94
+
95
+ Scenario: Connect remote and check uri
96
+ Given The default aruba timeout is 25 seconds
97
+ Given a file named "test_repo.yml" with:
98
+ """
99
+ https://github.com/pietrushnic/spf13-vim.git:
100
+ remotes:
101
+ upstream:
102
+ - https://github.com/spf13/spf13-vim.git
103
+ """
104
+ When I run `clenver init test_repo.yml some_tmp`
105
+ Then the following remote uris should be connected in "some_tmp/test_repo/spf13-vim":
106
+ | https://github.com/spf13/spf13-vim.git |
107
+
108
+ Scenario: Connect remote and check its name
109
+ Given The default aruba timeout is 25 seconds
110
+ Given a file named "test_repo.yml" with:
111
+ """
112
+ https://github.com/pietrushnic/spf13-vim.git:
113
+ remotes:
114
+ upstream:
115
+ - https://github.com/spf13/spf13-vim.git
116
+ """
117
+ When I run `clenver init test_repo.yml some_tmp`
118
+ Then the following remote branches should be connected in "some_tmp/test_repo/spf13-vim":
119
+ | upstream |
120
+
121
+ Scenario: run simple command
122
+ Given The default aruba timeout is 10 seconds
123
+ Given a file named "test_repo.yml" with:
124
+ """
125
+ https://github.com/pietrushnic/dummy.git:
126
+ run:
127
+ - echo "success!!!!"
128
+ """
129
+ When I run `clenver init test_repo.yml some_tmp`
130
+ Then the output should contain "success!!!!\n"
131
+
132
+ Scenario: apt: check if package installed
133
+ Given The default aruba timeout is 10 seconds
134
+ Given a file named "test_repo.yml" with:
135
+ """
136
+ apt:
137
+ - vim
138
+ """
139
+ When I run `clenver init test_repo.yml some_tmp`
140
+ Then the output should contain "vim is already the newest version.\n"
141
+
142
+ Scenario: package installed and simple command run
143
+ Given The default aruba timeout is 10 seconds
144
+ Given a file named "test_repo.yml" with:
145
+ """
146
+ apt:
147
+ - vim
148
+ https://github.com/pietrushnic/dummy.git:
149
+ run:
150
+ - echo "success!!!!"
151
+ """
152
+ When I run `clenver init test_repo.yml some_tmp`
153
+ Then the output should contain "vim is already the newest version.\n"
154
+ Then the output should contain "success!!!!\n"
155
+
156
+ Scenario: install gem
157
+ Given The default aruba timeout is 45 seconds
158
+ Given a file named "test_repo.yml" with:
159
+ """
160
+ gem:
161
+ - tmuxinator
162
+ https://github.com/pietrushnic/dummy.git:
163
+ run:
164
+ - echo "success!!!!"
165
+ """
166
+ When I run `clenver init test_repo.yml some_tmp`
167
+ Then the output should contain "installed\n"
168
+ Then the output should contain "success!!!!\n"
169
+ @wip
170
+ Scenario: install gem and package
171
+ Given The default aruba timeout is 45 seconds
172
+ Given a file named "test_repo.yml" with:
173
+ """
174
+ apt:
175
+ - vim
176
+ gem:
177
+ - tmuxinator
178
+ https://github.com/pietrushnic/dummy.git:
179
+ run:
180
+ - echo "success!!!!"
181
+ """
182
+ When I run `clenver init test_repo.yml some_tmp`
183
+ Then the output should contain "installed\n"
184
+ Then the output should contain "success!!!!\n"
@@ -0,0 +1,30 @@
1
+ require 'rspec/expectations'
2
+ require 'clenver/link'
3
+
4
+ When /^I get help for "([^"]*)"$/ do |app_name|
5
+ @app_name = app_name
6
+ step %(I run `#{app_name} help`)
7
+ end
8
+
9
+ # Add more step definitions here
10
+
11
+ Then(/^the following links should exist:$/) do |files|
12
+ files.raw.map{|file_row| file_row[0]}.each do |f|
13
+ if /\$\w+/.match(f)
14
+ f_path = %x[ echo #{f}].strip
15
+ elsif
16
+ f_path = "tmp/aruba/" + f
17
+ end
18
+ File.should be_symlink(f_path)
19
+ end
20
+ end
21
+
22
+ Then(/^the following remote (?:uris|branches) should be connected in "(.*?)":$/) do |arg1, table|
23
+ table.raw.map{|repo| repo[0]}.each do |r|
24
+ curr_pwd = Dir::pwd
25
+ Dir::chdir("tmp/aruba" + "/" + arg1)
26
+ res = %x[git remote -v| grep #{r}|wc -l].strip
27
+ Dir::chdir(curr_pwd)
28
+ res.to_i.should eq(2)
29
+ end
30
+ end
@@ -0,0 +1,17 @@
1
+ require 'coveralls'
2
+ Coveralls.wear!
3
+ require 'aruba/cucumber'
4
+
5
+ ENV['PATH'] = "#{File.expand_path(File.dirname(__FILE__) + '/../../bin')}#{File::PATH_SEPARATOR}#{ENV['PATH']}"
6
+ LIB_DIR = File.join(File.expand_path(File.dirname(__FILE__)),'..','..','lib')
7
+
8
+ Before do
9
+ # Using "announce" causes massive warnings on 1.9.2
10
+ @puts = true
11
+ @original_rubylib = ENV['RUBYLIB']
12
+ ENV['RUBYLIB'] = LIB_DIR + File::PATH_SEPARATOR + ENV['RUBYLIB'].to_s
13
+ end
14
+
15
+ After do
16
+ ENV['RUBYLIB'] = @original_rubylib
17
+ end
@@ -0,0 +1,19 @@
1
+ class PackageManger
2
+ def initialize(name, pkgs)
3
+ @name = name
4
+ @pkgs = pkgs
5
+ end
6
+
7
+ def install()
8
+ case @name
9
+ when 'apt'
10
+ out = %x[sudo apt-get install #{@pkgs}]
11
+ when 'gem'
12
+ out = %x[gem install #{@pkgs}]
13
+ end
14
+ puts out
15
+ end
16
+
17
+ def check(pkg)
18
+ end
19
+ end
@@ -30,6 +30,9 @@ class Project
30
30
  when Hash
31
31
  @repos.each do |uri, content|
32
32
  #TODO: verify if r is a supported repo
33
+ if uri == 'apt' or uri == 'gem'
34
+ next
35
+ end
33
36
  begin
34
37
  r = Repository.new(uri, dst)
35
38
  r.clone
@@ -2,6 +2,7 @@ require 'gli'
2
2
  require 'clenver'
3
3
  require 'clenver/project'
4
4
  require 'clenver/logging'
5
+ require 'clenver/package_manager'
5
6
 
6
7
  module Clenver
7
8
  class Runner
@@ -19,6 +20,22 @@ module Clenver
19
20
  logger.debug("yaml: #{yaml}")
20
21
  #TODO: create test and fix this place with check for empty file
21
22
  p = Project.new(File.basename("#{@path}", ".yml"), yaml, @dst)
23
+ unless yaml['apt'].nil?
24
+ for pkg in yaml['apt'] do
25
+ pkgs = pkg + " "
26
+ end
27
+ puts pkgs
28
+ p_mgr = PackageManger.new('apt', pkgs)
29
+ p_mgr.install()
30
+ end
31
+ unless yaml['gem'].nil?
32
+ for pkg in yaml['gem'] do
33
+ pkgs = pkg + " "
34
+ end
35
+ puts pkgs
36
+ p_mgr = PackageManger.new('gem', pkgs)
37
+ p_mgr.install()
38
+ end
22
39
  p.create_repos
23
40
  p.init_project
24
41
  rescue Psych::SyntaxError => ex
@@ -1,3 +1,3 @@
1
1
  module Clenver
2
- VERSION = '0.1.9'
2
+ VERSION = '0.1.10'
3
3
  end
@@ -0,0 +1,14 @@
1
+ require 'test_helper'
2
+
3
+ class DefaultTest < Test::Unit::TestCase
4
+
5
+ def setup
6
+ end
7
+
8
+ def teardown
9
+ end
10
+
11
+ def test_the_truth
12
+ assert true
13
+ end
14
+ end
@@ -0,0 +1,9 @@
1
+ require 'test/unit'
2
+
3
+ # Add test libraries you want to use here, e.g. mocha
4
+
5
+ class Test::Unit::TestCase
6
+
7
+ # Add global extensions to the test case class here
8
+
9
+ end
@@ -0,0 +1,81 @@
1
+ #!/bin/bash
2
+ #TODO: write documentation and disclaimer about vm usage
3
+ #TODO: make sure that $1 exist - use vboxmanage list
4
+ SCANCODES=$HOME/src/scancodes/scancodes
5
+ pub_key=$(cat $HOME/.ssh/id_rsa.pub)
6
+ pkey_scancodes=$(echo -en $pub_key|$SCANCODES)
7
+
8
+ sc_send () {
9
+ for (( i=0; i<${#2}; i++ )); do
10
+ echo ">${2:$i:1}<"
11
+ c=$(echo -en "${2:$i:1}"|$SCANCODES)
12
+ echo "$1: send ${c}"
13
+ vboxmanage controlvm $1 keyboardputscancode $c
14
+ if [[ $i -eq $(expr ${#2} - 1) ]]; then
15
+ c=$(echo -en "\n"|$SCANCODES)
16
+ echo "$1: send ${c}"
17
+ vboxmanage controlvm $1 keyboardputscancode $c
18
+ fi
19
+ done
20
+ }
21
+
22
+ startvm() {
23
+ echo "startvm $1"
24
+ vboxmanage startvm $1 # -type headless
25
+ }
26
+
27
+ ssh_cmd () {
28
+ ssh -oStrictHostKeyChecking=no user@localhost -p 2222 $1
29
+ }
30
+
31
+ scp_cmd () {
32
+ scp -P 2222 -oStrictHostKeyChecking=no $1 user@localhost:$2
33
+ }
34
+
35
+ bash_cmd () {
36
+ ssh_cmd "bash -l -c $1"
37
+ }
38
+
39
+ no_pass_ssh () {
40
+ startvm $1
41
+ sleep 3
42
+ vboxmanage controlvm $1 keyboardputscancode 1C 9C
43
+ sleep 45
44
+ # cat host pub key to guest .ssh/authorized_keys
45
+ sc_send $1 'mkdir -p $HOME/.ssh'
46
+ st_pt=' > $HOME/.ssh/authorized_keys'
47
+ nd_pt="echo $pub_key"
48
+ echo "$nd_pt$st_pt"
49
+ sc_send $1 "$nd_pt$st_pt"
50
+ }
51
+
52
+ clenver_install() {
53
+ no_pass_ssh $1
54
+ if [[ $# -ge 2 ]]; then
55
+ cat $2 | while read line; do
56
+ sc_send $1 "$line"
57
+ done
58
+ else
59
+ ssh_cmd 'wget -O - bit.ly/1hASabs|bash'
60
+ ssh_cmd 'bash -l -c "clenver"'
61
+ fi
62
+ }
63
+
64
+ init_general () {
65
+ clenver_install $1
66
+ #ssh_cmd 'bash -l -c "clenver init http://bit.ly/1cpqEqp"'
67
+ ssh_cmd 'git clone https://github.com/pietrushnic/clenver_projects.git src/clenver_projects'
68
+ ssh_cmd 'bash -l -c "clenver init src/clenver_projects/general.yml"'
69
+ }
70
+
71
+ init_custom () {
72
+ no_pass_ssh $1
73
+ scp_cmd $2 /home/user
74
+ home_v='$HOME'
75
+ nd_pt="/${2##*/}"
76
+ bash_cmd "$home_v$nd_pt"
77
+ ssh_cmd "git clone https://github.com/pietrushnic/clenver_projects.git src/clenver_projects"
78
+ bash_cmd "clenver init $home_v/src/clenver_projects/general.yml"
79
+ }
80
+
81
+ eval "$@"
metadata CHANGED
@@ -1,69 +1,69 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: clenver
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.9
4
+ version: 0.1.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Piotr Król
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-10-30 00:00:00.000000000 Z
11
+ date: 2013-11-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ! '>='
17
+ - - '>='
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :development
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: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rdoc
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ! '>='
31
+ - - '>='
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ! '>='
38
+ - - '>='
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: aruba
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ! '>='
45
+ - - '>='
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ! '>='
52
+ - - '>='
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec-expectations
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ! '>='
59
+ - - '>='
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ! '>='
66
+ - - '>='
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
@@ -104,17 +104,34 @@ extra_rdoc_files:
104
104
  - README.rdoc
105
105
  - clenver.rdoc
106
106
  files:
107
+ - .gitignore
108
+ - .travis.yml
109
+ - Gemfile
110
+ - Gemfile.lock
111
+ - LICENSE
112
+ - README.md
113
+ - README.rdoc
114
+ - Rakefile
107
115
  - bin/clenver
108
- - lib/clenver/version.rb
116
+ - binscripts/clenver-installer
117
+ - clenver.gemspec
118
+ - clenver.rdoc
119
+ - features/clenver.feature
120
+ - features/clenver_init.feature
121
+ - features/step_definitions/clenver_steps.rb
122
+ - features/support/env.rb
123
+ - lib/clenver.rb
124
+ - lib/clenver/assets/sample.yml
125
+ - lib/clenver/link.rb
126
+ - lib/clenver/logging.rb
127
+ - lib/clenver/package_manager.rb
109
128
  - lib/clenver/project.rb
110
129
  - lib/clenver/repository.rb
111
- - lib/clenver/link.rb
112
130
  - lib/clenver/runner.rb
113
- - lib/clenver/logging.rb
114
- - lib/clenver/assets/sample.yml
115
- - lib/clenver.rb
116
- - README.rdoc
117
- - clenver.rdoc
131
+ - lib/clenver/version.rb
132
+ - test/default_test.rb
133
+ - test/test_helper.rb
134
+ - test/vbox/regression.sh
118
135
  homepage: https://github.com/pietrushnic/clenver
119
136
  licenses:
120
137
  - GPLv2
@@ -131,17 +148,17 @@ require_paths:
131
148
  - lib
132
149
  required_ruby_version: !ruby/object:Gem::Requirement
133
150
  requirements:
134
- - - ! '>='
151
+ - - '>='
135
152
  - !ruby/object:Gem::Version
136
153
  version: '0'
137
154
  required_rubygems_version: !ruby/object:Gem::Requirement
138
155
  requirements:
139
- - - ! '>='
156
+ - - '>='
140
157
  - !ruby/object:Gem::Version
141
158
  version: '0'
142
159
  requirements: []
143
160
  rubyforge_project:
144
- rubygems_version: 2.1.9
161
+ rubygems_version: 2.1.5
145
162
  signing_key:
146
163
  specification_version: 4
147
164
  summary: Command line home directory manager