awscosts 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. data/README.md +10 -0
  2. data/Rakefile +1 -0
  3. data/awscosts.gemspec +2 -0
  4. data/fixtures/vcr_cassettes/AWSCosts_EBS.yml +225 -0
  5. data/fixtures/vcr_cassettes/AWSCosts_EC2OnDemand/EC2_type_of_linux.yml +726 -0
  6. data/fixtures/vcr_cassettes/AWSCosts_EC2OnDemand/EC2_type_of_rhel.yml +740 -0
  7. data/fixtures/vcr_cassettes/AWSCosts_EC2OnDemand/EC2_type_of_sles.yml +740 -0
  8. data/fixtures/vcr_cassettes/AWSCosts_EC2OnDemand/EC2_type_of_windows.yml +450 -0
  9. data/fixtures/vcr_cassettes/AWSCosts_EC2OnDemand/EC2_type_of_windows_with_sql.yml +450 -0
  10. data/fixtures/vcr_cassettes/AWSCosts_EC2OnDemand/EC2_type_of_windows_with_sql_web.yml +450 -0
  11. data/fixtures/vcr_cassettes/AWSCosts_EC2ReservedInstances/EC2_type_of_linux.yml +1810 -0
  12. data/fixtures/vcr_cassettes/AWSCosts_EC2ReservedInstances/EC2_type_of_rhel.yml +1810 -0
  13. data/fixtures/vcr_cassettes/AWSCosts_EC2ReservedInstances/EC2_type_of_sles.yml +1810 -0
  14. data/fixtures/vcr_cassettes/AWSCosts_EC2ReservedInstances/EC2_type_of_windows.yml +1609 -0
  15. data/fixtures/vcr_cassettes/AWSCosts_EC2ReservedInstances/EC2_type_of_windows_with_sql.yml +1810 -0
  16. data/fixtures/vcr_cassettes/AWSCosts_EC2ReservedInstances/EC2_type_of_windows_with_sql_web.yml +1810 -0
  17. data/fixtures/vcr_cassettes/AWSCosts_ELB.yml +119 -0
  18. data/fixtures/vcr_cassettes/AWSCosts_EMR.yml +767 -0
  19. data/fixtures/vcr_cassettes/AWSCosts_S3DataTransfer.yml +369 -0
  20. data/fixtures/vcr_cassettes/AWSCosts_S3Requests.yml +170 -0
  21. data/fixtures/vcr_cassettes/AWSCosts_S3Storage.yml +591 -0
  22. data/lib/awscosts/cache.rb +22 -0
  23. data/lib/awscosts/ec2.rb +7 -2
  24. data/lib/awscosts/ec2_ebs.rb +36 -0
  25. data/lib/awscosts/ec2_elb.rb +2 -6
  26. data/lib/awscosts/ec2_on_demand.rb +6 -14
  27. data/lib/awscosts/ec2_reserved_instances.rb +4 -11
  28. data/lib/awscosts/emr.rb +2 -7
  29. data/lib/awscosts/s3_data_transfer.rb +2 -3
  30. data/lib/awscosts/s3_requests.rb +2 -5
  31. data/lib/awscosts/s3_storage.rb +2 -6
  32. data/lib/awscosts/version.rb +1 -1
  33. data/lib/awscosts.rb +1 -0
  34. data/spec/awscosts/ec2_ebs_spec.rb +42 -0
  35. data/spec/awscosts/ec2_elb_spec.rb +12 -0
  36. data/spec/awscosts/ec2_on_demand_spec.rb +14 -0
  37. data/spec/awscosts/ec2_reserved_instances_spec.rb +28 -0
  38. data/spec/awscosts/emr_spec.rb +15 -0
  39. data/spec/awscosts/s3_data_transfer_spec.rb +11 -0
  40. data/spec/awscosts/s3_requests_spec.rb +10 -0
  41. data/spec/awscosts/s3_storage_spec.rb +12 -0
  42. data/spec/spec_helper.rb +9 -0
  43. metadata +72 -4
