pub_sub_model_sync 0.5.10 → 1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/release.yml +43 -0
  3. data/.github/workflows/ruby.yml +1 -1
  4. data/.rubocop.yml +1 -0
  5. data/CHANGELOG.md +34 -1
  6. data/Dockerfile +6 -0
  7. data/Gemfile.lock +150 -134
  8. data/README.md +372 -192
  9. data/docker-compose.yaml +12 -0
  10. data/docs/notifications-diagram.png +0 -0
  11. data/lib/pub_sub_model_sync.rb +3 -1
  12. data/lib/pub_sub_model_sync/base.rb +4 -7
  13. data/lib/pub_sub_model_sync/config.rb +17 -8
  14. data/lib/pub_sub_model_sync/initializers/before_commit.rb +23 -0
  15. data/lib/pub_sub_model_sync/message_processor.rb +34 -10
  16. data/lib/pub_sub_model_sync/message_publisher.rb +90 -29
  17. data/lib/pub_sub_model_sync/mock_google_service.rb +4 -0
  18. data/lib/pub_sub_model_sync/mock_kafka_service.rb +13 -0
  19. data/lib/pub_sub_model_sync/payload.rb +35 -16
  20. data/lib/pub_sub_model_sync/payload_builder.rb +62 -0
  21. data/lib/pub_sub_model_sync/publisher_concern.rb +77 -47
  22. data/lib/pub_sub_model_sync/railtie.rb +6 -0
  23. data/lib/pub_sub_model_sync/run_subscriber.rb +108 -0
  24. data/lib/pub_sub_model_sync/service_base.rb +19 -37
  25. data/lib/pub_sub_model_sync/service_google.rb +53 -17
  26. data/lib/pub_sub_model_sync/service_kafka.rb +40 -13
  27. data/lib/pub_sub_model_sync/service_rabbit.rb +41 -33
  28. data/lib/pub_sub_model_sync/subscriber.rb +14 -66
  29. data/lib/pub_sub_model_sync/subscriber_concern.rb +23 -23
  30. data/lib/pub_sub_model_sync/tasks/worker.rake +11 -0
  31. data/lib/pub_sub_model_sync/transaction.rb +73 -0
  32. data/lib/pub_sub_model_sync/version.rb +1 -1
  33. data/samples/README.md +50 -0
  34. data/samples/app1/.gitattributes +8 -0
  35. data/samples/app1/.gitignore +28 -0
  36. data/samples/app1/Dockerfile +13 -0
  37. data/samples/app1/Gemfile +37 -0
  38. data/samples/app1/Gemfile.lock +171 -0
  39. data/samples/app1/README.md +24 -0
  40. data/samples/app1/Rakefile +6 -0
  41. data/samples/app1/app/models/application_record.rb +3 -0
  42. data/samples/app1/app/models/concerns/.keep +0 -0
  43. data/samples/app1/app/models/post.rb +19 -0
  44. data/samples/app1/app/models/user.rb +29 -0
  45. data/samples/app1/bin/bundle +114 -0
  46. data/samples/app1/bin/rails +5 -0
  47. data/samples/app1/bin/rake +5 -0
  48. data/samples/app1/bin/setup +33 -0
  49. data/samples/app1/bin/spring +14 -0
  50. data/samples/app1/config.ru +6 -0
  51. data/samples/app1/config/application.rb +40 -0
  52. data/samples/app1/config/boot.rb +4 -0
  53. data/samples/app1/config/credentials.yml.enc +1 -0
  54. data/samples/app1/config/database.yml +25 -0
  55. data/samples/app1/config/environment.rb +5 -0
  56. data/samples/app1/config/environments/development.rb +63 -0
  57. data/samples/app1/config/environments/production.rb +105 -0
  58. data/samples/app1/config/environments/test.rb +57 -0
  59. data/samples/app1/config/initializers/application_controller_renderer.rb +8 -0
  60. data/samples/app1/config/initializers/backtrace_silencers.rb +8 -0
  61. data/samples/app1/config/initializers/cors.rb +16 -0
  62. data/samples/app1/config/initializers/filter_parameter_logging.rb +6 -0
  63. data/samples/app1/config/initializers/inflections.rb +16 -0
  64. data/samples/app1/config/initializers/mime_types.rb +4 -0
  65. data/samples/app1/config/initializers/pubsub.rb +4 -0
  66. data/samples/app1/config/initializers/wrap_parameters.rb +14 -0
  67. data/samples/app1/config/locales/en.yml +33 -0
  68. data/samples/app1/config/puma.rb +43 -0
  69. data/samples/app1/config/routes.rb +3 -0
  70. data/samples/app1/config/spring.rb +6 -0
  71. data/samples/app1/db/migrate/20210513080700_create_users.rb +12 -0
  72. data/samples/app1/db/migrate/20210513134332_create_posts.rb +11 -0
  73. data/samples/app1/db/schema.rb +34 -0
  74. data/samples/app1/db/seeds.rb +7 -0
  75. data/samples/app1/docker-compose.yml +32 -0
  76. data/samples/app1/log/.keep +0 -0
  77. data/samples/app2/.gitattributes +8 -0
  78. data/samples/app2/.gitignore +28 -0
  79. data/samples/app2/Dockerfile +13 -0
  80. data/samples/app2/Gemfile +37 -0
  81. data/samples/app2/Gemfile.lock +171 -0
  82. data/samples/app2/README.md +24 -0
  83. data/samples/app2/Rakefile +6 -0
  84. data/samples/app2/app/models/application_record.rb +9 -0
  85. data/samples/app2/app/models/concerns/.keep +0 -0
  86. data/samples/app2/app/models/customer.rb +28 -0
  87. data/samples/app2/app/models/post.rb +10 -0
  88. data/samples/app2/bin/bundle +114 -0
  89. data/samples/app2/bin/rails +5 -0
  90. data/samples/app2/bin/rake +5 -0
  91. data/samples/app2/bin/setup +33 -0
  92. data/samples/app2/bin/spring +14 -0
  93. data/samples/app2/config.ru +6 -0
  94. data/samples/app2/config/application.rb +40 -0
  95. data/samples/app2/config/boot.rb +4 -0
  96. data/samples/app2/config/credentials.yml.enc +1 -0
  97. data/samples/app2/config/database.yml +25 -0
  98. data/samples/app2/config/environment.rb +5 -0
  99. data/samples/app2/config/environments/development.rb +63 -0
  100. data/samples/app2/config/environments/production.rb +105 -0
  101. data/samples/app2/config/environments/test.rb +57 -0
  102. data/samples/app2/config/initializers/application_controller_renderer.rb +8 -0
  103. data/samples/app2/config/initializers/backtrace_silencers.rb +8 -0
  104. data/samples/app2/config/initializers/cors.rb +16 -0
  105. data/samples/app2/config/initializers/filter_parameter_logging.rb +6 -0
  106. data/samples/app2/config/initializers/inflections.rb +16 -0
  107. data/samples/app2/config/initializers/mime_types.rb +4 -0
  108. data/samples/app2/config/initializers/pubsub.rb +4 -0
  109. data/samples/app2/config/initializers/wrap_parameters.rb +14 -0
  110. data/samples/app2/config/locales/en.yml +33 -0
  111. data/samples/app2/config/puma.rb +43 -0
  112. data/samples/app2/config/routes.rb +3 -0
  113. data/samples/app2/config/spring.rb +6 -0
  114. data/samples/app2/db/migrate/20210513080956_create_customers.rb +10 -0
  115. data/samples/app2/db/migrate/20210513135203_create_posts.rb +10 -0
  116. data/samples/app2/db/schema.rb +31 -0
  117. data/samples/app2/db/seeds.rb +7 -0
  118. data/samples/app2/docker-compose.yml +20 -0
  119. data/samples/app2/log/.keep +0 -0
  120. metadata +97 -3
  121. data/lib/pub_sub_model_sync/publisher.rb +0 -40
