swappy 0.2.0
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 +7 -0
- data/.gitignore +17 -0
- data/.rspec +1 -0
- data/Gemfile +4 -0
- data/Guardfile +5 -0
- data/LICENSE.txt +22 -0
- data/README.md +66 -0
- data/Rakefile +1 -0
- data/bin/swappy +3 -0
- data/lib/swappy.rb +20 -0
- data/lib/swappy/app_config.rb +44 -0
- data/lib/swappy/cli.rb +67 -0
- data/lib/swappy/commands/command.rb +22 -0
- data/lib/swappy/commands/list.rb +11 -0
- data/lib/swappy/commands/swap.rb +55 -0
- data/lib/swappy/config.rb +27 -0
- data/lib/swappy/config_set.rb +39 -0
- data/lib/swappy/version.rb +3 -0
- data/spec/spec_helper.rb +13 -0
- data/spec/swappy/app_config_spec.rb +29 -0
- data/spec/swappy/commands/command_sharedspec.rb +7 -0
- data/spec/swappy/commands/list_spec.rb +19 -0
- data/spec/swappy/commands/swap_spec.rb +40 -0
- data/swappy.gemspec +31 -0
- metadata +199 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: c3e0276f5fca1482a5c899ade8efcf1ae6d4c30c
|
4
|
+
data.tar.gz: df71cd71206ce6f64eb0ef393a5e9f38d9a1a3c1
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 747cb60c9dadb4969acac742eea16f3a77ee92aa7647848a849a21bac3e116220b672723d819533f81a15be6475eb367fc167c5134a3505f681653687d346971
|
7
|
+
data.tar.gz: b2d36aec01b2d855ad13a68d90de2e3e0b2a143e84bb5ec625310c3b37486c97c90122a18479e73cfe00d6acee7cce7f1afc6abffba79c629dd5b24d70e874f8
|
data/.gitignore
ADDED
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--color
|
data/Gemfile
ADDED
data/Guardfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2014 Joshua Rieken
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
# Swappy
|
2
|
+
|
3
|
+
Swappy lets you easily swap between config file sets.
|
4
|
+
|
5
|
+
## Use Cases
|
6
|
+
|
7
|
+
* You have, for instance, 2 different .vimrc files that you switch back and forth between depending on the circumstances. It doesn't have to be .vimrc files; it can be *any* config file. In fact, it doesn't even have to be a config file, it can be *any file*—even multiple files!
|
8
|
+
* You want to take someone's dotfiles out for a spin, and easily switch back to yours.
|
9
|
+
|
10
|
+
## Installation
|
11
|
+
|
12
|
+
`gem install swappy`
|
13
|
+
|
14
|
+
Run `swappy --help` as a sanity check.
|
15
|
+
|
16
|
+
## Example
|
17
|
+
|
18
|
+
Put this `.swappy.json` config file in your `~`:
|
19
|
+
|
20
|
+
{
|
21
|
+
"config_sets": {
|
22
|
+
"vim_heavy": {
|
23
|
+
"link_root": "~",
|
24
|
+
"source_root": "~/.config_sets/vim_heavy",
|
25
|
+
"configs": {
|
26
|
+
".vimrc": "vimrc"
|
27
|
+
}
|
28
|
+
},
|
29
|
+
"vim_minimalist": {
|
30
|
+
"link_root": "~",
|
31
|
+
"source_root": "~/.config_sets/vim_minimalist",
|
32
|
+
"configs": {
|
33
|
+
".vimrc": "vimrc"
|
34
|
+
}
|
35
|
+
}
|
36
|
+
}
|
37
|
+
}
|
38
|
+
|
39
|
+
This file has two config sets:
|
40
|
+
|
41
|
+
* **vim_heavy** (files live in `~/.config_sets/vim_heavy`)
|
42
|
+
* **vim_minimalist** (files live in `~/.config_sets/vim_minimalist`)
|
43
|
+
|
44
|
+
You can verify these are configured correctly by running `swappy list`. You should see:
|
45
|
+
|
46
|
+
vim_heavy
|
47
|
+
vim_minimalist
|
48
|
+
|
49
|
+
When you issue the command `swappy swap vim_heavy`, `~/.vimrc` will now be a symbolic link to `~/.config_sets/vim_heavy/vimrc`.
|
50
|
+
|
51
|
+
"**BUT WAIT!**", you say, "**What happens if I already have a `.vimrc` in my `~`?**" I'm glad you asked. Swappy will back it up within the same directory. The backup file will be named with a timestamp, like this:
|
52
|
+
|
53
|
+
.vimrc.backup.1399229001
|
54
|
+
|
55
|
+
Even your symlinks will be backed up!
|
56
|
+
|
57
|
+
This effectively means that a history of your swaps will be stored within the same directory.
|
58
|
+
|
59
|
+
## Contributing
|
60
|
+
|
61
|
+
1. Fork it ( http://github.com/facto/swappy/fork )
|
62
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
63
|
+
3. Write code (don't forget the tests!)
|
64
|
+
4. Commit your changes (`git commit -am 'Add some feature'`)
|
65
|
+
5. Push to the branch (`git push origin my-new-feature`)
|
66
|
+
6. Create new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
data/bin/swappy
ADDED
data/lib/swappy.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
require 'oj'
|
3
|
+
|
4
|
+
require 'swappy/version'
|
5
|
+
|
6
|
+
module Swappy
|
7
|
+
APP_ID = 'swappy'
|
8
|
+
APP_NAME = 'Swappy'
|
9
|
+
VERSION_COPYRIGHT = "v#{VERSION} \u00A9 #{Time.now.year}"
|
10
|
+
|
11
|
+
autoload :Config, 'swappy/config'
|
12
|
+
autoload :ConfigSet, 'swappy/config_set'
|
13
|
+
autoload :AppConfig, 'swappy/app_config'
|
14
|
+
|
15
|
+
module Commands
|
16
|
+
autoload :Command, 'swappy/commands/command'
|
17
|
+
autoload :List, 'swappy/commands/list'
|
18
|
+
autoload :Swap, 'swappy/commands/swap'
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Swappy
|
2
|
+
class AppConfig
|
3
|
+
include Enumerable
|
4
|
+
|
5
|
+
attr_reader :options, :path
|
6
|
+
|
7
|
+
def initialize(options={})
|
8
|
+
@options = options
|
9
|
+
@path = options[:path]
|
10
|
+
end
|
11
|
+
|
12
|
+
def config_sets
|
13
|
+
@config_sets ||= json_config_sets.map { |config_set| ConfigSet.new(config_set) }
|
14
|
+
end
|
15
|
+
|
16
|
+
def each(&block)
|
17
|
+
each_config_set(&block)
|
18
|
+
end
|
19
|
+
|
20
|
+
def each_config_set(&block)
|
21
|
+
config_sets.each do |config_set|
|
22
|
+
block.call(config_set)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def find_config_set_by_name(name)
|
27
|
+
config_sets.find { |set| set.name == name }
|
28
|
+
end
|
29
|
+
|
30
|
+
protected
|
31
|
+
|
32
|
+
def app_config_content
|
33
|
+
@app_config_content ||= File.read(File.expand_path(path))
|
34
|
+
end
|
35
|
+
|
36
|
+
def app_config_json_content
|
37
|
+
@app_config_json_content ||= Oj.load(app_config_content)
|
38
|
+
end
|
39
|
+
|
40
|
+
def json_config_sets
|
41
|
+
app_config_json_content['config_sets']
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
data/lib/swappy/cli.rb
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'swappy'
|
3
|
+
require 'trollop'
|
4
|
+
|
5
|
+
module Swappy
|
6
|
+
class CLI
|
7
|
+
attr_reader :cmd
|
8
|
+
|
9
|
+
COMMANDS = %w(
|
10
|
+
list
|
11
|
+
swap
|
12
|
+
)
|
13
|
+
|
14
|
+
def initialize(args)
|
15
|
+
Trollop::options do
|
16
|
+
version VERSION_COPYRIGHT
|
17
|
+
banner <<-EOS
|
18
|
+
#{APP_NAME} #{VERSION_COPYRIGHT}
|
19
|
+
|
20
|
+
Usage:
|
21
|
+
#{APP_ID} [command]
|
22
|
+
|
23
|
+
commands:
|
24
|
+
#{COMMANDS.map { |command| " #{command}" }.join("\n") }
|
25
|
+
EOS
|
26
|
+
stop_on COMMANDS
|
27
|
+
end
|
28
|
+
|
29
|
+
@cmd = ARGV.shift
|
30
|
+
case cmd
|
31
|
+
when 'list'
|
32
|
+
when 'swap'
|
33
|
+
Trollop::die 'must provide a config set name' if ARGV.empty?
|
34
|
+
else
|
35
|
+
Trollop::die "unknown command"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def run
|
40
|
+
send(cmd)
|
41
|
+
end
|
42
|
+
|
43
|
+
protected
|
44
|
+
|
45
|
+
def swap
|
46
|
+
command = Swappy::Commands::Swap.new(name: config_set_name, app_config_path: app_config_path)
|
47
|
+
command.call
|
48
|
+
rescue Swappy::Commands::Swap::ConfigSetNotFoundError
|
49
|
+
config_sets = Swappy::Commands::List.new.call.join(', ')
|
50
|
+
Trollop::die "unknown config set #{config_set_name}; must be one of #{config_sets}"
|
51
|
+
end
|
52
|
+
|
53
|
+
def list
|
54
|
+
command = Swappy::Commands::List.new(app_config_path: app_config_path)
|
55
|
+
sets = command.call
|
56
|
+
sets.each { |set| puts set }
|
57
|
+
end
|
58
|
+
|
59
|
+
def config_set_name
|
60
|
+
@config_set_name ||= ARGV.shift
|
61
|
+
end
|
62
|
+
|
63
|
+
def app_config_path
|
64
|
+
File.join(Dir.home, '.swappy.json')
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'forwardable'
|
2
|
+
|
3
|
+
module Swappy
|
4
|
+
module Commands
|
5
|
+
class Command
|
6
|
+
extend Forwardable
|
7
|
+
|
8
|
+
attr_reader :options, :app_config_path
|
9
|
+
|
10
|
+
def initialize(options={})
|
11
|
+
@options = options
|
12
|
+
@app_config_path = options[:app_config_path]
|
13
|
+
end
|
14
|
+
|
15
|
+
protected
|
16
|
+
|
17
|
+
def app_config
|
18
|
+
@app_config ||= AppConfig.new(path: app_config_path)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module Swappy
|
2
|
+
module Commands
|
3
|
+
class Swap < Command
|
4
|
+
ConfigSetNotFoundError = Class.new(StandardError)
|
5
|
+
|
6
|
+
attr_reader :name
|
7
|
+
|
8
|
+
def_delegators :config_set, :link_root, :source_root, :configs
|
9
|
+
|
10
|
+
def initialize(options={})
|
11
|
+
super options
|
12
|
+
@name = options[:name]
|
13
|
+
raise ConfigSetNotFoundError unless config_set
|
14
|
+
end
|
15
|
+
|
16
|
+
def call
|
17
|
+
switch_to_config_set
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def switch_to_config_set
|
23
|
+
puts "Switching to config set #{config_set.name}..."
|
24
|
+
config_set.each do |config|
|
25
|
+
backup(config.link_path)
|
26
|
+
link(config.source_path, config.link_path)
|
27
|
+
end
|
28
|
+
puts "Done!"
|
29
|
+
end
|
30
|
+
|
31
|
+
def backup(link_path)
|
32
|
+
if File.exists?(link_path)
|
33
|
+
backup_path = backup_path(link_path)
|
34
|
+
puts "backing up #{File.symlink?(link_path) ? 'symlink ' : ' '}#{link_path} to #{backup_path}"
|
35
|
+
File.rename(link_path, backup_path)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def link(source_path, link_path)
|
40
|
+
puts "linking #{link_path} to #{source_path}"
|
41
|
+
File.symlink(source_path, link_path)
|
42
|
+
end
|
43
|
+
|
44
|
+
def config_set
|
45
|
+
@config_set ||= app_config.find_config_set_by_name(name)
|
46
|
+
end
|
47
|
+
|
48
|
+
def backup_path(link_path)
|
49
|
+
timestamp = Time.now.to_i.to_s
|
50
|
+
new_basename = "#{File.basename(link_path)}.backup.#{timestamp}"
|
51
|
+
Pathname.new(File.join(File.dirname(link_path), new_basename))
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Swappy
|
2
|
+
class Config
|
3
|
+
attr_reader :json_data, :link_root, :source_root
|
4
|
+
|
5
|
+
def initialize(json_data, link_root, source_root)
|
6
|
+
@link_root = link_root
|
7
|
+
@source_root = source_root
|
8
|
+
@json_data = json_data
|
9
|
+
end
|
10
|
+
|
11
|
+
def link_file
|
12
|
+
json_data[0]
|
13
|
+
end
|
14
|
+
|
15
|
+
def source_file
|
16
|
+
json_data[1]
|
17
|
+
end
|
18
|
+
|
19
|
+
def link_path
|
20
|
+
File.expand_path(File.join(link_root, link_file))
|
21
|
+
end
|
22
|
+
|
23
|
+
def source_path
|
24
|
+
File.expand_path(File.join(source_root, source_file))
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module Swappy
|
2
|
+
class ConfigSet
|
3
|
+
include Enumerable
|
4
|
+
|
5
|
+
attr_reader :json_data
|
6
|
+
|
7
|
+
def initialize(json_data)
|
8
|
+
@json_data = json_data
|
9
|
+
end
|
10
|
+
|
11
|
+
def each(&block)
|
12
|
+
configs.each do |config|
|
13
|
+
block.call(config)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def name
|
18
|
+
json_data[0]
|
19
|
+
end
|
20
|
+
|
21
|
+
def link_root
|
22
|
+
properties['link_root']
|
23
|
+
end
|
24
|
+
|
25
|
+
def source_root
|
26
|
+
properties['source_root']
|
27
|
+
end
|
28
|
+
|
29
|
+
def configs
|
30
|
+
@configs ||= properties['configs'].map { |config| Config.new(config, link_root, source_root) }
|
31
|
+
end
|
32
|
+
|
33
|
+
protected
|
34
|
+
|
35
|
+
def properties
|
36
|
+
json_data[1]
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Swappy::AppConfig do
|
4
|
+
let(:options) do
|
5
|
+
{
|
6
|
+
path: path
|
7
|
+
}
|
8
|
+
end
|
9
|
+
|
10
|
+
let(:path) { 'some_path' }
|
11
|
+
|
12
|
+
let(:app_config) { described_class.new(options) }
|
13
|
+
|
14
|
+
it 'includes Enumerable' do
|
15
|
+
expect(app_config).to respond_to(:each)
|
16
|
+
end
|
17
|
+
|
18
|
+
describe '#initialize' do
|
19
|
+
it 'sets the path' do
|
20
|
+
expect(app_config.path).to eql(path)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe '#config_sets' do
|
25
|
+
let(:json_config_sets) { ['1','2'] }
|
26
|
+
|
27
|
+
it 'returns the config sets'
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require_relative './command_sharedspec'
|
3
|
+
|
4
|
+
describe Swappy::Commands::List do
|
5
|
+
it_should_behave_like 'a command'
|
6
|
+
|
7
|
+
let(:list_command) { subject }
|
8
|
+
|
9
|
+
describe '#call' do
|
10
|
+
let(:config_sets) { ['awesome', 'cool', 'bleh'] }
|
11
|
+
|
12
|
+
it 'returns the config sets' do
|
13
|
+
app_config = double('app_config')
|
14
|
+
expect(app_config).to receive(:map).and_return(config_sets)
|
15
|
+
expect(list_command).to receive(:app_config).and_return(app_config)
|
16
|
+
list_command.call
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require_relative './command_sharedspec'
|
3
|
+
|
4
|
+
describe Swappy::Commands::Swap do
|
5
|
+
it_should_behave_like 'a command'
|
6
|
+
|
7
|
+
describe '#initialize' do
|
8
|
+
let(:options) do
|
9
|
+
{
|
10
|
+
name: name
|
11
|
+
}
|
12
|
+
end
|
13
|
+
|
14
|
+
let(:name) { 'awesome_config_set' }
|
15
|
+
|
16
|
+
let(:swap_command) { described_class.new(options) }
|
17
|
+
|
18
|
+
context 'with an existing matching config set' do
|
19
|
+
let(:config_set) { double('config_set') }
|
20
|
+
|
21
|
+
before :each do
|
22
|
+
allow_any_instance_of(described_class).to receive(:config_set).and_return(config_set)
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'sets the name' do
|
26
|
+
expect(swap_command.name).to eql(name)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context 'with no config set' do
|
31
|
+
before :each do
|
32
|
+
allow_any_instance_of(described_class).to receive(:config_set).and_return(nil)
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'raises ConfigSetNotFoundError if the config set is not found' do
|
36
|
+
expect { swap_command }.to raise_error(described_class::ConfigSetNotFoundError)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
data/swappy.gemspec
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'swappy/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'swappy'
|
8
|
+
spec.version = Swappy::VERSION
|
9
|
+
spec.authors = ['Joshua Rieken']
|
10
|
+
spec.email = ['joshua@joshuarieken.com']
|
11
|
+
spec.description = %q{Swap your config files with ease}
|
12
|
+
spec.summary = spec.description
|
13
|
+
spec.homepage = 'https://github.com/facto/swappy'
|
14
|
+
spec.license = 'MIT'
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0")
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ['lib']
|
20
|
+
|
21
|
+
spec.add_development_dependency 'bundler', '~> 1.5'
|
22
|
+
spec.add_development_dependency 'guard'
|
23
|
+
spec.add_development_dependency 'guard-rspec'
|
24
|
+
spec.add_development_dependency 'pry'
|
25
|
+
spec.add_development_dependency 'rake'
|
26
|
+
spec.add_development_dependency 'rspec'
|
27
|
+
spec.add_development_dependency 'ruby_gntp'
|
28
|
+
|
29
|
+
spec.add_dependency 'oj', '~> 2'
|
30
|
+
spec.add_dependency 'trollop', '~> 2'
|
31
|
+
end
|
metadata
ADDED
@@ -0,0 +1,199 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: swappy
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Joshua Rieken
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-05-04 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.5'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.5'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: guard
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: guard-rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: pry
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rake
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rspec
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: ruby_gntp
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: oj
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '2'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '2'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: trollop
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '2'
|
132
|
+
type: :runtime
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '2'
|
139
|
+
description: Swap your config files with ease
|
140
|
+
email:
|
141
|
+
- joshua@joshuarieken.com
|
142
|
+
executables:
|
143
|
+
- swappy
|
144
|
+
extensions: []
|
145
|
+
extra_rdoc_files: []
|
146
|
+
files:
|
147
|
+
- ".gitignore"
|
148
|
+
- ".rspec"
|
149
|
+
- Gemfile
|
150
|
+
- Guardfile
|
151
|
+
- LICENSE.txt
|
152
|
+
- README.md
|
153
|
+
- Rakefile
|
154
|
+
- bin/swappy
|
155
|
+
- lib/swappy.rb
|
156
|
+
- lib/swappy/app_config.rb
|
157
|
+
- lib/swappy/cli.rb
|
158
|
+
- lib/swappy/commands/command.rb
|
159
|
+
- lib/swappy/commands/list.rb
|
160
|
+
- lib/swappy/commands/swap.rb
|
161
|
+
- lib/swappy/config.rb
|
162
|
+
- lib/swappy/config_set.rb
|
163
|
+
- lib/swappy/version.rb
|
164
|
+
- spec/spec_helper.rb
|
165
|
+
- spec/swappy/app_config_spec.rb
|
166
|
+
- spec/swappy/commands/command_sharedspec.rb
|
167
|
+
- spec/swappy/commands/list_spec.rb
|
168
|
+
- spec/swappy/commands/swap_spec.rb
|
169
|
+
- swappy.gemspec
|
170
|
+
homepage: https://github.com/facto/swappy
|
171
|
+
licenses:
|
172
|
+
- MIT
|
173
|
+
metadata: {}
|
174
|
+
post_install_message:
|
175
|
+
rdoc_options: []
|
176
|
+
require_paths:
|
177
|
+
- lib
|
178
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
179
|
+
requirements:
|
180
|
+
- - ">="
|
181
|
+
- !ruby/object:Gem::Version
|
182
|
+
version: '0'
|
183
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - ">="
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '0'
|
188
|
+
requirements: []
|
189
|
+
rubyforge_project:
|
190
|
+
rubygems_version: 2.2.2
|
191
|
+
signing_key:
|
192
|
+
specification_version: 4
|
193
|
+
summary: Swap your config files with ease
|
194
|
+
test_files:
|
195
|
+
- spec/spec_helper.rb
|
196
|
+
- spec/swappy/app_config_spec.rb
|
197
|
+
- spec/swappy/commands/command_sharedspec.rb
|
198
|
+
- spec/swappy/commands/list_spec.rb
|
199
|
+
- spec/swappy/commands/swap_spec.rb
|