@@ -0,0 +1,22 @@
1
+ require 'httparty'
2
+ require 'json'
3
+
4
+ module AWSCosts::Cache
5
+ extend self
6
+
7
+ BASE_URI = "http://aws.amazon.com"
8
+
9
+ def get uri, &block
10
+ cache[uri] ||= begin
11
+ yield JSON.parse(HTTParty.get("#{BASE_URI}#{uri}").body)
12
+ end
13
+ end
14
+
15
+ private
16
+ def cache
17
+ @cache ||= {}
18
+ end
19
+
20
+ end
21
+
22
+
data/lib/awscosts/ec2.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require 'awscosts/ec2_on_demand'
2
2
  require 'awscosts/ec2_reserved_instances'
3
3
  require 'awscosts/ec2_elb'
4
+ require 'awscosts/ec2_ebs'
4
5
 
5
6
  class AWSCosts::EC2
6
7
 
@@ -14,16 +15,20 @@ class AWSCosts::EC2
14
15
  end
15
16
 
16
17
  def on_demand(type)
17
- AWSCosts::EC2OnDemand.fetch(type, self.region.price_mapping)
18
+ AWSCosts::EC2OnDemand.fetch(TYPES[type], self.region.price_mapping)
18
19
  end
19
20
 
20
21
  def reserved(type, utilisation= :light)
21
- AWSCosts::EC2ReservedInstances.fetch(type, utilisation, self.region.price_mapping)
22
+ AWSCosts::EC2ReservedInstances.fetch(TYPES[type], utilisation, self.region.name)
22
23
  end
23
24
 
24
25
  def elb
25
26
  AWSCosts::ELB.fetch(self.region.price_mapping)
26
27
  end
28
+
29
+ def ebs
30
+ AWSCosts::EBS.fetch(self.region.price_mapping)
31
+ end
27
32
  end
28
33
 
29
34
 
@@ -0,0 +1,36 @@
1
+ require 'httparty'
2
+ require 'json'
3
+
4
+ class AWSCosts::EBS
5
+
6
+ TYPES = { 'ebsVols' => :standard, 'ebsPIOPSVols' => :provisioned_iops,
7
+ 'ebsSnapsToS3' => :snapshots_to_s3 }
8
+
9
+ def initialize data
10
+ @data= data
11
+ end
12
+
13
+ def price type = nil
14
+ type.nil? ? @data : @data[type]
15
+ end
16
+
17
+ def self.fetch region
18
+ transformed= AWSCosts::Cache.get('/ec2/pricing/pricing-ebs.json') do |data|
19
+ result = {}
20
+ data['config']['regions'].each do |region|
21
+ container = {}
22
+ region['types'].each do |type|
23
+ container[TYPES[type['name']]] = {}
24
+ type['values'].each do |value|
25
+ container[TYPES[type['name']]][value['rate']] = value['prices']['USD'].to_f
26
+ end
27
+ end
28
+ result[region['region']] = container
29
+ end
30
+ result
31
+ end
32
+ self.new(transformed[region])
33
+ end
34
+
35
+ end
36
+
@@ -1,6 +1,3 @@
1
- require 'httparty'
2
- require 'json'
3
-
4
1
  class AWSCosts::ELB
5
2
 
6
3
  def initialize data
@@ -16,9 +13,8 @@ class AWSCosts::ELB
16
13
  end
17
14
 
18
15
  def self.fetch region
19
- @fetch ||= begin
16
+ transformed= AWSCosts::Cache.get('/ec2/pricing/pricing-elb.json') do |data|
20
17
  result = {}
21
- data= JSON.parse(HTTParty.get('http://aws.amazon.com/ec2/pricing/pricing-elb.json').body)
22
18
  data['config']['regions'].each do |region|
23
19
  container = {}
24
20
  region['types'].each do |type|
@@ -30,7 +26,7 @@ class AWSCosts::ELB
30
26
  end
31
27
  result
32
28
  end
33
- self.new(@fetch[region])
29
+ self.new(transformed[region])
34
30
  end
