awscosts 0.0.3 → 0.0.4

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