labimotion 1.4.1 → 2.0.0.rc6
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/lib/labimotion/apis/generic_element_api.rb +1 -0
- data/lib/labimotion/apis/generic_klass_api.rb +3 -2
- data/lib/labimotion/apis/labimotion_api.rb +13 -0
- data/lib/labimotion/apis/standard_api.rb +25 -0
- data/lib/labimotion/apis/standard_layer_api.rb +87 -0
- data/lib/labimotion/apis/vocabulary_api.rb +93 -0
- data/lib/labimotion/constants.rb +21 -0
- data/lib/labimotion/entities/dataset_entity.rb +1 -1
- data/lib/labimotion/entities/element_entity.rb +1 -0
- data/lib/labimotion/entities/properties_entity.rb +229 -56
- data/lib/labimotion/entities/segment_entity.rb +0 -1
- data/lib/labimotion/entities/vocabulary_entity.rb +28 -0
- data/lib/labimotion/helpers/element_helpers.rb +8 -6
- data/lib/labimotion/helpers/generic_helpers.rb +6 -1
- data/lib/labimotion/helpers/param_helpers.rb +121 -82
- data/lib/labimotion/helpers/segment_helpers.rb +1 -1
- data/lib/labimotion/helpers/vocabulary_helpers.rb +16 -0
- data/lib/labimotion/libs/converter.rb +12 -33
- data/lib/labimotion/libs/data/mapper/Chemwiki.json +236 -0
- data/lib/labimotion/libs/data/mapper/Source.json +78 -0
- data/lib/labimotion/libs/data/vocab/Standard.json +385 -0
- data/lib/labimotion/libs/data/vocab/System.json +131 -0
- data/lib/labimotion/libs/dataset_builder.rb +70 -0
- data/lib/labimotion/libs/export_dataset.rb +165 -66
- data/lib/labimotion/libs/nmr_mapper.rb +204 -246
- data/lib/labimotion/libs/sample_association.rb +4 -0
- data/lib/labimotion/libs/vocabulary_handler.rb +118 -0
- data/lib/labimotion/models/concerns/attachment_converter.rb +5 -4
- data/lib/labimotion/models/concerns/datasetable.rb +1 -0
- data/lib/labimotion/models/concerns/segmentable.rb +2 -0
- data/lib/labimotion/models/element.rb +3 -0
- data/lib/labimotion/models/std_layer.rb +9 -0
- data/lib/labimotion/models/std_layers_revision.rb +9 -0
- data/lib/labimotion/models/vocabulary.rb +12 -0
- data/lib/labimotion/utils/mapper_utils.rb +169 -0
- data/lib/labimotion/utils/utils.rb +22 -0
- data/lib/labimotion/version.rb +1 -1
- data/lib/labimotion.rb +13 -3
- metadata +25 -5
| @@ -25,17 +25,18 @@ module Labimotion | |
| 25 25 | 
             
                  def exec_converter
         | 
| 26 26 | 
             
                    return if self.has_attribute?(:con_state) == false || self.con_state.nil? || self.con_state == Labimotion::ConState::NONE
         | 
| 27 27 |  | 
| 28 | 
            -
                    return if attachable_id.nil? &&  | 
| 28 | 
            +
                    return if attachable_id.nil? && con_state != Labimotion::ConState::WAIT
         | 
| 29 29 |  | 
| 30 | 
            +
                    current_user = User.find_by(id: created_by)
         | 
| 30 31 | 
             
                    case con_state
         | 
| 31 32 | 
             
                    when Labimotion::ConState::NMR
         | 
| 32 | 
            -
                      self.con_state = Labimotion::NmrMapper.process_ds(id)
         | 
| 33 | 
            +
                      self.con_state = Labimotion::NmrMapper.process_ds(id, current_user)
         | 
| 33 34 | 
             
                      update_column(:con_state, con_state)
         | 
| 34 35 | 
             
                    when Labimotion::ConState::WAIT
         | 
| 35 | 
            -
                      self.con_state = Labimotion::Converter.jcamp_converter(id)
         | 
| 36 | 
            +
                      self.con_state = Labimotion::Converter.jcamp_converter(id, current_user)
         | 
| 36 37 | 
             
                      update_column(:con_state, con_state)
         | 
| 37 38 | 
             
                    when Labimotion::ConState::CONVERTED
         | 
| 38 | 
            -
                      Labimotion::Converter.metadata(id)
         | 
| 39 | 
            +
                      Labimotion::Converter.metadata(id, current_user)
         | 
| 39 40 | 
             
                    end
         | 
