class Spaceship::Tunes::Availability
Attributes
@return (Bool) app enabled for b2b users
@return (Array
of Spaceship::Tunes::B2bOrganization
objects) A list of b2b orgs
@return (Array
of Spaceship::Tunes::B2bUser
objects) A list of users
@return (Bool) Cleared for preorder
@return (Bool) app enabled for educational discount
@return (Bool) Are future territories included?
@return (Array
of Spaceship::Tunes::Territory
objects) A list of the territories
Public Class Methods
Create a new object based on a set of territories. This will override any values already set for cleared_for_preorder
, app_available_date
, b2b_unavailable
, b2b_app_enabled
, and educational_discount
@param territories (Array
of String
or Spaceship::Tunes::Territory
objects): A list of the territories @param params (Hash
): Optional parameters (include_future_territories
(Bool, default: true) Are future territories included?)
# File spaceship/lib/spaceship/tunes/availability.rb, line 46 def self.from_territories(territories = [], params = {}) # Initializes the DataHash with our preOrder structure so values # that are being modified will be saved # # Note: A better solution for this in the future might be to improve how # Base::DataHash sets values for paths that don't exist obj = self.new( 'preOrder' => { 'clearedForPreOrder' => { 'value' => false }, 'appAvailableDate' => { 'value' => nil } } ) # Detect if the territories attribute is an array of Strings and convert to Territories obj.territories = if territories[0].kind_of?(String) territories.map { |territory| Spaceship::Tunes::Territory.from_code(territory) } else territories end obj.include_future_territories = params.fetch(:include_future_territories, true) obj.cleared_for_preorder = params.fetch(:cleared_for_preorder, false) obj.app_available_date = params.fetch(:app_available_date, nil) obj.b2b_unavailable = params.fetch(:b2b_unavailable, false) obj.b2b_app_enabled = params.fetch(:b2b_app_enabled, false) obj.educational_discount = params.fetch(:educational_discount, true) return obj end
Public Instance Methods
Adds users for b2b enabled apps
# File spaceship/lib/spaceship/tunes/availability.rb, line 114 def add_b2b_users(user_list = []) raise "Cannot add b2b users if b2b is not enabled" unless b2b_app_enabled @b2b_users = user_list.map { |user| B2bUser.from_username(user) } return self end
Sets `b2b_app_enabled` to true and `educational_discount` to false Requires users to be added with `add_b2b_users` otherwise `update_availability` will error
# File spaceship/lib/spaceship/tunes/availability.rb, line 105 def enable_b2b_app! raise "Not possible to enable b2b on this app" if b2b_unavailable @b2b_app_enabled = true # need to set the educational discount to false @educational_discount = false return self end
Updates users for b2b enabled apps
# File spaceship/lib/spaceship/tunes/availability.rb, line 121 def update_b2b_users(user_list = []) raise "Cannot add b2b users if b2b is not enabled" unless b2b_app_enabled added_users = b2b_users.map(&:ds_username) # Returns if list is unchanged return self if (added_users - user_list) == (user_list - added_users) users_to_add = user_list.reject { |user| added_users.include?(user) } users_to_remove = added_users.reject { |user| user_list.include?(user) } @b2b_users = b2b_users.reject { |user| users_to_remove.include?(user.ds_username) } @b2b_users.concat(users_to_add.map { |user| B2bUser.from_username(user) }) @b2b_users.concat(users_to_remove.map { |user| B2bUser.from_username(user, is_add_type: false) }) return self end
Updates users for b2b enabled apps
# File spaceship/lib/spaceship/tunes/availability.rb, line 140 def update_dep_organizations(organization_list = []) raise "Cannot add dep organizations if b2b is not enabled" unless b2b_app_enabled added_orgs = b2b_organizations # Returns if list is unchanged return self if (added_orgs - organization_list) == (organization_list - added_orgs) orgs_to_add = organization_list.reject { |organization| added_orgs.include?(organization) } orgs_to_remove = added_orgs.nil? ? organization_list : added_orgs.reject { |organization| organization_list.include?(organization) } @b2b_organizations = b2b_organizations.reject { |organization| orgs_to_remove.include?(organization) } @b2b_organizations.concat(orgs_to_add) @b2b_organizations.concat(orgs_to_remove.map do |organization| B2bOrganization.from_id_info(dep_id: organization.dep_customer_id, dep_name: organization.name, dep_org_id: organization.dep_organization_id, type: false) end) return self end