35
31
 
36
32
  end
@@ -1,5 +1,4 @@
1
- require 'httparty'
2
- require 'json'
1
+ require 'awscosts/ec2'
3
2
 
4
3
  class AWSCosts::EC2OnDemand
5
4
 
@@ -22,23 +21,20 @@ class AWSCosts::EC2OnDemand
22
21
  'hiStoreODI.xxxxxxxxl' => 'hs1.8xlarge',
23
22
  'hiIoODI.xxxxl' => 'hi1.4xlarge' }
24
23
 
25
- def initialize type, data
26
- @type = type
24
+ def initialize data
27
25
  @data= data
28
26
  end
29
27
 
30
28
  def price size=nil
31
- size ? @data[TYPE_MAPPING[@type]][size] : @data[TYPE_MAPPING[@type]]
29
+ size ? @data[size] : @data
32
30
  end
33
31
 
34
32
  def self.fetch type, region
35
- raw_data= cache[type] ||= begin
33
+ transformed= AWSCosts::Cache.get("/ec2/pricing/json/#{type}-od.json") do |data|
36
34
  result = {}
37
- data= JSON.parse(HTTParty.get("http://aws.amazon.com/ec2/pricing/json/#{AWSCosts::EC2::TYPE_MAPPING[type]}-od.json").body)
38
35
  data['config']['regions'].each do |region|
39
36
  platforms = {}
40
37
  region['instanceTypes'].each do |instance_type|
41
- type = instance_type['type']
42
38
  instance_type['sizes'].each do |instance_size|
43
39
  size = instance_size['size']
44
40
  platform_cost = Hash.new({})
@@ -48,7 +44,7 @@ class AWSCosts::EC2OnDemand
48
44
 
49
45
  platform_cost.each_pair do |p,v|
50
46
  platforms[p] = {} unless platforms.key?(p)
51
- platforms[p][TYPE_TRANSLATION["#{type}.#{size}"]] = v
47
+ platforms[p][TYPE_TRANSLATION["#{instance_type['type']}.#{size}"]] = v
52
48
  end
53
49
  end
54
50
  end
@@ -56,12 +52,8 @@ class AWSCosts::EC2OnDemand
56
52
  end
57
53
  result
58
54
  end
59
- self.new(type, raw_data[region])
55
+ type == 'sles' ? self.new(transformed[region]['linux']) :self.new(transformed[region][type])
60
56
  end
61
57
 
62
- private
63
- def self.cache
64
- @@cache ||= {}
65
- end
66
58
  end
67
59
 
@@ -38,19 +38,17 @@ class AWSCosts::EC2ReservedInstances
38
38
  if size
39
39
  @data["#{TERMS[term]}Hourly"][size]
40
40
  else
41
- @data["#{TERMS[term]}Hourly"][size]
41
+ @data["#{TERMS[term]}Hourly"]
42
42
  end
43
43
  end
44
44
 
45
45
 
46
46
  def self.fetch type, utilisation, region
47
- raw_data= cache[type] ||= begin
47
+ transformed= AWSCosts::Cache.get("/ec2/pricing/json/#{type}-ri-#{utilisation}.json") do |data|
48
48
  result = {}
49
- data= JSON.parse(HTTParty.get("http://aws.amazon.com/ec2/pricing/json/#{AWSCosts::EC2::TYPES[type]}-ri-#{utilisation}.json").body)
50
49
  data['config']['regions'].each do |region|
51
50
  platforms = {}
52
51
  region['instanceTypes'].each do |instance_type|
53
- type = instance_type['type']
54
52
  instance_type['sizes'].each do |instance_size|
55
53
  size = instance_size['size']
56
54
  platform_cost = Hash.new({})
@@ -61,7 +59,7 @@ class AWSCosts::EC2ReservedInstances
61
59
 
62
60
  platform_cost.each_pair do |p,v|
63
61
  platforms[p] = {} unless platforms.key?(p)