| 40 41 | 
             
                  end
         | 
| 41 42 | 
             
                end
         | 
| @@ -42,6 +42,7 @@ module Labimotion | |
| 42 42 | 
             
                  props['identifier'] = klass.identifier if klass.identifier.present?
         | 
| 43 43 | 
             
                  props['uuid'] = uuid
         | 
| 44 44 | 
             
                  props['klass'] = 'Dataset'
         | 
| 45 | 
            +
                  props = Labimotion::VocabularyHandler.update_vocabularies(props, args[:current_user], args[:element])
         | 
| 45 46 |  | 
| 46 47 | 
             
                  ds = Labimotion::Dataset.find_by(element_type: self.class.name, element_id: id)
         | 
| 47 48 | 
             
                  if ds.present? && (ds.klass_uuid != props['klass_uuid'] || ds.properties != props)
         | 
| @@ -59,6 +59,8 @@ module Labimotion | |
| 59 59 | 
             
                    props['uuid'] = uuid
         | 
| 60 60 | 
             
                    props['klass'] = 'Segment'
         | 
| 61 61 | 
             
                    props = Labimotion::SampleAssociation.update_sample_association(props, args[:current_user_id])
         | 
| 62 | 
            +
                    current_user = User.find_by(id: args[:current_user_id])
         | 
| 63 | 
            +
                    props = Labimotion::VocabularyHandler.update_vocabularies(props, current_user, self)
         | 
| 62 64 | 
             
                    segment = Labimotion::Segment.where(element_type: self.class.name, element_id: self.id, segment_klass_id: seg['segment_klass_id']).order(id: :desc).first
         | 
| 63 65 | 
             
                    if segment.present? && (segment.klass_uuid != props['klass_uuid'] || segment.properties != props)
         | 
| 64 66 | 
             
                      segment.update!(properties_release: klass.properties_release, properties: props, uuid: uuid, klass_uuid: props['klass_uuid'])
         | 
| @@ -58,6 +58,9 @@ module Labimotion | |
| 58 58 | 
             
                after_create :update_counter
         | 
| 59 59 | 
             
                before_destroy :delete_attachment
         | 
| 60 60 |  | 
| 61 | 
            +
                def user_labels
         | 
| 62 | 
            +
                  tag&.taggable_data&.fetch('user_labels', nil)
         | 
| 63 | 
            +
                end
         | 
| 61 64 |  | 
| 62 65 | 
             
                def attachments
         | 
| 63 66 | 
             
                  Attachment.where(attachable_id: self.id, attachable_type: self.class.name)
         | 
| @@ -0,0 +1,9 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Labimotion
         | 
| 4 | 
            +
              class StdLayer < ApplicationRecord
         | 
| 5 | 
            +
                acts_as_paranoid
         | 
| 6 | 
            +
                self.table_name = :layers
         | 
| 7 | 
            +
                has_many :layer_tracks, primary_key: 'identifier', foreign_key: 'identifier', class_name: 'Labimotion::StdLayersRevision'
         | 
| 8 | 
            +
              end
         | 
| 9 | 
            +
            end
         | 
| @@ -0,0 +1,9 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Labimotion
         | 
| 4 | 
            +
              class StdLayersRevision < ApplicationRecord
         | 
| 5 | 
            +
                acts_as_paranoid
         | 
| 6 | 
            +
                self.table_name = :layer_tracks
         | 
| 7 | 
            +
                belongs_to :layers, primary_key: 'identifier', foreign_key: 'identifier', class_name: 'Labimotion::StdLayer'
         | 
| 8 | 
            +
              end
         | 
| 9 | 
            +
            end
         | 
| @@ -0,0 +1,12 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
            require 'labimotion/models/concerns/generic_klass_revisions'
         | 
| 3 | 
            +
            require 'labimotion/models/concerns/workflow'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            module Labimotion
         | 
| 6 | 
            +
              class Vocabulary < ApplicationRecord
         | 
| 7 | 
            +
                self.table_name = :vocabularies
         | 
| 8 | 
            +
                acts_as_paranoid
         | 
| 9 | 
            +
             | 
| 10 | 
            +
             | 
| 11 | 
            +
              end
         | 
| 12 | 
            +
            end
         | 
| @@ -0,0 +1,169 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'json'
         | 
| 4 | 
            +
            require 'time'
         | 
| 5 | 
            +
            require 'zip'
         | 
| 6 | 
            +
            require 'labimotion/constants'
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            module Labimotion
         | 
| 9 | 
            +
              class MapperUtils
         | 
| 10 | 
            +
                class << self
         | 
