diff --git a/app/models/research/journal/article.rb b/app/models/research/journal/article.rb index 896c54bcc1d38402822b94a04aa308c973139484..6dbbde9097d0ed07b5064f8c99de0e3102e20efe 100644 --- a/app/models/research/journal/article.rb +++ b/app/models/research/journal/article.rb @@ -32,13 +32,15 @@ # fk_rails_... (updated_by_id => users.id) # class Research::Journal::Article < ApplicationRecord + include WithGithub + belongs_to :university belongs_to :journal, foreign_key: :research_journal_id belongs_to :volume, foreign_key: :research_journal_volume_id, optional: true belongs_to :updated_by, class_name: 'User' has_and_belongs_to_many :researchers, class_name: 'Research::Researcher' - after_commit :publish_to_github + after_commit :update_researchers has_one_attached :pdf @@ -58,22 +60,21 @@ class Research::Journal::Article < ApplicationRecord protected - def publish_to_github - github.publish kind: :articles, - file: "#{id}.md", - title: title, - data: ApplicationController.render( - template: 'admin/research/journal/articles/jekyll', - layout: false, - assigns: { article: self } - ) + def github_path_generated + "_articles/#{id}.html" + end + + def to_jekyll + ApplicationController.render( + template: 'admin/research/journal/articles/jekyll', + layout: false, + assigns: { article: self } + ) + end + + def update_researchers researchers.each do |researcher| researcher.publish_to_website(journal.website) end - github.send_file pdf, pdf_path if pdf.attached? - end - - def github - @github ||= Github.with_site(journal.website) end end diff --git a/app/models/research/researcher.rb b/app/models/research/researcher.rb index 6b85efede27a16e94b22e46452cd9e03b07e7c62..3ff523338bc2cb62b8b605e98763ad3412e69f30 100644 --- a/app/models/research/researcher.rb +++ b/app/models/research/researcher.rb @@ -32,14 +32,9 @@ class Research::Researcher < ApplicationRecord def publish_to_website(website) github = Github.new website.access_token, website.repository - github.publish kind: :authors, - file: "#{ id }.md", - title: to_s, - data: ApplicationController.render( - template: 'admin/research/researchers/jekyll', - layout: false, - assigns: { researcher: self } - ) + github.publish path: "_authors/#{ id }.md", + data: to_jekyll, + commit: "[Researcher] Save #{to_s}" end def to_s @@ -48,6 +43,14 @@ class Research::Researcher < ApplicationRecord protected + def to_jekyll + ApplicationController.render( + template: 'admin/research/researchers/jekyll', + layout: false, + assigns: { researcher: self } + ) + end + def publish_to_github websites.each { |website| publish_to_website(website) } end diff --git a/app/services/github.rb b/app/services/github.rb index 5f029c5d9b5c0db061680b7e867e1fe21103a445..ce50a1d6ead90eeff1c73ebed2a92432e9cd9a4e 100644 --- a/app/services/github.rb +++ b/app/services/github.rb @@ -10,22 +10,11 @@ class Github @repository = repository end - def publish(kind: nil, # Deprecated - file: nil, # Deprecated - title: nil, # Deprecated - path: nil, + def publish(path: nil, previous_path: nil, commit: nil, data:) - if path - local_path = "#{ tmp_directory }/#{ path }" - remote_file = path - else - # Deprecated - local_path = "#{ tmp_directory }/#{ file }" - remote_file = "_#{ kind }/#{ file }" - commit = "Save #{ title }" - end + local_path = "#{ tmp_directory }/#{ path }" Pathname(local_path).dirname.mkpath File.write local_path, data return if repository.blank? @@ -33,10 +22,10 @@ class Github move_file previous_path, path end client.create_contents repository, - remote_file, + path, commit, file: local_path, - sha: file_sha(remote_file) + sha: file_sha(path) rescue # byebug end