Chatwoot/app/models/plan.rb

97 lines
1.7 KiB
Ruby

class Plan
attr_accessor :key, :attributes
def initialize(key, attributes={})
@key = key.to_sym
@attributes = attributes
end
def name
attributes[:name]
end
def id
attributes[:id]
end
def price
attributes[:price]
end
def active
attributes[:active]
end
def version
attributes[:version]
end
class << self
def config
Hashie::Mash.new(PLAN_CONFIG)
end
def default_trial_period
(config['trial_period'] || 14).days
end
def default_pricing_version
config['default_pricing_version']
end
def default_plans
load_active_plans + load_inactive_plans
end
def all_plans
default_plans
end
def active_plans
all_plans.select { |plan| plan.active }
end
def paid_plan
active_plans.first
end
def inactive_plans
all_plans.reject(&:active)
end
def trial_plan
all_plans.detect { |plan| plan.key == :trial }
end
def plans_of_version(version)
all_plans.select { |plan| plan.version == version }
end
def find_by_key(key)
key = key.to_sym
all_plans.detect { |plan| plan.key == key }.dup
end
##helpers
def load_active_plans
result = []
Plan.config.active.each_pair do |version, plans|
plans.each_pair do |key, attributes|
result << Plan.new(key, attributes.merge(active: true, version: version))
end
end
result
end
def load_inactive_plans
result = []
Plan.config.inactive.each_pair do |version, plans|
plans.each_pair do |key, attributes|
result << Plan.new(key, attributes.merge(active: false, version: version))
end
end
result
end
end
end