pub_sub_model_sync 1.3.0 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (106) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +0 -2
  3. data/.gitignore +2 -1
  4. data/CHANGELOG.md +2 -0
  5. data/Gemfile.lock +20 -16
  6. data/README.md +18 -33
  7. data/lib/pub_sub_model_sync/config.rb +3 -2
  8. data/lib/pub_sub_model_sync/message_processor.rb +7 -2
  9. data/lib/pub_sub_model_sync/message_publisher.rb +5 -2
  10. data/lib/pub_sub_model_sync/mock_rabbit_service.rb +8 -0
  11. data/lib/pub_sub_model_sync/payload.rb +19 -1
  12. data/lib/pub_sub_model_sync/payload_cache_optimizer.rb +51 -0
  13. data/lib/pub_sub_model_sync/service_base.rb +12 -8
  14. data/lib/pub_sub_model_sync/service_google.rb +2 -3
  15. data/lib/pub_sub_model_sync/service_kafka.rb +2 -1
  16. data/lib/pub_sub_model_sync/service_rabbit.rb +6 -3
  17. data/lib/pub_sub_model_sync/version.rb +1 -1
  18. data/lib/pub_sub_model_sync.rb +1 -0
  19. data/pub_sub_model_sync.gemspec +1 -1
  20. metadata +3 -88
  21. data/samples/README.md +0 -50
  22. data/samples/app1/Dockerfile +0 -13
  23. data/samples/app1/Gemfile +0 -37
  24. data/samples/app1/Gemfile.lock +0 -171
  25. data/samples/app1/README.md +0 -24
  26. data/samples/app1/Rakefile +0 -6
  27. data/samples/app1/app/models/application_record.rb +0 -3
  28. data/samples/app1/app/models/concerns/.keep +0 -0
  29. data/samples/app1/app/models/post.rb +0 -19
  30. data/samples/app1/app/models/user.rb +0 -29
  31. data/samples/app1/bin/bundle +0 -114
  32. data/samples/app1/bin/rails +0 -5
  33. data/samples/app1/bin/rake +0 -5
  34. data/samples/app1/bin/setup +0 -33
  35. data/samples/app1/bin/spring +0 -14
  36. data/samples/app1/config/application.rb +0 -40
  37. data/samples/app1/config/boot.rb +0 -4
  38. data/samples/app1/config/credentials.yml.enc +0 -1
  39. data/samples/app1/config/database.yml +0 -25
  40. data/samples/app1/config/environment.rb +0 -5
  41. data/samples/app1/config/environments/development.rb +0 -63
  42. data/samples/app1/config/environments/production.rb +0 -105
  43. data/samples/app1/config/environments/test.rb +0 -57
  44. data/samples/app1/config/initializers/application_controller_renderer.rb +0 -8
  45. data/samples/app1/config/initializers/backtrace_silencers.rb +0 -8
  46. data/samples/app1/config/initializers/cors.rb +0 -16
  47. data/samples/app1/config/initializers/filter_parameter_logging.rb +0 -6
  48. data/samples/app1/config/initializers/inflections.rb +0 -16
  49. data/samples/app1/config/initializers/mime_types.rb +0 -4
  50. data/samples/app1/config/initializers/pubsub.rb +0 -4
  51. data/samples/app1/config/initializers/wrap_parameters.rb +0 -14
  52. data/samples/app1/config/locales/en.yml +0 -33
  53. data/samples/app1/config/master.key +0 -1
  54. data/samples/app1/config/puma.rb +0 -43
  55. data/samples/app1/config/routes.rb +0 -3
  56. data/samples/app1/config/spring.rb +0 -6
  57. data/samples/app1/config.ru +0 -6
  58. data/samples/app1/db/migrate/20210513080700_create_users.rb +0 -12
  59. data/samples/app1/db/migrate/20210513134332_create_posts.rb +0 -11
  60. data/samples/app1/db/schema.rb +0 -34
  61. data/samples/app1/db/seeds.rb +0 -7
  62. data/samples/app1/docker-compose.yml +0 -32
  63. data/samples/app1/log/.keep +0 -0
  64. data/samples/app2/Dockerfile +0 -13
  65. data/samples/app2/Gemfile +0 -37
  66. data/samples/app2/Gemfile.lock +0 -171
  67. data/samples/app2/README.md +0 -24
  68. data/samples/app2/Rakefile +0 -6
  69. data/samples/app2/app/models/application_record.rb +0 -9
  70. data/samples/app2/app/models/concerns/.keep +0 -0
  71. data/samples/app2/app/models/customer.rb +0 -28
  72. data/samples/app2/app/models/post.rb +0 -10
  73. data/samples/app2/bin/bundle +0 -114
  74. data/samples/app2/bin/rails +0 -5
  75. data/samples/app2/bin/rake +0 -5
  76. data/samples/app2/bin/setup +0 -33
  77. data/samples/app2/bin/spring +0 -14
  78. data/samples/app2/config/application.rb +0 -40
  79. data/samples/app2/config/boot.rb +0 -4
  80. data/samples/app2/config/credentials.yml.enc +0 -1
  81. data/samples/app2/config/database.yml +0 -25
  82. data/samples/app2/config/environment.rb +0 -5
  83. data/samples/app2/config/environments/development.rb +0 -63
  84. data/samples/app2/config/environments/production.rb +0 -105
  85. data/samples/app2/config/environments/test.rb +0 -57
  86. data/samples/app2/config/initializers/application_controller_renderer.rb +0 -8
  87. data/samples/app2/config/initializers/backtrace_silencers.rb +0 -8
  88. data/samples/app2/config/initializers/cors.rb +0 -16
  89. data/samples/app2/config/initializers/filter_parameter_logging.rb +0 -6
  90. data/samples/app2/config/initializers/inflections.rb +0 -16
  91. data/samples/app2/config/initializers/mime_types.rb +0 -4
  92. data/samples/app2/config/initializers/pubsub.rb +0 -4
  93. data/samples/app2/config/initializers/wrap_parameters.rb +0 -14
  94. data/samples/app2/config/locales/en.yml +0 -33
  95. data/samples/app2/config/master.key +0 -1
  96. data/samples/app2/config/puma.rb +0 -43
  97. data/samples/app2/config/routes.rb +0 -3
  98. data/samples/app2/config/spring.rb +0 -6
  99. data/samples/app2/config.ru +0 -6
  100. data/samples/app2/db/development.sqlite3 +0 -0
  101. data/samples/app2/db/migrate/20210513080956_create_customers.rb +0 -10
  102. data/samples/app2/db/migrate/20210513135203_create_posts.rb +0 -10
  103. data/samples/app2/db/schema.rb +0 -31
  104. data/samples/app2/db/seeds.rb +0 -7
  105. data/samples/app2/docker-compose.yml +0 -20
  106. data/samples/app2/log/.keep +0 -0
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pub_sub_model_sync
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Owen
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-02-02 00:00:00.000000000 Z
11
+ date: 2022-06-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -119,6 +119,7 @@ files:
119
119
  - lib/pub_sub_model_sync/mock_rabbit_service.rb
