stackster 0.3.1 → 0.3.2

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/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ rvm:
2
+ - 1.9.2
3
+ - 1.9.3
4
+ script: "rake spec"
data/CHANGELOG CHANGED
@@ -1,3 +1,8 @@
1
+ ## v0.3.2
2
+
3
+ * Removed the logger gem dependency
4
+ * Refactored attributes handling so it refreshes them from simpledb each time they are requested
5
+
1
6
  ## v0.3.1
2
7
 
3
8
  * Fixed the CreatedAt value in simpledb by storing it as a string
data/README.md CHANGED
@@ -1,3 +1,5 @@
1
+ [![Build Status](https://secure.travis-ci.org/intuit/stackster.png)](http://travis-ci.org/intuit/stackster)
2
+
1
3
  I help deploy Stacks into Cloud Formation. I save data about them in SimpleDB.
2
4
 
3
5
  Getting Started
@@ -2,15 +2,15 @@ require 'stackster/entry/entry_lister'
2
2
 
3
3
  module Stackster
4
4
  class Entry
5
- attr_accessor :name, :attributes
5
+ attr_accessor :name
6
6
 
7
7
  def initialize(args)
8
8
  @domain = 'stacks'
9
9
  @config = args[:config]
10
10
  @logger = @config.logger
11
+ @custom_attributes = {}
11
12
  self.name = region_specific_name args[:name]
12
13
  create_domain
13
- get_attributes
14
14
  end
15
15
 
16
16
  def self.find(args)
@@ -19,21 +19,33 @@ module Stackster
19
19
  entry
20
20
  end
21
21
 
22
+ def attributes
23
+ u = {}
24
+
25
+ attrs = sdb_connect.select "select * from stacks where itemName() = '#{name}'"
26
+ if attrs.has_key? name
27
+ u.merge! Hash[attrs[name].map { |k,v| [k, v.first] }]
28
+ end
29
+
30
+ u.merge @custom_attributes
31
+ end
32
+
22
33
  def set_attributes(a)
23
34
  a.each { |attribute| set_attribute(attribute) }
24
35
  end
25
36
 
26
37
  def save
27
38
  set_default_attributes
39
+ current_attributes = attributes
28
40
 
29
- attributes.each_pair do |key,value|
41
+ current_attributes.each_pair do |key,value|
30
42
  @logger.debug "Setting attribute #{key}=#{value}"
31
43
  end
32
44
 
33
45
  sdb_connect.put_attributes('stacks',
34
46
  name,
35
- attributes,
36
- :replace => attributes.keys )
47
+ current_attributes,
48
+ :replace => current_attributes.keys )
37
49
 
38
50
  @logger.debug "Save to SimpleDB successful."
39
51
  end
@@ -46,17 +58,8 @@ module Stackster
46
58
  private
47
59
 
48
60
  def set_default_attributes
49
- attributes.merge!('Name' => name)
50
- attributes.merge!('CreatedAt' => Time.now.utc.to_s)
51
- end
52
-
53
- def get_attributes
54
- u = {}
55
- attrs = sdb_connect.select "select * from stacks where itemName() = '#{name}'"
56
- if attrs[name]
57
- attrs[name].each_pair { |k, v| u[k] = v.first }
58
- end
59
- self.attributes = u
61
+ @custom_attributes.merge! 'Name' => name
62
+ @custom_attributes.merge! 'CreatedAt' => Time.now.utc.to_s
60
63
  end
61
64
 
62
65
  def region_specific_name(name)
@@ -68,12 +71,12 @@ module Stackster
68
71
  end
69
72
 
70
73
  def set_attribute(attribute)
71
- self.attributes = attributes.merge(attribute)
74
+ @custom_attributes.merge! attribute
72
75
  end
73
76
 
74
77
  def sdb_connect
75
78
  @sdb_connect ||= AWS::SimpleDB.new :config => @config
76
79
  end
77
-
78
80
  end
81
+
79
82
  end
@@ -1,3 +1,3 @@
1
1
  module Stackster
2
- VERSION = "0.3.1"
2
+ VERSION = "0.3.2"
3
3
  end
data/spec/entry_spec.rb CHANGED
@@ -11,9 +11,6 @@ describe Stackster do
11
11
  @simple_db_mock.should_receive(:create_domain).
12
12
  with("stacks").
13
13
  and_return true
14
- @simple_db_mock.should_receive(:select).
15
- with("select * from stacks where itemName() = 'test-stack-us-west-1'").
16
- and_return('stack-to-find' => { 'attr1' => 'value1' })
17
14
  entry = Stackster::Entry.new :config => config,
18
15
  :name => 'test-stack'
19
16
  entry.class.should == Stackster::Entry
@@ -29,9 +26,6 @@ describe Stackster do
29
26
  @simple_db_mock.should_receive(:create_domain).
30
27
  with("stacks").
31
28
  and_return true
32
- @simple_db_mock.should_receive(:select).
33
- with("select * from stacks where itemName() = 'stack-to-find-us-west-1'").
34
- and_return('stack-to-find' => { 'attr1' => 'value1' })
35
29
  Stackster::Entry.find :name => 'stack-to-find',
36
30
  :config => config
37
31
  end
@@ -46,9 +40,6 @@ describe Stackster do
46
40
  @simple_db_mock.should_receive(:create_domain).
47
41
  with("stacks").
48
42
  and_return true
49
- @simple_db_mock.should_receive(:select).
50
- with("select * from stacks where itemName() = 'test-stack-us-west-1'").
51
- and_return('test-stack' => { 'attr1' => 'value1' })
52
43
  @entry = Stackster::Entry.new :config => @config,
53
44
  :name => 'test-stack'
54
45
  end
@@ -60,22 +51,30 @@ describe Stackster do
60
51
  it "should set the attributes in simple db including default attributes" do
61
52
  Timecop.travel Time.utc(2012, 10, 22, 13, 30)
62
53
 
54
+ @simple_db_mock.should_receive(:select).
55
+ with("select * from stacks where itemName() = 'test-stack-us-west-1'").
56
+ and_return('test-stack-us-west-1' => { 'key1' => ['value1'] })
63
57
  @simple_db_mock.should_receive(:put_attributes).
64
58
  with("stacks",
65
59
  "test-stack-us-west-1",
66
- { "key" => "value", "Name" => "test-stack-us-west-1", "CreatedAt" => "2012-10-22 13:30:00 UTC" },
67
- { :replace => ["key", "Name", "CreatedAt"] } )
68
- @entry.attributes = {"key"=>"value"}
60
+ { "key" => "value",
61
+ "key1" => "value1",
62
+ "Name" => "test-stack-us-west-1",
63
+ "CreatedAt" => "2012-10-22 13:30:00 UTC" },
64
+ { :replace => ["key1", "key", "Name", "CreatedAt"] } )
65
+ @entry.set_attributes(['key' => 'value'])
69
66
 
