class CCBill::DynamicPricing
Attributes
config[RW]
errors[RW]
variables[RW]
Public Class Methods
new(options = {})
click to toggle source
# File lib/ccbill_ruby/dynamic_pricing.rb, line 7 def initialize(options = {}) self.config = CCBill.configuration fail_on_price_set(options) modified_options = modify_params(options) self.variables = { account: config.account, sub_account: config.sub_account, currency_code: config.default_currency }.merge(modified_options) end
Public Instance Methods
url()
click to toggle source
# File lib/ccbill_ruby/dynamic_pricing.rb, line 21 def url raise DynamicPricingError.new(self.errors.join(' ')) if !valid? variables[:form_digest] = encode_form_digest config.endpoint + config.flexform_id + '?' + URI.encode_www_form(transformed_variables) end
valid?()
click to toggle source
# File lib/ccbill_ruby/dynamic_pricing.rb, line 29 def valid? self.errors = [] required_fields.each do |field| self.errors << "#{field} is required." if !variables[field] end unless (config.min_price.to_f..config.max_price.to_f).include?(variables[:initial_price].to_f) self.errors << "Initial price must be between $#{config.min_price} and $#{config.max_price}." end if recurring? unless (config.min_price.to_f..config.max_price.to_f).include?(variables[:recurring_price].to_f) self.errors << "Recurring price must be between $#{config.min_price} and $#{config.max_price}." end end self.errors.empty? end
Private Instance Methods
ccbill_field(internal)
click to toggle source
# File lib/ccbill_ruby/dynamic_pricing.rb, line 95 def ccbill_field(internal) { account: 'clientAccnum', sub_account: 'clientSubacc', initial_price: 'initialPrice', initial_period: 'initialPeriod', currency_code: 'currencyCode', recurring_price: 'recurringPrice', recurring_period: 'recurringPeriod', num_rebills: 'numRebills', form_digest: 'formDigest' }[internal] || internal end
convert_to_price(cents)
click to toggle source
# File lib/ccbill_ruby/dynamic_pricing.rb, line 133 def convert_to_price(cents) '%.2f' % (cents / 100.to_f) end
encode_form_digest()
click to toggle source
# File lib/ccbill_ruby/dynamic_pricing.rb, line 51 def encode_form_digest hashed_fields = if recurring? [ variables[:initial_price], variables[:initial_period], variables[:recurring_price], variables[:recurring_period], variables[:num_rebills], variables[:currency_code], config.salt ] else [ variables[:initial_price], variables[:initial_period], variables[:currency_code], config.salt ] end Digest::MD5.hexdigest(hashed_fields.join) end
fail_on_price_set(options)
click to toggle source
# File lib/ccbill_ruby/dynamic_pricing.rb, line 137 def fail_on_price_set(options) compared_array = [:initial_price, :recurring_price] & options.keys if compared_array.any? array_with_cents = compared_array.map{|word| word.to_s + '_in_cents' }.join(', ') fail SyntaxError, "You misspelled! Gem uses #{array_with_cents} value(s)." end end
modify_params(options)
click to toggle source
# File lib/ccbill_ruby/dynamic_pricing.rb, line 123 def modify_params(options) initial_cents = options.delete(:initial_price_in_cents) options[:initial_price] = convert_to_price(initial_cents) if initial_cents recurring_cents = options.delete(:recurring_price_in_cents) options[:recurring_price] = convert_to_price(recurring_cents) if recurring_cents options end
recurring?()
click to toggle source
# File lib/ccbill_ruby/dynamic_pricing.rb, line 74 def recurring? variables[:recurring_price] || variables[:recurring_period] || variables[:num_rebills] end
required_fields()
click to toggle source
# File lib/ccbill_ruby/dynamic_pricing.rb, line 78 def required_fields req = [ :initial_price, :initial_period ] if recurring? req += [ :recurring_price, :recurring_period, :num_rebills ] end req end
transform_keys(_hash) { |key| ... }
click to toggle source
From Active Support:
# File lib/ccbill_ruby/dynamic_pricing.rb, line 114 def transform_keys(_hash) result = {} _hash.keys.each do |key| result[yield(key)] = _hash[key] end result end
transformed_variables()
click to toggle source
# File lib/ccbill_ruby/dynamic_pricing.rb, line 109 def transformed_variables transform_keys(variables) { |key| ccbill_field(key) } end