aws-pricing 0.5.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1 +1,10 @@
1
1
  language: ruby
2
+ rvm:
3
+ - 1.8.7
4
+ - 1.9.2
5
+ - 1.9.3
6
+ - jruby-18mode # JRuby in 1.8 mode
7
+ - jruby-19mode # JRuby in 1.9 mode
8
+ - rbx-18mode
9
+ - rbx-19mode
10
+ script: bundle exec rspec spec
@@ -2,7 +2,7 @@
2
2
 
3
3
  {<img src="https://secure.travis-ci.org/seeingidog/aws-pricing.png?branch=master" alt="Build Status" />}[http://travis-ci.org/seeingidog/aws-pricing]
4
4
  {<img src="https://gemnasium.com/seeingidog/aws-pricing.png" alt="Dependency Status" />}[https://gemnasium.com/seeingidog/aws-pricing]
5
-
5
+ {<img src="https://codeclimate.com/badge.png" />}[https://codeclimate.com/github/seeingidog/aws-pricing]
6
6
 
7
7
  Simpler interface to AWS pricing data. Uses Amazon's unofficial json price URLs.
8
8
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.0
1
+ 0.6.0
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "aws-pricing"
8
- s.version = "0.5.0"
8
+ s.version = "0.6.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Ian Morgan"]
12
- s.date = "2012-07-15"
12
+ s.date = "2012-08-09"
13
13
  s.description = "Simpler interface to AWS pricing data"
14
14
  s.email = "ian@ruby-code.com"
15
15
  s.extra_rdoc_files = [
@@ -1,16 +1,16 @@
1
1
  module AWSPricing
2
2
  class CloudFront
3
3
  #Cloudfront pricing data
4
-
4
+ CLOUDFRONT_BASE_URL = '/cloudfront/pricing/pricing-cloudfront-'
5
5
 
6
6
  #Returns Hash of request pricing information
7
7
  def self.requests
8
- Base.get('/cloudfront/pricing/pricing-cloudfront-requests')
8
+ Base.get(CLOUDFRONT_BASE_URL + 'requests')
9
9
  end
10
10
 
11
11
  #Returns Hash of data transfer pricing information
12
12
  def self.data_transfer
13
- Base.get('/cloudfront/pricing/pricing-cloudfront-on-demand')
13
+ Base.get(CLOUDFRONT_BASE_URL + 'on-demand')
14
14
  end
15
15
 
16
16
  end
@@ -2,12 +2,27 @@ module AWSPricing
2
2
  class EC2
3
3
  #Elastic Compute pricing data
4
4
 
5
+
5
6
 
7
+ EC2_BASE_URL = '/ec2/pricing/pricing-'
8
+ EC2_RESERVED_BASE_URL = '/ec2/pricing/'
9
+
6
10
  #Returns Hash of on-demand server instance pricing information
7
11
  def self.instances
8
- Base.get('/ec2/pricing/pricing-on-demand-instances')
12
+ Base.get(EC2_BASE_URL + 'on-demand-instances')
9
13
  end
10
-
14
+
15
+ #Returns Hash of reserved server instance pricing information
16
+ def self.reserved_instances(options = {})
17
+ os = options[:os].to_s || 'linux'
18
+ utilization = options[:utilization].to_s || 'heavy'
19
+
20
+ raise "AWSPricing: Invalid OS" unless /^linux|mswin+$/ =~ os
21
+ raise "AWSPricing: Invalid Utilization" unless /^light|medium|heavy$/ =~ utilization
22
+
23
+ Base.get(EC2_RESERVED_BASE_URL + "ri-#{utilization}-#{os}")
24
+ end
25
+
11
26
  #Returns Hash of current spot instance pricing information (5m)
12
27
  def self.spot_instances
13
28
  callback_response = Net::HTTP.get_response(URI.parse 'http://spot-price.s3.amazonaws.com/spot.js').body
@@ -18,27 +33,27 @@ module AWSPricing
18
33
 
19
34
  #Returns Hash of elastic block storage pricing information
20
35
  def self.ebs
21
- Base.get('/ec2/pricing/pricing-ebs')
36
+ Base.get(EC2_BASE_URL + 'ebs')
22
37
  end
23
38
 
24
39
  #Returns Hash of data transfer pricing information
25
40
  def self.data_transfer
26
- Base.get('/ec2/pricing/pricing-data-transfer')
41
+ Base.get(EC2_BASE_URL + 'data-transfer')
27
42
  end
28
43
 
29
44
  #Returns Hash of elastic IP pricing information
30
45
  def self.elastic_ips
31
- Base.get('/ec2/pricing/pricing-elastic-ips')
46
+ Base.get(EC2_BASE_URL + 'elastic-ips')
32
47
  end
33
48
 
34
49
  #Returns Hash of Cloudwatch monitoring pricing information
35
50
  def self.cloud_watch
36
- Base.get('/ec2/pricing/pricing-cloudwatch')
51
+ Base.get(EC2_BASE_URL + 'cloudwatch')
37
52
  end
38
53
 
39
54
  #Returns Hash of elastic loadbalancer pricing information
40
55
  def self.elb
41
- Base.get('/ec2/pricing/pricing-elb')
56
+ Base.get(EC2_BASE_URL + 'elb')
42
57
  end
43
58
 
44
59
  end
@@ -2,15 +2,16 @@ module AWSPricing
2
2
  class RDS
3
3
  #Relation Database Service pricing data
4
4
 
5
-
5
+ RDS_BASE_URL = '/rds/pricing/mysql/pricing-'
6
+
6
7
  #Returns Hash of standard deployment pricing information
7
8
  def self.standard
8
- Base.get('/rds/pricing/mysql/pricing-standard-deployments')
9
+ Base.get(RDS_BASE_URL + 'standard-deployments')
9
10
  end
10
11
 
11
12
  #Returns Hash of multi-availability zone deployment pricing information
12
13
  def self.multi_az
13
- Base.get('/rds/pricing/mysql/pricing-multiAZ-deployments')
14
+ Base.get(RDS_BASE_URL + 'multiAZ-deployments')
14
15
  end
15
16
 
16
17
  end
@@ -2,19 +2,21 @@ module AWSPricing
2
2
  class S3
3
3
  #Simple Storage Service pricing data
4
4
 
5
+ S3_BASE_URL = '/s3/pricing/pricing-'
6
+
5
7
  #Returns Hash of storage pricing information
6
8
  def self.storage
7
- Base.get('/s3/pricing/pricing-storage')
9
+ Base.get(S3_BASE_URL + 'storage')
8
10
  end
9
11
 
10
12
  #Returns Hash of data transfer pricing information
11
13
  def self.data_transfer
12
- Base.get('/s3/pricing/pricing-data-transfer')
14
+ Base.get(S3_BASE_URL + 'data-transfer')
13
15
  end
14
16
 
15
17
  #Returns Hash of request pricing information
16
18
  def self.requests
17
- Base.get('/s3/pricing/pricing-requests')
19
+ Base.get(S3_BASE_URL + 'requests')
18
20
  end
19
21
  end
20
22
 
@@ -8,7 +8,45 @@ describe "AwsPricing" do
8
8
  it "returns a hash of instance pricing" do
9
9
  EC2.instances.class.should == Hash
10
10
  end
11
+
12
+ describe "reserved instances" do
13
+ it "returns a hash of reserved linux heavy utilization instance pricing by default" do
14
+ EC2.reserved_instances.class.should == Hash
15
+ end
16
+ it "returns a hash of reserved linux light utilization instance pricing" do
17
+ EC2.reserved_instances(:os => :linux, :utilization => :light).class.should == Hash
18
+ end
11
19
 
20
+ it "returns a hash of reserved linux medium utilization instance pricing" do
21
+ EC2.reserved_instances(:os => :linux, :utilization => :medium).class.should == Hash
22
+ end
23
+
24
+ it "returns a hash of reserved linux heavy utlization instance pricing" do
25
+ EC2.reserved_instances(:os => :linux, :utilization => :heavy).class.should == Hash
26
+ end
27
+
28
+
29
+ it "returns a hash of reserved mswin light utilization instance pricing" do
30
+ EC2.reserved_instances(:os => :mswin, :utilization => :light).class.should == Hash
31
+ end
32
+
33
+ it "returns a hash of reserved mswin medium utilization instance pricing" do
34
+ EC2.reserved_instances(:os => :mswin, :utilization => :medium).class.should == Hash
35
+ end
36
+
37
+ it "returns a hash of reserved mswin heavy utlization instance pricing" do
38
+ EC2.reserved_instances(:os => :mswin, :utilization => :heavy).class.should == Hash
39
+ end
40
+
41
+ it "raises an error if invalid os is provided" do
42
+ lambda { EC2.reserved_instances(:os => :macosx) }.should raise_error
43
+ end
44
+
45
+ it "raises an error if invalid utilization is provided" do
46
+ lambda { EC2.reserved_instances(:utilization => :none) }.should raise_error
47
+ end
48
+ end
49
+
12
50
  it "returns a hash of ebs pricing" do
13
51
  EC2.ebs.class.should == Hash
14
52
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aws-pricing
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
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: 2012-07-15 00:00:00.000000000 Z
12
+ date: 2012-08-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: httparty
@@ -149,7 +149,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
149
149
  version: '0'
150
150
  segments:
151
151
  - 0
152
- hash: 3576624189235302444
152
+ hash: 4553429241909489593
153
153
  required_rubygems_version: !ruby/object:Gem::Requirement
154
154
  none: false
155
155
  requirements: