iron_bank 0.1.0 → 0.7.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (85) hide show
  1. checksums.yaml +5 -5
  2. data/.env.example +7 -0
  3. data/.github/CODEOWNERS +1 -0
  4. data/.github/PULL_REQUEST_TEMPLATE.md +20 -0
  5. data/.gitignore +6 -1
  6. data/.reek +95 -0
  7. data/.rspec +1 -2
  8. data/.rubocop.yml +55 -0
  9. data/.travis.yml +22 -3
  10. data/Gemfile +3 -3
  11. data/LICENSE +176 -0
  12. data/README.md +133 -0
  13. data/Rakefile +39 -3
  14. data/bin/console +13 -1
  15. data/bin/setup +1 -0
  16. data/iron_bank.gemspec +34 -10
  17. data/lib/generators/iron_bank/install/install_generator.rb +20 -0
  18. data/lib/generators/iron_bank/install/templates/README +16 -0
  19. data/lib/generators/iron_bank/install/templates/iron_bank.rb +29 -0
  20. data/lib/iron_bank/action.rb +39 -0
  21. data/lib/iron_bank/actions/amend.rb +16 -0
  22. data/lib/iron_bank/actions/create.rb +19 -0
  23. data/lib/iron_bank/actions/delete.rb +19 -0
  24. data/lib/iron_bank/actions/execute.rb +21 -0
  25. data/lib/iron_bank/actions/generate.rb +19 -0
  26. data/lib/iron_bank/actions/query.rb +16 -0
  27. data/lib/iron_bank/actions/query_more.rb +21 -0
  28. data/lib/iron_bank/actions/subscribe.rb +32 -0
  29. data/lib/iron_bank/actions/update.rb +19 -0
  30. data/lib/iron_bank/associations.rb +73 -0
  31. data/lib/iron_bank/authentication.rb +37 -0
  32. data/lib/iron_bank/authentications/cookie.rb +80 -0
  33. data/lib/iron_bank/authentications/token.rb +82 -0
  34. data/lib/iron_bank/cacheable.rb +52 -0
  35. data/lib/iron_bank/client.rb +96 -0
  36. data/lib/iron_bank/collection.rb +31 -0
  37. data/lib/iron_bank/configuration.rb +86 -0
  38. data/lib/iron_bank/csv.rb +29 -0
  39. data/lib/iron_bank/describe/field.rb +65 -0
  40. data/lib/iron_bank/describe/object.rb +81 -0
  41. data/lib/iron_bank/describe/related.rb +40 -0
  42. data/lib/iron_bank/describe/tenant.rb +50 -0
  43. data/lib/iron_bank/endpoint.rb +36 -0
  44. data/lib/iron_bank/error.rb +45 -0
  45. data/lib/iron_bank/instrumentation.rb +14 -0
  46. data/lib/iron_bank/local.rb +72 -0
  47. data/lib/iron_bank/local_records.rb +52 -0
  48. data/lib/iron_bank/logger.rb +23 -0
  49. data/lib/iron_bank/metadata.rb +36 -0
  50. data/lib/iron_bank/object.rb +89 -0
  51. data/lib/iron_bank/open_tracing.rb +17 -0
  52. data/lib/iron_bank/operation.rb +33 -0
  53. data/lib/iron_bank/operations/billing_preview.rb +16 -0
  54. data/lib/iron_bank/query_builder.rb +72 -0
  55. data/lib/iron_bank/queryable.rb +55 -0
  56. data/lib/iron_bank/resource.rb +70 -0
  57. data/lib/iron_bank/resources/account.rb +62 -0
  58. data/lib/iron_bank/resources/amendment.rb +13 -0
  59. data/lib/iron_bank/resources/catalog_tiers/discount_amount.rb +26 -0
  60. data/lib/iron_bank/resources/catalog_tiers/discount_percentage.rb +26 -0
  61. data/lib/iron_bank/resources/catalog_tiers/price.rb +26 -0
  62. data/lib/iron_bank/resources/contact.rb +13 -0
  63. data/lib/iron_bank/resources/export.rb +11 -0
  64. data/lib/iron_bank/resources/import.rb +12 -0
  65. data/lib/iron_bank/resources/invoice.rb +37 -0
  66. data/lib/iron_bank/resources/invoice_adjustment.rb +13 -0
  67. data/lib/iron_bank/resources/invoice_item.rb +25 -0
  68. data/lib/iron_bank/resources/invoice_payment.rb +13 -0
  69. data/lib/iron_bank/resources/payment.rb +17 -0
  70. data/lib/iron_bank/resources/payment_method.rb +14 -0
  71. data/lib/iron_bank/resources/product.rb +14 -0
  72. data/lib/iron_bank/resources/product_rate_plan.rb +32 -0
  73. data/lib/iron_bank/resources/product_rate_plan_charge.rb +27 -0
  74. data/lib/iron_bank/resources/product_rate_plan_charge_tier.rb +60 -0
  75. data/lib/iron_bank/resources/rate_plan.rb +21 -0
  76. data/lib/iron_bank/resources/rate_plan_charge.rb +30 -0
  77. data/lib/iron_bank/resources/rate_plan_charge_tier.rb +26 -0
  78. data/lib/iron_bank/resources/subscription.rb +28 -0
  79. data/lib/iron_bank/resources/usage.rb +16 -0
  80. data/lib/iron_bank/response/raise_error.rb +16 -0
  81. data/lib/iron_bank/schema.rb +58 -0
  82. data/lib/iron_bank/utils.rb +59 -0
  83. data/lib/iron_bank/version.rb +4 -1
  84. data/lib/iron_bank.rb +152 -2
  85. metadata +300 -12
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module IronBank
4
+ module Resources
5
+ # Many-to-many relationship between invoices and payments.
6
+ #
7
+ class InvoicePayment < Resource
8
+ with_schema
9
+ with_one :invoice
10
+ with_one :payment
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module IronBank
4
+ module Resources
5
+ # A payment belongs to an account and is applied against one or many
6
+ # invoices and/or the account credit balance.
7
+ #
8
+ class Payment < Resource
9
+ with_schema
10
+
11
+ with_one :account
12
+ with_one :payment_method
13
+
14
+ with_many :invoice_payments
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module IronBank
4
+ module Resources
5
+ # An electronic payment method, belongs to an account, can be set as the
6
+ # default payment method on an account to enable auto-pay through payment
7
+ # runs.
8
+ #
9
+ class PaymentMethod < Resource
10
+ with_schema
11
+ with_one :account
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module IronBank
4
+ module Resources
5
+ # A Zuora product holds many product rate plans.
6
+ #
7
+ class Product < Resource
8
+ with_schema
9
+ with_local_records
10
+ with_cache
11
+ with_many :product_rate_plans, aka: :plans
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module IronBank
4
+ module Resources
5
+ # A product rate plan belongs to a product and holds many product rate plan
6
+ # charges. It represents what a customer is subscribing to.
7
+ #
8
+ class ProductRatePlan < Resource
9
+ # Zuora limitation: we cannot query for `ActiveCurrencies` with any other
10
+ # fields, so instead we define a separate `#active_currencies` method.
11
+ def self.exclude_fields
12
+ %w[ActiveCurrencies]
13
+ end
14
+ with_schema
15
+ with_local_records
16
+ with_cache
17
+
18
+ with_one :product
19
+ with_many :product_rate_plan_charges, aka: :charges
20
+
21
+ def active_currencies
22
+ query_string = IronBank::QueryBuilder.zoql(
23
+ self.class.object_name,
24
+ ['ActiveCurrencies'],
25
+ id: id
26
+ )
27
+
28
+ IronBank.client.query(query_string)
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module IronBank
4
+ module Resources
5
+ # A product rate plan charge can be a one-time, recurring or usage-based
6
+ # charge. It belongs to a product rate plan and can have many tiers when
7
+ # using a Volume or Tiered pricing model.
8
+ #
9
+ # NOTE: if multiple currencies are enabled for your Zuora tenant, then there
10
+ # is *at least* one tier per active currency.
11
+ #
12
+ class ProductRatePlanCharge < Resource
13
+ # `DiscountClass` seems to not be a queryable field, despite the result
14
+ # from the describe call for product rate plan charge.
15
+ def self.exclude_fields
16
+ %w[DiscountClass]
17
+ end
18
+ with_schema
19
+ with_local_records
20
+ with_cache
21
+
22
+ with_one :product_rate_plan, aka: :plan
23
+
24
+ with_many :product_rate_plan_charge_tiers, aka: :tiers
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,60 @@
1
+ # frozen_string_literal: true
2
+
3
+ module IronBank
4
+ module Resources
5
+ # A tier holds an amount (cost) and a currency for a given product rate plan
6
+ # charge.
7
+ #
8
+ class ProductRatePlanChargeTier < Resource
9
+ with_schema
10
+ with_local_records
11
+ with_cache
12
+
13
+ with_one :product_rate_plan_charge, aka: :charge
14
+
15
+ def self.where(conditions)
16
+ # If we are coming from a subclass, defer to Queryable#all
17
+ return super unless name.end_with?('ProductRatePlanChargeTier')
18
+
19
+ CatalogTiers.constants.map do |tier_klass|
20
+ CatalogTiers.const_get(tier_klass).where(conditions)
21
+ end.flatten
22
+ end
23
+
24
+ def self.find_each
25
+ return enum_for(:find_each) unless block_given?
26
+ return super unless name.end_with?('ProductRatePlanChargeTier')
27
+
28
+ CatalogTiers.constants.each do |tier_klass|
29
+ # Pass the block to each subclasses
30
+ CatalogTiers.const_get(tier_klass).find_each(&Proc.new)
31
+ end
32
+ end
33
+
34
+ # We want to store all fields to the CSV, not just the ones that can be
35
+ # queried through Zuora, for all the different tiers (discount-percentage,
36
+ # discount-fixed amount and regular pricing).
37
+ def to_csv_row
38
+ ProductRatePlanChargeTier.fields.each.with_object([]) do |field, row|
39
+ row << remote[field]
40
+ end
41
+ end
42
+
43
+ def self.load_records
44
+ CSV.foreach(file_path, csv_options).with_object({}) do |row, store|
45
+ remote = row.to_h.reject { |_, value| value.nil? }
46
+
47
+ record = if remote['DiscountAmount']
48
+ CatalogTiers::DiscountAmount.new(remote)
49
+ elsif remote['DiscountPercentage']
50
+ CatalogTiers::DiscountPercentage.new(remote)
51
+ else
52
+ CatalogTiers::Price.new(remote)
53
+ end
54
+
55
+ store[row['Id']] = record
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module IronBank
4
+ module Resources
5
+ # A rate plan belongs to a subscription and is a copy of the associated
6
+ # product rate plan from the catalog at the time of the subscription.
7
+ #
8
+ class RatePlan < Resource
9
+ with_schema
10
+ with_cache
11
+
12
+ with_one :amendment
13
+ with_one :product_rate_plan, aka: :catalog_plan
14
+ with_one :subscription
15
+
16
+ with_many :rate_plan_charges,
17
+ aka: :charges,
18
+ conditions: { is_last_segment: true }
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module IronBank
4
+ module Resources
5
+ # A rate plan charge belongs to a subscription rate plan.
6
+ #
7
+ class RatePlanCharge < Resource
8
+ def self.exclude_fields
9
+ %w[
10
+ DiscountAmount
11
+ DiscountClass
12
+ DiscountPercentage
13
+ IncludedUnits
14
+ OveragePrice
15
+ Price
16
+ RevenueRecognitionRuleName
17
+ RolloverBalance
18
+ ]
19
+ end
20
+ with_schema
21
+ with_cache
22
+
23
+ with_one :original, resource_name: 'RatePlanCharge'
24
+ with_one :product_rate_plan_charge, aka: :catalog_charge
25
+ with_one :rate_plan, aka: :plan
26
+
27
+ with_many :rate_plan_charge_tiers, aka: :tiers
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module IronBank
4
+ module Resources
5
+ # A rate plan charge tier hold the price per unit the customer will be
6
+ # billed for, in his/her currency.
7
+ #
8
+ class RatePlanChargeTier < Resource
9
+ # Excluding 'DiscountAmount' & 'DiscountPercentage', as Zuora stores these
10
+ # values in the 'Price' field.
11
+ def self.exclude_fields
12
+ %w[
13
+ Currency
14
+ DiscountAmount
15
+ DiscountPercentage
16
+ IncludedUnits
17
+ OveragePrice
18
+ ]
19
+ end
20
+ with_schema
21
+ with_cache
22
+
23
+ with_one :rate_plan_charge, aka: :charge
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module IronBank
4
+ module Resources
5
+ # A Zuora subscription, belongs to an account, holds rate plans and is
6
+ # versioned through each amendment.
7
+ #
8
+ class Subscription < Resource
9
+ with_schema
10
+ with_cache
11
+
12
+ with_one :account
13
+ with_one :invoice_owner, resource_name: 'Account'
14
+
15
+ with_one :original, resource_name: 'Subscription'
16
+ with_one :previous,
17
+ resource_name: 'Subscription',
18
+ foreign_key: 'previous_subscription_id'
19
+
20
+ with_many :rate_plans, aka: :plans
21
+ with_many :usages
22
+
23
+ # FIXME: a subscription can only have at most one amendment (no amendment
24
+ # for the last version) but there are no `AmendmentId` on a subscription.
25
+ with_many :amendments
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module IronBank
4
+ module Resources
5
+ # Usage is consumed by usage-based charges during the bill run.
6
+ #
7
+ class Usage < Resource
8
+ with_schema
9
+
10
+ with_one :account
11
+ with_one :charge, resource_name: 'RatePlanCharge'
12
+ with_one :import
13
+ with_one :subscription
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module IronBank
4
+ # Faraday response middleware
5
+ module Response
6
+ # This class raises an exception based on the HTTP status code and the
7
+ # `success` flag (if present in the response) from Zuora.
8
+ class RaiseError < Faraday::Response::Middleware
9
+ private
10
+
11
+ def on_complete(response)
12
+ (error = IronBank::Error.from_response(response)) && raise(error)
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ module IronBank
4
+ # Representation of all Zuora objects and their fields for a Zuora tenant,
5
+ # with import/export capabilities.
6
+ #
7
+ class Schema
8
+ private_class_method :new
9
+
10
+ def self.directory
11
+ IronBank.configuration.schema_directory
12
+ end
13
+
14
+ def self.export
15
+ FileUtils.mkdir_p(directory) unless Dir.exist?(directory)
16
+ new(IronBank.client).export
17
+ reset
18
+ import
19
+ end
20
+
21
+ def self.for(object_name)
22
+ import[object_name]
23
+ end
24
+
25
+ def self.import
26
+ @import ||= Dir["#{directory}/*.xml"].each.with_object({}) do |name, data|
27
+ doc = File.open(name) { |file| Nokogiri::XML(file) }
28
+ object = IronBank::Describe::Object.from_xml(doc)
29
+ data[object.name] = object
30
+ end
31
+ end
32
+
33
+ def self.reset
34
+ @import = nil
35
+ end
36
+
37
+ def export
38
+ tenant.objects.compact.each do |object|
39
+ begin
40
+ object.export
41
+ rescue IronBank::Describe::Object::InvalidXML
42
+ # TODO: log the object error
43
+ next
44
+ end
45
+ end
46
+ end
47
+
48
+ attr_reader :client
49
+
50
+ def initialize(client)
51
+ @client = client
52
+ end
53
+
54
+ def tenant
55
+ @tenant ||= IronBank::Describe::Tenant.from_connection(client.connection)
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+
3
+ module IronBank
4
+ # A few helper methods for interacting with Zuora
5
+ #
6
+ module Utils
7
+ module_function
8
+
9
+ # Inspired from ActiveSupport
10
+ def underscore(camel_cased_word)
11
+ return camel_cased_word unless camel_cased_word =~ /[A-Z-]|::/
12
+
13
+ word = camel_cased_word.to_s.gsub(/::/, '/')
14
+ word.gsub!(/([A-Z\d]+)([A-Z][a-z])/, '\1_\2')
15
+ word.gsub!(/([a-z\d])([A-Z])/, '\1_\2')
16
+ word.tr!('-', '_')
17
+ word.downcase
18
+ end
19
+
20
+ def camelize(term, type: :upper)
21
+ # Preserve custom field term postfix, in the '__c' or the '__NS' format
22
+ custom_field = (term.to_s =~ /__c$/i)
23
+ netsuite_field = (term.to_s =~ /__NS$/i)
24
+ lower_camelize = type == :lower
25
+
26
+ output = term.to_s.dup.tap do |copy|
27
+ copy.gsub!(/^_*/, '')
28
+ copy.gsub!(/__(NS|c)$/i, '') if custom_field || netsuite_field
29
+
30
+ lower_camelize ? lower_camelize(copy) : upper_camelize(copy)
31
+ end
32
+
33
+ if custom_field
34
+ "#{output}__c"
35
+ elsif netsuite_field
36
+ "#{output}__NS"
37
+ else
38
+ output
39
+ end
40
+ end
41
+
42
+ def kebab(term)
43
+ underscore(term).tr!('_', '-')
44
+ end
45
+
46
+ def lower_camelize(term)
47
+ term.gsub!(/(^|_)(.)/) do
48
+ match = Regexp.last_match
49
+ char = match[2]
50
+
51
+ match.begin(2).zero? ? char : char.upcase
52
+ end
53
+ end
54
+
55
+ def upper_camelize(term)
56
+ term.gsub!(/(^|_)(.)/) { Regexp.last_match(2).upcase }
57
+ end
58
+ end
59
+ end
@@ -1,3 +1,6 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module IronBank
2
- VERSION = '0.1.0'
4
+ VERSION = '0.7.1'
5
+ API_VERSION = 'v1'
3
6
  end
