pub_sub_model_sync 0.4.0 → 0.4.1
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.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +24 -7
- data/.rubocop.yml +0 -2
- data/CHANGELOG.md +6 -0
- data/Gemfile.lock +1 -2
- data/README.md +9 -15
- data/gemfiles/Gemfile_4 +16 -0
- data/gemfiles/Gemfile_5 +14 -0
- data/gemfiles/Gemfile_6 +14 -0
- data/lib/pub_sub_model_sync/publisher_concern.rb +3 -1
- data/lib/pub_sub_model_sync/service_google.rb +2 -2
- data/lib/pub_sub_model_sync/service_kafka.rb +2 -2
- data/lib/pub_sub_model_sync/service_rabbit.rb +2 -2
- data/lib/pub_sub_model_sync/subscriber.rb +3 -0
- data/lib/pub_sub_model_sync/version.rb +1 -1
- data/pub_sub_model_sync.gemspec +0 -1
- metadata +5 -25
- data/.idea/.gitignore +0 -8
- data/.idea/.rakeTasks +0 -7
- data/.idea/codeStyles/codeStyleConfig.xml +0 -5
- data/.idea/encodings.xml +0 -4
- data/.idea/inspectionProfiles/Project_Default.xml +0 -16
- data/.idea/misc.xml +0 -7
- data/.idea/modules.xml +0 -8
- data/.idea/pub_sub_model_sync.iml +0 -96
- data/.idea/vcs.xml +0 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a910b6aaf6b7051bac254fe6ae47a718c52bf963e6226192f3f5e7f32053cca7
|
4
|
+
data.tar.gz: dae3eb67c4b2aff89864688365c5e73a4328c6e477d3e1e8595ddfee3201e697
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f74d72720c029d27746a44e870e440458eeb7d09bd4cd3768dd024abe52881c43c1cdb1601344b92e6e8d012e098b72faab592a115692e897d0808e558958fcd
|
7
|
+
data.tar.gz: e8613ccd802d0e47eca855e5ed216cba50a75d19c0aea0d3171cfede8bb26cad3b0ad7266a1f15f584c274d7aa3458af375594043afb43c179e941847bc49467
|
data/.github/workflows/ruby.yml
CHANGED
@@ -6,28 +6,45 @@ on:
|
|
6
6
|
- master
|
7
7
|
pull_request:
|
8
8
|
|
9
|
-
|
10
9
|
jobs:
|
11
10
|
build:
|
12
11
|
name: Tests and Code Style
|
13
12
|
runs-on: ubuntu-latest
|
13
|
+
strategy:
|
14
|
+
matrix:
|
15
|
+
ruby: [2.4, 2.5, 2.6]
|
16
|
+
rails: [4, 5, 6]
|
17
|
+
include:
|
18
|
+
- ruby: 2.7
|
19
|
+
rails: 6
|
20
|
+
exclude: # rails 6 requires ruby >= 2.5
|
21
|
+
- ruby: 2.4
|
22
|
+
rails: 6
|
14
23
|
|
15
24
|
steps:
|
16
25
|
- uses: actions/checkout@v2
|
17
|
-
- name: Set up Ruby
|
26
|
+
- name: Set up Ruby
|
18
27
|
uses: actions/setup-ruby@v1
|
19
28
|
with:
|
20
|
-
ruby-version:
|
21
|
-
|
29
|
+
ruby-version: ${{ matrix.ruby }}
|
22
30
|
- name: Install sqlite3
|
23
31
|
run: sudo apt-get install libsqlite3-dev
|
24
32
|
|
25
|
-
- name:
|
33
|
+
- name: Install bundler
|
34
|
+
env:
|
35
|
+
GEMFILE_PATH: gemfiles/Gemfile_${{ matrix.rails }}
|
36
|
+
RAILS_V: ${{ matrix.rails }}
|
26
37
|
run: |
|
27
|
-
|
28
|
-
|
38
|
+
rm -f Gemfile.lock && rm -f Gemfile
|
39
|
+
cp $GEMFILE_PATH ./Gemfile
|
40
|
+
bundler_v='2.1.4'
|
41
|
+
if [ $RAILS_V = "4" ]; then bundler_v="1.16.6"; fi
|
42
|
+
gem install bundler -v "~> $bundler_v"
|
43
|
+
bundle _${bundler_v}_ install --jobs 4 --retry 3
|
44
|
+
|
29
45
|
- name: Tests (rspec)
|
30
46
|
run: |
|
31
47
|
bundle exec rspec
|
48
|
+
|
32
49
|
- name: Code style (Rubocop)
|
33
50
|
run: bundle exec rubocop
|
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
|
+
# 0.4.1 (May 06, 2020)
|
4
|
+
- chore: improve log messages
|
5
|
+
- feat: do not update model if no changes
|
6
|
+
- feat: skip publisher after updating if no changes
|
7
|
+
|
8
|
+
|
3
9
|
# 0.4.0 (May 06, 2020)
|
4
10
|
- rename as_klass to from_klass and as_action to from_action for subscribers
|
5
11
|
- refactor subscribers to be independent
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -118,7 +118,7 @@ class User < ActiveRecord::Base
|
|
118
118
|
puts 'Class message called through custom_greeting'
|
119
119
|
end
|
120
120
|
|
121
|
-
# def self.ps_find_model(data
|
121
|
+
# def self.ps_find_model(data)
|
122
122
|
# where(email: data[:email], ...).first_or_initialize
|
123
123
|
# end
|
124
124
|
end
|
@@ -126,24 +126,18 @@ end
|
|
126
126
|
|
127
127
|
Note: Be careful with collision of names
|
128
128
|
```
|
129
|
-
|
130
|
-
|
131
|
-
ps_publish %i[name_data:name key_data:key] # use alias to avoid collision
|
132
|
-
|
133
|
-
def key_data
|
134
|
-
name
|
135
|
-
end
|
136
|
-
end
|
129
|
+
# ps_publish %i[name_data:name name:key] # key will be replaced with name_data
|
130
|
+
ps_publish %i[name_data:name key_data:key] # use alias to avoid collision
|
137
131
|
```
|
138
132
|
|
139
133
|
## API
|
140
134
|
### Subscribers
|
141
|
-
- Permit to configure class level
|
135
|
+
- Permit to configure class level subscriptions
|
142
136
|
```ps_class_subscribe(action_name, from_action: nil, from_klass: nil)```
|
143
137
|
* from_action: (Optional) Source method name
|
144
138
|
* from_klass: (Optional) Source class name
|
145
139
|
|
146
|
-
- Permit to configure instance level
|
140
|
+
- Permit to configure instance level subscriptions (CRUD)
|
147
141
|
```ps_subscribe(attrs, from_klass: nil, actions: nil, id: nil)```
|
148
142
|
* attrs: (Array/Required) Array of all attributes to be synced
|
149
143
|
* from_klass: (String/Optional) Source class name (Instead of the model class name, will use this value)
|
@@ -151,17 +145,16 @@ end
|
|
151
145
|
* id: (Sym|Array/Optional, default: id) Attr identifier(s) to find the corresponding model
|
152
146
|
|
153
147
|
- Permit to configure a custom model finder
|
154
|
-
```ps_find_model(data
|
148
|
+
```ps_find_model(data)```
|
155
149
|
* data: (Hash) Data received from sync
|
156
|
-
* settings: (Hash(:klass, :action)) Class and action name from sync
|
157
150
|
Must return an existent or a new model object
|
158
151
|
|
159
152
|
- Get crud subscription configured for the class
|
160
153
|
```User.ps_subscriber(action_name)```
|
161
154
|
* action_name (default :create, :sym): can be :create, :update, :destroy
|
162
155
|
|
163
|
-
- Inspect all configured
|
164
|
-
```PubSubModelSync::Config.
|
156
|
+
- Inspect all configured subscribers
|
157
|
+
```PubSubModelSync::Config.subscribers```
|
165
158
|
|
166
159
|
### Publishers
|
167
160
|
- Permit to configure crud publishers
|
@@ -172,6 +165,7 @@ end
|
|
172
165
|
|
173
166
|
- Permit to cancel sync called after create/update/destroy (Before initializing sync service)
|
174
167
|
```model.ps_skip_callback?(action)```
|
168
|
+
Default: False
|
175
169
|
Note: Return true to cancel sync
|
176
170
|
|
177
171
|
- Callback called before preparing data for sync (Permit to stop sync)
|
data/gemfiles/Gemfile_4
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
source "https://rubygems.org"
|
2
|
+
|
3
|
+
gem 'rubocop'
|
4
|
+
gem 'bunny' # rabbit-mq
|
5
|
+
gem 'google-cloud-pubsub' # google pub/sub
|
6
|
+
gem 'ruby-kafka' # kafka pub/sub
|
7
|
+
gem 'rails', '~> 4'
|
8
|
+
gem 'bundler'
|
9
|
+
gem 'sqlite3', '1.3.13'
|
10
|
+
|
11
|
+
group :test do
|
12
|
+
gem 'database_cleaner-active_record'
|
13
|
+
end
|
14
|
+
|
15
|
+
# Specify your gem's dependencies in pub_sub_model_sync.gemspec
|
16
|
+
gemspec
|
data/gemfiles/Gemfile_5
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
source "https://rubygems.org"
|
2
|
+
|
3
|
+
gem 'rubocop'
|
4
|
+
gem 'bunny' # rabbit-mq
|
5
|
+
gem 'google-cloud-pubsub' # google pub/sub
|
6
|
+
gem 'ruby-kafka' # kafka pub/sub
|
7
|
+
gem 'rails', '~> 5'
|
8
|
+
|
9
|
+
group :test do
|
10
|
+
gem 'database_cleaner-active_record'
|
11
|
+
end
|
12
|
+
|
13
|
+
# Specify your gem's dependencies in pub_sub_model_sync.gemspec
|
14
|
+
gemspec
|
data/gemfiles/Gemfile_6
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
source "https://rubygems.org"
|
2
|
+
|
3
|
+
gem 'rubocop'
|
4
|
+
gem 'bunny' # rabbit-mq
|
5
|
+
gem 'google-cloud-pubsub' # google pub/sub
|
6
|
+
gem 'ruby-kafka' # kafka pub/sub
|
7
|
+
gem 'rails', '~> 6'
|
8
|
+
|
9
|
+
group :test do
|
10
|
+
gem 'database_cleaner-active_record'
|
11
|
+
end
|
12
|
+
|
13
|
+
# Specify your gem's dependencies in pub_sub_model_sync.gemspec
|
14
|
+
gemspec
|
@@ -11,6 +11,7 @@ module PubSubModelSync
|
|
11
11
|
false
|
12
12
|
end
|
13
13
|
|
14
|
+
# TODO: make it using respond_to?(:ps_skip_sync?)
|
14
15
|
# before preparing data to sync
|
15
16
|
def ps_skip_sync?(_action)
|
16
17
|
false
|
@@ -63,7 +64,8 @@ module PubSubModelSync
|
|
63
64
|
|
64
65
|
def ps_register_callback(action, publisher)
|
65
66
|
after_commit(on: action) do |model|
|
66
|
-
|
67
|
+
if !(action == :update && previous_changes.empty?) &&
|
68
|
+
!model.ps_skip_callback?(action)
|
67
69
|
klass = PubSubModelSync::MessagePublisher
|
68
70
|
klass.publish_model(model, action.to_sym, publisher)
|
69
71
|
end
|
@@ -29,11 +29,11 @@ module PubSubModelSync
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def publish(data, attributes)
|
32
|
-
log("Publishing message: #{[
|
32
|
+
log("Publishing message: #{[attributes, data]}")
|
33
33
|
payload = { data: data, attributes: attributes }.to_json
|
34
34
|
topic.publish(payload, { SERVICE_KEY => true })
|
35
35
|
rescue => e
|
36
|
-
info = [
|
36
|
+
info = [attributes, data, e.message, e.backtrace]
|
37
37
|
log("Error publishing: #{info}", :error)
|
38
38
|
end
|
39
39
|
|
@@ -29,12 +29,12 @@ module PubSubModelSync
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def publish(data, attributes)
|
32
|
-
log("Publishing: #{[
|
32
|
+
log("Publishing: #{[attributes, data]}")
|
33
33
|
payload = { data: data, attributes: attributes }
|
34
34
|
producer.produce(payload.to_json, message_settings)
|
35
35
|
producer.deliver_messages
|
36
36
|
rescue => e
|
37
|
-
info = [
|
37
|
+
info = [attributes, data, e.message, e.backtrace]
|
38
38
|
log("Error publishing: #{info}", :error)
|
39
39
|
end
|
40
40
|
|
@@ -28,7 +28,7 @@ module PubSubModelSync
|
|
28
28
|
end
|
29
29
|
|
30
30
|
def publish(data, attributes)
|
31
|
-
log("Publishing: #{[
|
31
|
+
log("Publishing: #{[attributes, data]}")
|
32
32
|
deliver_data(data, attributes)
|
33
33
|
# TODO: max retry
|
34
34
|
rescue Timeout::Error => e
|
@@ -36,7 +36,7 @@ module PubSubModelSync
|
|
36
36
|
initialize
|
37
37
|
retry
|
38
38
|
rescue => e
|
39
|
-
info = [
|
39
|
+
info = [attributes, data, e.message, e.backtrace]
|
40
40
|
log("Error publishing: #{info}", :error)
|
41
41
|
end
|
42
42
|
|
@@ -37,6 +37,8 @@ module PubSubModelSync
|
|
37
37
|
model.destroy!
|
38
38
|
else
|
39
39
|
populate_model(model, message)
|
40
|
+
return if action == :update && !model.changed? # skip if no changes
|
41
|
+
|
40
42
|
model.save!
|
41
43
|
end
|
42
44
|
end
|
@@ -57,6 +59,7 @@ module PubSubModelSync
|
|
57
59
|
|
58
60
|
def populate_model(model, message)
|
59
61
|
values = message.slice(*attrs)
|
62
|
+
puts "===========values: #{values.inspect}-------#{message.inspect}"
|
60
63
|
values.each do |attr, value|
|
61
64
|
model.send("#{attr}=", value)
|
62
65
|
end
|
data/pub_sub_model_sync.gemspec
CHANGED
metadata
CHANGED
@@ -1,29 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pub_sub_model_sync
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Owen
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-05-
|
11
|
+
date: 2020-05-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: activesupport
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ">="
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '0'
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - ">="
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '0'
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: rails
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -103,15 +89,6 @@ extra_rdoc_files: []
|
|
103
89
|
files:
|
104
90
|
- ".github/workflows/ruby.yml"
|
105
91
|
- ".gitignore"
|
106
|
-
- ".idea/.gitignore"
|
107
|
-
- ".idea/.rakeTasks"
|
108
|
-
- ".idea/codeStyles/codeStyleConfig.xml"
|
109
|
-
- ".idea/encodings.xml"
|
110
|
-
- ".idea/inspectionProfiles/Project_Default.xml"
|
111
|
-
- ".idea/misc.xml"
|
112
|
-
- ".idea/modules.xml"
|
113
|
-
- ".idea/pub_sub_model_sync.iml"
|
114
|
-
- ".idea/vcs.xml"
|
115
92
|
- ".rspec"
|
116
93
|
- ".rubocop.yml"
|
117
94
|
- CHANGELOG.md
|
@@ -123,6 +100,9 @@ files:
|
|
123
100
|
- Rakefile
|
124
101
|
- bin/console
|
125
102
|
- bin/setup
|
103
|
+
- gemfiles/Gemfile_4
|
104
|
+
- gemfiles/Gemfile_5
|
105
|
+
- gemfiles/Gemfile_6
|
126
106
|
- lib/pub_sub_model_sync.rb
|
127
107
|
- lib/pub_sub_model_sync/config.rb
|
128
108
|
- lib/pub_sub_model_sync/connector.rb
|
data/.idea/.gitignore
DELETED
data/.idea/.rakeTasks
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
-
<Settings><!--This file was automatically generated by Ruby plugin.
|
3
|
-
You are allowed to:
|
4
|
-
1. Remove rake task
|
5
|
-
2. Add existing rake tasks
|
6
|
-
To add existing rake tasks automatically delete this file and reload the project.
|
7
|
-
--><RakeGroup description="" fullCmd="" taksId="rake"><RakeTask description="Build pub_sub_model_sync-0.1.0.gem into the pkg directory" fullCmd="build" taksId="build" /><RakeTask description="Remove any temporary products" fullCmd="clean" taksId="clean" /><RakeTask description="Remove any generated files" fullCmd="clobber" taksId="clobber" /><RakeTask description="Build and install pub_sub_model_sync-0.1.0.gem into system gems" fullCmd="install" taksId="install" /><RakeGroup description="" fullCmd="" taksId="install"><RakeTask description="Build and install pub_sub_model_sync-0.1.0.gem into system gems without network access" fullCmd="install:local" taksId="local" /></RakeGroup><RakeTask description="Create tag v0.1.0 and build and push pub_sub_model_sync-0.1.0.gem to TODO: Set to 'http://mygemserver.com'" fullCmd="release[remote]" taksId="release[remote]" /><RakeTask description="Run RSpec code examples" fullCmd="spec" taksId="spec" /><RakeTask description="" fullCmd="default" taksId="default" /><RakeTask description="" fullCmd="release" taksId="release" /><RakeGroup description="" fullCmd="" taksId="release"><RakeTask description="" fullCmd="release:guard_clean" taksId="guard_clean" /><RakeTask description="" fullCmd="release:rubygem_push" taksId="rubygem_push" /><RakeTask description="" fullCmd="release:source_control_push" taksId="source_control_push" /></RakeGroup></RakeGroup></Settings>
|
data/.idea/encodings.xml
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
<component name="InspectionProjectProfileManager">
|
2
|
-
<profile version="1.0">
|
3
|
-
<option name="myName" value="Project Default" />
|
4
|
-
<inspection_tool class="Rubocop" enabled="true" level="WARNING" enabled_by_default="true">
|
5
|
-
<option name="mySeverityMap">
|
6
|
-
<map>
|
7
|
-
<entry key="convention" value="ERROR" />
|
8
|
-
<entry key="error" value="ERROR" />
|
9
|
-
<entry key="fatal" value="ERROR" />
|
10
|
-
<entry key="refactor" value="ERROR" />
|
11
|
-
<entry key="warning" value="ERROR" />
|
12
|
-
</map>
|
13
|
-
</option>
|
14
|
-
</inspection_tool>
|
15
|
-
</profile>
|
16
|
-
</component>
|
data/.idea/misc.xml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
-
<project version="4">
|
3
|
-
<component name="JavaScriptSettings">
|
4
|
-
<option name="languageLevel" value="ES6" />
|
5
|
-
</component>
|
6
|
-
<component name="ProjectRootManager" version="2" project-jdk-name="RVM: ruby-2.5.3" project-jdk-type="RUBY_SDK" />
|
7
|
-
</project>
|
data/.idea/modules.xml
DELETED
@@ -1,8 +0,0 @@
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
-
<project version="4">
|
3
|
-
<component name="ProjectModuleManager">
|
4
|
-
<modules>
|
5
|
-
<module fileurl="file://$PROJECT_DIR$/.idea/pub_sub_model_sync.iml" filepath="$PROJECT_DIR$/.idea/pub_sub_model_sync.iml" />
|
6
|
-
</modules>
|
7
|
-
</component>
|
8
|
-
</project>
|
@@ -1,96 +0,0 @@
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
-
<module type="RUBY_MODULE" version="4">
|
3
|
-
<component name="ModuleRunConfigurationManager">
|
4
|
-
<shared />
|
5
|
-
</component>
|
6
|
-
<component name="NewModuleRootManager">
|
7
|
-
<content url="file://$MODULE_DIR$" />
|
8
|
-
<orderEntry type="jdk" jdkName="RVM: ruby-2.6.5" jdkType="RUBY_SDK" />
|
9
|
-
<orderEntry type="sourceFolder" forTests="false" />
|
10
|
-
<orderEntry type="library" scope="PROVIDED" name="actioncable (v6.0.2.2, RVM: ruby-2.6.5) [gem]" level="application" />
|
11
|
-
<orderEntry type="library" scope="PROVIDED" name="actionmailbox (v6.0.2.2, RVM: ruby-2.6.5) [gem]" level="application" />
|
12
|
-
<orderEntry type="library" scope="PROVIDED" name="actionmailer (v6.0.2.2, RVM: ruby-2.6.5) [gem]" level="application" />
|
13
|
-
<orderEntry type="library" scope="PROVIDED" name="actionpack (v6.0.2.2, RVM: ruby-2.6.5) [gem]" level="application" />
|
14
|
-
<orderEntry type="library" scope="PROVIDED" name="actiontext (v6.0.2.2, RVM: ruby-2.6.5) [gem]" level="application" />
|
15
|
-
<orderEntry type="library" scope="PROVIDED" name="actionview (v6.0.2.2, RVM: ruby-2.6.5) [gem]" level="application" />
|
16
|
-
<orderEntry type="library" scope="PROVIDED" name="activejob (v6.0.2.2, RVM: ruby-2.6.5) [gem]" level="application" />
|
17
|
-
<orderEntry type="library" scope="PROVIDED" name="activemodel (v6.0.2.2, RVM: ruby-2.6.5) [gem]" level="application" />
|
18
|
-
<orderEntry type="library" scope="PROVIDED" name="activerecord (v6.0.2.2, RVM: ruby-2.6.5) [gem]" level="application" />
|
19
|
-
<orderEntry type="library" scope="PROVIDED" name="activestorage (v6.0.2.2, RVM: ruby-2.6.5) [gem]" level="application" />
|
20
|
-
<orderEntry type="library" scope="PROVIDED" name="activesupport (v6.0.2.2, RVM: ruby-2.6.5) [gem]" level="application" />
|
21
|
-
<orderEntry type="library" scope="PROVIDED" name="addressable (v2.7.0, RVM: ruby-2.6.5) [gem]" level="application" />
|
22
|
-
<orderEntry type="library" scope="PROVIDED" name="amq-protocol (v2.3.0, RVM: ruby-2.6.5) [gem]" level="application" />
|
23
|
-
<orderEntry type="library" scope="PROVIDED" name="ast (v2.4.0, RVM: ruby-2.6.5) [gem]" level="application" />
|
24
|
-
<orderEntry type="library" scope="PROVIDED" name="builder (v3.2.4, RVM: ruby-2.6.5) [gem]" level="application" />
|
25
|
-
<orderEntry type="library" scope="PROVIDED" name="bundler (v2.1.4, RVM: ruby-2.6.5) [gem]" level="application" />
|
26
|
-
<orderEntry type="library" scope="PROVIDED" name="bunny (v2.14.3, RVM: ruby-2.6.5) [gem]" level="application" />
|
27
|
-
<orderEntry type="library" scope="PROVIDED" name="concurrent-ruby (v1.1.6, RVM: ruby-2.6.5) [gem]" level="application" />
|
28
|
-
<orderEntry type="library" scope="PROVIDED" name="crass (v1.0.6, RVM: ruby-2.6.5) [gem]" level="application" />
|
29
|
-
<orderEntry type="library" scope="PROVIDED" name="database_cleaner (v1.8.4, RVM: ruby-2.6.5) [gem]" level="application" />
|
30
|
-
<orderEntry type="library" scope="PROVIDED" name="database_cleaner-active_record (v1.8.0, RVM: ruby-2.6.5) [gem]" level="application" />
|
31
|
-
<orderEntry type="library" scope="PROVIDED" name="diff-lcs (v1.3, RVM: ruby-2.6.5) [gem]" level="application" />
|
32
|
-
<orderEntry type="library" scope="PROVIDED" name="digest-crc (v0.5.1, RVM: ruby-2.6.5) [gem]" level="application" />
|
33
|
-
<orderEntry type="library" scope="PROVIDED" name="erubi (v1.9.0, RVM: ruby-2.6.5) [gem]" level="application" />
|
34
|
-
<orderEntry type="library" scope="PROVIDED" name="faraday (v0.17.3, RVM: ruby-2.6.5) [gem]" level="application" />
|
35
|
-
<orderEntry type="library" scope="PROVIDED" name="globalid (v0.4.2, RVM: ruby-2.6.5) [gem]" level="application" />
|
36
|
-
<orderEntry type="library" scope="PROVIDED" name="google-cloud-core (v1.3.2, RVM: ruby-2.6.5) [gem]" level="application" />
|
37
|
-
<orderEntry type="library" scope="PROVIDED" name="google-cloud-env (v1.2.1, RVM: ruby-2.6.5) [gem]" level="application" />
|
38
|
-
<orderEntry type="library" scope="PROVIDED" name="google-cloud-pubsub (v1.0.2, RVM: ruby-2.6.5) [gem]" level="application" />
|
39
|
-
<orderEntry type="library" scope="PROVIDED" name="google-gax (v1.7.1, RVM: ruby-2.6.5) [gem]" level="application" />
|
40
|
-
<orderEntry type="library" scope="PROVIDED" name="google-protobuf (v3.11.4, RVM: ruby-2.6.5) [gem]" level="application" />
|
41
|
-
<orderEntry type="library" scope="PROVIDED" name="googleapis-common-protos (v1.3.9, RVM: ruby-2.6.5) [gem]" level="application" />
|
42
|
-
<orderEntry type="library" scope="PROVIDED" name="googleapis-common-protos-types (v1.0.4, RVM: ruby-2.6.5) [gem]" level="application" />
|
43
|
-
<orderEntry type="library" scope="PROVIDED" name="googleauth (v0.9.0, RVM: ruby-2.6.5) [gem]" level="application" />
|
44
|
-
<orderEntry type="library" scope="PROVIDED" name="grpc (v1.27.0, RVM: ruby-2.6.5) [gem]" level="application" />
|
45
|
-
<orderEntry type="library" scope="PROVIDED" name="grpc-google-iam-v1 (v0.6.9, RVM: ruby-2.6.5) [gem]" level="application" />
|
46
|
-
<orderEntry type="library" scope="PROVIDED" name="i18n (v1.8.2, RVM: ruby-2.6.5) [gem]" level="application" />
|
47
|
-
<orderEntry type="library" scope="PROVIDED" name="jaro_winkler (v1.5.4, RVM: ruby-2.6.5) [gem]" level="application" />
|
48
|
-
<orderEntry type="library" scope="PROVIDED" name="jwt (v2.2.1, RVM: ruby-2.6.5) [gem]" level="application" />
|
49
|
-
<orderEntry type="library" scope="PROVIDED" name="loofah (v2.5.0, RVM: ruby-2.6.5) [gem]" level="application" />
|
50
|
-
<orderEntry type="library" scope="PROVIDED" name="mail (v2.7.1, RVM: ruby-2.6.5) [gem]" level="application" />
|
51
|
-
<orderEntry type="library" scope="PROVIDED" name="marcel (v0.3.3, RVM: ruby-2.6.5) [gem]" level="application" />
|
52
|
-
<orderEntry type="library" scope="PROVIDED" name="memoist (v0.16.2, RVM: ruby-2.6.5) [gem]" level="application" />
|
53
|
-
<orderEntry type="library" scope="PROVIDED" name="method_source (v1.0.0, RVM: ruby-2.6.5) [gem]" level="application" />
|
54
|
-
<orderEntry type="library" scope="PROVIDED" name="mimemagic (v0.3.4, RVM: ruby-2.6.5) [gem]" level="application" />
|
55
|
-
<orderEntry type="library" scope="PROVIDED" name="mini_mime (v1.0.2, RVM: ruby-2.6.5) [gem]" level="application" />
|
56
|
-
<orderEntry type="library" scope="PROVIDED" name="mini_portile2 (v2.4.0, RVM: ruby-2.6.5) [gem]" level="application" />
|
57
|
-
<orderEntry type="library" scope="PROVIDED" name="minitest (v5.14.0, RVM: ruby-2.6.5) [gem]" level="application" />
|
58
|
-
<orderEntry type="library" scope="PROVIDED" name="multi_json (v1.14.1, RVM: ruby-2.6.5) [gem]" level="application" />
|
59
|
-
<orderEntry type="library" scope="PROVIDED" name="multipart-post (v2.1.1, RVM: ruby-2.6.5) [gem]" level="application" />
|
60
|
-
<orderEntry type="library" scope="PROVIDED" name="nio4r (v2.5.2, RVM: ruby-2.6.5) [gem]" level="application" />
|
61
|
-
<orderEntry type="library" scope="PROVIDED" name="nokogiri (v1.10.9, RVM: ruby-2.6.5) [gem]" level="application" />
|
62
|
-
<orderEntry type="library" scope="PROVIDED" name="os (v1.0.1, RVM: ruby-2.6.5) [gem]" level="application" />
|
63
|
-
<orderEntry type="library" scope="PROVIDED" name="parallel (v1.19.1, RVM: ruby-2.6.5) [gem]" level="application" />
|
64
|
-
<orderEntry type="library" scope="PROVIDED" name="parser (v2.7.0.4, RVM: ruby-2.6.5) [gem]" level="application" />
|
65
|
-
<orderEntry type="library" scope="PROVIDED" name="public_suffix (v4.0.3, RVM: ruby-2.6.5) [gem]" level="application" />
|
66
|
-
<orderEntry type="library" scope="PROVIDED" name="rack (v2.2.2, RVM: ruby-2.6.5) [gem]" level="application" />
|
67
|
-
<orderEntry type="library" scope="PROVIDED" name="rack-test (v1.1.0, RVM: ruby-2.6.5) [gem]" level="application" />
|
68
|
-
<orderEntry type="library" scope="PROVIDED" name="rails (v6.0.2.2, RVM: ruby-2.6.5) [gem]" level="application" />
|
69
|
-
<orderEntry type="library" scope="PROVIDED" name="rails-dom-testing (v2.0.3, RVM: ruby-2.6.5) [gem]" level="application" />
|
70
|
-
<orderEntry type="library" scope="PROVIDED" name="rails-html-sanitizer (v1.3.0, RVM: ruby-2.6.5) [gem]" level="application" />
|
71
|
-
<orderEntry type="library" scope="PROVIDED" name="railties (v6.0.2.2, RVM: ruby-2.6.5) [gem]" level="application" />
|
72
|
-
<orderEntry type="library" scope="PROVIDED" name="rainbow (v3.0.0, RVM: ruby-2.6.5) [gem]" level="application" />
|
73
|
-
<orderEntry type="library" scope="PROVIDED" name="rake (v13.0.1, RVM: ruby-2.6.5) [gem]" level="application" />
|
74
|
-
<orderEntry type="library" scope="PROVIDED" name="rexml (v3.2.4, RVM: ruby-2.6.5) [gem]" level="application" />
|
75
|
-
<orderEntry type="library" scope="PROVIDED" name="rly (v0.2.3, RVM: ruby-2.6.5) [gem]" level="application" />
|
76
|
-
<orderEntry type="library" scope="PROVIDED" name="rspec (v3.9.0, RVM: ruby-2.6.5) [gem]" level="application" />
|
77
|
-
<orderEntry type="library" scope="PROVIDED" name="rspec-core (v3.9.1, RVM: ruby-2.6.5) [gem]" level="application" />
|
78
|
-
<orderEntry type="library" scope="PROVIDED" name="rspec-expectations (v3.9.0, RVM: ruby-2.6.5) [gem]" level="application" />
|
79
|
-
<orderEntry type="library" scope="PROVIDED" name="rspec-mocks (v3.9.1, RVM: ruby-2.6.5) [gem]" level="application" />
|
80
|
-
<orderEntry type="library" scope="PROVIDED" name="rspec-support (v3.9.2, RVM: ruby-2.6.5) [gem]" level="application" />
|
81
|
-
<orderEntry type="library" scope="PROVIDED" name="rubocop (v0.80.1, RVM: ruby-2.6.5) [gem]" level="application" />
|
82
|
-
<orderEntry type="library" scope="PROVIDED" name="ruby-kafka (v1.0.0, RVM: ruby-2.6.5) [gem]" level="application" />
|
83
|
-
<orderEntry type="library" scope="PROVIDED" name="ruby-progressbar (v1.10.1, RVM: ruby-2.6.5) [gem]" level="application" />
|
84
|
-
<orderEntry type="library" scope="PROVIDED" name="signet (v0.11.0, RVM: ruby-2.6.5) [gem]" level="application" />
|
85
|
-
<orderEntry type="library" scope="PROVIDED" name="sprockets (v4.0.0, RVM: ruby-2.6.5) [gem]" level="application" />
|
86
|
-
<orderEntry type="library" scope="PROVIDED" name="sprockets-rails (v3.2.1, RVM: ruby-2.6.5) [gem]" level="application" />
|
87
|
-
<orderEntry type="library" scope="PROVIDED" name="sqlite3 (v1.4.2, RVM: ruby-2.6.5) [gem]" level="application" />
|
88
|
-
<orderEntry type="library" scope="PROVIDED" name="thor (v1.0.1, RVM: ruby-2.6.5) [gem]" level="application" />
|
89
|
-
<orderEntry type="library" scope="PROVIDED" name="thread_safe (v0.3.6, RVM: ruby-2.6.5) [gem]" level="application" />
|
90
|
-
<orderEntry type="library" scope="PROVIDED" name="tzinfo (v1.2.7, RVM: ruby-2.6.5) [gem]" level="application" />
|
91
|
-
<orderEntry type="library" scope="PROVIDED" name="unicode-display_width (v1.6.1, RVM: ruby-2.6.5) [gem]" level="application" />
|
92
|
-
<orderEntry type="library" scope="PROVIDED" name="websocket-driver (v0.7.1, RVM: ruby-2.6.5) [gem]" level="application" />
|
93
|
-
<orderEntry type="library" scope="PROVIDED" name="websocket-extensions (v0.1.4, RVM: ruby-2.6.5) [gem]" level="application" />
|
94
|
-
<orderEntry type="library" scope="PROVIDED" name="zeitwerk (v2.3.0, RVM: ruby-2.6.5) [gem]" level="application" />
|
95
|
-
</component>
|
96
|
-
</module>
|