64
- platforms[p][TYPE_TRANSLATION["#{type}.#{size}"]] = v
62
+ platforms[p][TYPE_TRANSLATION["#{instance_type['type']}.#{size}"]] = v
65
63
  end
66
64
  end
67
65
  end
@@ -69,13 +67,8 @@ class AWSCosts::EC2ReservedInstances
69
67
  end
70
68
  result
71
69
  end
72
- self.new(raw_data[region])
70
+ self.new(transformed[region])
73
71
  end
74
72
 
75
-
76
- private
77
- def self.cache
78
- @@cache ||= {}
79
- end
80
73
  end
81
74
 
data/lib/awscosts/emr.rb CHANGED
@@ -31,9 +31,8 @@ class AWSCosts::EMR
31
31
  end
32
32
 
33
33
  def self.fetch region
34
- @cache ||= begin
34
+ transformed= AWSCosts::Cache.get("/elasticmapreduce/pricing/pricing-emr.json") do |data|
35
35
  result = {}
36
- data= JSON.parse(HTTParty.get("http://aws.amazon.com/elasticmapreduce/pricing/pricing-emr.json").body)
37
36
  data['config']['regions'].each do |region|
38
37
  platforms = {}
39
38
  region['instanceTypes'].each do |instance_type|
@@ -54,12 +53,8 @@ class AWSCosts::EMR
54
53
  end
55
54
  result
56
55
  end
57
- self.new(@cache[region])
56
+ self.new(transformed[region])
58
57
  end
59
58
 
60
- private
61
- def self.cache
62
- @@cache ||= {}
63
- end
64
59
  end
65
60
 
@@ -14,9 +14,8 @@ class AWSCosts::S3DataTransfer
14
14
  end
15
15
 
16
16
  def self.fetch region
17
- @cache ||= begin
17
+ transformed= AWSCosts::Cache.get("/s3/pricing/pricing-data-transfer.json") do |data|
18
18
  result = {}
19
- data= JSON.parse(HTTParty.get("http://aws.amazon.com/s3/pricing/pricing-data-transfer.json").body)
20
19
  data['config']['regions'].each do |region|
21
20
  types = {}
22
21
  region['types'].each do |type|
@@ -29,7 +28,7 @@ class AWSCosts::S3DataTransfer
29
28
  end
30
29
  result
31
30
  end
32
- self.new(@cache[region])
31
+ self.new(transformed[region])
33
32
  end
34
33
 
35
34
  end
@@ -3,8 +3,6 @@ require 'json'
3
3
 
4
4
  class AWSCosts::S3Requests
5
5
 
6
- TIERS = %w{putcopypost, glacierRequests, deleteRequests, getEtc, glacierDataRestore}
7
-
8
6
  def initialize data
9
7
  @data= data
10
8
  end
@@ -14,9 +12,8 @@ class AWSCosts::S3Requests
14
12
  end
15
13
 
16
14
  def self.fetch region
17
- @cache ||= begin
15
+ transformed= AWSCosts::Cache.get("/s3/pricing/pricing-requests.json") do |data|
18
16
  result = {}
19
- data= JSON.parse(HTTParty.get("http://aws.amazon.com/s3/pricing/pricing-requests.json").body)
20
17
  data['config']['regions'].each do |region|
21
18
  tiers = {}
22
19
  region['tiers'].each do |tier|
@@ -26,7 +23,7 @@ class AWSCosts::S3Requests
26
23
  end
27
24
  result
28
25
  end
29
- self.new(@cache[region])
26
+ self.new(transformed[region])
30
27
  end
31
28
 
32
29
  end
@@ -3,8 +3,6 @@ require 'json'
3
3
 
4
4
  class AWSCosts::S3Storage
5
5
 
6
- TIERS = %w{firstTBstorage, next49TBstorage, next49TBstorage, next501TBstorage}
7
-
8
6
  def initialize data
9
7
  @data= data
10
8
  end
@@ -14,9 +12,8 @@ class AWSCosts::S3Storage
14
12
  end
15
13
 
16
14
  def self.fetch region