| 11 | 
            +
                  def load_config(config_json)
         | 
| 12 | 
            +
                    JSON.parse(config_json)
         | 
| 13 | 
            +
                  rescue JSON::ParserError => e
         | 
| 14 | 
            +
                    Rails.logger.error "Error parsing JSON: #{e.message}"
         | 
| 15 | 
            +
                    nil
         | 
| 16 | 
            +
                  rescue Errno::ENOENT => e
         | 
| 17 | 
            +
                    Rails.logger.error "Config file not found at #{Constants::Mapper::NMR_CONFIG}: #{e.message}"
         | 
| 18 | 
            +
                    nil
         | 
| 19 | 
            +
                  rescue StandardError => e
         | 
| 20 | 
            +
                    Rails.logger.error "Unexpected error loading config: #{e.message}"
         | 
| 21 | 
            +
                    nil
         | 
| 22 | 
            +
                  end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                  def load_brucker_config
         | 
| 25 | 
            +
                    config = load_config(File.read(Constants::Mapper::NMR_CONFIG))
         | 
| 26 | 
            +
                    return if config.nil? || config['sourceMap'].nil?
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                    source_selector = config['sourceMap']['sourceSelector']
         | 
| 29 | 
            +
                    return if source_selector.blank?
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                    parameters = config['sourceMap']['parameters']
         | 
| 32 | 
            +
                    return if parameters.blank?
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                    config
         | 
| 35 | 
            +
                  end
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                  def extract_data_from_zip(zip_file_url, source_map)
         | 
| 38 | 
            +
                    return nil if zip_file_url.nil?
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                    process_zip_file(zip_file_url, source_map)
         | 
| 41 | 
            +
                  rescue Zip::Error => e
         | 
| 42 | 
            +
                    Rails.logger.error "Zip file error: #{e.message}"
         | 
| 43 | 
            +
                    nil
         | 
| 44 | 
            +
                  rescue StandardError => e
         | 
| 45 | 
            +
                    Rails.logger.error "Unexpected error extracting metadata: #{e.message}"
         | 
| 46 | 
            +
                    nil
         | 
| 47 | 
            +
                  end
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                  def extract_parameters(file_content, parameter_names)
         | 
| 50 | 
            +
                    return nil if file_content.blank? || parameter_names.blank?
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                    patterns = {
         | 
| 53 | 
            +
                      standard: build_parameter_pattern(parameter_names, :standard),
         | 
| 54 | 
            +
                      parm: build_parameter_pattern(parameter_names, :parm)
         | 
| 55 | 
            +
                    }
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                    extracted_parameters = {}
         | 
| 58 | 
            +
                    begin
         | 
| 59 | 
            +
                      file_content.each_line do |line|
         | 
| 60 | 
            +
                        if (match = match_parameter(line, patterns))
         | 
| 61 | 
            +
                          value = clean_value(match[:value])
         | 
| 62 | 
            +
                          extracted_parameters[match[:param_name]] = value
         | 
| 63 | 
            +
                        end
         | 
| 64 | 
            +
                      end
         | 
| 65 | 
            +
                    rescue StandardError => e
         | 
| 66 | 
            +
                      Rails.logger.error "Error reading file content: #{e.message}"
         | 
| 67 | 
            +
                      return nil
         | 
| 68 | 
            +
                    end
         | 
| 69 | 
            +
                    extracted_parameters.compact_blank!
         | 
| 70 | 
            +
                    extracted_parameters
         | 
| 71 | 
            +
                  end
         | 
| 72 | 
            +
             | 
| 73 | 
            +
                  def format_timestamp(timestamp_str, give_format = nil)
         | 
| 74 | 
            +
                    return nil if timestamp_str.blank?
         | 
| 75 | 
            +
             | 
| 76 | 
            +
                    begin
         | 
| 77 | 
            +
                      timestamp = Integer(timestamp_str)
         | 
| 78 | 
            +
                      time_object = Time.at(timestamp).in_time_zone(Constants::DateTime::TIME_ZONE)
         | 
| 79 | 
            +
                      case give_format
         | 
| 80 | 
            +
                      when 'date'
         | 
| 81 | 
            +
                        time_object.strftime(Constants::DateTime::DATE_FORMAT)
         | 
| 82 | 
            +
                      when 'time'
         | 
| 83 | 
            +
                        time_object.strftime(Constants::DateTime::TIME_FORMAT)
         | 
| 84 | 
            +
                      else
         | 
| 85 | 
            +
                        time_object.strftime(Constants::DateTime::DATETIME_FORMAT)
         | 
