cloudability 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.
data/.gitignore ADDED
@@ -0,0 +1,18 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ .DS_Store
data/Gemfile ADDED
@@ -0,0 +1,12 @@
1
+ source :rubygems
2
+ gem 'httparty'
3
+ gem 'mash'
4
+
5
+ group :test do
6
+ gem 'turn'
7
+ gem 'rake'
8
+
9
+ gem 'shoulda'
10
+ gem 'fakeweb'
11
+ gem 'jnunemaker-matchy'
12
+ end
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2012 Aaron Bento
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,60 @@
1
+ # Cloudability
2
+
3
+ Ruby wrapper for the Cloudability API using httparty.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'cloudability'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install cloudability
18
+
19
+ ## Usage
20
+
21
+ Covers endpoints:
22
+ * credentials
23
+ * budgets
24
+ * and partial billing_reports
25
+
26
+
27
+ ### Credential Endpoint:
28
+ Caputure an array containing all your Cloud Accounts
29
+
30
+ credentials = Cloudability::Credentials.new(:auth_token => 'xxxxxxxxxxxxxxxxxxxx')
31
+ all_credentials = credentials.find_all
32
+ first_account = all_credentials.first
33
+
34
+ puts first_account.account_created_at
35
+ puts first_account.account_identifier
36
+ puts first_account.created_at
37
+ puts first_account.has_auth
38
+ puts first_account.has_estimate
39
+ puts first_account.id
40
+ puts first_account.is_duplicate
41
+ puts first_account.nickname
42
+ puts first_account.state
43
+ puts first_account.updated_at
44
+ puts first_account.vendor_id
45
+ puts first_account.vendor_key
46
+
47
+
48
+ ## TODO:
49
+ * finish report by and filter by options.
50
+ * Refactor!
51
+ * More Docs!
52
+
53
+
54
+ ## Contributing
55
+
56
+ 1. Fork it
57
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
58
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
59
+ 4. Push to the branch (`git push origin my-new-feature`)
60
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,9 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rake/testtask'
3
+
4
+ Rake::TestTask.new do |t|
5
+ t.test_files = FileList['test/lib/cloudability/test_*.rb']
6
+ t.verbose = true
7
+ end
8
+
9
+ task :default => :test
@@ -0,0 +1,21 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'cloudability/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = "cloudability"
8
+ gem.version = Cloudability::VERSION
9
+ gem.authors = ["Aaron Bento"]
10
+ gem.email = ["abento+github@gmail.com"]
11
+ gem.description = %q{Ruby wrapper for the Cloudability API}
12
+ gem.summary = %q{Ruby wrapper for the Cloudability API using httparty}
13
+ gem.homepage = ""
14
+
15
+ gem.files = `git ls-files`.split($/)
16
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
+ gem.require_paths = ["lib"]
19
+ gem.add_dependency('httparty')
20
+ gem.add_dependency('mash')
21
+ end
@@ -0,0 +1,9 @@
1
+ require_relative "cloudability/version"
2
+ require 'httparty'
3
+ require 'mash'
4
+
5
+ module Cloudability
6
+ Dir[File.dirname(__FILE__) + '/cloudability/*.rb'].each do |file|
7
+ require file
8
+ end
9
+ end
@@ -0,0 +1,66 @@
1
+ module Cloudability
2
+ class Billing
3
+ include HTTParty
4
+ base_uri "https://app.cloudability.com/api/0"
5
+ format :json
6
+
7
+ attr_accessor :auth_token
8
+
9
+ def initialize(options={})
10
+ @auth_token = options[:auth_token]
11
+ @params=[]
12
+ end
13
+
14
+ # Option #1 is a hash with parameter value
15
+ # {:param1 => "period", }
16
+ def report_by(options={})
17
+
18
+ # TODO ::
19
+ # - by= : period, vendor, service, credential, account
20
+ # https://app.cloudability.com/api/0/billing_reports?auth_token=VZSaZ65u87X2p7HqgpJv&by=vendor
21
+ # [{"vendor_id":1,"vendor_name":"Amazon","spend":"149744.69"}]
22
+ @params << "&by=account" if options == :account
23
+ @params << "&by=credential" if options == :credential
24
+ @params << "&by=period" if options == :period
25
+ @params << "&by=service" if options == :service
26
+ @params << "&by=vendor" if options == :vendor
27
+
28
+ billing = get_url(@params)
29
+ convert_to_mashes(billing)
30
+ end
31
+
32
+ # Find a particular period, based on its month.
33
+ # Period must be in YY-MM-01 format with the date always 01.
34
+ def filter_by_period(period)
35
+ billing = get_billing_report(period)
36
+ convert_to_mash(billing)
37
+ end
38
+
39
+ private
40
+
41
+ def get_billing_report(period)
42
+ response = self.class.get("/billing_reports?auth_token=#{@auth_token}&period=#{period}")
43
+ response.success? ? response : raise(response.response)
44
+ end
45
+
46
+ def get_url(params)
47
+ joined_param = params.join
48
+ url = "/billing_reports?auth_token=#{@auth_token}#{joined_param}"
49
+ response = self.class.get("/billing_reports?auth_token=#{@auth_token}#{joined_param}")
50
+ response.success? ? response : raise(response.response)
51
+ end
52
+
53
+ # Convert the json into a Mash.
54
+ def convert_to_mash(response)
55
+ mash = Mash.new(response.first)
56
+ end
57
+
58
+ # Convert the json into an Array of Mashes.
59
+ def convert_to_mashes(response)
60
+ billings =[]
61
+ response.each { |b| billings << Mash.new(b)}
62
+ return billings
63
+ end
64
+
65
+ end
66
+ end
@@ -0,0 +1,55 @@
1
+ module Cloudability
2
+ class Budgets
3
+ include HTTParty
4
+ base_uri "https://app.cloudability.com/api/1"
5
+ format :json
6
+
7
+ attr_accessor :auth_token
8
+
9
+ def initialize(options={})
10
+ @auth_token = options[:auth_token]
11
+ end
12
+
13
+ # Return all the budgets for the current account, and return as mash's.
14
+ def find_all
15
+ convert_to_mashes(get_budgets)
16
+ end
17
+
18
+ # Find a particular budget, based on its id, and return a mash.
19
+ def find_by_id(id)
20
+ all_budgets = find_all
21
+ budget = all_budgets.select {|r| r.id == id}.first
22
+ end
23
+
24
+ # Find a particular budget, based on its subject, and return a mash.
25
+ def find_by_subject(subject)
26
+ all_budgets = find_all
27
+ budget = all_budgets.select {|r| r.subject == subject}.first
28
+ end
29
+
30
+ # Find a particular budget, based on a key, and return a mash.
31
+ def find_by_key(options={})
32
+ case options[:key]
33
+ when :id
34
+ budget = find_by_id(options[:value])
35
+ when :subject
36
+ budget = find_by_subject(options[:value])
37
+ end
38
+ end
39
+
40
+ private
41
+
42
+ def get_budgets
43
+ response = self.class.get("/budgets/index?auth_token=#{self.auth_token}")
44
+ response.success? ? response : raise(response.response)
45
+ end
46
+
47
+ # Convert the json into an Array of Mashes.
48
+ def convert_to_mashes(response)
49
+ budgets =[]
50
+ response.each { |b| budgets << Mash.new(b)}
51
+ return budgets
52
+ end
53
+
54
+ end
55
+ end
@@ -0,0 +1,32 @@
1
+ module Cloudability
2
+ class Credentials
3
+ include HTTParty
4
+ base_uri "https://app.cloudability.com/api/0"
5
+ format :json
6
+
7
+ attr_accessor :auth_token
8
+
9
+ def initialize(options={})
10
+ @auth_token = options[:auth_token]
11
+ end
12
+
13
+ def find_all
14
+ convert_to_mashes(get_credentials)
15
+ end
16
+
17
+ private
18
+
19
+ def get_credentials
20
+ response = self.class.get("/credentials/index?auth_token=#{self.auth_token}")
21
+ response.success? ? response : raise(response.response)
22
+ end
23
+
24
+ # Convert the json into an Array of Mashes.
25
+ def convert_to_mashes(response)
26
+ credentials = []
27
+ mashes = response.each { |c| credentials << Mash.new(c) }
28
+ return credentials
29
+ end
30
+
31
+ end
32
+ end
@@ -0,0 +1,26 @@
1
+ require 'date'
2
+ require 'mash'
3
+
4
+ # Cloudability requires time periods formatted in YYYY-MM-01 The date must always be 1.
5
+ # This provides a set of helpers to always return the correct period format.
6
+
7
+ class TimeHelper
8
+
9
+ def last_three_months
10
+ dt = DateTime.now
11
+
12
+ current_month = dt.strftime("%Y-%m-01")
13
+ last_month = (dt << 1).strftime("%Y-%m-01")
14
+ three_month = (dt << 2).strftime("%Y-%m-01")
15
+
16
+ hash = { :current => current_month, :last => last_month, :three => three_month }
17
+ mash = Mash.new(hash)
18
+ return mash
19
+ end
20
+
21
+ # Returns the current month
22
+ def current_month
23
+ DateTime.now.strftime("%Y-%m-01")
24
+ end
25
+
26
+ end
@@ -0,0 +1,3 @@
1
+ module Cloudability
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1 @@
1
+ [{"vendor_id":1,"vendor_name":"Amazon","spend":"100000.99"}]
@@ -0,0 +1 @@
1
+ [{"period":"2012-11-01","spend":"4987.99"}]
@@ -0,0 +1,54 @@
1
+ [
2
+ {
3
+ "period": "2011-11-01",
4
+ "spend": "4463.67"
5
+ },
6
+ {
7
+ "period": "2011-12-01",
8
+ "spend": "5207.81"
9
+ },
10
+ {
11
+ "period": "2012-01-01",
12
+ "spend": "6398.46"
13
+ },
14
+ {
15
+ "period": "2012-02-01",
16
+ "spend": "7645.38"
17
+ },
18
+ {
19
+ "period": "2012-03-01",
20
+ "spend": "10005.89"
21
+ },
22
+ {
23
+ "period": "2012-04-01",
24
+ "spend": "12363.48"
25
+ },
26
+ {
27
+ "period": "2012-05-01",
28
+ "spend": "13752.46"
29
+ },
30
+ {
31
+ "period": "2012-06-01",
32
+ "spend": "12618.84"
33
+ },
34
+ {
35
+ "period": "2012-07-01",
36
+ "spend": "13739.12"
37
+ },
38
+ {
39
+ "period": "2012-08-01",
40
+ "spend": "13461.66"
41
+ },
42
+ {
43
+ "period": "2012-09-01",
44
+ "spend": "12741.14"
45
+ },
46
+ {
47
+ "period": "2012-10-01",
48
+ "spend": "12729.93"
49
+ },
50
+ {
51
+ "period": "2012-11-01",
52
+ "spend": "4987.99"
53
+ }
54
+ ]
@@ -0,0 +1,34 @@
1
+ [
2
+ {
3
+ "predicted_monthly_spend": {
4
+ "cents": 1000000,
5
+ "currency": {
6
+ "id": 146,
7
+ "key": "usd",
8
+ "priority": 1,
9
+ "iso_code": "USD"
10
+ }
11
+ },
12
+ "subject": "1234-5678-90A",
13
+ "type": "Account",
14
+ "id": 1234,
15
+ "is_active": true,
16
+ "threshold": "100000.0"
17
+ },
18
+ {
19
+ "predicted_monthly_spend": {
20
+ "cents": 10000000,
21
+ "currency": {
22
+ "id": 146,
23
+ "key": "usd",
24
+ "priority": 1,
25
+ "iso_code": "USD"
26
+ }
27
+ },
28
+ "subject": "user@example.com",
29
+ "type": "User",
30
+ "id": 9999,
31
+ "is_active": true,
32
+ "threshold": "10000.0"
33
+ }
34
+ ]
@@ -0,0 +1,28 @@
1
+ [
2
+ {
3
+ "has_auth": true,
4
+ "has_estimate": false,
5
+ "is_duplicate": false,
6
+ "vendor_key": "Amazon",
7
+ "id": 10001,
8
+ "vendor_id": 1,
9
+ "created_at": "2011-11-01T00:00:00Z",
10
+ "updated_at": "2012-11-01T00:00:00Z",
11
+ "nickname": "Amazon Example",
12
+ "state": "verified",
13
+ "account_identifier": "1234-5678-90A",
14
+ "account_created_at": "2011-11-01T00:00:00Z"
15
+ },
16
+ {
17
+ "has_auth": false,
18
+ "has_estimate": false,
19
+ "is_duplicate": false,
20
+ "vendor_key": "Cloudability",
21
+ "id": 10001,
22
+ "vendor_id": 122,
23
+ "created_at": "2012-11-01T00:00:00Z",
24
+ "updated_at": "2012-11-01T00:00:00Z",
25
+ "nickname": "Cloudability",
26
+ "state": "invisible"
27
+ }
28
+ ]
data/test/helper.rb ADDED
@@ -0,0 +1,22 @@
1
+ require 'test/unit'
2
+ require 'turn/autorun'
3
+ require 'shoulda'
4
+ require 'fakeweb'
5
+ require 'matchy'
6
+
7
+ require_relative '../lib/cloudability'
8
+
9
+ FakeWeb.allow_net_connect = false
10
+
11
+ def fixture_file(filename)
12
+ return '' if filename == ''
13
+ file_path = File.expand_path(File.dirname(__FILE__) + '/fixtures/' + filename)
14
+ File.read(file_path)
15
+ end
16
+
17
+ def stub_get(url, filename, status=nil)
18
+ options = {:body => fixture_file(filename)}
19
+ options.merge!({:status => status}) unless status.nil?
20
+
21
+ FakeWeb.register_uri(:get, url, options)
22
+ end
@@ -0,0 +1,55 @@
1
+ require_relative '../../helper'
2
+
3
+ class TestCloudability < Test::Unit::TestCase
4
+ context "Billing :: Hitting the Cloudability Billing API" do
5
+ setup do
6
+ @auth_token = 'xxxxxxxxxxxxxxxxxxxx'
7
+ @report = Cloudability::Billing.new(:auth_token => @auth_token)
8
+
9
+ # The billing API endpoint
10
+ @billing_uri = "https://app.cloudability.com/api/0/billing_reports?auth_token=#{@auth_token}"
11
+ @default_fixture = "billing_report_period.json"
12
+ end
13
+
14
+ # Filter by TODO ::
15
+ # - <filter>= : vendor, service, credential, account
16
+ # - combine filters
17
+ should "return a single period Mash containing spending" do
18
+ period = "2012-11-01"
19
+ uri = "#{@billing_uri}&period=#{period}"
20
+
21
+ stub_get uri, @default_fixture
22
+ single_period = @report.filter_by_period(period)
23
+ single_period.period.should == period
24
+ single_period.spend.should == "4987.99"
25
+ end
26
+
27
+ # Report by TODO ::
28
+ # - by= : service, credential, account
29
+ # - combine filters
30
+
31
+ should "report by period" do
32
+ uri = "#{@billing_uri}&by=period"
33
+ stub_get uri, "billing_report_year.json"
34
+
35
+ billing_report = @report.report_by(:period)
36
+
37
+ billing_report.count.should == 13
38
+ billing_report.first.period.should == "2011-11-01"
39
+ billing_report.last.period.should == "2012-11-01"
40
+ billing_report.last.spend.should == "4987.99"
41
+ end
42
+
43
+ should "report by vendor" do
44
+ uri = "#{@billing_uri}&by=vendor"
45
+ stub_get uri, "billing_report_by-vendor.json"
46
+
47
+ billing_report = @report.report_by(:vendor)
48
+
49
+ billing_report.count.should == 1
50
+ billing_report.first.vendor_name.should == "Amazon"
51
+ billing_report.last.spend.should == "100000.99"
52
+ end
53
+
54
+ end
55
+ end
@@ -0,0 +1,44 @@
1
+ require_relative '../../helper'
2
+
3
+ class TestCloudability < Test::Unit::TestCase
4
+ context "Budgets :: Hitting the Cloudability Budgets API" do
5
+ setup do
6
+ @auth_token = 'xxxxxxxxxxxxxxxxxxxx'
7
+ @budgets = Cloudability::Budgets.new(:auth_token => @auth_token)
8
+
9
+ # The budget API endpoint
10
+ @default_uri = "https://app.cloudability.com/api/1/budgets/index?auth_token=#{@auth_token}"
11
+ @default_fixture = "budgets.json"
12
+ end
13
+
14
+ should "return all budgets in an Array of Mashes" do
15
+ stub_get @default_uri, @default_fixture
16
+ all_budgets = @budgets.find_all
17
+ all_budgets.class.should == Array
18
+ all_budgets.each { |b| b.class.should == Mash }
19
+ end
20
+
21
+ should "return a single budget Mash when calling find with an id" do
22
+ stub_get @default_uri, @default_fixture
23
+ single_budget = @budgets.find_by_id(1234)
24
+ single_budget.subject.should == "1234-5678-90A"
25
+ end
26
+
27
+ should "return a single budget Mash when calling find with a subject" do
28
+ stub_get @default_uri, @default_fixture
29
+ single_budget = @budgets.find_by_subject("1234-5678-90A")
30
+ single_budget.id.should == 1234
31
+ end
32
+
33
+ should "return a single budget Mash when calling find with a key" do
34
+ stub_get @default_uri, @default_fixture
35
+
36
+ single_budget = @budgets.find_by_key({ :key => :id, :value => 1234 })
37
+ single_budget.subject.should == "1234-5678-90A"
38
+
39
+ single_budget = @budgets.find_by_key({ :key => :subject, :value => "1234-5678-90A" })
40
+ single_budget.id.should == 1234
41
+ end
42
+
43
+ end
44
+ end
@@ -0,0 +1,21 @@
1
+ require_relative '../../helper'
2
+
3
+ class TestCloudability < Test::Unit::TestCase
4
+ context "Credentials :: Hitting the Cloudability Credentials API" do
5
+ setup do
6
+ @auth_token = 'xxxxxxxxxxxxxxxxxxxx'
7
+ @credentials = Cloudability::Credentials.new(:auth_token => @auth_token)
8
+
9
+ # The budget API endpoint
10
+ @default_uri = "https://app.cloudability.com/api/0/credentials/index?auth_token=#{@auth_token}"
11
+ @default_fixture = "credentials.json"
12
+ end
13
+
14
+ should "return all credentials in an Array of Mashes" do
15
+ stub_get @default_uri, @default_fixture
16
+ all_credentials = @credentials.find_all
17
+ all_credentials.class.should == Array
18
+ all_credentials.each { |c| c.class.should == Mash }
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,24 @@
1
+ require_relative '../../helper'
2
+
3
+ class TestCloudability < Test::Unit::TestCase
4
+ context "Time Helper :: When using time_helper, it" do
5
+ setup do
6
+ @mock_dt = DateTime.parse("2012-11-02T00:00:00+00:00")
7
+ @real_dt = DateTime.now
8
+ @timehelper = TimeHelper.new
9
+ end
10
+
11
+ should "return the current month in YYYY-MM-01" do
12
+ currrent_month = DateTime.now.strftime("%Y-%m-01")
13
+ @timehelper.current_month.should == currrent_month
14
+ end
15
+
16
+ should "return a Mash with the last three months in YYYY-MM-01" do
17
+ months = @timehelper.last_three_months
18
+ months.current.should == "2012-11-01"
19
+ months.last.should == "2012-10-01"
20
+ months.three.should == "2012-09-01"
21
+ end
22
+
23
+ end
24
+ end
metadata ADDED
@@ -0,0 +1,109 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cloudability
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Aaron Bento
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-11-20 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: httparty
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: mash
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ description: Ruby wrapper for the Cloudability API
47
+ email:
48
+ - abento+github@gmail.com
49
+ executables: []
50
+ extensions: []
51
+ extra_rdoc_files: []
52
+ files:
53
+ - .gitignore
54
+ - Gemfile
55
+ - LICENSE.txt
56
+ - README.md
57
+ - Rakefile
58
+ - cloudability.gemspec
59
+ - lib/cloudability.rb
60
+ - lib/cloudability/billing.rb
61
+ - lib/cloudability/budgets.rb
62
+ - lib/cloudability/credentials.rb
63
+ - lib/cloudability/time_helper.rb
64
+ - lib/cloudability/version.rb
65
+ - test/fixtures/billing_report_by-vendor.json
66
+ - test/fixtures/billing_report_period.json
67
+ - test/fixtures/billing_report_year.json
68
+ - test/fixtures/budgets.json
69
+ - test/fixtures/credentials.json
70
+ - test/helper.rb
71
+ - test/lib/cloudability/test_billing.rb
72
+ - test/lib/cloudability/test_budgets.rb
73
+ - test/lib/cloudability/test_credentials.rb
74
+ - test/lib/cloudability/test_time_helper.rb
75
+ homepage: ''
76
+ licenses: []
77
+ post_install_message:
78
+ rdoc_options: []
79
+ require_paths:
80
+ - lib
81
+ required_ruby_version: !ruby/object:Gem::Requirement
82
+ none: false
83
+ requirements:
84
+ - - ! '>='
85
+ - !ruby/object:Gem::Version
86
+ version: '0'
87
+ required_rubygems_version: !ruby/object:Gem::Requirement
88
+ none: false
89
+ requirements:
90
+ - - ! '>='
91
+ - !ruby/object:Gem::Version
92
+ version: '0'
93
+ requirements: []
94
+ rubyforge_project:
95
+ rubygems_version: 1.8.24
96
+ signing_key:
97
+ specification_version: 3
98
+ summary: Ruby wrapper for the Cloudability API using httparty
99
+ test_files:
100
+ - test/fixtures/billing_report_by-vendor.json
101
+ - test/fixtures/billing_report_period.json
102
+ - test/fixtures/billing_report_year.json
103
+ - test/fixtures/budgets.json
104
+ - test/fixtures/credentials.json
105
+ - test/helper.rb
106
+ - test/lib/cloudability/test_billing.rb
107
+ - test/lib/cloudability/test_budgets.rb
108
+ - test/lib/cloudability/test_credentials.rb
109
+ - test/lib/cloudability/test_time_helper.rb