cluster-fuck 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,4 +1,5 @@
1
1
  require_relative "../cluster-fuck"
2
+ require_relative "commands/amicus_env_argument_parser"
2
3
  require_relative "commands/edit"
3
4
  require_relative "commands/create"
4
5
  require_relative "commands/list"
@@ -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
- @key = args.first
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
- @key = args.first
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
@@ -6,6 +6,12 @@ module ClusterFuck
6
6
  include ClusterFuck::S3Methods
7
7
 
8
8
  def run_command(args, options = {})
9
+ @amicus_env = if args.length > 0
10
+ args.first
11
+ else
12
+ ClusterFuck::AMICUS_ENV
13
+ end
14
+
9
15
  $stdout.puts(all_files.join("\n"))
10
16
  end
11
17
 
@@ -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
- @key = args.first
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
@@ -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 ||= s3_object(key)
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
@@ -1,3 +1,3 @@
1
1
  module ClusterFuck
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
@@ -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
@@ -19,7 +19,8 @@ module ClusterFuck::Commands
19
19
  let(:mock_s3_obj) do
20
20
  mock(:s3_object, {
21
21
  read: dummy_yaml,
22
- versions: mock('versions', count: 3)
22
+ versions: mock('versions', count: 3),
23
+ :exists? => true
23
24
  })
24
25
  end
25
26
 
@@ -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
@@ -3,6 +3,10 @@ require 'spec_helper'
3
3
  module ClusterFuck
4
4
  class DummyClass
5
5
  include S3Methods
6
+
7
+ def amicus_env
8
+ "test"
9
+ end
6
10
  end
7
11
 
8
12
  describe S3Methods 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.0
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-04 00:00:00.000000000 Z
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