cluster-fuck 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.
- data/lib/cluster-fuck/cli.rb +1 -0
- data/lib/cluster-fuck/commands/amicus_env_argument_parser.rb +22 -0
- data/lib/cluster-fuck/commands/create.rb +3 -1
- data/lib/cluster-fuck/commands/edit.rb +5 -3
- data/lib/cluster-fuck/commands/list.rb +6 -0
- data/lib/cluster-fuck/commands/override.rb +4 -2
- data/lib/cluster-fuck/reader.rb +14 -2
- data/lib/cluster-fuck/s3_methods.rb +2 -4
- data/lib/cluster-fuck/version.rb +1 -1
- data/spec/lib/cluster-fuck/commands/amicus_env_argument_parser_spec.rb +26 -0
- data/spec/lib/cluster-fuck/commands/edit_spec.rb +2 -1
- data/spec/lib/cluster-fuck/commands/override_spec.rb +1 -1
- data/spec/lib/cluster-fuck/reader_spec.rb +1 -1
- data/spec/lib/cluster-fuck/s3_methods_spec.rb +4 -0
- data/spec/lib/cluster-fuck/writer_spec.rb +2 -1
- metadata +5 -2
data/lib/cluster-fuck/cli.rb
CHANGED
@@ -0,0 +1,22 @@
|
|
1
|
+
module ClusterFuck
|
2
|
+
module Commands
|
3
|
+
module AmicusEnvArgumentParser
|
4
|
+
|
5
|
+
def self.included(base)
|
6
|
+
[:amicus_env, :key].each do |reader_key|
|
7
|
+
base.send(:attr_reader, reader_key) unless base.respond_to?(:reader_key)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def set_amicus_env_and_key_from_args(args)
|
12
|
+
if args.length > 1
|
13
|
+
@amicus_env, @key = args
|
14
|
+
else
|
15
|
+
@key = args.first
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -5,10 +5,12 @@ module ClusterFuck
|
|
5
5
|
module Commands
|
6
6
|
class Create
|
7
7
|
include ClusterFuck::S3Methods
|
8
|
+
include AmicusEnvArgumentParser
|
8
9
|
|
9
10
|
attr_reader :key
|
10
11
|
def run_command(args, options = {})
|
11
|
-
|
12
|
+
set_amicus_env_and_key_from_args(args)
|
13
|
+
|
12
14
|
obj = s3_object(key)
|
13
15
|
raise ConflictError, "#{key} already exists!" if obj.exists?
|
14
16
|
obj.write('')
|
@@ -4,10 +4,12 @@ module ClusterFuck
|
|
4
4
|
module Commands
|
5
5
|
class Edit
|
6
6
|
include Commander::UI
|
7
|
+
include AmicusEnvArgumentParser
|
7
8
|
|
8
9
|
attr_reader :key, :options
|
9
10
|
def run_command(args, options = Hashie::Mash.new)
|
10
|
-
|
11
|
+
set_amicus_env_and_key_from_args(args)
|
12
|
+
|
11
13
|
@options = options
|
12
14
|
raise ArgumentError, "File #{key} is overridden locally! use --force to force" if reader.has_local_override? and !options.force
|
13
15
|
|
@@ -16,11 +18,11 @@ module ClusterFuck
|
|
16
18
|
end
|
17
19
|
|
18
20
|
def writer
|
19
|
-
@writer ||= ClusterFuck::Writer.new(key)
|
21
|
+
@writer ||= ClusterFuck::Writer.new(key, amicus_env: reader.amicus_env)
|
20
22
|
end
|
21
23
|
|
22
24
|
def reader
|
23
|
-
@reader ||= ClusterFuck::Reader.new(key)
|
25
|
+
@reader ||= ClusterFuck::Reader.new(key, amicus_env: amicus_env)
|
24
26
|
end
|
25
27
|
|
26
28
|
end
|
@@ -5,10 +5,12 @@ module ClusterFuck
|
|
5
5
|
module Commands
|
6
6
|
class Override
|
7
7
|
include ClusterFuck::S3Methods
|
8
|
+
include AmicusEnvArgumentParser
|
8
9
|
|
9
10
|
attr_reader :key
|
10
11
|
def run_command(args, options = {})
|
11
|
-
|
12
|
+
set_amicus_env_and_key_from_args(args)
|
13
|
+
|
12
14
|
contents = reader.read(remote_only: true)
|
13
15
|
FileUtils.mkdir_p(File.dirname(reader.local_override_path))
|
14
16
|
File.open(reader.local_override_path, "w") do |f|
|
@@ -19,7 +21,7 @@ module ClusterFuck
|
|
19
21
|
|
20
22
|
private
|
21
23
|
def reader
|
22
|
-
@reader ||= ClusterFuck::Reader.new(key)
|
24
|
+
@reader ||= ClusterFuck::Reader.new(key, amicus_env: amicus_env)
|
23
25
|
end
|
24
26
|
|
25
27
|
end
|
data/lib/cluster-fuck/reader.rb
CHANGED
@@ -3,6 +3,8 @@ module ClusterFuck
|
|
3
3
|
include S3Methods
|
4
4
|
|
5
5
|
LOCAL_OVERRIDE_DIR = "cluster-fuck"
|
6
|
+
SHARED_ENV = "shared"
|
7
|
+
|
6
8
|
|
7
9
|
attr_reader :amicus_env, :key, :version_count
|
8
10
|
def initialize(key, opts={})
|
@@ -11,7 +13,16 @@ module ClusterFuck
|
|
11
13
|
@ignore_local = opts[:ignore_local]
|
12
14
|
end
|
13
15
|
|
16
|
+
def set_amicus_env_to_shared_unless_key_found!
|
17
|
+
unless stored_object.exists?
|
18
|
+
original_amicus_env = @amicus_env
|
19
|
+
@amicus_env = SHARED_ENV
|
20
|
+
raise KeyDoesNotExistError, "there was no #{key} in either #{original_amicus_env} or #{SHARED_ENV}" unless stored_object(true).exists?
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
14
24
|
def read(opts = {})
|
25
|
+
set_amicus_env_to_shared_unless_key_found!
|
15
26
|
yaml = data_for_key(opts)
|
16
27
|
if yaml
|
17
28
|
@version_count = stored_object.versions.count unless has_local_override?
|
@@ -36,8 +47,9 @@ module ClusterFuck
|
|
36
47
|
end
|
37
48
|
end
|
38
49
|
|
39
|
-
def stored_object
|
40
|
-
@stored_object
|
50
|
+
def stored_object(reload = false)
|
51
|
+
return @stored_object if @stored_object and !reload
|
52
|
+
@stored_object = s3_object(key)
|
41
53
|
end
|
42
54
|
|
43
55
|
end
|
@@ -2,6 +2,7 @@ module ClusterFuck
|
|
2
2
|
module S3Methods
|
3
3
|
|
4
4
|
class ConflictError < StandardError; end
|
5
|
+
class KeyDoesNotExistError < StandardError; end
|
5
6
|
|
6
7
|
def s3_object(object_name)
|
7
8
|
bucket.objects[full_s3_path(object_name)]
|
@@ -31,11 +32,8 @@ module ClusterFuck
|
|
31
32
|
"#{amicus_env}/#{key}"
|
32
33
|
end
|
33
34
|
|
34
|
-
protected
|
35
|
-
|
36
|
-
|
37
35
|
def amicus_env
|
38
|
-
AMICUS_ENV
|
36
|
+
@amicus_env || ClusterFuck::AMICUS_ENV
|
39
37
|
end
|
40
38
|
|
41
39
|
end
|
data/lib/cluster-fuck/version.rb
CHANGED
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'commander'
|
3
|
+
require 'cluster-fuck/cli'
|
4
|
+
|
5
|
+
module ClusterFuck::Commands
|
6
|
+
class DummyClass
|
7
|
+
include AmicusEnvArgumentParser
|
8
|
+
end
|
9
|
+
|
10
|
+
describe AmicusEnvArgumentParser do
|
11
|
+
subject { DummyClass.new }
|
12
|
+
|
13
|
+
it "should use the key when only one arg" do
|
14
|
+
subject.set_amicus_env_and_key_from_args(["test-key"])
|
15
|
+
subject.key.should == "test-key"
|
16
|
+
subject.amicus_env.should be_nil
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should set amicus_env and key when two args" do
|
20
|
+
subject.set_amicus_env_and_key_from_args(["test", "test-key"])
|
21
|
+
subject.key.should == "test-key"
|
22
|
+
subject.amicus_env.should == "test"
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
@@ -14,7 +14,7 @@ module ClusterFuck::Commands
|
|
14
14
|
let(:args) { ["test-key"] }
|
15
15
|
|
16
16
|
before do
|
17
|
-
ClusterFuck::Reader.should_receive(:new).with(args.first).and_return(mock_reader)
|
17
|
+
ClusterFuck::Reader.should_receive(:new).with(args.first, amicus_env: nil).and_return(mock_reader)
|
18
18
|
end
|
19
19
|
|
20
20
|
it "should read the remote contents and write the local contents" do
|
@@ -6,7 +6,7 @@ module ClusterFuck
|
|
6
6
|
let(:amicus_env) { 'test' }
|
7
7
|
let(:key) { "test-key" }
|
8
8
|
let(:reader) { Reader.new(key) }
|
9
|
-
let(:mock_s3_obj) { mock(:s3_object, read: nil) }
|
9
|
+
let(:mock_s3_obj) { mock(:s3_object, read: nil, :exists? => true) }
|
10
10
|
|
11
11
|
|
12
12
|
it "should set amicus_env" do
|
@@ -19,7 +19,8 @@ module ClusterFuck
|
|
19
19
|
even: 'here'
|
20
20
|
}
|
21
21
|
}),
|
22
|
-
versions: mock('versions', count: initial_version_count)
|
22
|
+
versions: mock('versions', count: initial_version_count),
|
23
|
+
:exists? => true
|
23
24
|
)
|
24
25
|
Reader.any_instance.stub(:s3_object).with("#{key}").and_return(mock_s3_obj)
|
25
26
|
writer.stub(:s3_object).and_return(mock_s3_obj)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cluster-fuck
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-02-
|
12
|
+
date: 2013-02-05 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: aws-sdk
|
@@ -95,6 +95,7 @@ files:
|
|
95
95
|
- cluster-fuck.gemspec
|
96
96
|
- lib/cluster-fuck.rb
|
97
97
|
- lib/cluster-fuck/cli.rb
|
98
|
+
- lib/cluster-fuck/commands/amicus_env_argument_parser.rb
|
98
99
|
- lib/cluster-fuck/commands/create.rb
|
99
100
|
- lib/cluster-fuck/commands/edit.rb
|
100
101
|
- lib/cluster-fuck/commands/list.rb
|
@@ -105,6 +106,7 @@ files:
|
|
105
106
|
- lib/cluster-fuck/s3_methods.rb
|
106
107
|
- lib/cluster-fuck/version.rb
|
107
108
|
- lib/cluster-fuck/writer.rb
|
109
|
+
- spec/lib/cluster-fuck/commands/amicus_env_argument_parser_spec.rb
|
108
110
|
- spec/lib/cluster-fuck/commands/create_spec.rb
|
109
111
|
- spec/lib/cluster-fuck/commands/edit_spec.rb
|
110
112
|
- spec/lib/cluster-fuck/commands/override_spec.rb
|
@@ -140,6 +142,7 @@ signing_key:
|
|
140
142
|
specification_version: 3
|
141
143
|
summary: ''
|
142
144
|
test_files:
|
145
|
+
- spec/lib/cluster-fuck/commands/amicus_env_argument_parser_spec.rb
|
143
146
|
- spec/lib/cluster-fuck/commands/create_spec.rb
|
144
147
|
- spec/lib/cluster-fuck/commands/edit_spec.rb
|
145
148
|
- spec/lib/cluster-fuck/commands/override_spec.rb
|