transaction.rb 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. class Transaction
  2. attr_reader :options
  3. attr_accessor :original_user_id, :original_interface_handle
  4. def initialize(options = {})
  5. @options = options
  6. end
  7. def execute
  8. start_execute
  9. ActiveRecord::Base.transaction do
  10. start_transaction
  11. yield
  12. ensure
  13. finish_transaction
  14. end
  15. ensure
  16. finish_execute
  17. end
  18. def self.execute(options = {}, &block)
  19. Transaction.new(options).execute(&block)
  20. end
  21. private
  22. def start_execute
  23. reset_user_id_start
  24. bulk_import_start
  25. interface_handle_start
  26. end
  27. def start_transaction
  28. PushMessages.init
  29. end
  30. def finish_execute
  31. reset_user_id_finish
  32. bulk_import_finish
  33. end
  34. def finish_transaction
  35. interface_handle_finish
  36. TransactionDispatcher.commit(options)
  37. PushMessages.finish
  38. end
  39. def reset_user_id?
  40. options[:reset_user_id] == true
  41. end
  42. def reset_user_id_start
  43. return if !reset_user_id?
  44. self.original_user_id = UserInfo.current_user_id
  45. UserInfo.current_user_id = 1
  46. end
  47. def reset_user_id_finish
  48. return if !reset_user_id?
  49. UserInfo.current_user_id = original_user_id
  50. end
  51. def bulk_import?
  52. options[:bulk] == true
  53. end
  54. def bulk_import_start
  55. return if !bulk_import?
  56. BulkImportInfo.enable
  57. end
  58. def bulk_import_finish
  59. return if !bulk_import?
  60. BulkImportInfo.disable
  61. end
  62. def interface_handle?
  63. options[:interface_handle].present?
  64. end
  65. def interface_handle_start
  66. return if !interface_handle?
  67. self.original_interface_handle = ApplicationHandleInfo.current
  68. ApplicationHandleInfo.current = options[:interface_handle]
  69. end
  70. def interface_handle_finish
  71. return if !interface_handle?
  72. ApplicationHandleInfo.current = original_interface_handle
  73. end
  74. end