17
- @cache ||= begin
15
+ transformed= AWSCosts::Cache.get("/s3/pricing/pricing-storage.json") do |data|
18
16
  result = {}
19
- data= JSON.parse(HTTParty.get("http://aws.amazon.com/s3/pricing/pricing-storage.json").body)
20
17
  data['config']['regions'].each do |region|
21
18
  tiers = {}
22
19
  region['tiers'].each do |tier|
@@ -30,9 +27,8 @@ class AWSCosts::S3Storage
30
27
  end
31
28
  result
32
29
  end
33
- self.new(@cache[region])
30
+ self.new(transformed[region])
34
31
  end
35
32
 
36
33
  end
37
34
 
38
-
@@ -1,3 +1,3 @@
1
1
  module AWSCosts
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
data/lib/awscosts.rb CHANGED
@@ -3,6 +3,7 @@ require "awscosts/region"
3
3
  require "awscosts/ec2"
4
4
  require "awscosts/emr"
5
5
  require "awscosts/s3"
6
+ require "awscosts/cache"
6
7
 
7
8
  module AWSCosts
8
9
 
@@ -0,0 +1,42 @@
1
+ require 'spec_helper'
2
+
3
+ describe AWSCosts::EBS do
4
+ use_vcr_cassette
5
+
6
+ subject { AWSCosts.region('ap-southeast-2').ec2.ebs}
7
+
8
+ describe 'standard EBS volume' do
9
+ let(:price) { subject.price(:standard) }
10
+
11
+ it 'should provide price per GB / month for provisioned storage' do
12
+ price['perGBmoProvStorage'].should > 0
13
+ end
14
+
15
+ it 'should provide price per Million requests per month' do
16
+ price['perMMIOreq'].should > 0
17
+ end
18
+ end
19
+
20
+ describe 'provisioned IOPS price' do
21
+ let(:price) { subject.price(:provisioned_iops) }
22
+
23
+ it 'should provide price per GB / month for provisioned storage' do
24
+ price['perGBmoProvStorage'].should > 0
25
+ end
26
+
27
+ it 'should provide a price per PIOPS' do
28
+ price['perPIOPSreq'].should > 0
29
+ end
30
+ end
31
+
32
+ describe 'Snapshots to S3' do
33
+ let(:price) { subject.price(:snapshots_to_s3) }
34
+
35
+ it 'should provide a price per GB stored / month' do
36
+ price['perGBmoDataStored'].should > 0
37
+ end
38
+ end
39
+
40
+ end
41
+
42
+
@@ -0,0 +1,12 @@
1
+ require 'spec_helper'
2
+
3
+ describe AWSCosts::ELB do
4
+ use_vcr_cassette
5
+
6
+ subject { AWSCosts.region('ap-southeast-2').ec2.elb}
7
+
8
+ its(:price_per_hour) { should > 0 }
9
+ its(:price_per_gb) { should > 0 }
10
+
11
+ end
12
+
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+
3
+ describe AWSCosts::EC2OnDemand do
4
+
5
+ [:windows, :linux, :windows_with_sql, :windows_with_sql_web, :rhel, :sles].each do |type|
6
+ context "EC2 type of #{type}" do
7
+ use_vcr_cassette
8
+
9
+ subject { AWSCosts.region('ap-southeast-2').ec2.on_demand(type)}
10
+
11
+ its(:price) { should have_key('m1.small') }
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+
3
+ describe AWSCosts::EC2ReservedInstances do
4
+
5
+ [:windows, :linux, :windows_with_sql, :windows_with_sql_web, :rhel, :sles].each do |type|
6
+ context "EC2 type of #{type}" do
7
+ use_vcr_cassette
8
+
9
+ subject { AWSCosts.region('ap-southeast-1').ec2.reserved(type)}
10
+
11
+ it 'upfront price for 1 year term' do
12
+ subject.upfront(:one_year).should have_key('m1.small')
13
+ end
14
+
15
+ it 'upfront price for 3 year term' do
16
+ subject.upfront(:three_year).should have_key('m1.small')
17
+ end
18
+
19
+ it 'hourly price for 1 year term' do
20
+ subject.hourly(:one_year).should have_key('m1.small')
21
+ end
22
+
23
+ it 'hourly price for 3 year term' do
24
+ subject.hourly(:three_year).should have_key('m1.small')
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ describe AWSCosts::EMR do
4
+ use_vcr_cassette
5
+
6
+ subject { AWSCosts.region('eu-west-1').emr}
7
+
8
+ it 'should provide an EMR price' do
9
+ subject.emr_price('m1.xlarge') { should > 0 }
10
+ end
11
+
12
+ it 'should provide an EMR EC2 price' do
13
+ subject.ec2_price('m1.xlarge') { should > 0 }
14
+ end
15
+ end
@@ -0,0 +1,11 @@
1
+ require 'spec_helper'
2
+
3
+ describe AWSCosts::S3DataTransfer do
4
+ use_vcr_cassette
5
+
6
+ subject { AWSCosts.region('ap-northeast-1').s3.data_transfer}
7
+
8
+ its(:price) { should have_key('dataXferInS3') }
9
+ end
10
+
11
+
@@ -0,0 +1,10 @@
1
+ require 'spec_helper'
2
+
3
+ describe AWSCosts::S3Requests do
4
+ use_vcr_cassette
5
+
6
+ subject { AWSCosts.region('ap-northeast-1').s3.requests}
7
+
8
+ its(:price) { should have_key('putcopypost') }
9
+ end
10
+
@@ -0,0 +1,12 @@
1
+ require 'spec_helper'
2
+
3
+ describe AWSCosts::S3Storage do
4
+ use_vcr_cassette
5
+
6
+ subject { AWSCosts.region('ap-northeast-1').s3.storage}
7
+
8
+ its(:price) { should have_key('firstTBstorage') }
9
+ its(:price) { should have_key('next49TBstorage') }
10
+ end
11
+
12
+
data/spec/spec_helper.rb CHANGED
@@ -1,5 +1,14 @@
1
1
  require 'awscosts'