| 86 | 
            +
                      end
         | 
| 87 | 
            +
                    rescue ArgumentError, TypeError => e
         | 
| 88 | 
            +
                      Rails.logger.error "Error parsing timestamp '#{timestamp_str}': #{e.message}"
         | 
| 89 | 
            +
                      nil
         | 
| 90 | 
            +
                    end
         | 
| 91 | 
            +
                  end
         | 
| 92 | 
            +
             | 
| 93 | 
            +
                  private
         | 
| 94 | 
            +
             | 
| 95 | 
            +
                  def build_parameter_pattern(parameter_names, format)
         | 
| 96 | 
            +
                    pattern = case format
         | 
| 97 | 
            +
                              when :standard
         | 
| 98 | 
            +
                                '^\\s*##?\\s*[$]?(?<param_name>%s)\\s*(?:=\\s*)?(?<value>.*?)\\s*$'
         | 
| 99 | 
            +
                              when :parm
         | 
| 100 | 
            +
                                '^\\s*(?<param_name>%s)\\s+(?<value>[^\\s].*?)(?:\\s+[A-Za-z]+)?\\s*$'
         | 
| 101 | 
            +
                              end
         | 
| 102 | 
            +
             | 
| 103 | 
            +
                    param_regex = parameter_names.map { |p| "\\b#{Regexp.escape(p)}\\b" }.join('|')
         | 
| 104 | 
            +
                    Regexp.new(pattern % param_regex)
         | 
| 105 | 
            +
                  end
         | 
| 106 | 
            +
             | 
| 107 | 
            +
                  def match_parameter(line, patterns)
         | 
| 108 | 
            +
                    patterns.each_value do |pattern|
         | 
| 109 | 
            +
                      match = line.match(pattern)
         | 
| 110 | 
            +
                      return match if match
         | 
| 111 | 
            +
                    end
         | 
| 112 | 
            +
                    nil
         | 
| 113 | 
            +
                  end
         | 
| 114 | 
            +
             | 
| 115 | 
            +
                  def clean_value(value)
         | 
| 116 | 
            +
                    value = value.strip
         | 
| 117 | 
            +
                    value = value[1..-2].strip if value.start_with?('<') && value.end_with?('>')
         | 
| 118 | 
            +
                    value
         | 
| 119 | 
            +
                  end
         | 
| 120 | 
            +
             | 
| 121 | 
            +
                  def process_zip_file(zip_file_url, source_map)
         | 
| 122 | 
            +
                    final_parameters = {}
         | 
| 123 | 
            +
             | 
| 124 | 
            +
                    Zip::File.open(zip_file_url) do |zip_file|
         | 
| 125 | 
            +
                      source_map['sourceSelector'].each do |source_name|
         | 
| 126 | 
            +
                        process_source(zip_file, source_map[source_name], final_parameters)
         | 
| 127 | 
            +
                      end
         | 
| 128 | 
            +
                    end
         | 
| 129 | 
            +
             | 
| 130 | 
            +
                    return { is_bagit: false, metadata: final_parameters } if final_parameters.present?
         | 
| 131 | 
            +
             | 
| 132 | 
            +
                    nil
         | 
| 133 | 
            +
                  end
         | 
| 134 | 
            +
             | 
| 135 | 
            +
                  def process_source(zip_file, source_config, final_parameters)
         | 
| 136 | 
            +
                    return if invalid_source_config?(source_config)
         | 
| 137 | 
            +
             | 
| 138 | 
            +
                    zip_file.each do |entry|
         | 
| 139 | 
            +
                      if source_file?(entry, source_config)
         | 
| 140 | 
            +
                        process_file_entry(entry, source_config['parameters'], final_parameters)
         | 
| 141 | 
            +
                      elsif bagit_metadata_file?(entry)
         | 
| 142 | 
            +
                        return { is_bagit: true, metadata: nil }
         | 
| 143 | 
            +
                      end
         | 
| 144 | 
            +
                    end
         | 
| 145 | 
            +
                  end
         | 
| 146 | 
            +
             | 
| 147 | 
            +
                  def process_file_entry(entry, parameters, final_parameters)
         | 
| 148 | 
            +
                    file_content = entry.get_input_stream.read.force_encoding(Constants::File::ENCODING)
         | 
| 149 | 
            +
                    extracted_parameters = extract_parameters(file_content, parameters)
         | 
| 150 | 
            +
                    final_parameters.merge!(extracted_parameters) if extracted_parameters.present?
         | 
| 151 | 
            +
                  end
         | 
| 152 | 
            +
             | 
