biovision 0.3.210504.0 → 0.4.210512.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (31) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -2
  3. data/app/assets/stylesheets/biovision/themes/default_theme/components/users.scss +1 -0
  4. data/app/assets/stylesheets/biovision/themes/default_theme/components/users/dashboard.scss +4 -0
  5. data/app/helpers/biovision_helper.rb +18 -34
  6. data/app/lib/biovision/components/base/entity_links.rb +24 -0
  7. data/app/lib/biovision/components/base_component.rb +1 -6
  8. data/app/uploaders/simple_image_uploader.rb +7 -1
  9. data/app/views/admin/dynamic_blocks/entity/_in_list.html.erb +2 -2
  10. data/app/views/admin/dynamic_pages/entity/_in_list.html.erb +2 -2
  11. data/app/views/admin/dynamic_pages/entity/_in_search.html.erb +1 -1
  12. data/app/views/admin/navigation_group_pages/entity/_in_list.html.erb +2 -2
  13. data/app/views/admin/navigation_groups/entity/_in_list.html.erb +2 -2
  14. data/app/views/admin/tokens/entity/_in_list.html.erb +2 -2
  15. data/app/views/admin/users/entity/_fields.html.erb +1 -1
  16. data/app/views/admin/users/entity/_in_list.html.erb +1 -1
  17. data/app/views/admin/users/entity/_in_search.html.erb +1 -1
  18. data/app/views/admin/users/roles.html.erb +1 -1
  19. data/app/views/application/unauthorized.html.erb +4 -1
  20. data/app/views/components/users/_login_form.html.erb +1 -0
  21. data/app/views/my/index/index.html.erb +2 -2
  22. data/app/views/my/recoveries/show.html.erb +0 -0
  23. data/app/views/shared/entity/_linked_entity.html.erb +1 -1
  24. data/app/views/shared/entity/_parent.html.erb +1 -1
  25. data/app/views/shared/entity/edit.html.erb +1 -1
  26. data/app/views/shared/forms/_field.html.erb +1 -1
  27. data/app/views/shared/forms/_text_area.html.erb +1 -1
  28. data/app/views/shared/forms/_text_field.html.erb +1 -1
  29. data/lib/biovision/base_methods.rb +8 -1
  30. data/lib/biovision/version.rb +1 -1
  31. metadata +8 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a682ae1c69e46f123d36b657ad1ebc715b5dc5bce649cf60d84c59fcc3999655
4
- data.tar.gz: 1b4414bb33c19ad803dd256fdcc7a60ca3c4d069400426648350664e3ace6345
3
+ metadata.gz: 55cbc88385aa6b6d41aa35620a597b0b410fa99d6681c69c9302ba04a09d696f
4
+ data.tar.gz: 5025b158f1afa936b8a6c9b872245379cd79a97ef4f502b180e9666121c6fdc4
5
5
  SHA512:
6
- metadata.gz: 6a4f2e672b7234fb8b7c928d5014feec672a5fdbfe534c010edad2e331d4f630d253b10f697429fff8b5454f63db1905e317ea3ca93f1bc9eaa7a02064f14c98
7
- data.tar.gz: 674321c7eaa0df820c0df3b07b8adbc89e3391e81412845022757a6a8311670f1f2b10f0106d963c927b206df2409356719299c488b45e1cb3e5ba94a6f2c6ed
6
+ metadata.gz: 1a7e516295a56d2a48fba52ab0775f461ab4990b3ac5df6f137eb232b57be5c2cea4051ffc88f38d562f50dbe20a1a7b869c3dc38f3ac385a91de427bdf62802
7
+ data.tar.gz: 1c688393349578d1ff591574bb12becfa0d4dde7fe7a334f9cfa2e3a9d1c59607767042ff55f16a02e77cef2a022c94aed8729467f5865c2afa13fc77a940acf
data/README.md CHANGED
@@ -31,7 +31,7 @@
31
31
  ```ruby
32
32
  gem 'dotenv-rails'
33
33
 
34
- gem 'autoprefixer-rails', group: :production
34
+ # gem 'autoprefixer-rails', group: :production
35
35
 
36
36
  gem 'biovision', git: 'https://github.com/Biovision/biovision.git'
37
37
  # gem 'biovision', path: '/Users/maxim/Projects/Biovision/gems/biovision'
@@ -237,7 +237,7 @@ invoke :'nvm:load'
237
237
  namespace :nvm do
238
238
  task :load do
239
239
  command 'echo "-----> Loading nvm"'
240
- command %{source ~/.nvm/nvm.sh}
240
+ command %(source ~/.nvm/nvm.sh)
241
241
  command 'echo "-----> Now using nvm v.`nvm --version`"'
242
242
  end
243
243
  end
@@ -1,2 +1,3 @@
1
1
  @import "biovision/themes/default_theme/components/users/form_tabs";
2
2
  @import "biovision/themes/default_theme/components/users/profile";
3
+ @import "biovision/themes/default_theme/components/users/dashboard";
@@ -0,0 +1,4 @@
1
+ .my__component {
2
+ border-top: var(--border-secondary);
3
+ margin: var(--spacer-m) auto;
4
+ }
@@ -3,58 +3,42 @@
3
3
  # Helper methods for common cases
4
4
  module BiovisionHelper
5
5
  # @param [ApplicationRecord] entity
6
- # @param [String] text
6
+ # @param [Biovision::Components::BaseComponent] handler
7
7
  # @param [Hash] options
8
- def admin_entity_link(entity, text = nil, options = {})
8
+ def admin_entity_link(entity, handler: nil, **options)
9
9
  return '∅' if entity.nil?
10
10
 
11
- if text.nil?
12
- text = entity.respond_to?(:text_for_link) ? entity.text_for_link : entity.id
13
- end
14
-
15
- href = if entity.respond_to?(:admin_url)
16
- entity.admin_url
17
- else
18
- "/admin/#{entity.class.table_name}/#{entity.id}"
19
- end
11
+ component = (handler || Biovision::Components::BaseComponent[])
12
+ text = options.delete(:text) { component.text_for_link(entity) }
20
13
 
21
- link_to(text, href, options)
14
+ if handler.nil? || handler.permit?('view', entity)
15
+ href = component.entity_link(entity, :admin)
16
+ link_to(text, href, options)
17
+ else
18
+ text
19
+ end
22
20
  end
23
21
 
24
22
  # @param [ApplicationRecord] entity
25
- # @param [String] text
26
23
  # @param [Hash] options
27
- def my_entity_link(entity, text = nil, options = {})
24
+ def my_entity_link(entity, **options)
28
25
  return '∅' if entity.nil?
29
26
 
30
- if text.nil?
31
- text = entity.respond_to?(:text_for_link) ? entity.text_for_link : entity.id
32
- end
33
-
34
- href = if entity.respond_to?(:my_url)
35
- entity.my_url
36
- else
37
- "/my/#{entity.class.table_name}/#{entity.id}"
38
- end
27
+ handler = Biovision::Components::BaseComponent[]
28
+ text = options.delete(:text) { handler.text_for_link(entity) }
29
+ href = handler.entity_link(entity, :my)
39
30
 
40
31
  link_to(text, href, options)
41
32
  end
42
33
 
43
34
  # @param [ApplicationRecord] entity
44
- # @param [String] text
45
35
  # @param [Hash] options
46
- def entity_link(entity, text = nil, options = {})
36
+ def entity_link(entity, **options)
47
37
  return '' if entity.nil?
48
38
 
49
- if text.nil?
50
- text = entity.respond_to?(:text_for_link) ? entity.text_for_link : entity.id
51
- end
52
-
53
- href = if entity.respond_to?(:world_url)
54
- entity.world_url
55
- else
56
- "/#{entity.class.table_name}/#{entity.id}"
57
- end
39
+ handler = Biovision::Components::BaseComponent[]
40
+ text = options.delete(:text) { handler.text_for_link(entity) }
41
+ href = handler.entity_link(entity)
58
42
 
59
43
  link_to(text, href, options)
60
44
  end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Biovision
4
+ module Components
5
+ module Base
6
+ # Links for entities in context of current user
7
+ module EntityLinks
8
+ # @param [ApplicationRecord] entity
9
+ def text_for_link(entity)
10
+ entity.respond_to?(:text_for_link) ? entity.text_for_link : entity.id
11
+ end
12
+
13
+ # @param [ApplicationRecord] entity
14
+ # @param [Symbol|String] scope
15
+ def entity_link(entity, scope = '')
16
+ default = "#{scope}/#{entity.class.table_name}/#{entity.id}"
17
+ prefix = %i[admin my].include?(scope.to_sym) ? scope : 'world'
18
+ message = "#{prefix}_url".to_sym
19
+ entity.respond_to?(message) ? entity.send(message) : "/#{default}"
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -7,6 +7,7 @@ module Biovision
7
7
  extend Base::ComponentSettings
8
8
  include Base::ComponentPrivileges
9
9
  include Base::ComponentParameters
10
+ include Base::EntityLinks
10
11
 
11
12
  attr_reader :component, :slug, :name, :user, :user_link
12
13
 
@@ -53,12 +54,6 @@ module Biovision
53
54
  handler_name.safe_constantize || BaseComponent
54
55
  end
55
56
 
56
- # Privilege names for using in biovision_component_user.data
57
- # @deprecated use roles instead
58
- def self.privilege_names
59
- []
60
- end
61
-
62
57
  # Model list for automatic role creation
63
58
  def self.dependent_models
64
59
  []
@@ -16,7 +16,7 @@ class SimpleImageUploader < CarrierWave::Uploader::Base
16
16
  end
17
17
 
18
18
  process :auto_orient
19
- process optimize: [{ jpegoptim: true, optipng: true, svgo: true }]
19
+ process optimize: [{ jpegoptim: true, optipng: true, svgo: true }], if: :optimize_images?
20
20
 
21
21
  def auto_orient
22
22
  return unless raster?
@@ -74,6 +74,12 @@ class SimpleImageUploader < CarrierWave::Uploader::Base
74
74
  !new_file.extension.match?(/svgz?\z/i)
75
75
  end
76
76
 
77
+ def optimize_images?(*)
78
+ return false unless Rails.application.config.respond_to? :optimize_images
79
+
80
+ Rails.application.config.optimize_images
81
+ end
82
+
77
83
  def raster?
78
84
  !File.extname(path).match?(/\.svgz?\z/i)
79
85
  end
@@ -1,9 +1,9 @@
1
1
  <div class="data">
2
- <div><%= admin_entity_link(entity) %></div>
2
+ <div><%= admin_entity_link(entity, handler: local_assigns[:handler]) %></div>
3
3
 
4
4
  <%= render(partial: 'shared/admin/toggle', locals: { entity: entity }) %>
5
5
 
6
- <% if local_assigns[:handler] && handler.permit?('edit', entity) %>
6
+ <% if local_assigns[:handler]&.permit?('edit', entity) %>
7
7
  <div class="entity-actions">
8
8
  <%= edit_icon(entity) %>
9
9
  <%= destroy_icon(entity) %>
@@ -1,6 +1,6 @@
1
1
  <figure class="image"><%= simple_image_preview(entity) %></figure>
2
2
  <div class="data">
3
- <div><%= admin_entity_link(entity) %></div>
3
+ <div><%= admin_entity_link(entity, handler: local_assigns[:handler]) %></div>
4
4
  <% unless entity.name.blank? %>
5
5
  <div class="info"><%= entity.name %></div>
6
6
  <% end %>
@@ -9,7 +9,7 @@
9
9
 
10
10
  <div class="entity-actions">
11
11
  <%= world_icon(entity) unless entity.url.blank? %>
12
- <% if local_assigns[:handler] && handler.permit?('edit', entity) %>
12
+ <% if local_assigns[:handler]&.permit?('edit', entity) %>
13
13
  <%= edit_icon(entity) %>
14
14
  <%= destroy_icon(entity) %>
15
15
  <% end %>
@@ -1,6 +1,6 @@
1
1
  <figure class="image"><%= simple_image_preview(entity) %></figure>
2
2
  <div class="data">
3
- <div><%= admin_entity_link(entity) %></div>
3
+ <div><%= admin_entity_link(entity, handler: local_assigns[:handler]) %></div>
4
4
  <% unless entity.name.blank? %>
5
5
  <div class="info"><%= entity.name %></div>
6
6
  <% end %>
@@ -1,9 +1,9 @@
1
1
  <div class="data">
2
- <div><%= admin_entity_link(entity.dynamic_page) %></div>
2
+ <div><%= admin_entity_link(entity.dynamic_page, handler: local_assigns[:handler]) %></div>
3
3
  <div class="info"><%= entity.dynamic_page.url %></div>
4
4
  <div class="secondary info"><%= entity.dynamic_page.name %></div>
5
5
 
6
- <% if local_assigns[:handler] && handler.permit?('edit', entity.navigation_group) %>
6
+ <% if local_assigns[:handler]&.permit?('edit', entity.navigation_group) %>
7
7
  <div class="entity-actions">
8
8
  <% url = page_priority_admin_navigation_group_path(id: entity.navigation_group_id, page_id: entity.id) %>
9
9
  <div class="priority-changer" data-url="<%= url %>">
@@ -1,11 +1,11 @@
1
1
  <div class="data">
2
- <div><%= admin_entity_link(entity) %></div>
2
+ <div><%= admin_entity_link(entity, handler: local_assigns[:handler]) %></div>
3
3
  <div class="info"><%= entity.slug %></div>
4
4
  <div class="secondary info">
5
5
  <%= t(:page_count, count: entity.dynamic_pages_count) %>
6
6
  </div>
7
7
 
8
- <% if local_assigns[:handler] && handler.permit?('edit', entity) %>
8
+ <% if local_assigns[:handler]&.permit?('edit', entity) %>
9
9
  <div class="entity-actions">
10
10
  <%= edit_icon(entity) %>
11
11
  <%= destroy_icon(entity) %>
@@ -1,6 +1,6 @@
1
1
  <figure class="image"><%= simple_image_preview(entity.user) %></figure>
2
2
  <div class="data">
3
- <div><%= admin_entity_link(entity) %></div>
3
+ <div><%= admin_entity_link(entity, handler: local_assigns[:handler]) %></div>
4
4
  <div class="info">
5
5
  <% unless entity.last_used.nil? %>
6
6
  <div>
@@ -18,7 +18,7 @@
18
18
 
19
19
  <%= render(partial: 'shared/admin/toggle', locals: { entity: entity }) %>
20
20
 
21
- <% if local_assigns[:handler] && handler.permit?('edit', entity) %>
21
+ <% if local_assigns[:handler]&.permit?('edit', entity) %>
22
22
  <div class="entity-actions">
23
23
  <%= edit_icon(entity) %>
24
24
  <%= destroy_icon(entity) %>
@@ -7,7 +7,7 @@
7
7
  <% unless entity.inviter_id.nil? %>
8
8
  <div>
9
9
  <dt><%= model.human_attribute_name(:inviter) %></dt>
10
- <dd><%= admin_entity_link(entity.inviter) %></dd>
10
+ <dd><%= admin_entity_link(entity.inviter, handler: local_assigns[:handler]) %></dd>
11
11
  </div>
12
12
  <% end %>
13
13
 
@@ -1,6 +1,6 @@
1
1
  <figure class="image"><%= simple_image_preview(entity) %></figure>
2
2
  <div class="data">
3
- <div><%= admin_entity_link(entity) %></div>
3
+ <div><%= admin_entity_link(entity, handler: local_assigns[:handler]) %></div>
4
4
  <% unless entity.notice.blank? %>
5
5
  <div><%= entity.notice %></div>
6
6
  <% end %>
@@ -1,6 +1,6 @@
1
1
  <figure class="image"><%= simple_image_preview(entity) %></figure>
2
2
  <div class="data">
3
- <div><%= admin_entity_link(entity) %></div>
3
+ <div><%= admin_entity_link(entity, handler: local_assigns[:handler]) %></div>
4
4
  <% unless entity.notice.blank? %>
5
5
  <div><%= entity.notice %></div>
6
6
  <% end %>
@@ -2,7 +2,7 @@
2
2
  <% content_for :breadcrumbs do %>
3
3
  <%= admin_biovision_component_link(component_handler.component) %>
4
4
  <%= link_to(t('admin.users.nav_item.text'), admin_users_path) %>
5
- <%= admin_entity_link(@entity) %>
5
+ <%= admin_entity_link(@entity, handler: component_handler) %>
6
6
  <span><%= t('.nav_text') %></span>
7
7
  <% end %>
8
8
 
@@ -9,7 +9,10 @@
9
9
  <%=
10
10
  render(
11
11
  partial: 'components/users/form_tabs',
12
- locals: { current: 'login' }
12
+ locals: {
13
+ current: 'login',
14
+ from: url_for
15
+ }
13
16
  )
14
17
  %>
15
18
  </div>
@@ -33,6 +33,7 @@
33
33
  </div>
34
34
  </div>
35
35
  <div class="actions">
36
+ <%= hidden_field_tag(:from, local_assigns[:from], id: nil) %>
36
37
  <%= button_tag t('.log_in'), class: 'button button-primary', name: nil %>
37
38
  <%=
38
39
  link_to(
@@ -45,8 +45,8 @@
45
45
  <% handler = Biovision::Components::BaseComponent.handler(component, current_user) %>
46
46
  <% next unless handler&.permit?('default') %>
47
47
  <% if lookup_context.exists?("#{prefix}_#{component.slug}") %>
48
- <section>
49
- <h2><%= component.name %></h2>
48
+ <section class="my__component">
49
+ <h2><%= handler.name %></h2>
50
50
  <%=
51
51
  render(
52
52
  partial: "#{prefix}#{component.slug}",
File without changes
@@ -1,6 +1,6 @@
1
1
  <% unless entity.nil? %>
2
2
  <div>
3
3
  <dt><%= entity.class.model_name.human %></dt>
4
- <dd><%= admin_entity_link(entity) %></dd>
4
+ <dd><%= admin_entity_link(entity, handler: local_assigns[:handler]) %></dd>
5
5
  </div>
6
6
  <% end %>
@@ -1,6 +1,6 @@
1
1
  <% unless entity.parent.blank? %>
2
2
  <div>
3
3
  <dt><%= entity.class.human_attribute_name(:parent) %></dt>
4
- <dd><%= admin_entity_link(entity.parent) %></dd>
4
+ <dd><%= admin_entity_link(entity.parent, handler: local_assigns[:handler]) %></dd>
5
5
  </div>
6
6
  <% end %>
@@ -6,7 +6,7 @@
6
6
  <% content_for :breadcrumbs do %>
7
7
  <%= admin_biovision_component_link(component_handler.component) %>
8
8
  <%= link_to(t("#{prefix}.nav_item.text"), "/#{controller_path}") %>
9
- <%= admin_entity_link(@entity) %>
9
+ <%= admin_entity_link(@entity, handler: component_handler) %>
10
10
  <span><%= t('.nav_text') %></span>
11
11
  <% end %>
12
12
 
@@ -28,7 +28,7 @@
28
28
  <% when :date %>
29
29
  <%= f.date_field(field, options.merge(local_assigns[:options].to_h)) %>
30
30
  <% when :datetime %>
31
- <%= f.datetime_field(field, options.merge(local_assigns[:options].to_h)) %>
31
+ <%= f.datetime_field(field, options.merge(local_assigns[:options].to_h).merge(step: 1)) %>
32
32
  <% when :url %>
33
33
  <%= f.url_field(field, options.merge(local_assigns[:options].to_h)) %>
34
34
  <% when :email %>
@@ -5,7 +5,7 @@
5
5
  options = {
6
6
  class: 'input-text',
7
7
  data: { check: field }.merge(local_assigns[:data].to_h),
8
- manlength: length_options[:maximum],
8
+ maxlength: length_options[:maximum],
9
9
  minlength: length_options[:minimum],
10
10
  required: validators.select { |v| v.kind == :presence }.any?,
11
11
  rows: 10,
@@ -5,7 +5,7 @@
5
5
  options = {
6
6
  class: 'input-text',
7
7
  data: { check: field }.merge(local_assigns[:data].to_h),
8
- manlength: length_options[:maximum],
8
+ maxlength: length_options[:maximum],
9
9
  minlength: length_options[:minimum],
10
10
  required: validators.select { |v| v.kind == :presence }.any?,
11
11
  size: nil
@@ -11,7 +11,7 @@ module Biovision
11
11
  helper_method :component_handler
12
12
  helper_method :current_page, :param_from_request
13
13
  helper_method :current_user, :current_language
14
- helper_method :content_component
14
+ helper_method :content_component, :users_component
15
15
  end
16
16
 
17
17
  # Get current page number from request
@@ -53,6 +53,13 @@ module Biovision
53
53
  @content_component ||= Biovision::Components::ContentComponent[current_user]
54
54
  end
55
55
 
56
+ # Get users component handler
57
+ #
58
+ # @return [Biovision::Components::UsersComponent]
59
+ def users_component
60
+ @users_component ||= Biovision::Components::UsersComponent[current_user]
61
+ end
62
+
56
63
  # @return [Agent]
57
64
  def agent
58
65
  @agent ||= Agent[request.user_agent || 'n/a']
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Biovision
4
- VERSION = '0.3.210504.0'
4
+ VERSION = '0.4.210512.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: biovision
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.210504.0
4
+ version: 0.4.210512.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Maxim Khan-Magomedov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-05-04 00:00:00.000000000 Z
11
+ date: 2021-05-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -92,14 +92,14 @@ dependencies:
92
92
  requirements:
93
93
  - - "~>"
94
94
  - !ruby/object:Gem::Version
95
- version: '0.27'
95
+ version: '0.30'
96
96
  type: :runtime
97
97
  prerelease: false
98
98
  version_requirements: !ruby/object:Gem::Requirement
99
99
  requirements:
100
100
  - - "~>"
101
101
  - !ruby/object:Gem::Version
102
- version: '0.27'
102
+ version: '0.30'
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: kaminari
105
105
  requirement: !ruby/object:Gem::Requirement
@@ -265,6 +265,7 @@ files:
265
265
  - app/assets/stylesheets/biovision/themes/default_theme.scss
266
266
  - app/assets/stylesheets/biovision/themes/default_theme/components.scss
267
267
  - app/assets/stylesheets/biovision/themes/default_theme/components/users.scss
268
+ - app/assets/stylesheets/biovision/themes/default_theme/components/users/dashboard.scss
268
269
  - app/assets/stylesheets/biovision/themes/default_theme/components/users/form_tabs.scss
269
270
  - app/assets/stylesheets/biovision/themes/default_theme/components/users/profile.scss
270
271
  - app/assets/stylesheets/biovision/themes/default_theme/layout.scss
@@ -305,6 +306,7 @@ files:
305
306
  - app/lib/biovision/components/base/component_parameters.rb
306
307
  - app/lib/biovision/components/base/component_privileges.rb
307
308
  - app/lib/biovision/components/base/component_settings.rb
309
+ - app/lib/biovision/components/base/entity_links.rb
308
310
  - app/lib/biovision/components/base_component.rb
309
311
  - app/lib/biovision/components/contact_component.rb
310
312
  - app/lib/biovision/components/content_component.rb
@@ -477,6 +479,7 @@ files:
477
479
  - app/views/my/profiles/form/_sensitive_parameters.html.erb
478
480
  - app/views/my/profiles/new.html.erb
479
481
  - app/views/my/profiles/show.html.erb
482
+ - app/views/my/recoveries/show.html.erb
480
483
  - app/views/shared/_breadcrumbs.html.erb
481
484
  - app/views/shared/_cookie_notification.html.erb
482
485
  - app/views/shared/_flash_messages.html.erb
@@ -572,7 +575,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
572
575
  - !ruby/object:Gem::Version
573
576
  version: '0'
574
577
  requirements: []
575
- rubygems_version: 3.1.4
578
+ rubygems_version: 3.2.16
576
579
  signing_key:
577
580
  specification_version: 4
578
581
  summary: Biovision CMS gem