stellar_base-rails 0.9.6 → 0.10.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f22e8f6b9721b27567e7d2e62fd51c8e2c6b629b070d96e29206604731bdf246
4
- data.tar.gz: e000fba74f9233ca242dd4c30b9c140257e8b7f349525a61dace689372a077f4
3
+ metadata.gz: 6677436084a32e990d54bd12bd420fb59962e1fb89cb7dd23c54c26a2f347095
4
+ data.tar.gz: a7d9291dd36fa0778b4c107484b7e423deb9436ca1a45cb7d7e5a7f8d14a05b8
5
5
  SHA512:
6
- metadata.gz: f9113f82ff8dc5152c0a32c26ffec2b483f1e2ad4cdd3bcd05328d0ac7d8863cb76c9e164c75b25982b4acdad0880068db2a684400db38a2f029663e66c2cf14
7
- data.tar.gz: 27b0f46b04509a9d526f9e5399059b64cbb1d4d735dffa3c9c8007b8d1316da137c37f10229b9946d5d9f43c7845f70851efab31e01741486c9654a9b3e13838
6
+ metadata.gz: 0b868d78007d88685e684881286d10712455f273e46f676d29734ee38e7667f9a037daacc17b7759c953714cf712eb795ee452ab65297df591c4710656625d7d
7
+ data.tar.gz: '06744869debd5c6d71fd38b92e9d2e77bdf8cc65cc8282bd01b6b594591ccd09ceb49e447efc2f5da6eea5ca090fe65ef59e69ce56f37f23853f4e7335407ea5'
@@ -0,0 +1,15 @@
1
+ module StellarBase
2
+ module Balances
3
+ class BalancesPolicy
4
+
5
+ def initialize(_, _)
6
+ end
7
+
8
+ def show?
9
+ StellarBase.included_module?(:balances) &&
10
+ StellarBase.included_module?(:withdraw)
11
+ end
12
+
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,28 @@
1
+ module StellarBase
2
+ module Balances
3
+ module Contracts
4
+ class Show < ApplicationContract
5
+
6
+ property :asset_code
7
+
8
+ validates :asset_code, presence: true
9
+ validate :check_valid_asset_code
10
+
11
+ def check_valid_asset_code
12
+ asset_codes = StellarBase.configuration.withdrawable_assets
13
+ &.map do |asset|
14
+ asset[:asset_code]
15
+ end
16
+
17
+ return if asset_codes.include? asset_code
18
+
19
+ errors.add(
20
+ :asset_code,
21
+ "invalid asset_code. Valid asset_codes: #{asset_codes.join(', ')}",
22
+ )
23
+ end
24
+
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,39 @@
1
+ module StellarBase
2
+ module Balances
3
+ module Operations
4
+ class Show < ApplicationOperation
5
+
6
+ step self::Policy::Pundit(BalancesPolicy, :show?)
7
+ failure :set_policy_error!
8
+ step :setup_model!
9
+ step Contract::Build(constant: Contracts::Show)
10
+ step Contract::Validate(key: :balance)
11
+ step Contract::Persist(method: :sync)
12
+ step :find_asset_details!
13
+ success :set_amount!
14
+
15
+ private
16
+
17
+ def setup_model!(options)
18
+ options["model"] = Balance.new
19
+ end
20
+
21
+ def set_policy_error!(options, params:, **)
22
+ options["result.policy.message"] = "Not authorized to check balances"
23
+ end
24
+
25
+ def find_asset_details!(options, params:, **)
26
+ details = WithdrawalRequests::FindWithdrawableAsset
27
+ .(params[:balance][:asset_code])
28
+ options[:asset_details] = details.presence || {}
29
+ end
30
+
31
+ def set_amount!(options, asset_details:, params:, **)
32
+ options["model"].amount = WithdrawalRequests::DetermineMaxAmount
33
+ .(asset_details[:max_amount_from])
34
+ end
35
+
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,39 @@
1
+ module StellarBase
2
+ class BalancesController < ApplicationController
3
+
4
+ def show
5
+ op = Balances::Operations::Show.(balance: balance_params)
6
+
7
+ respond_to do |f|
8
+ f.json do
9
+ if op.success?
10
+ representer = BalanceRepresenter.new(op["model"])
11
+ render json: representer
12
+ else
13
+ render(
14
+ json: errors_from(op),
15
+ status: :unprocessable_entity,
16
+ )
17
+ end
18
+ end
19
+ end
20
+ end
21
+
22
+ private
23
+
24
+ def errors_from(op)
25
+ unless op["result.policy.default"].success?
26
+ return { errors: op["result.policy.message"] }
27
+ end
28
+
29
+ if op["contract.default"].errors.any?
30
+ return { errors: op["contract.default"].errors }
31
+ end
32
+ end
33
+
34
+ def balance_params
35
+ params.permit(:asset_code).to_hash.with_indifferent_access
36
+ end
37
+
38
+ end
39
+ end
@@ -0,0 +1,17 @@
1
+ module StellarBase
2
+ class Balance
3
+
4
+ include Virtus.model
5
+
6
+ attribute :asset_code, String
7
+ attribute :amount, BigDecimal
8
+
9
+ def self.find(asset_code)
10
+ asset = FindWithdrawableAsset.(asset_code)
11
+
12
+ amount = DetermineMaxAmount.(asset[:max_amount_from])
13
+ new(asset_code: asset_code, amount: amount)
14
+ end
15
+
16
+ end
17
+ end
@@ -0,0 +1,8 @@
1
+ module StellarBase
2
+ class BalanceRepresenter < ApplicationRepresenter
3
+
4
+ property :asset_code
5
+ property :amount
6
+
7
+ end
8
+ end
data/config/routes.rb CHANGED
@@ -2,5 +2,6 @@ StellarBase::Engine.routes.draw do
2
2
  resources :bridge_callbacks, only: [:create], defaults: { format: "json" }
