awsprice 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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