120
120
  - lib/pub_sub_model_sync/payload.rb
121
121
  - lib/pub_sub_model_sync/payload_builder.rb
122
+ - lib/pub_sub_model_sync/payload_cache_optimizer.rb
122
123
  - lib/pub_sub_model_sync/publisher_concern.rb
123
124
  - lib/pub_sub_model_sync/railtie.rb
124
125
  - lib/pub_sub_model_sync/run_subscriber.rb
@@ -133,92 +134,6 @@ files:
133
134
  - lib/pub_sub_model_sync/transaction.rb
134
135
  - lib/pub_sub_model_sync/version.rb
135
136
  - pub_sub_model_sync.gemspec
136
- - samples/README.md
137
- - samples/app1/Dockerfile
138
- - samples/app1/Gemfile
139
- - samples/app1/Gemfile.lock
140
- - samples/app1/README.md
141
- - samples/app1/Rakefile
142
- - samples/app1/app/models/application_record.rb
143
- - samples/app1/app/models/concerns/.keep
144
- - samples/app1/app/models/post.rb
145
- - samples/app1/app/models/user.rb
146
- - samples/app1/bin/bundle
147
- - samples/app1/bin/rails
148
- - samples/app1/bin/rake
149
- - samples/app1/bin/setup
150
- - samples/app1/bin/spring
151
- - samples/app1/config.ru
152
- - samples/app1/config/application.rb
153
- - samples/app1/config/boot.rb
154
- - samples/app1/config/credentials.yml.enc
155
- - samples/app1/config/database.yml
156
- - samples/app1/config/environment.rb
157
- - samples/app1/config/environments/development.rb
158
- - samples/app1/config/environments/production.rb
159
- - samples/app1/config/environments/test.rb
160
- - samples/app1/config/initializers/application_controller_renderer.rb
161
- - samples/app1/config/initializers/backtrace_silencers.rb
162
- - samples/app1/config/initializers/cors.rb
163
- - samples/app1/config/initializers/filter_parameter_logging.rb
164
- - samples/app1/config/initializers/inflections.rb
165
- - samples/app1/config/initializers/mime_types.rb
166
- - samples/app1/config/initializers/pubsub.rb
167
- - samples/app1/config/initializers/wrap_parameters.rb
168
- - samples/app1/config/locales/en.yml
169
- - samples/app1/config/master.key
170
- - samples/app1/config/puma.rb
171
- - samples/app1/config/routes.rb
172
- - samples/app1/config/spring.rb
173
- - samples/app1/db/migrate/20210513080700_create_users.rb
174
- - samples/app1/db/migrate/20210513134332_create_posts.rb
175
- - samples/app1/db/schema.rb
176
- - samples/app1/db/seeds.rb
177
- - samples/app1/docker-compose.yml
178
- - samples/app1/log/.keep
179
- - samples/app2/Dockerfile
180
- - samples/app2/Gemfile
181
- - samples/app2/Gemfile.lock
182
- - samples/app2/README.md
183
- - samples/app2/Rakefile
184
- - samples/app2/app/models/application_record.rb
185
- - samples/app2/app/models/concerns/.keep
186
- - samples/app2/app/models/customer.rb
187
- - samples/app2/app/models/post.rb
188
- - samples/app2/bin/bundle
189
- - samples/app2/bin/rails
190
- - samples/app2/bin/rake
191
- - samples/app2/bin/setup
192
- - samples/app2/bin/spring
193
- - samples/app2/config.ru
194
- - samples/app2/config/application.rb
195
- - samples/app2/config/boot.rb
196
- - samples/app2/config/credentials.yml.enc
197
- - samples/app2/config/database.yml
198
- - samples/app2/config/environment.rb
199
- - samples/app2/config/environments/development.rb
200
- - samples/app2/config/environments/production.rb
201
- - samples/app2/config/environments/test.rb
202
- - samples/app2/config/initializers/application_controller_renderer.rb
203
- - samples/app2/config/initializers/backtrace_silencers.rb
204
- - samples/app2/config/initializers/cors.rb
205
- - samples/app2/config/initializers/filter_parameter_logging.rb
206
- - samples/app2/config/initializers/inflections.rb
207
- - samples/app2/config/initializers/mime_types.rb
208
- - samples/app2/config/initializers/pubsub.rb
209
- - samples/app2/config/initializers/wrap_parameters.rb
210
- - samples/app2/config/locales/en.yml
211
- - samples/app2/config/master.key
212
- - samples/app2/config/puma.rb
213
- - samples/app2/config/routes.rb
214
- - samples/app2/config/spring.rb
215
- - samples/app2/db/development.sqlite3
216
- - samples/app2/db/migrate/20210513080956_create_customers.rb
217
- - samples/app2/db/migrate/20210513135203_create_posts.rb
218
- - samples/app2/db/schema.rb
219
- - samples/app2/db/seeds.rb
220
- - samples/app2/docker-compose.yml
221
- - samples/app2/log/.keep
222
137
  homepage: https://github.com/owen2345/pub_sub_model_sync