70
67
  @entry.save
71
68
  end
72
69
 
73
- it "should set the attributes" do
74
- @entry.attributes = {'key1' => 'value1' }
75
- @entry.set_attributes(['key2' => 'value2'])
76
- @entry.attributes.should == {'key1' => 'value1', 'key2' => 'value2' }
77
- end
70
+ it "should merge custom attributes" do
71
+ @simple_db_mock.should_receive(:select).
72
+ with("select * from stacks where itemName() = 'test-stack-us-west-1'").
73
+ and_return('test-stack' => { 'key1' => ['value1'] })
74
+ @entry.set_attributes(['key1' => 'value2'])
78
75
 
76
+ @entry.attributes.should == {'key1' => 'value2' }
77
+ end
79
78
  end
80
79
 
81
80
  end
data/stackster.gemspec CHANGED
@@ -19,12 +19,12 @@ Gem::Specification.new do |s|
19
19
  s.require_paths = ["lib"]
20
20
 
21
21
  # specify any dependencies here; for example:
22
- s.add_development_dependency "rspec"
23
- s.add_development_dependency "simplecov"
24
- s.add_development_dependency "timecop"
22
+ s.add_development_dependency "rake"
23
+ s.add_development_dependency "rspec", "~> 2.11.0"
24
+ s.add_development_dependency "simplecov", "~> 0.6.4"
25
+ s.add_development_dependency "timecop", "~> 0.5.3"
25
26
 
26
- s.add_runtime_dependency "fog"
27
- s.add_runtime_dependency 'logger'
28
- s.add_runtime_dependency "trollop"
29
- s.add_runtime_dependency "xml-simple"
27
+ s.add_runtime_dependency "fog", "= 1.6.0"
28
+ s.add_runtime_dependency "trollop", "= 2.0"
29
+ s.add_runtime_dependency "xml-simple", "= 1.1.2"
30
30
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stackster
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,10 +9,10 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-26 00:00:00.000000000 Z
12
+ date: 2012-11-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: rspec
15
+ name: rake
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
@@ -28,101 +28,101 @@ dependencies:
28
28
  - !ruby/object:Gem::Version
29
29
  version: '0'
30
30
  - !ruby/object:Gem::Dependency
31
- name: simplecov
31
+ name: rspec
32
32
  requirement: !ruby/object:Gem::Requirement
33
33
  none: false
34
34
  requirements:
35
- - - ! '>='
35
+ - - ~>
36
36
  - !ruby/object:Gem::Version
37
- version: '0'
37
+ version: 2.11.0
38
38
  type: :development
39
39
  prerelease: false
40
40
  version_requirements: !ruby/object:Gem::Requirement
41
41
  none: false
42
42
  requirements:
43
- - - ! '>='
43
+ - - ~>
44
44
  - !ruby/object:Gem::Version
45
- version: '0'
45
+ version: 2.11.0
46
46
  - !ruby/object:Gem::Dependency
