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.
@@ -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