vault_client 0.0.3 → 0.1.0
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/lib/helpers/http_helpers.rb +45 -0
- data/lib/models/account.rb +13 -0
- data/lib/models/acct_own.rb +31 -0
- data/lib/models/b_event.rb +27 -0
- data/lib/models/billable_unit.rb +5 -2
- data/lib/models/line_item.rb +2 -4
- data/lib/models/report.rb +51 -0
- data/lib/models/res_own.rb +31 -0
- data/lib/models/unit_group.rb +20 -21
- data/lib/presenters/base_presenter.rb +6 -3
- data/lib/presenters/line_item_presenter.rb +27 -45
- data/lib/presenters/report_presenter.rb +10 -4
- data/lib/presenters/unit_group_presenter.rb +21 -36
- data/lib/presenters/unit_presenter.rb +3 -3
- data/lib/services/line_item_builder.rb +1 -1
- data/lib/vault_client.rb +18 -74
- data/readme.md +190 -26
- data/test/models/b_event_test.rb +20 -0
- data/test/models/billable_unit_test.rb +8 -0
- data/test/models/line_item_test.rb +10 -0
- data/test/models/unit_group_test.rb +17 -0
- data/test/presenters/line_item_presenter_test.rb +36 -0
- data/test/presenters/report_presenter_test.rb +10 -4
- data/test/services/line_item_builder_test.rb +9 -5
- data/test/test_helper.rb +4 -6
- metadata +24 -20
- data/lib/billable_events_client.rb +0 -45
- data/lib/dto/billable_event.rb +0 -0
- data/lib/dto/usage_report.rb +0 -35
- data/lib/models/usage_report.rb +0 -21
- data/lib/resource_ownership_client.rb +0 -55
- data/lib/services/report_builder.rb +0 -15
- data/lib/usage_reports_client.rb +0 -28
- data/lib/vault_helper.rb +0 -15
- data/test/models/usage_report_test.rb +0 -38
- data/test/resource_ownership_client_test.rb +0 -42
@@ -0,0 +1,20 @@
|
|
1
|
+
require File.expand_path('../../test_helper', __FILE__)
|
2
|
+
|
3
|
+
class BEventTest < VCTest
|
4
|
+
def test_open
|
5
|
+
our_params = {
|
6
|
+
:hid => "app123",
|
7
|
+
:entity_id => 1,
|
8
|
+
:rate_code => "RT01",
|
9
|
+
:time => Time.utc(2012,1).to_s,
|
10
|
+
:product_name => "web",
|
11
|
+
:qty => 1
|
12
|
+
}
|
13
|
+
api_resp_body = VC::HttpHelpers.enc_json(our_params)
|
14
|
+
VC.url = "http://provider:password@shushu.heroku.com"
|
15
|
+
FakeWeb.register_uri(:put, (VC.url + "/resources/app123/billable_events/1"), :body => api_resp_body)
|
16
|
+
event = VC::BEvent.open(our_params)
|
17
|
+
assert_equal(1, event["entity_id"])
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
@@ -0,0 +1,10 @@
|
|
1
|
+
require File.expand_path('../../test_helper', __FILE__)
|
2
|
+
|
3
|
+
class LineItemTest < VCTest
|
4
|
+
def test_total
|
5
|
+
unit1 = VC::BillableUnit.new("rate" => 10, "qty" => 10)
|
6
|
+
unit_group1 = VC::UnitGroup.new([unit1])
|
7
|
+
line_item = VC::LineItem.new([unit_group1])
|
8
|
+
assert_equal(100, line_item.total)
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require File.expand_path('../../test_helper', __FILE__)
|
2
|
+
|
3
|
+
class UnitGroupTest < VCTest
|
4
|
+
def test_total
|
5
|
+
unit1 = VC::BillableUnit.new("rate" => 10, "qty" => 10)
|
6
|
+
unit_group1 = VC::UnitGroup.new([unit1])
|
7
|
+
assert_equal(100, unit_group1.total)
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_check_rates
|
11
|
+
unit1 = VC::BillableUnit.new("rate" => 10, "qty" => 10)
|
12
|
+
unit2 = VC::BillableUnit.new("rate" => 9, "qty" => 10)
|
13
|
+
unit_group1 = VC::UnitGroup.new([unit1])
|
14
|
+
unit_group2 = VC::UnitGroup.new([unit2])
|
15
|
+
assert_raises(VC::UnitGroup::InvalidUnitGroup) {VC::UnitGroup.new([unit1, unit2])}
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require File.expand_path('../../test_helper', __FILE__)
|
2
|
+
|
3
|
+
class LineItemPresenterTest < VCTest
|
4
|
+
def test_unit_group_total
|
5
|
+
unit1 = VC::BillableUnit.new("rate" => 1000, "qty" => 10, "product_group" => "dyno")
|
6
|
+
unit_group1 = VC::UnitGroup.new([unit1])
|
7
|
+
line_item = VC::LineItem.new([unit_group1])
|
8
|
+
lip = VC::LineItemPresenter.new(line_item)
|
9
|
+
assert_equal("100.00", lip.unit_group_total("dyno"))
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_unit_group_qty
|
13
|
+
unit1 = VC::BillableUnit.new("rate" => 1000, "qty" => 10, "product_group" => "dyno")
|
14
|
+
unit2 = VC::BillableUnit.new("rate" => 1000, "qty" => 1, "product_group" => "dyno")
|
15
|
+
unit_group1 = VC::UnitGroup.new([unit1, unit2])
|
16
|
+
line_item = VC::LineItem.new([unit_group1])
|
17
|
+
lip = VC::LineItemPresenter.new(line_item)
|
18
|
+
assert_equal("11.000", lip.unit_group_qty("dyno"))
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_unit_group_presenters
|
22
|
+
unit1 = VC::BillableUnit.new("product_group" => "dyno")
|
23
|
+
unit2 = VC::BillableUnit.new("product_group" => "dyno")
|
24
|
+
unit3 = VC::BillableUnit.new("product_group" => "addon")
|
25
|
+
unit_group1 = VC::UnitGroup.new([unit1, unit2])
|
26
|
+
unit_group2 = VC::UnitGroup.new([unit3])
|
27
|
+
line_item = VC::LineItem.new([unit_group1, unit_group2])
|
28
|
+
lip = VC::LineItemPresenter.new(line_item)
|
29
|
+
|
30
|
+
assert_equal(2, lip.unit_group_presenters.length)
|
31
|
+
assert_equal(1, lip.unit_group_presenters("dyno").map(&:product_group).uniq.length)
|
32
|
+
assert_equal("addon", lip.unit_group_presenters("addon").map(&:product_group).uniq.first)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
|
@@ -1,16 +1,22 @@
|
|
1
1
|
require File.expand_path('../../test_helper', __FILE__)
|
2
2
|
|
3
|
-
class ReportPresenterTest <
|
3
|
+
class ReportPresenterTest < VCTest
|
4
|
+
|
5
|
+
def report
|
6
|
+
VC::Report.new.tap do |r|
|
7
|
+
r.billable_units = Fixtures.billable_units.map {|h| VC::BillableUnit.new(h)}
|
8
|
+
end
|
9
|
+
end
|
4
10
|
|
5
11
|
def test_init
|
6
|
-
presenter =
|
12
|
+
presenter = VC::ReportPresenter.new(report)
|
7
13
|
assert(!presenter.nil?)
|
8
14
|
end
|
9
15
|
|
10
16
|
def test_returns_line_item_presenters
|
11
|
-
presenter =
|
17
|
+
presenter = VC::ReportPresenter.new(report)
|
12
18
|
lip = presenter.line_item_presenters
|
13
|
-
assert_equal(
|
19
|
+
assert_equal(VC::LineItemPresenter, lip.first.class)
|
14
20
|
end
|
15
21
|
|
16
22
|
end
|
@@ -1,24 +1,28 @@
|
|
1
1
|
require File.expand_path('../../test_helper', __FILE__)
|
2
2
|
|
3
|
-
class LineItemBuilderTest <
|
3
|
+
class LineItemBuilderTest < VCTest
|
4
|
+
|
5
|
+
def units
|
6
|
+
Fixtures.billable_units.map {|h| VC::BillableUnit.new(h)}
|
7
|
+
end
|
4
8
|
|
5
9
|
def test_build
|
6
|
-
line_items =
|
10
|
+
line_items = VC::LineItemBuilder.build(units)
|
7
11
|
assert(!line_items.nil?)
|
8
12
|
end
|
9
13
|
|
10
14
|
def test_build_creates_line_item_by_hid
|
11
|
-
line_items =
|
15
|
+
line_items = VC::LineItemBuilder.build(units)
|
12
16
|
assert_equal(1, line_items.length)
|
13
17
|
end
|
14
18
|
|
15
19
|
def test_build_creates_one_unit_group_for_line_item
|
16
|
-
line_item =
|
20
|
+
line_item = VC::LineItemBuilder.build(units).pop
|
17
21
|
assert_equal(1, line_item.unit_groups.length)
|
18
22
|
end
|
19
23
|
|
20
24
|
def test_build_puts_both_units_on_unit_group
|
21
|
-
line_item =
|
25
|
+
line_item = VC::LineItemBuilder.build(units).pop
|
22
26
|
unit_group = line_item.unit_groups.pop
|
23
27
|
assert_equal(2, unit_group.units.length)
|
24
28
|
end
|
data/test/test_helper.rb
CHANGED
@@ -8,14 +8,12 @@ require "bundler"
|
|
8
8
|
Bundler.require(:default, :test)
|
9
9
|
|
10
10
|
require "minitest/autorun"
|
11
|
-
require "webmock/minitest"
|
12
11
|
require "vault_client"
|
12
|
+
require 'fakeweb'
|
13
13
|
require "fixtures"
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
def units
|
18
|
-
Fixtures.billable_units.map{|h| VaultClient::BillableUnit.new(h)}
|
19
|
-
end
|
15
|
+
puts "Blocking network connectivity"
|
16
|
+
FakeWeb.allow_net_connect = false
|
20
17
|
|
18
|
+
class VCTest < MiniTest::Unit::TestCase
|
21
19
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vault_client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-12-
|
12
|
+
date: 2011-12-29 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rest-client
|
16
|
-
requirement: &
|
16
|
+
requirement: &10827140 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 1.6.7
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *10827140
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: yajl-ruby
|
27
|
-
requirement: &
|
27
|
+
requirement: &10826660 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,7 +32,7 @@ dependencies:
|
|
32
32
|
version: 1.1.0
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *10826660
|
36
36
|
description: A ruby wrapper around The Vault's HTTP API.
|
37
37
|
email: ryan@heroku.com
|
38
38
|
executables: []
|
@@ -40,31 +40,32 @@ extensions: []
|
|
40
40
|
extra_rdoc_files: []
|
41
41
|
files:
|
42
42
|
- readme.md
|
43
|
-
- lib/dto/billable_event.rb
|
44
|
-
- lib/dto/usage_report.rb
|
45
43
|
- lib/presenters/base_presenter.rb
|
46
44
|
- lib/presenters/unit_presenter.rb
|
47
45
|
- lib/presenters/unit_group_presenter.rb
|
48
46
|
- lib/presenters/report_presenter.rb
|
49
47
|
- lib/presenters/line_item_presenter.rb
|
50
|
-
- lib/usage_reports_client.rb
|
51
48
|
- lib/vault_client.rb
|
49
|
+
- lib/models/account.rb
|
50
|
+
- lib/models/acct_own.rb
|
51
|
+
- lib/models/report.rb
|
52
52
|
- lib/models/unit_group.rb
|
53
53
|
- lib/models/line_item.rb
|
54
|
-
- lib/models/
|
54
|
+
- lib/models/res_own.rb
|
55
|
+
- lib/models/b_event.rb
|
55
56
|
- lib/models/billable_unit.rb
|
56
|
-
- lib/
|
57
|
-
- lib/vault_helper.rb
|
57
|
+
- lib/helpers/http_helpers.rb
|
58
58
|
- lib/services/line_item_builder.rb
|
59
|
-
-
|
60
|
-
- lib/resource_ownership_client.rb
|
59
|
+
- test/presenters/line_item_presenter_test.rb
|
61
60
|
- test/presenters/report_presenter_test.rb
|
62
61
|
- test/fixtures.rb
|
63
|
-
- test/models/
|
64
|
-
- test/
|
62
|
+
- test/models/billable_unit_test.rb
|
63
|
+
- test/models/b_event_test.rb
|
64
|
+
- test/models/unit_group_test.rb
|
65
|
+
- test/models/line_item_test.rb
|
65
66
|
- test/services/line_item_builder_test.rb
|
66
67
|
- test/test_helper.rb
|
67
|
-
homepage: http://github.com/heroku/
|
68
|
+
homepage: http://github.com/heroku/vc
|
68
69
|
licenses: []
|
69
70
|
post_install_message:
|
70
71
|
rdoc_options: []
|
@@ -87,9 +88,12 @@ rubyforge_project:
|
|
87
88
|
rubygems_version: 1.8.10
|
88
89
|
signing_key:
|
89
90
|
specification_version: 3
|
90
|
-
summary: The Vault
|
91
|
+
summary: The Vault Client
|
91
92
|
test_files:
|
93
|
+
- test/presenters/line_item_presenter_test.rb
|
92
94
|
- test/presenters/report_presenter_test.rb
|
93
|
-
- test/models/
|
94
|
-
- test/
|
95
|
+
- test/models/billable_unit_test.rb
|
96
|
+
- test/models/b_event_test.rb
|
97
|
+
- test/models/unit_group_test.rb
|
98
|
+
- test/models/line_item_test.rb
|
95
99
|
- test/services/line_item_builder_test.rb
|
@@ -1,45 +0,0 @@
|
|
1
|
-
module BillableEventsClient
|
2
|
-
extend self
|
3
|
-
extend VaultHelper
|
4
|
-
|
5
|
-
Open = "open"
|
6
|
-
Close = "close"
|
7
|
-
|
8
|
-
def make_request(action, args)
|
9
|
-
case action
|
10
|
-
when :open
|
11
|
-
open(args)
|
12
|
-
when :close
|
13
|
-
close(args)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
def open(args)
|
18
|
-
assert_args!(args, :hid, :event_id, :qty, :time, :rate_code)
|
19
|
-
res = resource(args[:hid], args[:event_id])
|
20
|
-
res.put(
|
21
|
-
:qty => args[:qty],
|
22
|
-
:time => encode_time(args[:time]),
|
23
|
-
:state => Open,
|
24
|
-
:rate_code => args[:rate_code],
|
25
|
-
:product_name => args[:product_name]
|
26
|
-
)
|
27
|
-
end
|
28
|
-
|
29
|
-
def close(args)
|
30
|
-
assert_args!(args, :hid, :event_id, :time, :rate_code)
|
31
|
-
res = resource(args[:hid], args[:event_id])
|
32
|
-
res.put(
|
33
|
-
:time => encode_time(args[:time]),
|
34
|
-
:state => Close,
|
35
|
-
:rate_code => args[:rate_code]
|
36
|
-
)
|
37
|
-
end
|
38
|
-
|
39
|
-
def resource(hid, event_id)
|
40
|
-
url = VaultClient.url
|
41
|
-
url += "/resources/#{hid}/billable_events/#{event_id}"
|
42
|
-
RestClient::Resource.new(url, :headers => {:accept => "application/json"})
|
43
|
-
end
|
44
|
-
|
45
|
-
end
|
data/lib/dto/billable_event.rb
DELETED
File without changes
|
data/lib/dto/usage_report.rb
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
require 'yajl/http_stream'
|
2
|
-
module VaultClient
|
3
|
-
module DataTransferObject
|
4
|
-
module UsageReport
|
5
|
-
extend VaultHelper
|
6
|
-
extend self
|
7
|
-
|
8
|
-
def make_request(action, args)
|
9
|
-
case action
|
10
|
-
when :query
|
11
|
-
query(args)
|
12
|
-
else
|
13
|
-
raise "Unkown Action"
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
def query(args)
|
18
|
-
assert_args!(args, :account_id, :from, :to)
|
19
|
-
#res = resource(args[:account_id])
|
20
|
-
#Yajl::Parser.parse(res.get(:params => {:from => encode_time(args[:from]), :to => encode_time(args[:to])}))
|
21
|
-
data = []
|
22
|
-
uri = URI.parse([VaultClient.url, "/accounts/#{args[:account_id]}/usage_reports?from=#{args[:from]}&to=#{args[:to]}"].join)
|
23
|
-
Yajl::HttpStream.get(uri) {|c| data << c}
|
24
|
-
data
|
25
|
-
end
|
26
|
-
|
27
|
-
def resource(account_id)
|
28
|
-
url = VaultClient.url.dup
|
29
|
-
url << "/accounts/#{account_id}/usage_reports"
|
30
|
-
RestClient::Resource.new(url, :headers => {:accept => "application/json"})
|
31
|
-
end
|
32
|
-
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
data/lib/models/usage_report.rb
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
module VaultClient
|
2
|
-
class UsageReport
|
3
|
-
|
4
|
-
attr_accessor(
|
5
|
-
:account_id,
|
6
|
-
:from,
|
7
|
-
:to,
|
8
|
-
:billable_units,
|
9
|
-
:total
|
10
|
-
)
|
11
|
-
|
12
|
-
def initialize(account_id, from, to, billable_units, total)
|
13
|
-
@account_id = from
|
14
|
-
@from = from
|
15
|
-
@to = to
|
16
|
-
@billable_units = billable_units
|
17
|
-
@total = total
|
18
|
-
end
|
19
|
-
|
20
|
-
end
|
21
|
-
end
|
@@ -1,55 +0,0 @@
|
|
1
|
-
module ResourceOwnershipClient
|
2
|
-
extend self
|
3
|
-
extend VaultHelper
|
4
|
-
|
5
|
-
def make_request(action, args)
|
6
|
-
case action
|
7
|
-
when :activate
|
8
|
-
activate(args)
|
9
|
-
when :transfer
|
10
|
-
transfer(args)
|
11
|
-
when :deactivate
|
12
|
-
deactivate(args)
|
13
|
-
when :query
|
14
|
-
query(args)
|
15
|
-
else
|
16
|
-
raise(ArgumentError, "Resource Ownership API does not respond to #{action}")
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
def activate(args)
|
21
|
-
assert_args!(args, :account_id, :event_id, :hid, :time)
|
22
|
-
res = resource(args[:account_id], args[:event_id])
|
23
|
-
res.post(:hid => args[:hid], :time => encode_time(args[:time]))
|
24
|
-
end
|
25
|
-
|
26
|
-
def transfer(args)
|
27
|
-
assert_args!(args, :account_id, :prev_account_id, :event_id, :prev_event_id, :hid, :time)
|
28
|
-
res = resource(args[:prev_account_id], args[:prev_event_id])
|
29
|
-
res.put(:account_id => args[:account_id], :event_id => args[:event_id], :hid => args[:hid], :time => encode_time(args[:time]))
|
30
|
-
end
|
31
|
-
|
32
|
-
def deactivate(args)
|
33
|
-
assert_args!(args, :account_id, :event_id, :hid, :time)
|
34
|
-
res = resource(args[:account_id])["#{args[:event_id]}?hid=#{args[:hid]}&time=#{encode_time(args[:time])}"]
|
35
|
-
res.delete
|
36
|
-
end
|
37
|
-
|
38
|
-
def query(args)
|
39
|
-
assert_args!(args, :account_id)
|
40
|
-
res = resource(args[:account_id])
|
41
|
-
res.get
|
42
|
-
end
|
43
|
-
|
44
|
-
def resource(account_id, event_id=nil)
|
45
|
-
url = VaultClient.url.dup
|
46
|
-
url << "/accounts/#{account_id}/resource_ownerships"
|
47
|
-
if event_id
|
48
|
-
url << "/#{event_id}"
|
49
|
-
end
|
50
|
-
@resource ||= begin
|
51
|
-
RestClient::Resource.new(url, :headers => {:accept => "application/json"})
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
end
|