Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 11 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,38 +34,38 @@ gem install cgrates
```ruby
client = CGRateS::Client.new(host: "http://localhost:2080")
client.ping
# => #<data Response id="90ca9f67-0fc3-43a3-8856-7ce9209c668b", result="Pong">
# => #<data CGRateS::Response id="90ca9f67-0fc3-43a3-8856-7ce9209c668b", result="Pong">

client.set_tp_destination(tp_id: "cgrates_client_test", id: "Cambodia_Mobile", prefixes: ["85510", "85512", "85597"])
# => #<data Response id="875efcee-b480-4268-a41f-b5946d68597b", result="OK">
# => #<data CGRateS::Response id="875efcee-b480-4268-a41f-b5946d68597b", result="OK">

client.get_tp_destination(tp_id: "cgrates_client_test", id: "Cambodia_Mobile")
# => #<data Response id="3dccb2d6-8020-4891-bc21-ff954425bb0d", result={"TPid" => "cgrates_client_test", "ID" => "Cambodia_Mobile", "Prefixes" => ["85510", "85512", "85597"]}>
# => #<data CGRateS::Response id="3dccb2d6-8020-4891-bc21-ff954425bb0d", result={"TPid" => "cgrates_client_test", "ID" => "Cambodia_Mobile", "Prefixes" => ["85510", "85512", "85597"]}>

client.set_tp_rate(tp_id: "cgrates_client_test", id: "Cambodia_Mobile", rate_slots: [{ rate: 0.05, rate_unit: "60s", rate_increment: "60s" }])
# => #<data Response id="0ae676c9-b12b-4da3-a2e2-bd7ae7c941da", result="OK">
# => #<data CGRateS::Response id="0ae676c9-b12b-4da3-a2e2-bd7ae7c941da", result="OK">

client.get_tp_rate(tp_id: "cgrates_client_test", id: "Cambodia_Mobile")
# =>
# #<data Response
# #<data CGRateS::Response
# # id="10091598-fddb-4d55-8914-5e693a731dc5",
# # result={"TPid" => "cgrates_client_test", "ID" => "Cambodia_Mobile", "RateSlots" => [{"ConnectFee" => 0, "Rate" => 0.05, "RateUnit" => "60s", "RateIncrement" => "60s", "GroupIntervalStart" => ""}]}>

client.set_tp_destination_rate(tp_id: "cgrates_client_test", id: "Cambodia_Mobile", destination_rates: [{rounding_decimals: 4, rate_id: "Cambodia_Mobile", destination_id: "Cambodia_Mobile", rounding_method: "*up" }])
# => #<data Response id="b3c02025-d2d3-430f-981f-cc4065a278e5", result="OK">
# => #<data CGRateS::Response id="b3c02025-d2d3-430f-981f-cc4065a278e5", result="OK">

client.get_tp_destination_rate(tp_id: "cgrates_client_test", id: "Cambodia_Mobile")
#<data Response
#<data CGRateS::Response
# id="67c7972f-e059-43c3-8cd8-c61471c2c624",
# result=
# {"TPid" => "cgrates_client_test",
# "ID" => "Cambodia_Mobile",
# "DestinationRates" => [{"DestinationId" => "Cambodia_Mobile", "RateId" => "Cambodia_Mobile", "Rate" => nil, "RoundingMethod" => "*up", "RoundingDecimals" => 4, "MaxCost" => 0, "MaxCostStrategy" => ""}]}>
client.set_tp_rating_plan(tp_id: "cgrates_client_test", id: "Test_Rating_Plan", rating_plan_bindings: [{ weight: 10, timing_id: "*any", destination_rates_id: "Cambodia_Mobile" }])
# => #<data Response id="f7e9232d-1c5a-42e8-bfb6-072ae1124698", result="OK">
# => #<data CGRateS::Response id="f7e9232d-1c5a-42e8-bfb6-072ae1124698", result="OK">

client.get_tp_rating_plan(tp_id: "cgrates_client_test", id: "Test_Rating_Plan")
# => <data Response
# => <data CGRateS::Response
# id="ee134421-01dd-4a6b-b7a4-ee9980dc466e",
# result={"TPid" => "cgrates_client_test", "ID" => "Test_Rating_Plan", "RatingPlanBindings" => [{"DestinationRatesId" => "Cambodia_Mobile", "TimingId" => "*any", "Weight" => 10}]}>

Expand All @@ -83,7 +83,7 @@ client.set_tp_rating_profile(
}
]
)
#=> #<data Response id="4827cf6e-54e2-4699-8801-d73b34b8331e", result="OK">
#=> #<data CGRateS::Response id="4827cf6e-54e2-4699-8801-d73b34b8331e", result="OK">

client.get_tp_rating_profile(
tp_id: "cgrates_client_test",
Expand All @@ -92,7 +92,7 @@ client.get_tp_rating_profile(
category: "call",
subject: "my-account"
)
# => #<data Response
# => #<data CGRateS::Response
# id="210b6cc6-e7be-4a3f-b657-0c5e5f0666b2",
# result=
# {"TPid" => "cgrates_client_test",
Expand Down
36 changes: 36 additions & 0 deletions lib/cgrates/client.rb
Original file line number Diff line number Diff line change
Expand Up @@ -183,8 +183,44 @@ def load_tariff_plan_from_stor_db(tp_id:, dry_run: false, validate: true, **)
)
end

def add_balance(**)
balance_request("APIerSv1.AddBalance", **)
end

def debit_balance(**)
balance_request("APIerSv1.DebitBalance", **)
end

private

def balance_request(method, account:, tenant:, balance_type:, value:, balance:, overwrite: false, action_extra_data: {}, cdrlog: false, **)
api_request(
method,
{
"Account" => account,
"Tenant" => tenant,
"BalanceType" => balance_type,
"Value" => value,
"Balance" => {
"ID" => balance[:id],
"ExpiryTime" => balance.fetch(:expiry_time, "*unlimited"),
"RatingSubject" => balance[:rating_subject],
"Categories" => balance[:categories],
"DestinationIDs" => balance.fetch(:destination_ids, "*any"),
"TimingIDs" => balance[:timing_ids],
"Weight" => balance.fetch(:weight, 10),
"SharedGroups" => balance[:shared_groups],
"Blocker" => balance.fetch(:blocker, false),
"Disabled" => balance.fetch(:disabled, false)
},
"ActionExtraData" => action_extra_data,
"Overwrite" => overwrite,
"Cdrlog" => cdrlog,
**
}
)
end

def api_request(method, *params)
response = http_client.post(
jsonrpc_endpoint,
Expand Down
4 changes: 3 additions & 1 deletion lib/cgrates/response.rb
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
Response = Data.define(:id, :result)
module CGRateS
Response = Data.define(:id, :result)
end
24 changes: 24 additions & 0 deletions spec/cgrates/client_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -392,6 +392,30 @@ module CGRateS
end
end

describe "#add_balance" do
it "executes the request" do
client = build_client

stub_api_request(result: "OK")
response = client.add_balance(account: "sample-account-sid", tenant: "cgrates.org", balance_type: "credit", value: 100, balance: { uuid: "123", id: "456" })

expect(response).to have_attributes(result: "OK")
expect(WebMock).to have_requested_api_method("APIerSv1.AddBalance")
end
end

describe "#debit_balance" do
it "executes the request" do
client = build_client

stub_api_request(result: "OK")
response = client.debit_balance(account: "sample-account-sid", tenant: "cgrates.org", balance_type: "credit", value: 100, balance: { uuid: "123", id: "456" })

expect(response).to have_attributes(result: "OK")
expect(WebMock).to have_requested_api_method("APIerSv1.DebitBalance")
end
end

it "handles invalid http responses" do
client = build_client
stub_api_request(status: 500)
Expand Down