2
+ require 'vcr'
2
3
 
4
+ RSpec.configure do |config|
5
+ config.extend VCR::RSpec::Macros
6
+ end
7
+
8
+ VCR.configure do |c|
9
+ c.cassette_library_dir = 'fixtures/vcr_cassettes'
10
+ c.hook_into :fakeweb
11
+ end
3
12
 
4
13
 
5
14
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: awscosts
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
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-05-26 00:00:00.000000000 Z
12
+ date: 2013-05-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: httparty
@@ -75,6 +75,38 @@ dependencies:
75
75
  - - ! '>='
76
76
  - !ruby/object:Gem::Version
77
77
  version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: vcr
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: fakeweb
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
78
110
  description: AWSCosts provides an easier way to calculate the costs of running your
79
111
  project in AWS
80
112
  email:
@@ -89,8 +121,28 @@ files:
89
121
  - README.md
90
122
  - Rakefile
91
123
  - awscosts.gemspec
124
+ - fixtures/vcr_cassettes/AWSCosts_EBS.yml
125
+ - fixtures/vcr_cassettes/AWSCosts_EC2OnDemand/EC2_type_of_linux.yml
126
+ - fixtures/vcr_cassettes/AWSCosts_EC2OnDemand/EC2_type_of_rhel.yml
127
+ - fixtures/vcr_cassettes/AWSCosts_EC2OnDemand/EC2_type_of_sles.yml
128
+ - fixtures/vcr_cassettes/AWSCosts_EC2OnDemand/EC2_type_of_windows.yml
129
+ - fixtures/vcr_cassettes/AWSCosts_EC2OnDemand/EC2_type_of_windows_with_sql.yml
130
+ - fixtures/vcr_cassettes/AWSCosts_EC2OnDemand/EC2_type_of_windows_with_sql_web.yml
131
+ - fixtures/vcr_cassettes/AWSCosts_EC2ReservedInstances/EC2_type_of_linux.yml
132
+ - fixtures/vcr_cassettes/AWSCosts_EC2ReservedInstances/EC2_type_of_rhel.yml
133
+ - fixtures/vcr_cassettes/AWSCosts_EC2ReservedInstances/EC2_type_of_sles.yml
134
+ - fixtures/vcr_cassettes/AWSCosts_EC2ReservedInstances/EC2_type_of_windows.yml
135
+ - fixtures/vcr_cassettes/AWSCosts_EC2ReservedInstances/EC2_type_of_windows_with_sql.yml
136
+ - fixtures/vcr_cassettes/AWSCosts_EC2ReservedInstances/EC2_type_of_windows_with_sql_web.yml
137
+ - fixtures/vcr_cassettes/AWSCosts_ELB.yml
138
+ - fixtures/vcr_cassettes/AWSCosts_EMR.yml
139
+ - fixtures/vcr_cassettes/AWSCosts_S3DataTransfer.yml
140
+ - fixtures/vcr_cassettes/AWSCosts_S3Requests.yml
141
+ - fixtures/vcr_cassettes/AWSCosts_S3Storage.yml
92
142
  - lib/awscosts.rb
