Browse Source

Implement connection to CDAO

pull/2/head
Angel Aviel Domaoan 4 years ago
parent
commit
2e547140e6
  1. 9
      app/models/cdao/base.rb
  2. 30
      app/models/cdao/database_connector.rb
  3. 3
      app/models/cdao/jurisprudence.rb
  4. 5
      app/models/cdao/library.rb
  5. 28
      app/models/cdao/library_subject.rb
  6. 47
      app/models/cdao/subject.rb
  7. 25
      config/database.cdao.yml

9
app/models/cdao/base.rb

@ -0,0 +1,9 @@
class Cdao::Base < ActiveRecord::Base
self.abstract_class = true
establish_connection Cdao::DatabaseConnector.database_config
def self.table_name_prefix
"cdao_"
end
end

30
app/models/cdao/database_connector.rb

@ -0,0 +1,30 @@
module Cdao
module DatabaseConnector
class << self
attr_writer :config, :config_path
def database_config
config["database"]
end
def config
@config ||=
if File.exist?(config_path)
File.open(config_path) do |file|
YAML.safe_load(ERB.new(file.read).result)[::Rails.env]
end
else
{}
end
end
def config_path
@config_path ||= File.join(::Rails.root, "config", "database.cdao.yml")
end
def reset
@config = nil
end
end
end
end

3
app/models/cdao/jurisprudence.rb

@ -0,0 +1,3 @@
class Cdao::Jurisprudence < Cdao::Base
self.table_name = "jurisprudences"
end

5
app/models/cdao/library.rb

@ -0,0 +1,5 @@
class Cdao::Library < Cdao::Base
default_scope { where(id: Cdao::Library.find_by(key: "JurisprudenceEncyclopedia").try(:id)) }
self.table_name = "producttitles"
end

28
app/models/cdao/library_subject.rb

@ -0,0 +1,28 @@
class Cdao::LibrarySubject < Cdao::Base
acts_as_list column: :rank, scope: %i[library_id subject_parent_id]
belongs_to :library, optional: false
delegate :name, :rank, to: :library, prefix: true
belongs_to :subject, optional: false
validates :library_id, uniqueness: { scope: %i[subject_id] }
after_save do
update_column :subject_parent_id, subject.parent_id # rubocop:disable Rails/SkipsModelValidations
end
def self.import
Subject.find_each do |subject|
subject.library_subjects.where(library_id: subject.library_id).first_or_create
end
end
def self.import_rank_from_subjects
Subject.find_each do |subject|
subject.library_subjects.each do |subject_library|
subject_library.update(rank: subject.rank)
end
end
end
end

47
app/models/cdao/subject.rb

@ -0,0 +1,47 @@
class Cdao::Subject < Cdao::Base
default_scope { joins(:library_subjects)
.where(cdao_library_subjects: { library_id: [Cdao::Library.find_by(key: "JurisprudenceEncyclopedia").try(:id)] }) }
has_ancestry
has_many :library_subjects, dependent: :restrict_with_error
accepts_nested_attributes_for :library_subjects, allow_destroy: true
has_many :libraries, through: :library_subjects
alias_attribute :producttitles, :libraries
validates :name, presence: true
validates :name, uniqueness: { scope: %i[ancestry] }
scope :byproduct, lambda { |id|
joins(:library_subjects).where(library_subjects: { library_id: id })
}
scope :for_lib, lambda { |*ids|
product_key = ids.shift
where(arel_table[:id].in(ids).or(arel_table[:library_id].eq(product_key)))
}
scope :with_parent, -> { where(arel_table[:ancestry].not_eq nil) }
state_machine initial: :published do
event :publish do
transition from: :activated, to: :published
end
event :unpublish do
transition from: :published, to: :activated
end
end
def lineage_name
path.map(&:name).join("; ")
end
def name_with_product_names
product_names = libraries.map(&:name).reject(&:blank?).join(", ")
return name if product_names.blank?
[name, "(#{product_names})"].join(" ")
end
end

25
config/database.cdao.yml

@ -0,0 +1,25 @@
development:
database:
adapter: <%= ENV["DB_ADAPTER"] || "postgresql" %>
url: <%= ENV["DATABASE_URL_CDAO"] %>
pool: <%= ENV["DB_POOL"] || ENV['MAX_THREADS'] || 5 %>
prepared_statements: false
advisory_locks: false
variables:
statement_timeout: 10s
test:
database:
adapter: <%= ENV["DB_ADAPTER"] || "postgresql" %>
url: <%= ENV["DATABASE_URL_CDAO"] %>
pool: <%= ENV["DB_POOL"] || ENV['MAX_THREADS'] || 5 %>
production:
database:
adapter: <%= ENV["DB_ADAPTER"] || "postgresql" %>
url: <%= ENV["DATABASE_URL_CDAO"] %>
pool: <%= ENV["DB_POOL"] || ENV['MAX_THREADS'] || 5 %>
prepared_statements: false
advisory_locks: false
variables:
statement_timeout: 10s
Loading…
Cancel
Save