Sha256: 97dcfa75183cef2e07e112e43af4b201a64def8d5db47c2760e218c6d5ec18ca
Contents?: true
Size: 1.97 KB
Versions: 1
Compression:
Stored size: 1.97 KB
Contents
# This module is responsible for taking SolidusSubscriptions::LineItem # objects and creating SolidusSubscriptions::Subscription Objects module SolidusSubscriptions module SubscriptionGenerator extend self SubscriptionConfiguration = Struct.new(:interval_length, :interval_units, :end_date) # Create and persist a subscription for a collection of subscription # line items # # @param subscription_line_items [Array<SolidusSubscriptions::LineItem>] The # subscription_line_items to be activated # # @return [SolidusSubscriptions::Subscription] def activate(subscription_line_items) return if subscription_line_items.empty? order = subscription_line_items.first.order configuration = subscription_configuration(subscription_line_items.first) subscription_attributes = { user: order.user, line_items: subscription_line_items, store: order.store, shipping_address: order.ship_address, **configuration.to_h } Subscription.create!(subscription_attributes) do |sub| sub.actionable_date = sub.next_actionable_date end end # Group a collection of line items by common subscription configuration # options. Grouped subscription_line_items can belong to a single # subscription. # # @param subscription_line_items [Array<SolidusSubscriptions::LineItem>] The # subscription_line_items to be grouped. # # @return [Array<Array<SolidusSubscriptions::LineItem>>] def group(subscription_line_items) subscription_line_items.group_by do |li| subscription_configuration(li) end. values end private def subscription_configuration(subscription_line_item) SubscriptionConfiguration.new( subscription_line_item.interval_length, subscription_line_item.interval_units, subscription_line_item.end_date ) end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
solidus_subscriptions-alpha-0.0.4 | app/models/solidus_subscriptions/subscription_generator.rb |