awsprice 0.0.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 1b55dc0f402413d4625c06b3bfe126cbfd6a61a9
4
+ data.tar.gz: 1ef08287d697c862c7205347b7ff74a6f9675a76
5
+ SHA512:
6
+ metadata.gz: e97ef861f133ebf843f96ea9298d03190011453c97c85789abf6718ef036db73c1ba9dd326fb36a26e99651598a16dd7a094b167531e25fc2c9f732caa219442
7
+ data.tar.gz: b4d7a1acf7496a590e3a2bbe116a30608560181ae0839ec8fc117788d34673ba4020e688b1d3a5577c4f1d0f7a843702e66a32a7d462d17e5fcb2adc1565de6e
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source 'https://rubygems.org'
2
+ gemspec
@@ -0,0 +1,48 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ awsprice (0.0.1)
5
+ gli (= 2.9.0)
6
+ rainbow
7
+ terminal-table
8
+
9
+ GEM
10
+ remote: https://rubygems.org/
11
+ specs:
12
+ aruba (0.5.4)
13
+ childprocess (>= 0.3.6)
14
+ cucumber (>= 1.1.1)
15
+ rspec-expectations (>= 2.7.0)
16
+ builder (3.2.2)
17
+ childprocess (0.5.2)
18
+ ffi (~> 1.0, >= 1.0.11)
19
+ cucumber (1.3.14)
20
+ builder (>= 2.1.2)
21
+ diff-lcs (>= 1.1.3)
22
+ gherkin (~> 2.12)
23
+ multi_json (>= 1.7.5, < 2.0)
24
+ multi_test (>= 0.1.1)
25
+ diff-lcs (1.2.5)
26
+ ffi (1.9.3)
27
+ gherkin (2.12.2)
28
+ multi_json (~> 1.3)
29
+ gli (2.9.0)
30
+ json (1.8.1)
31
+ multi_json (1.9.2)
32
+ multi_test (0.1.1)
33
+ rainbow (2.0.0)
34
+ rake (10.2.2)
35
+ rdoc (4.1.1)
36
+ json (~> 1.4)
37
+ rspec-expectations (2.14.5)
38
+ diff-lcs (>= 1.1.3, < 2.0)
39
+ terminal-table (1.4.5)
40
+
41
+ PLATFORMS
42
+ ruby
43
+
44
+ DEPENDENCIES
45
+ aruba
46
+ awsprice!
47
+ rake
48
+ rdoc
@@ -0,0 +1,6 @@
1
+ = awsprice
2
+
3
+ Describe your project here
4
+
5
+ :include:awsprice.rdoc
6
+
@@ -0,0 +1,44 @@
1
+ require 'rake/clean'
2
+ require 'rubygems'
3
+ require 'rubygems/package_task'
4
+ require 'rdoc/task'
5
+ require 'cucumber'
6
+ require 'cucumber/rake/task'
7
+ Rake::RDocTask.new do |rd|
8
+ rd.main = "README.rdoc"
9
+ rd.rdoc_files.include("README.rdoc","lib/**/*.rb","bin/**/*")
10
+ rd.title = 'Awsprice'
11
+ end
12
+
13
+ spec = eval(File.read('awsprice.gemspec'))
14
+
15
+ Gem::PackageTask.new(spec) do |pkg|
16
+ end
17
+ CUKE_RESULTS = 'results.html'
18
+ CLEAN << CUKE_RESULTS
19
+ desc 'Run features'
20
+ Cucumber::Rake::Task.new(:features) do |t|
21
+ opts = "features --format html -o #{CUKE_RESULTS} --format progress -x"
22
+ opts += " --tags #{ENV['TAGS']}" if ENV['TAGS']
23
+ t.cucumber_opts = opts
24
+ t.fork = false
25
+ end
26
+
27
+ desc 'Run features tagged as work-in-progress (@wip)'
28
+ Cucumber::Rake::Task.new('features:wip') do |t|
29
+ tag_opts = ' --tags ~@pending'
30
+ tag_opts = ' --tags @wip'
31
+ t.cucumber_opts = "features --format html -o #{CUKE_RESULTS} --format pretty -x -s#{tag_opts}"
32
+ t.fork = false
33
+ end
34
+
35
+ task :cucumber => :features
36
+ task 'cucumber:wip' => 'features:wip'
37
+ task :wip => 'features:wip'
38
+ require 'rake/testtask'
39
+ Rake::TestTask.new do |t|
40
+ t.libs << "test"
41
+ t.test_files = FileList['test/*_test.rb']
42
+ end
43
+
44
+ task :default => [:test,:features]
@@ -0,0 +1,26 @@
1
+ # Ensure we require the local version and not one we might have installed already
2
+ require File.join([File.dirname(__FILE__),'lib','awsprice','version.rb'])
3
+ spec = Gem::Specification.new do |s|
4
+ s.name = 'awsprice'
5
+ s.version = Awsprice::VERSION
6
+ s.author = 'netalpha'
7
+ s.license = 'MIT'
8
+ s.email = 'cs.chavez1986@email.com'
9
+ s.homepage = 'http://netalpha.github.io'
10
+ s.description = "I will improve this later."
11
+ s.platform = Gem::Platform::RUBY
12
+ s.summary = 'This is a command line application for query amazon webservice prices'
13
+ s.files = `git ls-files`.split(" ")
14
+ s.require_paths << 'lib'
15
+ s.has_rdoc = true
16
+ s.extra_rdoc_files = ['README.rdoc','awsprice.rdoc']
17
+ s.rdoc_options << '--title' << 'awsprice' << '--main' << 'README.rdoc' << '-ri'
18
+ s.bindir = 'bin'
19
+ s.executables << 'awsprice'
20
+ s.add_development_dependency('rake', '~>0')
21
+ s.add_development_dependency('rdoc', '~>0')
22
+ s.add_development_dependency('aruba', '~>0')
23
+ s.add_runtime_dependency('gli','~>2.9')
24
+ s.add_runtime_dependency('terminal-table', '~>0')
25
+ s.add_runtime_dependency('rainbow', '~>0')
26
+ end
@@ -0,0 +1,5 @@
1
+ = awsprice
2
+
3
+ Generate this with
4
+ awsprice rdoc
5
+ After you have described your command line interface
@@ -0,0 +1,112 @@
1
+ #!/usr/bin/env ruby
2
+ require 'gli'
3
+ require 'pstore'
4
+ require 'terminal-table'
5
+ require 'rainbow'
6
+
7
+ begin # XXX: Remove this begin/rescue before distributing your app
8
+ require 'awsprice'
9
+ rescue LoadError
10
+ STDERR.puts "In development, you need to use `bundle exec bin/awsprice` to run your app"
11
+ STDERR.puts "At install-time, RubyGems will make sure lib, etc. are in the load path"
12
+ STDERR.puts "Feel free to remove this message from bin/awsprice now"
13
+ exit 64
14
+ end
15
+
16
+
17
+ include GLI::App
18
+
19
+ program_desc 'This is an command line application for query latest amazon web service prices.'
20
+
21
+ version Awsprice::VERSION
22
+
23
+ desc "the display format: table, markdown, csv"
24
+ flag [:format, :f], required: false, must_match: ['table', 'markdown', 'csv'], default_value: 'table'
25
+
26
+ desc "list ondemand instances prices"
27
+ command :ondemand do |c|
28
+ c.action do |global_options, options, args|
29
+ if global_options[:format] == 'table'
30
+ table = Terminal::Table.new do |t|
31
+ t.headings = ["ID", "REGION", "SIZE", "OS", "PRICE(USD/HOUR)"]
32
+ id = 1
33
+ Awsprice::EC2.new.get_price_ondemand.each do |ins|
34
+ t << [id, ins.region, ins.size, ins.os, ins.price_per_hour]
35
+ id = id + 1
36
+ end
37
+ end
38
+ puts table
39
+ # elsif global_options[:format] == 'csv'
40
+ # puts "ID,REGION,TYPE,SIZE,VCPU,ECU,MEMORY,STORAGE,OS,PRICE"
41
+ # id = 1
42
+ # Awsprice::EC2.new.ondemand_instances.each do |ins|
43
+ # puts "#{id},#{ins.region},#{ins.type},#{ins.size},#{ins.vcpu},#{ins.ecu},#{ins.memory},#{ins.storage},#{ins.os},#{ins.price}"
44
+ # id = id + 1
45
+ # end
46
+ end
47
+ end
48
+ end
49
+
50
+ desc "list reserved instances prices"
51
+ command :reserved do |c|
52
+ c.desc "utilization type: medium or heavy"
53
+ c.flag [:utilization, :u], required: true, must_match: ['medium', 'heavy']
54
+ c.action do |global_options, options, args|
55
+ if global_options[:format] == 'table'
56
+ table = Terminal::Table.new do |t|
57
+ t.headings = ["ID", "REGION", "SIZE", "OS", "yrTerm1", "yrTerm1Hourly", "yrTerm3", "yrTerm3Hourly"]
58
+ id = 1
59
+ price = []
60
+ if options[:u] == 'medium'
61
+ price = Awsprice::EC2.new.get_price_reserved_medium
62
+ elsif options[:u] == 'heavy'
63
+ price = Awsprice::EC2.new.get_price_reserved_heavy
64
+ end
65
+ price.each do |ins|
66
+ t << [id, ins.region, ins.size, ins.os, ins.yrTerm1, ins.yrTerm1Hourly, ins.yrTerm3, ins.yrTerm3Hourly]
67
+ id = id + 1
68
+ end
69
+ end
70
+ puts table
71
+ end
72
+ end
73
+ end
74
+
75
+ pre do |global,command,options,args|
76
+ # @store = PStore.new %(#{ENV['HOME']}/awsprice.pstore)
77
+ # @store.transaction do
78
+ # @store[:regions] ||= []
79
+ # end
80
+ true
81
+ end
82
+
83
+ post do |global,command,options,args|
84
+ end
85
+
86
+ on_error do |exception|
87
+ true
88
+ end
89
+
90
+
91
+ def print_table(headings, key)
92
+ table = Terminal::Table.new do |t|
93
+ t.headings = [headings]
94
+ @store.transaction do
95
+ @store[key].each do |value|
96
+ t << [value]
97
+ end
98
+ end
99
+ end
100
+ puts table
101
+ end
102
+
103
+ def print_markdown headings, key
104
+ puts headings
105
+ @store.transaction do
106
+ @store[key].each do |value|
107
+ puts " * #{value}"
108
+ end
109
+ end
110
+ end
111
+
112
+ exit run(ARGV)
@@ -0,0 +1,32 @@
1
+ Feature: My bootstrapped app kinda works
2
+ In order to get going on coding my awesome app
3
+ I want to have aruba and cucumber setup
4
+ So I don't have to do it myself
5
+
6
+ Scenario: App just runs
7
+ When I get help for "awsprice"
8
+ Then the exit status should be 0
9
+
10
+ Scenario: List all the regions
11
+ Given Amazon has the following regions:
12
+ """
13
+ west
14
+ east
15
+ north
16
+ south
17
+ """
18
+ When I run `awsprice region list`
19
+ Then the output should contain "west"
20
+ And the output should contain "east"
21
+ And the output should contain "north"
22
+ And the output should contain "south"
23
+
24
+ Scenario: list all the ondemand instances
25
+ When I run `awsprice ondemand`
26
+ Then the output should contain "hiMemCurrentGen"
27
+ And the output should contain "34000"
28
+
29
+ @wip
30
+ Scenario: list all the reserved instances
31
+ When I run `awsprice reserved`
32
+ Then the output should contain "not-known"
@@ -0,0 +1,16 @@
1
+ When /^I get help for "([^"]*)"$/ do |app_name|
2
+ @app_name = app_name
3
+ step %(I run `#{app_name} help`)
4
+ end
5
+
6
+ # Add more step definitions here
7
+ When /^Amazon has the following regions:$/ do |regions|
8
+ store = PStore.new %(#{ENV["HOME"]}/awsprice.pstore)
9
+ store.transaction do
10
+ new_region = []
11
+ regions.lines.each do |region|
12
+ new_region << region.to_s
13
+ end
14
+ store[:regions] = new_region
15
+ end
16
+ end
@@ -0,0 +1,18 @@
1
+ require 'aruba/cucumber'
2
+ require 'pstore'
3
+
4
+ ENV['PATH'] = "#{File.expand_path(File.dirname(__FILE__) + '/../../bin')}#{File::PATH_SEPARATOR}#{ENV['PATH']}"
5
+ LIB_DIR = File.join(File.expand_path(File.dirname(__FILE__)),'..','..','lib')
6
+
7
+ Before do
8
+ # Using "announce" causes massive warnings on 1.9.2
9
+ @puts = true
10
+ @original_rubylib = ENV['RUBYLIB']
11
+ ENV['RUBYLIB'] = LIB_DIR + File::PATH_SEPARATOR + ENV['RUBYLIB'].to_s
12
+ %x(rm -rf #{ENV['HOME']}/awsprice.pstore)
13
+ @aruba_timeout_seconds = 1005
14
+ end
15
+
16
+ After do
17
+ ENV['RUBYLIB'] = @original_rubylib
18
+ end
@@ -0,0 +1,182 @@
1
+ require 'awsprice/version.rb'
2
+ require 'json'
3
+ require 'net/http'
4
+ require 'pstore'
5
+
6
+ Dir[File.join(File.dirname(__FILE__), 'awsprice/*.rb')].sort.each { |lib| require lib }
7
+
8
+ module Awsprice
9
+ class Info
10
+ @@REGIONS= {
11
+ 'us-east-1' => 'us-east',
12
+ 'us-west-1' => 'us-west',
13
+ 'us-west-2' => 'us-west-2',
14
+ 'eu-west-1' => 'eu-ireland',
15
+ 'ap-southeast-1' => 'apac-sin',
16
+ 'ap-southeast-2' => 'apac-syd',
17
+ 'ap-northeast-1' => 'apac-tokyo',
18
+ 'sa-east-1' => 'sa-east-1'
19
+ }
20
+
21
+
22
+ def initialize
23
+ # @store = PStore.new %(#{ENV['HOME']}/awsprice.pstore)
24
+
25
+ # @store[:regions] = []
26
+ end
27
+
28
+ def self.fetch_url url
29
+ uri = URI.parse(url)
30
+ page = Net::HTTP.get_response(uri)
31
+
32
+ body = page.body.gsub("callback(", "").reverse.sub(")", "").reverse
33
+ if body.split("\n").last == ";"
34
+
35
+ body = body.reverse.sub(";", "").reverse
36
+ elsif body[-1] == ";"
37
+ body.chop!
38
+ end
39
+
40
+ begin
41
+ JSON.parse(body)
42
+ rescue JSON::ParserError
43
+ JSON.parse(body.gsub(/(\w+)\s*:/, '"\1":'))
44
+ end
45
+ end
46
+ end
47
+
48
+ class EC2 < Info
49
+ #attr_accessor :all_instances, :ondemand_instances
50
+
51
+ EC2_BASE_URL = "http://a0.awsstatic.com/pricing/1/ec2/"
52
+ # EC2_BASE_URL = "http://aws-assets-pricing-prod.s3.amazonaws.com/pricing/ec2/"
53
+
54
+ @@OS_TYPES = [:linux, :mswin, :rhel, :sles, :mswinSQL, :mswinSQLWeb]
55
+ @@RES_TYPES = [:medium, :heavy]
56
+
57
+ def initialize
58
+ @ec2_spec = {}
59
+ @ec2_ondemand_price = []
60
+ @ec2_medium_reserved_price = []
61
+ @ec2_heavy_reserved_price = []
62
+ # unless File.exist? "awsprice.pstore"
63
+ crawl
64
+ # end
65
+ end
66
+
67
+ def get_price_reserved_medium
68
+ @ec2_medium_reserved_price
69
+ # @ec2_medium_reserved_price.each do |price|
70
+ # puts "#{price.region} #{price.size} #{price.os} #{price.yrTerm1} #{price.yrTerm1Hourly}, #{price.yrTerm3}, #{price.yrTerm3Hourly}"
71
+ # end
72
+ end
73
+
74
+ def get_price_reserved_heavy
75
+ @ec2_heavy_reserved_price
76
+ # @ec2_heavy_reserved_price.each do |price|
77
+ # puts "#{price.region} #{price.size} #{price.os} #{price.yrTerm1} #{price.yrTerm1Hourly}, #{price.yrTerm3}, #{price.yrTerm3Hourly}"
78
+ # end
79
+ end
80
+
81
+ def get_price_ondemand
82
+ @ec2_ondemand_price
83
+ # @ec2_ondemand_price.each do |price|
84
+ # puts "#{price.region} #{price.size} #{price.os} #{price.price_per_hour}"
85
+ # end
86
+ end
87
+
88
+ def get_spec
89
+ @ec2_spec.each do |key, ins|
90
+ puts "#{ins.size} #{ins.type} #{ins.memory}, #{ins.ecu}, #{ins.vcpu}, #{ins.storage}"
91
+ end
92
+ end
93
+
94
+ private
95
+
96
+ def crawl
97
+ fetch_ondemand_prices
98
+ fetch_reserved_prices
99
+ end
100
+
101
+ def fetch_ondemand_prices
102
+ @@OS_TYPES.each do |os|
103
+ parse_ec2_ondemand_jsons(EC2_BASE_URL + "#{os}-od.min.js")
104
+ end
105
+ end
106
+
107
+ def fetch_reserved_prices
108
+ @@OS_TYPES.each do |os|
109
+ @@RES_TYPES.each do |use|
110
+ parse_ec2_reserved_json(EC2_BASE_URL + "#{os}-ri-#{use}.min.js", os, use)
111
+ end
112
+ end
113
+ end
114
+
115
+ def parse_ec2_reserved_json url, os, use
116
+ res = Info.fetch_url url
117
+ res['config']['regions'].each do |reg|
118
+ reg['instanceTypes'].each do |type|
119
+ type['sizes'].each do |size|
120
+ # ins_by_region_and_size = instances.select do |ins|
121
+ # ins.region = reg['region']
122
+ # ins.size = size['size']
123
+ # end
124
+ price = Price_reserved.new
125
+ price.region = reg['region']
126
+ price.size = size['size']
127
+ price.os = os
128
+ size['valueColumns'].each do |value_col|
129
+ case value_col['name']
130
+ when 'yrTerm1'
131
+ price.yrTerm1 = value_col['prices']['USD']
132
+ when 'yrTerm1Hourly'
133
+ price.yrTerm1Hourly = value_col['prices']['USD']
134
+ when 'yrTerm3'
135
+ price.yrTerm3 = value_col['prices']['USD']
136
+ when 'yrTerm3Hourly'
137
+ price.yrTerm3Hourly = value_col['prices']['USD']
138
+ end
139
+ end
140
+
141
+ if use == :medium
142
+ @ec2_medium_reserved_price << price
143
+ elsif use == :heavy
144
+ @ec2_heavy_reserved_price << price
145
+ end
146
+
147
+
148
+ end
149
+ end
150
+ end
151
+ end
152
+
153
+ def parse_ec2_ondemand_jsons url
154
+ # fetch the json object
155
+ res = Info.fetch_url url
156
+ # parse the json object
157
+ res['config']['regions'].each do |reg|
158
+ reg['instanceTypes'].each do |type|
159
+ type['sizes'].each do |size|
160
+ ins = Instance.new
161
+ ins.type = type['type'];
162
+ ins.vcpu = size['vCPU'].to_i
163
+ ins.ecu = size['ECU']
164
+ ins.memory = (size['memoryGiB'].to_f * 1000).to_i
165
+ ins.storage = size['storageGB']
166
+ ins.size = size['size']
167
+ @ec2_spec[size['size']] ||= ins
168
+ size['valueColumns'].each do |value_col|
169
+ price = Price_ondemand.new
170
+ price.region = reg['region']
171
+ price.size = size['size']
172
+ price.os = value_col['name']
173
+ price.price_per_hour = value_col['prices']['USD'].to_f
174
+ @ec2_ondemand_price << price
175
+ end
176
+ end
177
+ end
178
+ end
179
+ end
180
+
181
+ end
182
+ end
@@ -0,0 +1,6 @@
1
+ module Awsprice
2
+ class Instance
3
+ attr_accessor :type, :size, :vcpu, :ecu, :memory, :storage #, :os , :price, :yrTerm1, :yrTerm1Hourly, :yrTerm3, :yrTerm3Hourly
4
+ end
5
+ end
6
+
@@ -0,0 +1,5 @@
1
+ module Awsprice
2
+ class Price
3
+ attr_accessor :region, :os, :size
4
+ end
5
+ end
@@ -0,0 +1,7 @@
1
+ module Awsprice
2
+ class Price_ondemand < Price
3
+ #key: region, os, size
4
+ #value: price_per_hour
5
+ attr_accessor :price_per_hour
6
+ end
7
+ end
@@ -0,0 +1,5 @@
1
+ module Awsprice
2
+ class Price_reserved < Price
3
+ attr_accessor :yrTerm1, :yrTerm1Hourly, :yrTerm3, :yrTerm3Hourly
4
+ end
5
+ end
@@ -0,0 +1,3 @@
1
+ module Awsprice
2
+ VERSION = '0.0.1'
3
+ end
@@ -0,0 +1,14 @@
1
+ require 'test_helper'
2
+
3
+ class DefaultTest < Test::Unit::TestCase
4
+
5
+ def setup
6
+ end
7
+
8
+ def teardown
9
+ end
10
+
11
+ def test_the_truth
12
+ assert true
13
+ end
14
+ end
@@ -0,0 +1,9 @@
1
+ require 'test/unit'
2
+
3
+ # Add test libraries you want to use here, e.g. mocha
4
+
5
+ class Test::Unit::TestCase
6
+
7
+ # Add global extensions to the test case class here
8
+
9
+ end
metadata ADDED
@@ -0,0 +1,155 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: awsprice
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - netalpha
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-04-02 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rdoc
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: aruba
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: gli
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '2.9'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '2.9'
69
+ - !ruby/object:Gem::Dependency
70
+ name: terminal-table
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rainbow
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ description: I will improve this later.
98
+ email: cs.chavez1986@email.com
99
+ executables:
100
+ - awsprice
101
+ extensions: []
102
+ extra_rdoc_files:
103
+ - README.rdoc
104
+ - awsprice.rdoc
105
+ files:
106
+ - Gemfile
107
+ - Gemfile.lock
108
+ - README.rdoc
109
+ - Rakefile
110
+ - awsprice.gemspec
111
+ - awsprice.rdoc
112
+ - bin/awsprice
113
+ - features/awsprice.feature
114
+ - features/step_definitions/awsprice_steps.rb
115
+ - features/support/env.rb
116
+ - lib/awsprice.rb
117
+ - lib/awsprice/instance.rb
118
+ - lib/awsprice/price.rb
119
+ - lib/awsprice/price_ondemand.rb
120
+ - lib/awsprice/price_reserved.rb
121
+ - lib/awsprice/version.rb
122
+ - test/default_test.rb
123
+ - test/test_helper.rb
124
+ homepage: http://netalpha.github.io
125
+ licenses:
126
+ - MIT
127
+ metadata: {}
128
+ post_install_message:
129
+ rdoc_options:
130
+ - "--title"
131
+ - awsprice
132
+ - "--main"
133
+ - README.rdoc
134
+ - "-ri"
135
+ require_paths:
136
+ - lib
137
+ - lib
138
+ required_ruby_version: !ruby/object:Gem::Requirement
139
+ requirements:
140
+ - - ">="
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
143
+ required_rubygems_version: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - ">="
146
+ - !ruby/object:Gem::Version
147
+ version: '0'
148
+ requirements: []
149
+ rubyforge_project:
150
+ rubygems_version: 2.2.2
151
+ signing_key:
152
+ specification_version: 4
153
+ summary: This is a command line application for query amazon webservice prices
154
+ test_files: []
155
+ has_rdoc: true