| 153 | 
            +
                  def invalid_source_config?(source_config)
         | 
| 154 | 
            +
                    source_config.nil? ||
         | 
| 155 | 
            +
                      source_config['file'].nil? ||
         | 
| 156 | 
            +
                      source_config['parameters'].nil?
         | 
| 157 | 
            +
                  end
         | 
| 158 | 
            +
             | 
| 159 | 
            +
                  def source_file?(entry, source_config)
         | 
| 160 | 
            +
                    entry.name.include?(source_config['file'])
         | 
| 161 | 
            +
                  end
         | 
| 162 | 
            +
             | 
| 163 | 
            +
                  def bagit_metadata_file?(entry)
         | 
| 164 | 
            +
                    entry.name.include?('metadata/') &&
         | 
| 165 | 
            +
                      entry.name.include?('converter.json')
         | 
| 166 | 
            +
                  end
         | 
| 167 | 
            +
                end
         | 
| 168 | 
            +
              end
         | 
| 169 | 
            +
            end
         | 
| @@ -80,6 +80,28 @@ module Labimotion | |
| 80 80 | 
             
                  current_version
         | 
| 81 81 | 
             
                end
         | 
| 82 82 |  | 
| 83 | 
            +
                def self.find_field(properties, field_path, separator = '.')
         | 
| 84 | 
            +
                  return if properties.nil? || field_path.nil?
         | 
| 85 | 
            +
             | 
| 86 | 
            +
                  layer_name, field_name = field_path.split(separator)
         | 
| 87 | 
            +
                  fields = properties.dig(Labimotion::Prop::LAYERS, layer_name, Labimotion::Prop::FIELDS)
         | 
| 88 | 
            +
                  return unless fields
         | 
| 89 | 
            +
             | 
| 90 | 
            +
                  fields.find { |f| f['field'] == field_name }
         | 
| 91 | 
            +
                end
         | 
| 92 | 
            +
             | 
| 93 | 
            +
                def self.find_options_val(field, properties)
         | 
| 94 | 
            +
                  return if field.nil? || properties.nil? || field['option_layers'].nil? || field['value'].nil?
         | 
| 95 | 
            +
             | 
| 96 | 
            +
                  option_layers = properties.dig(Labimotion::Prop::SEL_OPTIONS, field['option_layers'])
         | 
| 97 | 
            +
                  options = option_layers && option_layers['options']
         | 
| 98 | 
            +
                  return if options.nil?
         | 
| 99 | 
            +
             | 
| 100 | 
            +
                  sel_option = options.find { |o| o['key'] = field['value'] }
         | 
| 101 | 
            +
                  sel_option && sel_option['label']
         | 
| 102 | 
            +
             | 
| 103 | 
            +
                end
         | 
| 104 | 
            +
             | 
| 83 105 | 
             
                def self.pkg(pkg)
         | 
| 84 106 | 
             
                  pkg = {} if pkg.nil?
         | 
| 85 107 | 
             
                  pkg['eln'] = Chemotion::Application.config.version
         | 
    
        data/lib/labimotion/version.rb
    CHANGED
    
    
    
        data/lib/labimotion.rb
    CHANGED
    
    | @@ -1,8 +1,8 @@ | |
| 1 1 | 
             
            # In your_gem_name.rb or main Ruby file
         | 
| 2 2 | 
             
            module Labimotion
         | 
| 3 | 
            -
             | 
| 4 3 | 
             
              autoload :CONF, 'labimotion/conf'
         | 
| 5 4 | 
             
              autoload :VERSION, 'labimotion/version'
         | 
| 5 | 
            +
              autoload :Constants, 'labimotion/constants'
         | 
| 6 6 |  | 
| 7 7 | 
             
              def self.logger
         | 
| 8 8 | 
             
                @@labimotion_logger ||= Logger.new(Rails.root.join('log/labimotion.log')) # rubocop:disable Style/ClassVars
         | 
| @@ -13,15 +13,19 @@ module Labimotion | |
| 13 13 | 
             
                Labimotion.logger.error(exception.backtrace.join("\n"))
         | 
| 14 14 | 
             
              end
         | 
| 15 15 |  | 
| 16 | 
            +
              autoload :MapperUtils, 'labimotion/utils/mapper_utils'
         | 
| 16 17 | 
             
              autoload :Utils, 'labimotion/utils/utils'
         | 
| 17 18 |  | 
| 18 19 | 
             
              ######## APIs
         | 
| 20 | 
            +
              autoload :LabimotionAPI, 'labimotion/apis/labimotion_api'
         | 
