Socket
Book a DemoInstallSign in
Socket

billing_logic

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

billing_logic

0.0.3
bundlerRubygems
Version published
Maintainers
1
Created
Source

= Billing Logic

== Major Players

  • BillingCycle has a period, frequency, anniversary, time_unit_measure, periodicity, next_payment_date, etc.
  • CurrentState holds a set of profiles and can iterate through them or return current_products or active_products
  • PaymentCommandBuilder, initialized with an array of products, generates commands for creating recurring payments for those products; also takes a set of profile_ids and generates commands for canceling their recurring payments
  • [Base|IndependentPayment|SinglePaymentStrategy], initialized with a current state, desired state and builder class, calculates how to achieve the desired state
  • ProrationCalculator, initialized with a hash of billing_cycle, price and date, calculates a prorated price
  • BillingEngine::Client::Product, arrays of these are manipulated via Billing Logic. "Product" in Billing Logic generally refers to BillingEngine::Client::Products

== Structure

module BillingLogic
    class BillingCycle
    module CommandBuilders
        module BuilderHelpers
        class ProductList
        class ProductStub
        class ActionObject
        class BasicBuilder
        class WordBuilder < BasicBuilder
        class AggregateWordBuilder < BasicBuilder
    class CurrentState
    module CurrentStateMixin
    class PaymentCommandBuilder
    class ProrationCalculator
    module Strategies
        class BaseStrategy
        class IndependentPaymentStrategy
        class SinglePaymentStrategy

== BillingLogic::Strategies

You create a BillingLogic::Strategy by passing in a hash with your current state, desired state and builder class:

strategy = <strategy class>.new(:payment_command_builder_class => <your builder class>,
				:current_state => <an array of payment profiles>
				:desired_state => <an array of products>)

You then ask the strategy to return you an array of commands:

strategy.command_list => An Array of commands provided by the command builder class

There are three strategies available:

  • BaseStrategy:
    • Contains most of the methods
  • IndependentPaymentStrategy:
    • Each product gets its own PaymentProfile
    • Default payment_command_builder_class: BillingLogic::CommandBuilders::WordBuilder
  • SinglePaymentStrategy:
    • All products share a single PaymentProfile
    • Default payment_command_builder_class: BillingLogic::CommandBuilders::AggregateWordBuilder

BaseStrategy also has these public methods: #command_list #products_to_be_added #products_to_be_added_grouped_by_date #products_to_be_removed #inactive_products #active_products #active_profiles #profiles_by_status(active_or_pending)

== BillingLogic::BillingCycle

constants: TIME_UNITS = { :day => 1, :week => 7, :month => 365/12.0, :semimonth=> 365/24, :year => 365 }

fields: :frequency (e.g., 1 or 45) :period (e.g., :day, :week, :semimonth, :month, :year) :anniversary (a date)

methods include: #days_in_billing_cycle_including(date) #next_payment_date #closest_anniversary_date_including(date) #periodicity ( TIME_UNITS[self.period] * frequency )

== BillingLogic::PaymentCommandBuilder

instance methods: #group_products_by_billing_cycle

class methods: .create_recurring_payment_commands(products, next_payment_date = Date.current) .cancel_recurring_payment_commands(*profile_ids)

FAQs

Package last updated on 28 Sep 2022

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

About

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.

  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc

U.S. Patent No. 12,346,443 & 12,314,394. Other pending.