biovision-taxonomy 0.1.210504.0

Sign up to get free protection for your applications and to get access to all the features.
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: []