biovision-taxonomy 0.1.210504.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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 7f4b05dc13d14885e528eea648337050e5debf78d767bb8e858719004ff90f95
4
+ data.tar.gz: fc899ccb4fd9fe2b70abe9e4dc4e72a39e30047dbfde7eeba3a44020f9eda072
5
+ SHA512:
6
+ metadata.gz: da75a24e4062a6aa6e39eb69b3dfd43399e25ccac1dba09982dee43b79932a759ed31e85a461cb1c1b1c7c424d9ef8960e8e2db642fc6861b91c2a268b0fea99
7
+ data.tar.gz: 498de657adb503de3aa820486d0aa419015230bbf21d682eaacfc06c3d3d650aa5a308182a718675e0cf5841dc1d33b5ad263c050107e6aacf5dfd7c5d27de5f
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2021 Maxim Khan-Magomedov
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,28 @@
1
+ # Biovision::Taxonomy
2
+ Short description and motivation.
3
+
4
+ ## Usage
5
+ How to use my plugin.
6
+
7
+ ## Installation
8
+ Add this line to your application's Gemfile:
9
+
10
+ ```ruby
11
+ gem 'biovision-taxonomy'
12
+ ```
13
+
14
+ And then execute:
15
+ ```bash
16
+ $ bundle
17
+ ```
18
+
19
+ Or install it yourself as:
20
+ ```bash
21
+ $ gem install biovision-taxonomy
22
+ ```
23
+
24
+ ## Contributing
25
+ Contribution directions go here.
26
+
27
+ ## License
28
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
data/Rakefile ADDED
@@ -0,0 +1,8 @@
1
+ require "bundler/setup"
2
+
3
+ APP_RAKEFILE = File.expand_path("spec/test_app/Rakefile", __dir__)
4
+ load "rails/tasks/engine.rake"
5
+
6
+ load "rails/tasks/statistics.rake"
7
+
8
+ require "bundler/gem_tasks"
File without changes
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Handling taxa
4
+ class Admin::TaxaController < AdminController
5
+ include CrudEntities
6
+ include ToggleableEntity
7
+
8
+ before_action :set_entity, except: %i[check create index new search]
9
+
10
+ private
11
+
12
+ def component_class
13
+ Biovision::Components::TaxonomyComponent
14
+ end
15
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Biovision
4
+ module Components
5
+ # Taxonomy
6
+ class TaxonomyComponent < BaseComponent
7
+ def self.dependent_models
8
+ [Taxon, TaxonUser, TaxonComponent]
9
+ end
10
+
11
+ def use_images?
12
+ true
13
+ end
14
+
15
+ def administrative_parts
16
+ %w[taxa]
17
+ end
18
+
19
+ def crud_table_names
20
+ %w[taxa]
21
+ end
22
+
23
+ def role_tree
24
+ super.merge({ Taxon.table_name => %w[users components] })
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Taxon
4
+ #
5
+ # Attributes:
6
+ # children_cache [Array<integer>]
7
+ # created_at [DateTime]
8
+ # data [jsonb]
9
+ # name [string]
10
+ # nav_text [string]
11
+ # object_count [integer]
12
+ # parent_id [integer], optional
13
+ # parents_cache [string]
14
+ # priority [integer]
15
+ # simple_image_id [SimpleImage], optional
16
+ # slug [string]
17
+ # updated_at [DateTime]
18
+ # uuid [uuid]
19
+ # visible [boolean]
20
+ class Taxon < ApplicationRecord
21
+ include Checkable
22
+ include HasSimpleImage
23
+ include HasUuid
24
+ include NestedPriority
25
+ include Toggleable
26
+ include TreeStructure
27
+
28
+ SLUG_LIMIT = 50
29
+
30
+ toggleable :visible
31
+
32
+ has_many :taxon_users, dependent: :delete_all
33
+
34
+ validates_presence_of :name
35
+ validates_uniqueness_of :slug, scope: :parent_id
36
+
37
+ scope :ordered_by_name, -> { order('name asc') }
38
+ scope :visible, -> { where(visible: true) }
39
+ scope :list_for_administration, ->(v = nil) { where(parent_id: v).ordered_by_priority }
40
+ scope :seacrh, ->(q) { where('name ilike ?', "#{q}%") unless q.blank? }
41
+
42
+ # @param [Taxon] entity
43
+ def self.siblings(entity)
44
+ where(parent_id: entity&.parent_id)
45
+ end
46
+
47
+ def self.entity_parameters
48
+ %i[name nav_text priority simple_image_id slug visible]
49
+ end
50
+
51
+ def self.creation_parameters
52
+ entity_parameters + %i[parent_id]
53
+ end
54
+
55
+ def text_for_link
56
+ nav_text.blank? ? name : nav_text
57
+ end
58
+
59
+ def long_name
60
+ (parents.map(&:name) + [text_for_link]).join('/')
61
+ end
62
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Taxon available to BiovisionComponent
4
+ #
5
+ # Attributes:
6
+ # biovision_component_id [BiovisionComponent]
7
+ # taxon_id [Taxon]
8
+ class TaxonComponent < ApplicationRecord
9
+ belongs_to :taxon
10
+ belongs_to :biovision_component
11
+
12
+ validates_uniqueness_of :biovision_component_id, scope: :taxon_id
13
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Taxon available to user
4
+ #
5
+ # Attributes:
6
+ # data [JSONb]
7
+ # user_id [User]
8
+ # taxon_id [Taxon]
9
+ class TaxonUser < ApplicationRecord
10
+ include HasOwner
11
+
12
+ belongs_to :taxon
13
+ belongs_to :user
14
+
15
+ validates_uniqueness_of :taxon_id, scope: :user_id
16
+ end
@@ -0,0 +1,19 @@
1
+ <%= form_with(**Biovision::Components::BaseComponent.form_options(entity)) do |f| %>
2
+ <%= render partial: 'shared/list_of_errors', locals: { entity: entity } %>
3
+
4
+ <dl class="fields">
5
+ <%= render partial: 'shared/entity/parent', locals: { entity: entity } %>
6
+ <%= render partial: 'shared/forms/priority', locals: { f: f } %>
7
+ <%= render partial: 'shared/forms/fields', locals: { f: f, fields: %w[slug name nav_text] } %>
8
+ <%= render partial: 'shared/forms/text_field', locals: { f: f, field: :token } unless entity.id.nil? %>
9
+ <%= render partial: 'shared/forms/simple_image', locals: { f: f } %>
10
+ </dl>
11
+
12
+ <%= render 'shared/forms/state_container' %>
13
+
14
+ <div class="buttons">
15
+ <%= hidden_field_tag :entity_id, entity.id %>
16
+ <%= f.hidden_field :parent_id if entity.id.nil? %>
17
+ <%= f.button t(:save), class: 'button button-save' %>
18
+ </div>
19
+ <% end %>
@@ -0,0 +1,6 @@
1
+ <div>
2
+ <%= link_to t('.text'), admin_taxa_path %>
3
+ </div>
4
+ <div class="description">
5
+ <%= t('.description') %>
6
+ </div>
@@ -0,0 +1,31 @@
1
+ json.id taxon.id
2
+ json.type taxon.class.table_name
3
+ json.attributes do
4
+ json.call(taxon, :name, :slug, :nav_text, :parent_id, :parents_cache, :children_cache)
5
+ end
6
+ json.meta do
7
+ json.text_for_link taxon.text_for_link
8
+ json.html(
9
+ render(
10
+ partial: 'admin/taxa/entity/in_search',
11
+ locals: { entity: taxon },
12
+ formats: [:html]
13
+ )
14
+ )
15
+ end
16
+ json.links do
17
+ json.self admin_taxon_path(id: taxon.id)
18
+ end
19
+ unless taxon.parent.nil?
20
+ json.relationships do
21
+ json.parent do
22
+ json.data do
23
+ json.id taxon.parent_id
24
+ json.type taxon.parent.class.table_name
25
+ end
26
+ json.links do
27
+ json.self admin_taxon_path(id: taxon.parent_id)
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,5 @@
1
+ <section>
2
+ <h2><%= t('.heading') %></h2>
3
+
4
+ <%= render partial: 'admin/taxa/form', locals: { entity: entity } %>
5
+ </section>
@@ -0,0 +1,12 @@
1
+ <% if collection.any? %>
2
+ <section>
3
+ <h2><%= t('.heading') %></h2>
4
+
5
+ <%=
6
+ render(
7
+ partial: 'shared/admin/list_with_priority',
8
+ locals: { collection: collection, handler: handler }
9
+ )
10
+ %>
11
+ </section>
12
+ <% end %>
@@ -0,0 +1,17 @@
1
+ <figure class="image"><%= simple_image_preview(entity) %></figure>
2
+ <div class="data">
3
+ <div><%= admin_entity_link(entity) %></div>
4
+ <div class="info"><%= entity.name %></div>
5
+ <div class="secondary info"><%= t(:object_count, count: entity.object_count) %></div>
6
+ <div class="secondary info"><%= entity.uuid %></div>
7
+
8
+ <%= render(partial: 'shared/admin/toggle', locals: { entity: entity }) %>
9
+
10
+ <% if local_assigns[:handler] && handler.permit?('edit', entity) %>
11
+ <div class="entity-actions">
12
+ <%= edit_icon(entity) %>
13
+ <%= render(partial: 'shared/admin/priority', locals: { entity: entity }) %>
14
+ <%= destroy_icon(entity) %>
15
+ </div>
16
+ <% end %>
17
+ </div>
@@ -0,0 +1,4 @@
1
+ <div class="data">
2
+ <div><%= admin_entity_link(entity, entity.long_name) %></div>
3
+ <div class="secondary info"><%= t(:object_count, count: entity.object_count) %></div>
4
+ </div>
@@ -0,0 +1,29 @@
1
+ <% content_for :meta_title, t('.title', page: current_page) %>
2
+ <% content_for :breadcrumbs do %>
3
+ <%= admin_biovision_component_link(component_handler.component) %>
4
+ <span><%= t('admin.taxa.nav_item.text') %></span>
5
+ <% end %>
6
+
7
+ <article>
8
+ <h1><%= t('.heading') %></h1>
9
+
10
+ <% if component_handler.permit?('taxa.edit') %>
11
+ <nav class="entity-actions">
12
+ <%= create_icon(new_admin_taxon_path) %>
13
+ </nav>
14
+ <% end %>
15
+
16
+ <%=
17
+ render(
18
+ partial: 'admin/widgets/quick_search',
19
+ locals: { endpoint: search_admin_taxa_url }
20
+ )
21
+ %>
22
+
23
+ <%=
24
+ render(
25
+ partial: 'shared/admin/list_with_priority',
26
+ locals: { collection: @collection, handler: component_handler }
27
+ )
28
+ %>
29
+ </article>
@@ -0,0 +1,3 @@
1
+ json.data @collection do |entity|
2
+ json.partial! entity
3
+ end
@@ -0,0 +1,51 @@
1
+ <% content_for :meta_title, t('.title', name: @entity.name) %>
2
+ <% content_for :breadcrumbs do %>
3
+ <%= admin_biovision_component_link(component_handler.component) %>
4
+ <%= link_to(t('admin.taxa.nav_item.text'), admin_taxa_path) %>
5
+ <% @entity.parents.each do |parent| %>
6
+ <%= admin_entity_link(parent) %>
7
+ <% end %>
8
+ <span><%= @entity.name %></span>
9
+ <% end %>
10
+
11
+ <article>
12
+ <h1><%= @entity.name %></h1>
13
+
14
+ <% if component_handler.permit?('edit', @entity) %>
15
+ <nav class="entity-actions">
16
+ <%= edit_icon(@entity) %>
17
+ <%= destroy_icon(@entity) %>
18
+ </nav>
19
+ <% end %>
20
+
21
+ <dl class="fields">
22
+ <%= render partial: 'shared/entity/parent', locals: { entity: @entity } %>
23
+ <%= render partial: 'shared/entity/text_fields', locals: { entity: @entity, fields: %w[name slug nav_text] } %>
24
+ <%= render partial: 'shared/entity/simple_image', locals: { entity: @entity } %>
25
+ <%= render partial: 'shared/entity/uuid', locals: { entity: @entity } %>
26
+ <%= render partial: 'shared/entity/timestamps', locals: { entity: @entity } %>
27
+ <%= render partial: 'shared/entity/tree_caches', locals: { entity: @entity } %>
28
+ </dl>
29
+
30
+ <%= render(partial: 'shared/admin/toggle', locals: { entity: @entity }) %>
31
+
32
+
33
+ <%=
34
+ render(
35
+ partial: 'admin/taxa/entity/children',
36
+ locals: {
37
+ collection: @entity.class.list_for_administration(@entity.id),
38
+ handler: component_handler
39
+ }
40
+ )
41
+ %>
42
+
43
+ <% if component_handler.permit?('edit', @entity) %>
44
+ <%=
45
+ render(
46
+ partial: 'admin/taxa/entity/add_child',
47
+ locals: { entity: @entity.child_items.new }
48
+ )
49
+ %>
50
+ <% end %>
51
+ </article>
@@ -0,0 +1,3 @@
1
+ ActiveSupport::Inflector.inflections(:en) do |inflect|
2
+ inflect.irregular 'taxon', 'taxa'
3
+ end
@@ -0,0 +1,38 @@
1
+ ru:
2
+ activerecord:
3
+ models:
4
+ taxon: "Таксон"
5
+ taxon_component: "Таксон в компоненте"
6
+ taxon_user: "Таксон для пользователя"
7
+ attributes:
8
+ taxon: "Таксон"
9
+ taxon_id: "Таксон"
10
+ admin:
11
+ taxa:
12
+ destroy:
13
+ success: "Таксон удалён"
14
+ edit:
15
+ title: "Редактирование таксона"
16
+ nav_text: "Редактировать"
17
+ heading: "Редактирование таксона"
18
+ index:
19
+ title: "Таксоны"
20
+ heading: "Таксоны"
21
+ nav_item:
22
+ text: "Все таксоны"
23
+ description: "Управление таксонами"
24
+ new:
25
+ title: "Добавление таксона"
26
+ nav_text: "Создать"
27
+ heading: "Новый таксон"
28
+ show:
29
+ title: "Таксон «%{name}»"
30
+ entity:
31
+ add_child:
32
+ heading: "Добавить дочерний таксон"
33
+ children:
34
+ heading: "Дочерние таксоны"
35
+ biovision:
36
+ components:
37
+ taxonomy:
38
+ name: "Таксономия"
data/config/routes.rb ADDED
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ Rails.application.routes.draw do
4
+ concern :check do
5
+ post :check, on: :collection, defaults: { format: :json }
6
+ end
7
+
8
+ concern :priority do
9
+ post :priority, on: :member, defaults: { format: :json }
10
+ end
11
+
12
+ concern :search do
13
+ get :search, on: :collection
14
+ end
15
+
16
+ concern :toggle do
17
+ post :toggle, on: :member, defaults: { format: :json }
18
+ end
19
+
20
+ namespace :admin do
21
+ # Taxonomy
22
+ resources :taxa, concerns: %i[check priority search toggle]
23
+ end
24
+ end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Create tables for taxonomy
4
+ class CreateTaxonomyComponent < ActiveRecord::Migration[6.1]
5
+ include Biovision::Migrations::ComponentMigration
6
+
7
+ private
8
+
9
+ def create_taxa
10
+ create_table :taxa, comment: 'Taxa' do |t|
11
+ t.uuid :uuid, null: false
12
+ t.references :simple_image, foreign_key: { on_update: :cascade, on_delete: :nullify }
13
+ t.integer :parent_id
14
+ t.integer :object_count, default: 0, null: false
15
+ t.integer :priority, limit: 2, default: 1, null: false
16
+ t.boolean :visible, default: true, null: false
17
+ t.timestamps
18
+ t.string :name
19
+ t.string :nav_text
20
+ t.string :slug
21
+ t.string :parents_cache, default: '', null: false
22
+ t.integer :children_cache, array: true, default: [], null: false
23
+ t.jsonb :data, default: {}, null: false
24
+ end
25
+
26
+ add_index :taxa, :uuid, unique: true
27
+ add_index :taxa, :data, using: :gin
28
+ add_foreign_key :taxa, :taxa, column: :parent_id, on_update: :cascade, on_delete: :cascade
29
+ end
30
+
31
+ def create_taxon_users
32
+ create_table :taxon_users, comment: 'Taxa available to users' do |t|
33
+ t.references :taxon, null: false, foreign_key: { on_update: :cascade, on_delete: :cascade }
34
+ t.references :user, null: false, foreign_key: { on_update: :cascade, on_delete: :cascade }
35
+ t.jsonb :data, default: {}, null: false
36
+ end
37
+
38
+ add_index :taxon_users, :data, using: :gin
39
+ end
40
+
41
+ def create_taxon_components
42
+ create_table :taxon_components, comment: 'Taxa available in components' do |t|
43
+ t.references :taxon, null: false, foreign_key: { on_update: :cascade, on_delete: :cascade }
44
+ t.references :biovision_component, null: false, foreign_key: { on_update: :cascade, on_delete: :cascade }
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,8 @@
1
+ require "biovision/taxonomy/version"
2
+ require "biovision/taxonomy/engine"
3
+
4
+ module Biovision
5
+ module Taxonomy
6
+ # Your code goes here...
7
+ end
8
+ end
@@ -0,0 +1,16 @@
1
+ module Biovision
2
+ module Taxonomy
3
+ require 'biovision'
4
+
5
+ class Engine < ::Rails::Engine
6
+ config.generators do |g|
7
+ g.test_framework :rspec
8
+ g.fixture_replacement :factory_bot, dir: 'spec/factories'
9
+ end
10
+
11
+ initializer 'sample_engine.factories', after: 'factory_bot.set_factory_paths' do
12
+ FactoryBot.definition_file_paths << File.expand_path('../../../spec/factories', __FILE__) if defined?(FactoryBot)
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,5 @@
1
+ module Biovision
2
+ module Taxonomy
3
+ VERSION = '0.1.210504.0'
4
+ end
5
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :biovision_taxonomy do
3
+ # # Task goes here
4
+ # end
metadata ADDED
@@ -0,0 +1,164 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: biovision-taxonomy
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.210504.0
5
+ platform: ruby
6
+ authors:
7
+ - Maxim Khan-Magomedov
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-05-04 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 6.1.3
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 6.1.3.1
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: 6.1.3
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 6.1.3.1
33
+ - !ruby/object:Gem::Dependency
34
+ name: rails-i18n
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '6.0'
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '6.0'
47
+ - !ruby/object:Gem::Dependency
48
+ name: biovision
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ - !ruby/object:Gem::Dependency
62
+ name: rspec-rails
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ - !ruby/object:Gem::Dependency
76
+ name: database_cleaner
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ - !ruby/object:Gem::Dependency
90
+ name: factory_bot_rails
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ description: Taxonomy component for biovision-based sites.
104
+ email:
105
+ - maxim.km@gmail.com
106
+ executables: []
107
+ extensions: []
108
+ extra_rdoc_files: []
109
+ files:
110
+ - MIT-LICENSE
111
+ - README.md
112
+ - Rakefile
113
+ - app/assets/config/biovision_taxonomy_manifest.js
114
+ - app/controllers/admin/taxa_controller.rb
115
+ - app/lib/biovision/components/taxonomy_component.rb
116
+ - app/models/taxon.rb
117
+ - app/models/taxon_component.rb
118
+ - app/models/taxon_user.rb
119
+ - app/views/admin/taxa/_form.html.erb
120
+ - app/views/admin/taxa/_nav_item.html.erb
121
+ - app/views/admin/taxa/_taxon.jbuilder
122
+ - app/views/admin/taxa/entity/_add_child.html.erb
123
+ - app/views/admin/taxa/entity/_children.html.erb
124
+ - app/views/admin/taxa/entity/_in_list.html.erb
125
+ - app/views/admin/taxa/entity/_in_search.html.erb
126
+ - app/views/admin/taxa/index.html.erb
127
+ - app/views/admin/taxa/search.jbuilder
128
+ - app/views/admin/taxa/show.html.erb
129
+ - config/initializers/taxonomy.rb
130
+ - config/locales/taxonomy-ru.yml
131
+ - config/routes.rb
132
+ - db/migrate/20210504000000_create_taxonomy_component.rb
133
+ - lib/biovision/taxonomy.rb
134
+ - lib/biovision/taxonomy/engine.rb
135
+ - lib/biovision/taxonomy/version.rb
136
+ - lib/tasks/biovision/taxonomy_tasks.rake
137
+ homepage: https://github.com/Biovision/biovision-taxonomy
138
+ licenses:
139
+ - MIT
140
+ metadata:
141
+ allowed_push_host: https://rubygems.org
142
+ homepage_uri: https://github.com/Biovision/biovision-taxonomy
143
+ source_code_uri: https://github.com/Biovision/biovision-taxonomy
144
+ changelog_uri: https://github.com/Biovision/biovision-taxonomy
145
+ post_install_message:
146
+ rdoc_options: []
147
+ require_paths:
148
+ - lib
149
+ required_ruby_version: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - ">="
152
+ - !ruby/object:Gem::Version
153
+ version: '0'
154
+ required_rubygems_version: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - ">="
157
+ - !ruby/object:Gem::Version
158
+ version: '0'
159
+ requirements: []
160
+ rubygems_version: 3.2.15
161
+ signing_key:
162
+ specification_version: 4
163
+ summary: Taxonomy for biovision.
164
+ test_files: []