| 19 21 | 
             
              autoload :GenericKlassAPI, 'labimotion/apis/generic_klass_api'
         | 
| 20 22 | 
             
              autoload :GenericElementAPI, 'labimotion/apis/generic_element_api'
         | 
| 21 23 | 
             
              autoload :GenericDatasetAPI, 'labimotion/apis/generic_dataset_api'
         | 
| 22 24 | 
             
              autoload :SegmentAPI, 'labimotion/apis/segment_api'
         | 
| 23 25 | 
             
              autoload :LabimotionHubAPI, 'labimotion/apis/labimotion_hub_api'
         | 
| 24 26 | 
             
              autoload :ConverterAPI, 'labimotion/apis/converter_api'
         | 
| 27 | 
            +
              autoload :StandardLayerAPI, 'labimotion/apis/standard_layer_api'
         | 
| 28 | 
            +
              autoload :VocabularyAPI, 'labimotion/apis/vocabulary_api'
         | 
| 25 29 |  | 
| 26 30 | 
             
              ######## Entities
         | 
| 27 31 | 
             
              autoload :PropertiesEntity, 'labimotion/entities/properties_entity'
         | 
| @@ -43,6 +47,7 @@ module Labimotion | |
| 43 47 | 
             
              autoload :ElementRevisionEntity, 'labimotion/entities/element_revision_entity'
         | 
| 44 48 | 
             
              autoload :SegmentRevisionEntity, 'labimotion/entities/segment_revision_entity'
         | 
| 45 49 | 
             
              ## autoload :DatasetRevisionEntity, 'labimotion/entities/dataset_revision_entity'
         | 
| 50 | 
            +
              autoload :VocabularyEntity, 'labimotion/entities/vocabulary_entity'
         | 
| 46 51 |  | 
| 47 52 | 
             
              ######## Helpers
         | 
| 48 53 | 
             
              autoload :GenericHelpers, 'labimotion/helpers/generic_helpers'
         | 
| @@ -54,9 +59,11 @@ module Labimotion | |
| 54 59 | 
             
              autoload :ConverterHelpers, 'labimotion/helpers/converter_helpers'
         | 
| 55 60 | 
             
              autoload :SampleAssociationHelpers, 'labimotion/helpers/sample_association_helpers'
         | 
| 56 61 | 
             
              autoload :RepositoryHelpers, 'labimotion/helpers/repository_helpers'
         | 
| 62 | 
            +
              autoload :VocabularyHelpers, 'labimotion/helpers/vocabulary_helpers'
         | 
| 57 63 |  | 
| 58 64 | 
             
              ######## Libs
         | 
| 59 65 | 
             
              autoload :Converter, 'labimotion/libs/converter'
         | 
| 66 | 
            +
              autoload :DatasetBuilder, 'labimotion/libs/dataset_builder'
         | 
| 60 67 | 
             
              autoload :NmrMapper, 'labimotion/libs/nmr_mapper'
         | 
| 61 68 | 
             
              autoload :NmrMapperRepo, 'labimotion/libs/nmr_mapper_repo' ## for Chemotion Repository
         | 
| 62 69 | 
             
              autoload :TemplateHub, 'labimotion/libs/template_hub'
         | 
| @@ -64,6 +71,7 @@ module Labimotion | |
| 64 71 | 
             
              autoload :SampleAssociation, 'labimotion/libs/sample_association'
         | 
| 65 72 | 
             
              autoload :PropertiesHandler, 'labimotion/libs/properties_handler'
         | 
| 66 73 | 
             
              autoload :AttachmentHandler, 'labimotion/libs/attachment_handler'
         | 
| 74 | 
            +
              autoload :VocabularyHandler, 'labimotion/libs/vocabulary_handler'
         | 
| 67 75 |  | 
| 68 76 | 
             
              ######## Utils
         | 
| 69 77 | 
             
              autoload :Prop, 'labimotion/utils/prop'
         | 
| @@ -84,6 +92,7 @@ module Labimotion | |
| 84 92 | 
             
              autoload :ElementKlass, 'labimotion/models/element_klass'
         | 
| 85 93 | 
             
              autoload :SegmentKlass, 'labimotion/models/segment_klass'
         | 
| 86 94 | 
             
              autoload :DatasetKlass, 'labimotion/models/dataset_klass'
         | 
| 95 | 
            +
              autoload :Vocabulary, 'labimotion/models/vocabulary'
         | 
| 87 96 |  | 
| 88 97 | 
             
              autoload :ElementsRevision, 'labimotion/models/elements_revision'
         | 