data/lib/iron_bank.rb CHANGED
@@ -1,5 +1,155 @@
1
- require 'iron_bank/version'
1
+ # frozen_string_literal: true
2
+
3
+ # External librairies
4
+ require 'csv'
5
+ require 'faraday'
6
+ require 'faraday_middleware'
7
+ require 'fileutils'
8
+ require 'json'
9
+ require 'nokogiri'
10
+ require 'ddtrace'
2
11
 
12
+ # An opinionated Ruby interface to the Zuora REST API
3
13
  module IronBank
4
- # Your code goes here...
14
+ class << self
15
+ # Holds an instance of IronBank::Client which becomes the default for many
16
+ # query and other actions requiring a connection to Zuora.
17
+ attr_accessor :client
18
+
19
+ # Configurable options such as schema directory.
20
+ attr_accessor :configuration
21
+ end
22
+
23
+ def self.configure
24
+ self.configuration ||= Configuration.new
25
+ yield(configuration)
26
+
27
+ return unless configuration.credentials?
28
+
29
+ self.client ||= IronBank::Client.new(configuration.credentials)
30
+ end
31
+
32
+ def self.logger
33
+ self.configuration.logger
34
+ end
35
+
36
+ # Zuora actions, e.g., subscribe, amend, etc.
37
+ module Actions; end
38
+
39
+ # Metadata describe
40
+ module Describe; end
41
+
42
+ # Zuora resources
43
+ module Resources; end
44
+
45
+ # Zuora operations, e.g., billing-preview
46
+ module Operations; end
47
+ end
48
+
49
+ # Utilities
50
+ require 'iron_bank/logger'
51
+ require 'iron_bank/cacheable'
52
+ require 'iron_bank/configuration'
53
+ require 'iron_bank/endpoint'
54
+ require 'iron_bank/local_records'
55
+ require 'iron_bank/local'
56
+ require 'iron_bank/utils'
57
+ require 'iron_bank/version'
58
+ require 'iron_bank/csv'
59
+ require 'iron_bank/error'
60
+ require 'iron_bank/response/raise_error'
61
+
62
+ # Helpers
63
+ require 'iron_bank/open_tracing'
64
+ require 'iron_bank/instrumentation'
65
+
66
+ # Use default configuration
67
+ IronBank.configure {}
68
+
69
+ # Actions
70
+ require 'iron_bank/action'
71
+ require 'iron_bank/actions/amend'
72
+ require 'iron_bank/actions/create'
73
+ require 'iron_bank/actions/delete'
74
+ require 'iron_bank/actions/execute'
75
+ require 'iron_bank/actions/generate'
76
+ require 'iron_bank/actions/subscribe'
77
+ require 'iron_bank/actions/update'
78
+ require 'iron_bank/actions/query'
79
+ require 'iron_bank/actions/query_more'
80
+
81
+ # Client and schema (describe)
82
+ require 'iron_bank/authentication'
83
+ require 'iron_bank/authentications/cookie'
84
+ require 'iron_bank/authentications/token'
85
+ require 'iron_bank/client'
86
+ require 'iron_bank/describe/field'
87
+ require 'iron_bank/describe/object'
88
+ require 'iron_bank/describe/related'
89
+ require 'iron_bank/describe/tenant'
90
+ require 'iron_bank/object'
91
+ require 'iron_bank/schema'
92
+ require 'iron_bank/query_builder'
93
+
94
+ # Operations
95
+ require 'iron_bank/operation'
96
+ require 'iron_bank/operations/billing_preview'
97
+
98
+ # Resources
99
+ require 'iron_bank/associations'
100
+ require 'iron_bank/metadata'
101
+ require 'iron_bank/queryable'
102
+ require 'iron_bank/resource'
103
+ require 'iron_bank/collection'
104
+ require 'iron_bank/resources/account'
105
+ require 'iron_bank/resources/amendment'
106
+ require 'iron_bank/resources/contact'
107
+ require 'iron_bank/resources/export'
108
+ require 'iron_bank/resources/import'
109
+ require 'iron_bank/resources/invoice_adjustment'
110
+ require 'iron_bank/resources/invoice_item'
111
+ require 'iron_bank/resources/invoice_payment'
112
+ require 'iron_bank/resources/invoice'
113
+ require 'iron_bank/resources/payment_method'
114
+ require 'iron_bank/resources/payment'
115
+ require 'iron_bank/resources/product_rate_plan_charge_tier'
116
+ require 'iron_bank/resources/product_rate_plan_charge'
117
+ require 'iron_bank/resources/product_rate_plan'
118
+ require 'iron_bank/resources/product'
119
+ require 'iron_bank/resources/rate_plan_charge_tier'
120
+ require 'iron_bank/resources/rate_plan_charge'
121
+ require 'iron_bank/resources/rate_plan'
122
+ require 'iron_bank/resources/subscription'
123
+ require 'iron_bank/resources/usage'
124
+ require 'iron_bank/resources/catalog_tiers/discount_amount'
125
+ require 'iron_bank/resources/catalog_tiers/discount_percentage'
126
+ require 'iron_bank/resources/catalog_tiers/price'
127
+
128
+ # Aliasing IronBank::Actions::* to IronBank::*
129
+ IronBank::Actions.constants.each do |action|
130
+ IronBank.const_set(action, IronBank::Actions.const_get(action))
131
+ end
132
+
133
+ # Aliasing IronBank::Resources::* to IronBank::*
134
+ IronBank::Resources.constants.each do |resource|
135
+ IronBank.const_set(resource, IronBank::Resources.const_get(resource))
136
+ end
137
+
138
+ # Aliasing catalog-related objects
139
+ IronBank::CatalogPlan = IronBank::Resources::ProductRatePlan
140
+ IronBank::CatalogCharge = IronBank::Resources::ProductRatePlanCharge
141
+ IronBank::CatalogTier = IronBank::Resources::ProductRatePlanChargeTier
142
+
143
+ # Aliasing subscription-related objects
144
+ IronBank::Plan = IronBank::Resources::RatePlan
145
+ IronBank::Charge = IronBank::Resources::RatePlanCharge
146
+ IronBank::Tier = IronBank::Resources::RatePlanChargeTier
147
+
148
+ Datadog.configure do |config|
149
+ config.tracer(
150
+ enabled: IronBank.configuration.open_tracing_enabled
151
+ )
152
+ # registers the tracing middleware.
153
+ config.use :faraday,
154
+ service_name: IronBank.configuration.open_tracing_service_name
5
155
  end