sync_recurly.rb 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. require 'rubygems'
  2. require 'recurly'
  3. require 'json'
  4. if ENV['RECURLY_SUBDOMAIN']
  5. Recurly.subdomain = ENV['RECURLY_SUBDOMAIN']
  6. else
  7. print "Defaulting to sharelatex-sandbox. Set RECURLY_SUBDOMAIN environment variable to override\n"
  8. Recurly.subdomain = "sharelatex-sandbox"
  9. end
  10. if ENV['RECURLY_API_KEY']
  11. Recurly.api_key = ENV['RECURLY_API_KEY']
  12. else
  13. print "Please set RECURLY_API_KEY environment variable\n"
  14. exit 1
  15. end
  16. file = File.read('../../app/templates/plans/groups.json')
  17. groups = JSON.parse(file)
  18. # data format: groups[usage][plan_code][currency][size] = price
  19. PLANS = {}
  20. groups.each do |usage, data|
  21. data.each do |plan_code, data|
  22. data.each do |currency, data|
  23. data.each do |size, price|
  24. full_plan_code = "group_#{plan_code}_#{size}_#{usage}"
  25. plan = PLANS[full_plan_code] ||= {
  26. plan_code: full_plan_code,
  27. name: "Overleaf #{plan_code.capitalize} - Group Account (#{size} licenses) - #{usage.capitalize}",
  28. unit_amount_in_cents: {},
  29. plan_interval_length: 12,
  30. plan_interval_unit: 'months',
  31. tax_code: 'digital'
  32. }
  33. plan[:unit_amount_in_cents][currency] = price * 100
  34. end
  35. end
  36. end
  37. end
  38. PLANS.each do |plan_code, plan|
  39. print "Syncing #{plan_code}...\n"
  40. print "#{plan}\n"
  41. begin
  42. recurly_plan = Recurly::Plan.find(plan_code)
  43. rescue Recurly::Resource::NotFound => e
  44. recurly_plan = nil
  45. end
  46. if recurly_plan.nil?
  47. print "No plan found, creating...\n"
  48. Recurly::Plan.create(plan)
  49. else
  50. print "Existing plan found, updating...\n"
  51. plan.each do |key, value|
  52. recurly_plan[key] = value
  53. recurly_plan.save
  54. end
  55. end
  56. print "Done!\n"
  57. end