| 89 98 | 
             
              autoload :SegmentsRevision, 'labimotion/models/segments_revision'
         | 
| @@ -97,6 +106,9 @@ module Labimotion | |
| 97 106 | 
             
              autoload :ElementsElement, 'labimotion/models/elements_element'
         | 
| 98 107 | 
             
              autoload :CollectionsElement, 'labimotion/models/collections_element'
         | 
| 99 108 |  | 
| 109 | 
            +
              autoload :StdLayer, 'labimotion/models/std_layer'
         | 
| 110 | 
            +
              autoload :StdLayersRevision, 'labimotion/models/std_layers_revision'
         | 
| 111 | 
            +
             | 
| 100 112 | 
             
              ######## Models/Concerns
         | 
| 101 113 | 
             
              autoload :GenericKlassRevisions, 'labimotion/models/concerns/generic_klass_revisions'
         | 
| 102 114 | 
             
              autoload :GenericRevisions, 'labimotion/models/concerns/generic_revisions'
         | 
| @@ -104,6 +116,4 @@ module Labimotion | |
| 104 116 | 
             
              autoload :Datasetable, 'labimotion/models/concerns/datasetable'
         | 
| 105 117 | 
             
              autoload :AttachmentConverter, 'labimotion/models/concerns/attachment_converter.rb'
         | 
| 106 118 | 
             
              autoload :LinkedProperties, 'labimotion/models/concerns/linked_properties'
         | 
| 107 | 
            -
             | 
| 108 | 
            -
             | 
| 109 119 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: labimotion
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version:  | 
| 4 | 
            +
              version: 2.0.0.rc6
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Chia-Lin Lin
         | 
| @@ -9,7 +9,7 @@ authors: | |
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date:  | 
| 12 | 
            +
            date: 2025-02-21 00:00:00.000000000 Z
         | 
| 13 13 | 
             
            dependencies:
         | 
| 14 14 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 15 | 
             
              name: rails
         | 
| @@ -38,11 +38,16 @@ files: | |
| 38 38 | 
             
            - lib/labimotion/apis/generic_dataset_api.rb
         | 
| 39 39 | 
             
            - lib/labimotion/apis/generic_element_api.rb
         | 
| 40 40 | 
             
            - lib/labimotion/apis/generic_klass_api.rb
         | 
| 41 | 
            +
            - lib/labimotion/apis/labimotion_api.rb
         | 
| 41 42 | 
             
            - lib/labimotion/apis/labimotion_hub_api.rb
         | 
| 42 43 | 
             
            - lib/labimotion/apis/segment_api.rb
         | 
| 44 | 
            +
            - lib/labimotion/apis/standard_api.rb
         | 
| 45 | 
            +
            - lib/labimotion/apis/standard_layer_api.rb
         | 
| 46 | 
            +
            - lib/labimotion/apis/vocabulary_api.rb
         | 
| 43 47 | 
             
            - lib/labimotion/collection/export.rb
         | 
| 44 48 | 
             
            - lib/labimotion/collection/import.rb
         | 
| 45 49 | 
             
            - lib/labimotion/conf.rb
         | 
| 50 | 
            +
            - lib/labimotion/constants.rb
         | 
| 46 51 | 
             
            - lib/labimotion/entities/application_entity.rb
         | 
| 47 52 | 
             
            - lib/labimotion/entities/dataset_entity.rb
         | 
| 48 53 | 
             
            - lib/labimotion/entities/dataset_klass_entity.rb
         | 
| @@ -58,6 +63,7 @@ files: | |
| 58 63 | 
             
            - lib/labimotion/entities/segment_entity.rb
         | 
| 59 64 | 
             
            - lib/labimotion/entities/segment_klass_entity.rb
         | 
| 60 65 | 
             
            - lib/labimotion/entities/segment_revision_entity.rb
         | 
| 66 | 
            +
            - lib/labimotion/entities/vocabulary_entity.rb
         | 
| 61 67 | 
             
            - lib/labimotion/helpers/converter_helpers.rb
         | 
| 62 68 | 
             
            - lib/labimotion/helpers/dataset_helpers.rb
         | 
| 63 69 | 
             
            - lib/labimotion/helpers/element_helpers.rb
         | 
| @@ -67,14 +73,21 @@ files: | |
| 67 73 | 
             
            - lib/labimotion/helpers/sample_association_helpers.rb
         | 
| 68 74 | 
             
            - lib/labimotion/helpers/search_helpers.rb
         | 
| 69 75 | 
             
            - lib/labimotion/helpers/segment_helpers.rb
         | 