@@ -1,40 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module PubSubModelSync
4
- class Publisher
5
- attr_accessor :attrs, :actions, :klass, :as_klass
6
-
7
- def initialize(attrs, klass, actions = nil, as_klass = nil)
8
- @attrs = attrs
9
- @klass = klass
10
- @actions = actions || %i[create update destroy]
11
- @as_klass = as_klass || klass
12
- end
13
-
14
- # Builds the payload with model information defined for :action (:create|:update|:destroy)
15
- def payload(model, action)
16
- headers = { key: [model.class.name, action, model.id].join('/') }
17
- PubSubModelSync::Payload.new(payload_data(model), payload_attrs(model, action), headers)
18
- end
19
-
20
- private
21
-
22
- def payload_data(model)
23
- source_props = @attrs.map { |prop| prop.to_s.split(':').first }
24
- data = model.as_json(only: source_props, methods: source_props)
25
- aliased_props = @attrs.select { |prop| prop.to_s.include?(':') }
26
- aliased_props.each do |prop|
27
- source, target = prop.to_s.split(':')
28
- data[target] = data.delete(source)
29
- end
30
- data.symbolize_keys
31
- end
32
-
33
- def payload_attrs(model, action)
34
- {
35
- klass: (as_klass || model.class.name).to_s,
36
- action: action.to_sym
37
- }
38
- end
39
- end
40
- end