143
+ - lib/awscosts/cache.rb
93
144
  - lib/awscosts/ec2.rb
145
+ - lib/awscosts/ec2_ebs.rb
94
146
  - lib/awscosts/ec2_elb.rb
95
147
  - lib/awscosts/ec2_on_demand.rb
96
148
  - lib/awscosts/ec2_reserved_instances.rb
@@ -101,8 +153,16 @@ files:
101
153
  - lib/awscosts/s3_requests.rb
102
154
  - lib/awscosts/s3_storage.rb
103
155
  - lib/awscosts/version.rb
156
+ - spec/awscosts/ec2_ebs_spec.rb
157
+ - spec/awscosts/ec2_elb_spec.rb
158
+ - spec/awscosts/ec2_on_demand_spec.rb
159
+ - spec/awscosts/ec2_reserved_instances_spec.rb
104
160
  - spec/awscosts/ec2_spec.rb
161
+ - spec/awscosts/emr_spec.rb
105
162
  - spec/awscosts/region_spec.rb
163
+ - spec/awscosts/s3_data_transfer_spec.rb
164
+ - spec/awscosts/s3_requests_spec.rb
165
+ - spec/awscosts/s3_storage_spec.rb
106
166
  - spec/spec_helper.rb
107
167
  homepage: https://github.com/srbartlett/awscosts
108
168
  licenses:
@@ -119,7 +179,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
119
179
  version: '0'
120
180
  segments:
121
181
  - 0
122
- hash: 1983521738208440787
182
+ hash: -1851467363620844181
123
183
  required_rubygems_version: !ruby/object:Gem::Requirement
124
184
  none: false
125
185
  requirements:
@@ -128,7 +188,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
128
188
  version: '0'
129
189
  segments:
130
190
  - 0
131
- hash: 1983521738208440787
191
+ hash: -1851467363620844181
132
192
  requirements: []
133
193
  rubyforge_project:
134
194
  rubygems_version: 1.8.23
@@ -136,6 +196,14 @@ signing_key:
136
196
  specification_version: 3
137
197
  summary: Programmatic access to AWS pricing
138
198
  test_files:
199
+ - spec/awscosts/ec2_ebs_spec.rb
200
+ - spec/awscosts/ec2_elb_spec.rb
201
+ - spec/awscosts/ec2_on_demand_spec.rb
202
+ - spec/awscosts/ec2_reserved_instances_spec.rb
139
203
  - spec/awscosts/ec2_spec.rb
204
+ - spec/awscosts/emr_spec.rb
140
205
  - spec/awscosts/region_spec.rb
206
+ - spec/awscosts/s3_data_transfer_spec.rb
207
+ - spec/awscosts/s3_requests_spec.rb
208
+ - spec/awscosts/s3_storage_spec.rb
141
209
  - spec/spec_helper.rb