3
3
  get "/withdraw" => "withdraw#create", as: :withdraw
4
4
  get "/deposit" => "deposit#create", as: :deposit
5
+ get "/balance/:asset_code" => "balances#show", as: :balance
5
6
  end
6
7
 
@@ -1,3 +1,3 @@
1
1
  module StellarBase
2
- VERSION = "0.9.6".freeze
2
+ VERSION = "0.10.0".freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stellar_base-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.6
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ace Subido
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-11-07 00:00:00.000000000 Z
11
+ date: 2018-11-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: disposable
@@ -347,6 +347,9 @@ files:
347
347
  - app/assets/stylesheets/stellar_base/application.css
348
348
  - app/concepts/stellar_base/application_contract.rb
349
349
  - app/concepts/stellar_base/application_operation.rb
350
+ - app/concepts/stellar_base/balances/balances_policy.rb
351
+ - app/concepts/stellar_base/balances/contracts/show.rb
352
+ - app/concepts/stellar_base/balances/operations/show.rb
350
353
  - app/concepts/stellar_base/bridge_callbacks/bridge_callback_policy.rb
351
354
  - app/concepts/stellar_base/bridge_callbacks/contracts/create.rb
352
355
  - app/concepts/stellar_base/bridge_callbacks/operations/create.rb
@@ -357,6 +360,7 @@ files:
357
360
  - app/concepts/stellar_base/withdrawal_requests/operations/create.rb
358
361
  - app/concepts/stellar_base/withdrawal_requests/withdrawal_request_policy.rb
359
362
  - app/controllers/stellar_base/application_controller.rb
363
+ - app/controllers/stellar_base/balances_controller.rb
360
364
  - app/controllers/stellar_base/bridge_callbacks_controller.rb
361
365
  - app/controllers/stellar_base/deposit_controller.rb
362
366
  - app/controllers/stellar_base/home_controller.rb
@@ -368,12 +372,14 @@ files:
368
372
  - app/mailers/stellar_base/application_mailer.rb
369
373
  - app/models/stellar_base/account_subscription.rb
370
374
  - app/models/stellar_base/application_record.rb
375
+ - app/models/stellar_base/balance.rb
371
376
  - app/models/stellar_base/bridge_callback.rb
372
377
  - app/models/stellar_base/deposit.rb
373
378
  - app/models/stellar_base/deposit_request.rb
374
379
  - app/models/stellar_base/stellar_toml.rb
375
380
  - app/models/stellar_base/withdrawal_request.rb
376
381
  - app/representers/stellar_base/application_representer.rb
382
+ - app/representers/stellar_base/balance_representer.rb
377
383
  - app/representers/stellar_base/deposit_request_representer.rb
378
384
  - app/representers/stellar_base/withdrawal_request_representer.rb
379
385
  - app/services/stellar_base/account_subscriptions/execute_callback.rb