| 76 | 
            +
            - lib/labimotion/helpers/vocabulary_helpers.rb
         | 
| 70 77 | 
             
            - lib/labimotion/libs/attachment_handler.rb
         | 
| 71 78 | 
             
            - lib/labimotion/libs/converter.rb
         | 
| 79 | 
            +
            - lib/labimotion/libs/data/mapper/Chemwiki.json
         | 
| 80 | 
            +
            - lib/labimotion/libs/data/mapper/Source.json
         | 
| 81 | 
            +
            - lib/labimotion/libs/data/vocab/Standard.json
         | 
| 82 | 
            +
            - lib/labimotion/libs/data/vocab/System.json
         | 
| 83 | 
            +
            - lib/labimotion/libs/dataset_builder.rb
         | 
| 72 84 | 
             
            - lib/labimotion/libs/export_dataset.rb
         | 
| 73 85 | 
             
            - lib/labimotion/libs/export_element.rb
         | 
| 74 86 | 
             
            - lib/labimotion/libs/nmr_mapper.rb
         | 
| 75 87 | 
             
            - lib/labimotion/libs/properties_handler.rb
         | 
| 76 88 | 
             
            - lib/labimotion/libs/sample_association.rb
         | 
| 77 89 | 
             
            - lib/labimotion/libs/template_hub.rb
         | 
| 90 | 
            +
            - lib/labimotion/libs/vocabulary_handler.rb
         | 
| 78 91 | 
             
            - lib/labimotion/models/collections_element.rb
         | 
| 79 92 | 
             
            - lib/labimotion/models/concerns/attachment_converter.rb
         | 
| 80 93 | 
             
            - lib/labimotion/models/concerns/datasetable.rb
         | 
| @@ -98,10 +111,14 @@ files: | |
| 98 111 | 
             
            - lib/labimotion/models/segment_klass.rb
         | 
| 99 112 | 
             
            - lib/labimotion/models/segment_klasses_revision.rb
         | 
| 100 113 | 
             
            - lib/labimotion/models/segments_revision.rb
         | 
| 114 | 
            +
            - lib/labimotion/models/std_layer.rb
         | 
| 115 | 
            +
            - lib/labimotion/models/std_layers_revision.rb
         | 
| 116 | 
            +
            - lib/labimotion/models/vocabulary.rb
         | 
| 101 117 | 
             
            - lib/labimotion/utils/con_state.rb
         | 
| 102 118 | 
             
            - lib/labimotion/utils/export_utils.rb
         | 
| 103 119 | 
             
            - lib/labimotion/utils/field_type.rb
         | 
| 104 120 | 
             
            - lib/labimotion/utils/import_utils.rb
         | 
| 121 | 
            +
            - lib/labimotion/utils/mapper_utils.rb
         | 
| 105 122 | 
             
            - lib/labimotion/utils/prop.rb
         | 
| 106 123 | 
             
            - lib/labimotion/utils/search.rb
         | 
| 107 124 | 
             
            - lib/labimotion/utils/serializer.rb
         | 
| @@ -111,7 +128,10 @@ files: | |
| 111 128 | 
             
            homepage: https://github.com/LabIMotion/labimotion
         | 
| 112 129 | 
             
            licenses:
         | 
| 113 130 | 
             
            - AGPL-3.0
         | 
| 114 | 
            -
            metadata: | 
| 131 | 
            +
            metadata:
         | 
| 132 | 
            +
              homepage_uri: https://github.com/LabIMotion/labimotion
         | 
| 133 | 
            +
              source_code_uri: https://github.com/LabIMotion/labimotion
         | 
| 134 | 
            +
              bug_tracker_uri: https://github.com/LabIMotion/labimotion/discussions
         | 
| 115 135 | 
             
            post_install_message: 
         | 
| 116 136 | 
             
            rdoc_options: []
         | 
| 117 137 | 
             
            require_paths:
         | 
| @@ -123,9 +143,9 @@ required_ruby_version: !ruby/object:Gem::Requirement | |
| 123 143 | 
             
                  version: '0'
         | 
| 124 144 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 125 145 | 
             
              requirements:
         | 
| 126 | 
            -
              - - " | 
| 146 | 
            +
              - - ">"
         | 
| 127 147 | 
             
                - !ruby/object:Gem::Version
         | 
| 128 | 
            -
                  version:  | 
| 148 | 
            +
                  version: 1.3.1
         | 
| 129 149 | 
             
            requirements: []
         | 
| 130 150 | 
             
            rubygems_version: 3.1.6
         | 
| 131 151 | 
             
            signing_key: 
         |