223
138
  licenses:
224
139
  - MIT
data/samples/README.md DELETED
@@ -1,50 +0,0 @@
1
- # Sample model sync
2
- This is a sample to sync information between rails applications using RabbitMQ
3
-
4
- ## Installation
5
- 1. Create manually the required network to share rabbitMQ accross Rails applications (just if not exist):
6
- ```docker network create shared_app_services```
7
-
8
- 2. Start RabbitMQ server
9
- ```cd samples/app1 && docker-compose up pubsub```
10
-
11
- 3. In another tab access to App2 to listen notifications (Wait for step 2)
12
- - Access to the folder
13
- `cd samples/app2`
14
-
15
- - Build docker and start listener (Received notifications will be printed here)
16
- ```docker-compose run listener```
17
-
18
- - Optional: Open another tab to access application to ensure synced data
19
- ```docker-compose run listener bash -c "rails c```
20
- ```ruby
21
- user = User.last.inspect
22
- user.posts.inspect
23
- ```
24
-
25
- 4. In another tab access to App1 to publish notifications (Wait for step 2)
26
- - Access to the application
27
- `cd samples/app1`
28
-
29
- - Build docker and enter rails console
30
- ```docker-compose run app bash -c "rails db:migrate && rails c"```
31
-
32
- - Create a sample user
33
- ```ruby
34
- user = User.create!(name: 'User 1', posts_attributes: [{ title: 'Post 1' }, { title: 'Post 2' }])
35
- ```
36
- Note: Check app2 console to see notifications (3 notifications)
37
- Note2: Access app2 console to see user and its posts
38
-
39
- - Update previous user
40
- ```ruby
41
- user.update!(name: 'User 1 changed', posts_attributes: user.posts.map { |post| { id: post.id, title: "#{post.title} changed" } })
42
- ```
43
- Note: Check app2 console to see notifications (3 notifications)
44
- Note2: Access app2 console to see changes for user and its posts
45
-
46
- - Destroy previous user
47
- ```ruby
48
- user.destroy!
49
- ```
50
-
@@ -1,13 +0,0 @@
1
- FROM ruby:2.7.1 AS builder
2
-
3
- # Allow apt to work with https-based sources
4
- RUN apt-get update -yqq && apt-get install -yqq --no-install-recommends apt-transport-https
5
-
6
- RUN mkdir /app
7
- WORKDIR /app
8
-
9
- # backend
10
- COPY Gemfile.lock Gemfile /app/
11
- RUN gem install bundler && bundle install
12
-
13
- COPY . /app
data/samples/app1/Gemfile DELETED
@@ -1,37 +0,0 @@
1
- source 'https://rubygems.org'
2
- git_source(:github) { |repo| "https://github.com/#{repo}.git" }
3
-
4
- # Bundle edge Rails instead: gem 'rails', github: 'rails/rails', branch: 'main'
5
- gem 'rails', '~> 6.1.3', '>= 6.1.3.2'
6
- # Use sqlite3 as the database for Active Record
7
- gem 'sqlite3', '~> 1.4'
8
- # Use Puma as the app server
9
- gem 'puma', '~> 5.0'
10
- # Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
11
- # gem 'jbuilder', '~> 2.7'
12
- # Use Active Model has_secure_password
13
- # gem 'bcrypt', '~> 3.1.7'
14
-
15
- # Reduces boot times through caching; required in config/boot.rb
16
- gem 'bootsnap', '>= 1.4.4', require: false
17
-
18
- # Use Rack CORS for handling Cross-Origin Resource Sharing (CORS), making cross-origin AJAX possible
19
- # gem 'rack-cors'
20
-
21
- gem 'pub_sub_model_sync', '>= 1.0'
22
- gem 'bunny' # to use rabbit-mq pub/sub service
23
- gem 'annotate'
24
-
25
- group :development, :test do
26
- # Call 'byebug' anywhere in the code to stop execution and get a debugger console
27
- gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
28
- end
29
-
30
- group :development do
31
- gem 'listen', '~> 3.3'
32
- # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
33
- gem 'spring'
34
- end
35
-
36
- # Windows does not include zoneinfo files, so bundle the tzinfo-data gem
37
- gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
@@ -1,171 +0,0 @@
1
- GEM
2
- remote: https://rubygems.org/
3
- specs:
4
- actioncable (6.1.3.2)
5
- actionpack (= 6.1.3.2)
6
- activesupport (= 6.1.3.2)
7
- nio4r (~> 2.0)
8
- websocket-driver (>= 0.6.1)
9
- actionmailbox (6.1.3.2)
10
- actionpack (= 6.1.3.2)
11
- activejob (= 6.1.3.2)
12
- activerecord (= 6.1.3.2)
13
- activestorage (= 6.1.3.2)
14
- activesupport (= 6.1.3.2)
15
- mail (>= 2.7.1)
16
- actionmailer (6.1.3.2)
17
- actionpack (= 6.1.3.2)
18
- actionview (= 6.1.3.2)
19
- activejob (= 6.1.3.2)
20
- activesupport (= 6.1.3.2)
21
- mail (~> 2.5, >= 2.5.4)
22
- rails-dom-testing (~> 2.0)
23
- actionpack (6.1.3.2)
24
- actionview (= 6.1.3.2)
25
- activesupport (= 6.1.3.2)
26
- rack (~> 2.0, >= 2.0.9)
27
- rack-test (>= 0.6.3)
28
- rails-dom-testing (~> 2.0)
29
- rails-html-sanitizer (~> 1.0, >= 1.2.0)
30
- actiontext (6.1.3.2)
31
- actionpack (= 6.1.3.2)
32
- activerecord (= 6.1.3.2)
33
- activestorage (= 6.1.3.2)
34
- activesupport (= 6.1.3.2)
35
- nokogiri (>= 1.8.5)
36
- actionview (6.1.3.2)
37
- activesupport (= 6.1.3.2)
38
- builder (~> 3.1)
39
- erubi (~> 1.4)
40
- rails-dom-testing (~> 2.0)
41
- rails-html-sanitizer (~> 1.1, >= 1.2.0)
42
- activejob (6.1.3.2)
43
- activesupport (= 6.1.3.2)
44
- globalid (>= 0.3.6)
45
- activemodel (6.1.3.2)
46
- activesupport (= 6.1.3.2)
47
- activerecord (6.1.3.2)
48
- activemodel (= 6.1.3.2)
49
- activesupport (= 6.1.3.2)
50
- activestorage (6.1.3.2)
51
- actionpack (= 6.1.3.2)
52
- activejob (= 6.1.3.2)
53
- activerecord (= 6.1.3.2)
54
- activesupport (= 6.1.3.2)
55
- marcel (~> 1.0.0)
56
- mini_mime (~> 1.0.2)
57
- activesupport (6.1.3.2)
58
- concurrent-ruby (~> 1.0, >= 1.0.2)
59
- i18n (>= 1.6, < 2)
60
- minitest (>= 5.1)
61
- tzinfo (~> 2.0)
62
- zeitwerk (~> 2.3)
63
- amq-protocol (2.3.2)
64
- annotate (3.1.1)
65
- activerecord (>= 3.2, < 7.0)
66
- rake (>= 10.4, < 14.0)
67
- bootsnap (1.7.5)
68
- msgpack (~> 1.0)
69
- builder (3.2.4)
70
- bunny (2.17.0)
71
- amq-protocol (~> 2.3, >= 2.3.1)
72
- byebug (11.1.3)
73
- concurrent-ruby (1.1.8)
74
- crass (1.0.6)
75
- erubi (1.10.0)
76
- ffi (1.15.0)
77
- globalid (0.4.2)
78
- activesupport (>= 4.2.0)
79
- i18n (1.8.10)
80
- concurrent-ruby (~> 1.0)
81
- listen (3.5.1)
82
- rb-fsevent (~> 0.10, >= 0.10.3)
83
- rb-inotify (~> 0.9, >= 0.9.10)
84
- loofah (2.9.1)
85
- crass (~> 1.0.2)
86
- nokogiri (>= 1.5.9)
87
- mail (2.7.1)
88
- mini_mime (>= 0.1.1)
89
- marcel (1.0.1)
90
- method_source (1.0.0)
91
- mini_mime (1.0.3)
92
- mini_portile2 (2.5.1)
93
- minitest (5.14.4)
94
- msgpack (1.4.2)
95
- nio4r (2.5.7)
96
- nokogiri (1.11.3)
97
- mini_portile2 (~> 2.5.0)
98
- racc (~> 1.4)
99
- pub_sub_model_sync (1.0)
100
- rails
101
- puma (5.3.1)
102
- nio4r (~> 2.0)
103
- racc (1.5.2)
104
- rack (2.2.3)
105
- rack-test (1.1.0)
106
- rack (>= 1.0, < 3)
107
- rails (6.1.3.2)
108
- actioncable (= 6.1.3.2)
109
- actionmailbox (= 6.1.3.2)
110
- actionmailer (= 6.1.3.2)
111
- actionpack (= 6.1.3.2)
112
- actiontext (= 6.1.3.2)
113
- actionview (= 6.1.3.2)
114
- activejob (= 6.1.3.2)
115
- activemodel (= 6.1.3.2)
116
- activerecord (= 6.1.3.2)
117
- activestorage (= 6.1.3.2)
118
- activesupport (= 6.1.3.2)
119
- bundler (>= 1.15.0)
120
- railties (= 6.1.3.2)
121
- sprockets-rails (>= 2.0.0)
122
- rails-dom-testing (2.0.3)
123
- activesupport (>= 4.2.0)
124
- nokogiri (>= 1.6)
125
- rails-html-sanitizer (1.3.0)
126
- loofah (~> 2.3)
127
- railties (6.1.3.2)
128
- actionpack (= 6.1.3.2)
129
- activesupport (= 6.1.3.2)
130
- method_source
131
- rake (>= 0.8.7)
132
- thor (~> 1.0)
133
- rake (13.0.3)
134
- rb-fsevent (0.11.0)
135
- rb-inotify (0.10.1)
136
- ffi (~> 1.0)
137
- spring (2.1.1)
138
- sprockets (4.0.2)
139
- concurrent-ruby (~> 1.0)
140
- rack (> 1, < 3)
141
- sprockets-rails (3.2.2)
142
- actionpack (>= 4.0)
143
- activesupport (>= 4.0)
144
- sprockets (>= 3.0.0)
145
- sqlite3 (1.4.2)
146
- thor (1.1.0)
147
- tzinfo (2.0.4)
148
- concurrent-ruby (~> 1.0)
149
- websocket-driver (0.7.3)
150
- websocket-extensions (>= 0.1.0)
151
- websocket-extensions (0.1.5)
152
- zeitwerk (2.4.2)
153
-
154
- PLATFORMS
155
- ruby
156
-
157
- DEPENDENCIES
158
- annotate
159
- bootsnap (>= 1.4.4)
160
- bunny
161
- byebug
162
- listen (~> 3.3)
163
- pub_sub_model_sync (>= 1.0)
164
- puma (~> 5.0)
165
- rails (~> 6.1.3, >= 6.1.3.2)
166
- spring
167
- sqlite3 (~> 1.4)
168
- tzinfo-data
169
-
170
- BUNDLED WITH
171
- 2.2.17
@@ -1,24 +0,0 @@
1
- # README
2
-
3
- This README would normally document whatever steps are necessary to get the
4
- application up and running.
5
-
6
- Things you may want to cover:
7
-
8
- * Ruby version
9
-
10
- * System dependencies
11
-
12
- * Configuration
13
-
14
- * Database creation
15
-
16
- * Database initialization
17
-
18
- * How to run the test suite
19
-
20
- * Services (job queues, cache servers, search engines, etc.)
21
-
22
- * Deployment instructions
23
-
24
- * ...
@@ -1,6 +0,0 @@
1
- # Add your own tasks in files placed in lib/tasks ending in .rake,
2
- # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
3
-
4
- require_relative "config/application"
5
-
6
- Rails.application.load_tasks
@@ -1,3 +0,0 @@
1
- class ApplicationRecord < ActiveRecord::Base
2
- self.abstract_class = true
3
- end
File without changes
@@ -1,19 +0,0 @@
1
- # == Schema Information
2
- #
3
- # Table name: posts
4
- #
5
- # id :integer not null, primary key
6
- # title :string
7
- # description :text
8
- # user_id :integer not null
9
- # created_at :datetime not null
10
- # updated_at :datetime not null
11
- #
12
- class Post < ApplicationRecord
13
- belongs_to :user
14
-
15
- include PubSubModelSync::PublisherConcern
16
- ps_after_commit(%i[create update destroy]) do |action|
17
- ps_publish(action, mapping: %i[id title description user_id])
18
- end
19
- end
@@ -1,29 +0,0 @@
1
- # == Schema Information
2
- #
3
- # Table name: users
4
- #
5
- # id :integer not null, primary key
6
- # name :string
7
- # email :string
8
- # age :integer
9
- # address :string
10
- # created_at :datetime not null
11
- # updated_at :datetime not null
12
- #
13
- class User < ApplicationRecord
14
- has_many :posts, dependent: :destroy
15
- accepts_nested_attributes_for :posts
16
-
17
- include PubSubModelSync::PublisherConcern
18
- ps_after_commit(:create) do
19
- ps_publish(:create, mapping: %i[id name email age])
20
- end
21
-
22
- ps_after_commit(:update) do
23
- ps_publish(:update, mapping: %i[id name email age])
24
- end
25
-
26
- ps_after_commit(:destroy) do
27
- ps_publish(:destroy, mapping: %i[id])
28
- end
29
- end
@@ -1,114 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # frozen_string_literal: true
3
-
4
- #
5
- # This file was generated by Bundler.
6
- #
7
- # The application 'bundle' is installed as part of a gem, and
8
- # this file is here to facilitate running it.
9
- #
10
-
11
- require "rubygems"
12
-
13
- m = Module.new do
14
- module_function
15
-
16
- def invoked_as_script?
17
- File.expand_path($0) == File.expand_path(__FILE__)
18
- end
19
-
20
- def env_var_version
21
- ENV["BUNDLER_VERSION"]
22
- end
23
-
24
- def cli_arg_version
25
- return unless invoked_as_script? # don't want to hijack other binstubs
26
- return unless "update".start_with?(ARGV.first || " ") # must be running `bundle update`
27
- bundler_version = nil
28
- update_index = nil
29
- ARGV.each_with_index do |a, i|
30
- if update_index && update_index.succ == i && a =~ Gem::Version::ANCHORED_VERSION_PATTERN
31
- bundler_version = a
32
- end
33
- next unless a =~ /\A--bundler(?:[= ](#{Gem::Version::VERSION_PATTERN}))?\z/
34
- bundler_version = $1
35
- update_index = i
36
- end
37
- bundler_version
38
- end
39
-
40
- def gemfile
41
- gemfile = ENV["BUNDLE_GEMFILE"]
42
- return gemfile if gemfile && !gemfile.empty?
43
-
44
- File.expand_path("../../Gemfile", __FILE__)
45
- end
46
-
47
- def lockfile
48
- lockfile =
49
- case File.basename(gemfile)
50
- when "gems.rb" then gemfile.sub(/\.rb$/, gemfile)
51
- else "#{gemfile}.lock"
52
- end
53
- File.expand_path(lockfile)
54
- end
55
-
56
- def lockfile_version
57
- return unless File.file?(lockfile)
58
- lockfile_contents = File.read(lockfile)
59
- return unless lockfile_contents =~ /\n\nBUNDLED WITH\n\s{2,}(#{Gem::Version::VERSION_PATTERN})\n/
60
- Regexp.last_match(1)
61
- end
62
-
63
- def bundler_version
64
- @bundler_version ||=
65
- env_var_version || cli_arg_version ||
66
- lockfile_version
67
- end
68
-
69
- def bundler_requirement
70
- return "#{Gem::Requirement.default}.a" unless bundler_version
71
-
72
- bundler_gem_version = Gem::Version.new(bundler_version)
73
-
74
- requirement = bundler_gem_version.approximate_recommendation
75
-
76
- return requirement unless Gem::Version.new(Gem::VERSION) < Gem::Version.new("2.7.0")
77
-
78
- requirement += ".a" if bundler_gem_version.prerelease?
79
-
80
- requirement
81
- end
82
-
83
- def load_bundler!
84
- ENV["BUNDLE_GEMFILE"] ||= gemfile
85
-
86
- activate_bundler
87
- end
88
-
89
- def activate_bundler
90
- gem_error = activation_error_handling do
91
- gem "bundler", bundler_requirement
92
- end
93
- return if gem_error.nil?
94
- require_error = activation_error_handling do
95
- require "bundler/version"
96
- end
97
- return if require_error.nil? && Gem::Requirement.new(bundler_requirement).satisfied_by?(Gem::Version.new(Bundler::VERSION))
98
- warn "Activating bundler (#{bundler_requirement}) failed:\n#{gem_error.message}\n\nTo install the version of bundler this project requires, run `gem install bundler -v '#{bundler_requirement}'`"
99
- exit 42
100
- end
101
-
102
- def activation_error_handling
103
- yield
104
- nil
105
- rescue StandardError, LoadError => e
106
- e
107
- end
108
- end
109
-
110
- m.load_bundler!
111
-
112
- if m.invoked_as_script?
113
- load Gem.bin_path("bundler", "bundle")
114
- end
@@ -1,5 +0,0 @@
1
- #!/usr/bin/env ruby
2
- load File.expand_path("spring", __dir__)
3
- APP_PATH = File.expand_path('../config/application', __dir__)
4
- require_relative "../config/boot"
5
- require "rails/commands"
@@ -1,5 +0,0 @@
1
- #!/usr/bin/env ruby
2
- load File.expand_path("spring", __dir__)
3
- require_relative "../config/boot"
4
- require "rake"
5
- Rake.application.run
@@ -1,33 +0,0 @@
1
- #!/usr/bin/env ruby
2
- require "fileutils"
3
-
4
- # path to your application root.
5
- APP_ROOT = File.expand_path('..', __dir__)
6
-
7
- def system!(*args)
8
- system(*args) || abort("\n== Command #{args} failed ==")
9
- end
10
-
11
- FileUtils.chdir APP_ROOT do
12
- # This script is a way to set up or update your development environment automatically.
13
- # This script is idempotent, so that you can run it at any time and get an expectable outcome.
14
- # Add necessary setup steps to this file.
15
-
16
- puts '== Installing dependencies =='
17
- system! 'gem install bundler --conservative'
18
- system('bundle check') || system!('bundle install')
19
-
20
- # puts "\n== Copying sample files =="
21
- # unless File.exist?('config/database.yml')
22
- # FileUtils.cp 'config/database.yml.sample', 'config/database.yml'
23
- # end
24
-
25
- puts "\n== Preparing database =="
26
- system! 'bin/rails db:prepare'
27
-
28
- puts "\n== Removing old logs and tempfiles =="
29
- system! 'bin/rails log:clear tmp:clear'
30
-
31
- puts "\n== Restarting application server =="
32
- system! 'bin/rails restart'
33
- end
@@ -1,14 +0,0 @@
1
- #!/usr/bin/env ruby
2
- if !defined?(Spring) && [nil, "development", "test"].include?(ENV["RAILS_ENV"])
3
- gem "bundler"
4
- require "bundler"
5
-
6
- # Load Spring without loading other gems in the Gemfile, for speed.
7
- Bundler.locked_gems&.specs&.find { |spec| spec.name == "spring" }&.tap do |spring|
8
- Gem.use_paths Gem.dir, Bundler.bundle_path.to_s, *Gem.path
9
- gem "spring", spring.version
10
- require "spring/binstub"
11
- rescue Gem::LoadError
12
- # Ignore when Spring is not installed.
13
- end
14
- end