ontology_version.rb revision 6c8d349bce5a8aa4c5af757a84d9432153024e8f
316cbe323513a0f20d1cf519fe9405e231d633e2Aki Tuomiclass OntologyVersion < ActiveRecord::Base
316cbe323513a0f20d1cf519fe9405e231d633e2Aki Tuomi include CodeReferencable
316cbe323513a0f20d1cf519fe9405e231d633e2Aki Tuomi
f49f1c5fa6a9a55a194e5ada042df134907278f4Aki Tuomi include OntologyVersion::Files
f49f1c5fa6a9a55a194e5ada042df134907278f4Aki Tuomi include OntologyVersion::States
316cbe323513a0f20d1cf519fe9405e231d633e2Aki Tuomi include OntologyVersion::Parsing
316cbe323513a0f20d1cf519fe9405e231d633e2Aki Tuomi include OntologyVersion::Numbers
285bfe946c2d54928b272270dd5eef9041b24271Timo Sirainen include OntologyVersion::OopsRequests
b3a968f434cbb9e374ea3da0a7d493e20231a4aeAki Tuomi
316cbe323513a0f20d1cf519fe9405e231d633e2Aki Tuomi include Rails.application.routes.url_helpers
316cbe323513a0f20d1cf519fe9405e231d633e2Aki Tuomi include ActionDispatch::Routing::UrlFor
316cbe323513a0f20d1cf519fe9405e231d633e2Aki Tuomi
316cbe323513a0f20d1cf519fe9405e231d633e2Aki Tuomi belongs_to :user
316cbe323513a0f20d1cf519fe9405e231d633e2Aki Tuomi belongs_to :ontology, :counter_cache => :versions_count
316cbe323513a0f20d1cf519fe9405e231d633e2Aki Tuomi
316cbe323513a0f20d1cf519fe9405e231d633e2Aki Tuomi# before_validation :set_checksum
316cbe323513a0f20d1cf519fe9405e231d633e2Aki Tuomi# validate :raw_file_size_maximum
316cbe323513a0f20d1cf519fe9405e231d633e2Aki Tuomi
316cbe323513a0f20d1cf519fe9405e231d633e2Aki Tuomi validates_format_of :source_url,
cd24dc2196f7480d4793ca5d5f9f8d70741bc103Aki Tuomi :with => URI::regexp(Settings.allowed_iri_schemes), :if => :source_url?
316cbe323513a0f20d1cf519fe9405e231d633e2Aki Tuomi validates_presence_of :basepath
452d0005a47c6872590346f5ea8b247974689ac9Aki Tuomi
c6108c1bfa10d5fcd1def9c6a23ebcd5204d1775Timo Sirainen scope :latest, order('id DESC')
345f36ebc7dd445cfa3dbf157342d110cc74d7c7Aki Tuomi scope :done, state('done')
c6108c1bfa10d5fcd1def9c6a23ebcd5204d1775Timo Sirainen scope :failed, state('failed')
316cbe323513a0f20d1cf519fe9405e231d633e2Aki Tuomi
316cbe323513a0f20d1cf519fe9405e231d633e2Aki Tuomi delegate :repository, to: :ontology
316cbe323513a0f20d1cf519fe9405e231d633e2Aki Tuomi
316cbe323513a0f20d1cf519fe9405e231d633e2Aki Tuomi acts_as_tree
316cbe323513a0f20d1cf519fe9405e231d633e2Aki Tuomi
316cbe323513a0f20d1cf519fe9405e231d633e2Aki Tuomi # updated_at of the latest version
17fbd200b78112bd0d89e89598aa01cea72a74e5Martti Rannanjärvi def self.last_updated_at
316cbe323513a0f20d1cf519fe9405e231d633e2Aki Tuomi latest.first.try(:updated_at)
316cbe323513a0f20d1cf519fe9405e231d633e2Aki Tuomi end
316cbe323513a0f20d1cf519fe9405e231d633e2Aki Tuomi
316cbe323513a0f20d1cf519fe9405e231d633e2Aki Tuomi def to_param
316cbe323513a0f20d1cf519fe9405e231d633e2Aki Tuomi self.number
316cbe323513a0f20d1cf519fe9405e231d633e2Aki Tuomi end
316cbe323513a0f20d1cf519fe9405e231d633e2Aki Tuomi
316cbe323513a0f20d1cf519fe9405e231d633e2Aki Tuomi # Public URL to this version
de1c645a79d42c37dffb7f52e9c643b6251fdcd0Aki Tuomi #
7c9a9ac8cd5652f0e12a24b07c8559a7be0f5554Timo Sirainen # TODO: This returns a path without the commit id and filename for now,
de1c645a79d42c37dffb7f52e9c643b6251fdcd0Aki Tuomi # because the FilesController or the routes were not supporting it.
316cbe323513a0f20d1cf519fe9405e231d633e2Aki Tuomi def url(params={})
7e1a69e513739a7c12e3c5ec53dff1eb01b90524Aki Tuomi #Rails.application.routes.url_helpers.repository_ref_path(repository, commit_oid, ontology.path, params.reverse_merge(host: Settings.hostname, only_path: false))
7e1a69e513739a7c12e3c5ec53dff1eb01b90524Aki Tuomi url_for [repository, ontology, self]
316cbe323513a0f20d1cf519fe9405e231d633e2Aki Tuomi end
149299c7d5136a8fb425ef3cf8953026a1358002Timo Sirainen
7e1a69e513739a7c12e3c5ec53dff1eb01b90524Aki Tuomi def default_url_options
316cbe323513a0f20d1cf519fe9405e231d633e2Aki Tuomi {host: Settings.hostname}
316cbe323513a0f20d1cf519fe9405e231d633e2Aki Tuomi end
316cbe323513a0f20d1cf519fe9405e231d633e2Aki Tuomi
ff95c6488eb3239654ed7fd51ed787a6b2c44506Timo Sirainen def path
f089a10e4816e772992346c9837ec10db3894c65Timo Sirainen "#{basepath}#{file_extension}"
316cbe323513a0f20d1cf519fe9405e231d633e2Aki Tuomi end
ff95c6488eb3239654ed7fd51ed787a6b2c44506Timo Sirainen
ff95c6488eb3239654ed7fd51ed787a6b2c44506Timo Sirainen protected
ff95c6488eb3239654ed7fd51ed787a6b2c44506Timo Sirainen
316cbe323513a0f20d1cf519fe9405e231d633e2Aki Tuomi def raw_file_size_maximum
316cbe323513a0f20d1cf519fe9405e231d633e2Aki Tuomi if raw_file.size > 10.megabytes.to_i
316cbe323513a0f20d1cf519fe9405e231d633e2Aki Tuomi errors.add :raw_file, 'The maximum file size is 10M.'
ff95c6488eb3239654ed7fd51ed787a6b2c44506Timo Sirainen end
86ad487452c763152f3ff4dd4650512f3cecdc55Aki Tuomi end
86ad487452c763152f3ff4dd4650512f3cecdc55Aki Tuomi
86ad487452c763152f3ff4dd4650512f3cecdc55Aki Tuomi def refresh_checksum!
b3a968f434cbb9e374ea3da0a7d493e20231a4aeAki Tuomi self.checksum = Digest::SHA1.file(raw_path!).hexdigest
316cbe323513a0f20d1cf519fe9405e231d633e2Aki Tuomi save! if checksum_changed?
316cbe323513a0f20d1cf519fe9405e231d633e2Aki Tuomi end
316cbe323513a0f20d1cf519fe9405e231d633e2Aki Tuomi
ff95c6488eb3239654ed7fd51ed787a6b2c44506Timo Sirainenend
86ad487452c763152f3ff4dd4650512f3cecdc55Aki Tuomi