47
- name: timecop
47
+ name: simplecov
48
48
  requirement: !ruby/object:Gem::Requirement
49
49
  none: false
50
50
  requirements:
51
- - - ! '>='
51
+ - - ~>
52
52
  - !ruby/object:Gem::Version
53
- version: '0'
53
+ version: 0.6.4
54
54
  type: :development
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  none: false
58
58
  requirements:
59
- - - ! '>='
59
+ - - ~>
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: 0.6.4
62
62
  - !ruby/object:Gem::Dependency
63
- name: fog
63
+ name: timecop
64
64
  requirement: !ruby/object:Gem::Requirement
65
65
  none: false
66
66
  requirements:
67
- - - ! '>='
67
+ - - ~>
68
68
  - !ruby/object:Gem::Version
69
- version: '0'
70
- type: :runtime
69
+ version: 0.5.3
70
+ type: :development
71
71
  prerelease: false
72
72
  version_requirements: !ruby/object:Gem::Requirement
73
73
  none: false
74
74
  requirements:
75
- - - ! '>='
75
+ - - ~>
76
76
  - !ruby/object:Gem::Version
77
- version: '0'
77
+ version: 0.5.3
78
78
  - !ruby/object:Gem::Dependency
79
- name: logger
79
+ name: fog
80
80
  requirement: !ruby/object:Gem::Requirement
81
81
  none: false
82
82
  requirements:
83
- - - ! '>='
83
+ - - '='
84
84
  - !ruby/object:Gem::Version
85
- version: '0'
85
+ version: 1.6.0
86
86
  type: :runtime
87
87
  prerelease: false
88
88
  version_requirements: !ruby/object:Gem::Requirement
89
89
  none: false
90
90
  requirements:
91
- - - ! '>='
91
+ - - '='
92
92
  - !ruby/object:Gem::Version
93
- version: '0'
93
+ version: 1.6.0
94
94
  - !ruby/object:Gem::Dependency
95
95
  name: trollop
96
96
  requirement: !ruby/object:Gem::Requirement
97
97
  none: false
98
98
  requirements:
99
- - - ! '>='
99
+ - - '='
100
100
  - !ruby/object:Gem::Version
101
- version: '0'
101
+ version: '2.0'
102
102
  type: :runtime
103
103
  prerelease: false
104
104
  version_requirements: !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
- - - ! '>='
107
+ - - '='
108
108
  - !ruby/object:Gem::Version
109
- version: '0'
109
+ version: '2.0'
110
110
  - !ruby/object:Gem::Dependency
111
111
  name: xml-simple
112
112
  requirement: !ruby/object:Gem::Requirement
113
113
  none: false
114
114
  requirements:
115
- - - ! '>='
115
+ - - '='
116
116
  - !ruby/object:Gem::Version
117
- version: '0'
117
+ version: 1.1.2
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  none: false
122
122
  requirements:
123
- - - ! '>='
123
+ - - '='
124
124
  - !ruby/object:Gem::Version
125
- version: '0'
125
+ version: 1.1.2
126
126
  description: Thats what I do
127
127
  email:
128
128
  - brett@weav.net
@@ -133,6 +133,7 @@ extra_rdoc_files: []
133
133
  files:
134
134
  - .gitignore
135
135
  - .rvmrc
136
+ - .travis.yml
136
137
  - CHANGELOG
137
138
  - Gemfile
138
139
  - LICENSE
@@ -161,7 +162,6 @@ files:
161
162
  - lib/stackster/stack/stack_updater.rb
162
163
  - lib/stackster/stack/status.rb
163
164
  - lib/stackster/version.rb
164
- - script/ci_setup
165
165
  - spec/aws/cloud_formation/error_spec.rb
166
166
  - spec/aws/cloud_formation_spec.rb
167
167
  - spec/aws/ec2_spec.rb
@@ -193,12 +193,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
193
193
  - - ! '>='
194
194
  - !ruby/object:Gem::Version
195
195
  version: '0'
196
+ segments:
197
+ - 0
198
+ hash: -3770927478865725038
196
199
  required_rubygems_version: !ruby/object:Gem::Requirement
197
200
  none: false
198
201
  requirements:
199
202
  - - ! '>='
200
203
  - !ruby/object:Gem::Version
201
204
  version: '0'
205
+ segments:
206
+ - 0
207
+ hash: -3770927478865725038
202
208
  requirements: []
203
209
  rubyforge_project: stackster
204
210
  rubygems_version: 1.8.24
data/script/ci_setup DELETED
@@ -1,16 +0,0 @@
1
- #!/bin/bash
2
-
3
- # Source RVM profile and set ruby / gemset
4
- . /etc/profile
5
-
6
- # Use stackster gemset
7
- rvm use "1.9.3-p194@stackster" --create
8
-
9
- # Exit with error if any command returns non zero
10
- set -e
11
-
12
- # Bundle gems
13
- bundle
14
-
15
- # Run spec tests
16
- rake spec