class Spaceship::Tunes::Availability

Attributes

app_available_date[RW]

@return (String) App available date in format of “YYYY-MM-DD”

b2b_app_enabled[RW]

@return (Bool) app enabled for b2b users

b2b_organizations[RW]

@return (Array of Spaceship::Tunes::B2bOrganization objects) A list of b2b orgs

b2b_unavailable[RW]

@return (Bool) b2b available for distribution

b2b_users[RW]

@return (Array of Spaceship::Tunes::B2bUser objects) A list of users

cleared_for_preorder[RW]

@return (Bool) Cleared for preorder

educational_discount[RW]

@return (Bool) app enabled for educational discount

include_future_territories[RW]

@return (Bool) Are future territories included?

territories[RW]

@return (Array of Spaceship::Tunes::Territory objects) A list of the territories

Public Class Methods

from_territories(territories = [], params = {}) click to toggle source

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

add_b2b_users(user_list = []) click to toggle source

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
enable_b2b_app!() click to toggle source

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
update_b2b_users(user_list = []) click to toggle source

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
update_dep_organizations(organization_list = []) click to toggle source

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