From 86485961bfd0988192ea00ae12900ae78c9b45e9 Mon Sep 17 00:00:00 2001 From: Arnaud Levy <contact@arnaudlevy.com> Date: Mon, 6 Sep 2021 15:43:06 +0200 Subject: [PATCH] refactor --- app/models/communication/website.rb | 3 +- app/models/research/journal.rb | 1 + app/models/research/journal/article.rb | 14 ++++++- app/models/research/journal/volume.rb | 14 ++++++- app/services/github.rb | 38 ------------------- .../communication/websites/_form.html.erb | 10 +++++ .../communication/websites/show.html.erb | 5 +++ .../admin/research/journals/_form.html.erb | 5 --- .../admin/research/journals/index.html.erb | 4 +- .../admin/research/journals/show.html.erb | 7 +++- config/locales/communication/fr.yml | 4 +- 11 files changed, 52 insertions(+), 53 deletions(-) diff --git a/app/models/communication/website.rb b/app/models/communication/website.rb index 1964228e7..da1e498d5 100644 --- a/app/models/communication/website.rb +++ b/app/models/communication/website.rb @@ -28,9 +28,10 @@ class Communication::Website < ApplicationRecord has_many :pages, foreign_key: :communication_website_id def self.about_types - [nil, :research_journal, :school] + [nil, Research::Journal.name] end + def domain_url "https://#{ domain }" end diff --git a/app/models/research/journal.rb b/app/models/research/journal.rb index 40fc64ecf..5cdc09b64 100644 --- a/app/models/research/journal.rb +++ b/app/models/research/journal.rb @@ -21,6 +21,7 @@ # class Research::Journal < ApplicationRecord belongs_to :university + has_one :website, class_name: 'Communication::Website', foreign_key: :about has_many :volumes, foreign_key: :research_journal_id has_many :articles, foreign_key: :research_journal_id diff --git a/app/models/research/journal/article.rb b/app/models/research/journal/article.rb index 9adf754d3..4f7c4bd8c 100644 --- a/app/models/research/journal/article.rb +++ b/app/models/research/journal/article.rb @@ -38,7 +38,17 @@ class Research::Journal::Article < ApplicationRecord protected def publish_to_github - return if journal.repository.blank? - Github.publish_article self + return if journal.website&.repository.blank? + github = Github.new journal.website.access_token, journal.website.repository + data = ApplicationController.render( + template: 'admin/research/journal/articles/jekyll', + layout: false, + assigns: { article: self } + ) + github.publish local_directory: "tmp/articles", + local_file: "#{id}.md", + data: data, + remote_file: "_articles/#{id}.md", + commit_message: "Save volume #{ title }" end end diff --git a/app/models/research/journal/volume.rb b/app/models/research/journal/volume.rb index ed0e9f297..d01c14079 100644 --- a/app/models/research/journal/volume.rb +++ b/app/models/research/journal/volume.rb @@ -38,7 +38,17 @@ class Research::Journal::Volume < ApplicationRecord protected def publish_to_github - return if journal.repository.blank? - Github.publish_volume self + return if journal.website&.repository.blank? + github = Github.new journal.website.access_token, journal.website.repository + data = ApplicationController.render( + template: 'admin/research/journal/volumes/jekyll', + layout: false, + assigns: { volume: self } + ) + github.publish local_directory: "tmp/volumes", + local_file: "#{id}.md", + data: data, + remote_file: "_volumes/#{id}.md", + commit_message: "Save volume #{ title }" end end diff --git a/app/services/github.rb b/app/services/github.rb index c5f183ba3..b52429617 100644 --- a/app/services/github.rb +++ b/app/services/github.rb @@ -1,49 +1,11 @@ class Github attr_reader :access_token, :repository - def self.publish_article(article) - with_journal(article.journal).publish_article(article) - end - - def self.publish_volume(volume) - with_journal(volume.journal).publish_volume(volume) - end - - def self.with_journal(journal) - new(journal.access_token, journal.repository) - end - def initialize(access_token, repository) @access_token = access_token @repository = repository end - def publish_article(article) - data = ApplicationController.render( - template: 'admin/research/journal/articles/jekyll', - layout: false, - assigns: { article: article } - ) - publish local_directory: "tmp/articles", - local_file: "#{article.id}.md", - data: data, - remote_file: "_articles/#{article.id}.md", - commit_message: "Save article #{ article.title }" - end - - def publish_volume(volume) - data = ApplicationController.render( - template: 'admin/research/journal/volumes/jekyll', - layout: false, - assigns: { volume: volume } - ) - publish local_directory: "tmp/volumes", - local_file: "#{volume.id}.md", - data: data, - remote_file: "_volumes/#{volume.id}.md", - commit_message: "Save volume #{ volume.title }" - end - def publish(local_directory:, local_file:, data:, remote_file:, commit_message:) FileUtils.mkdir_p local_directory local_path = "#{local_directory}/#{ local_file }" diff --git a/app/views/admin/communication/websites/_form.html.erb b/app/views/admin/communication/websites/_form.html.erb index 09160d49c..6e92bb9db 100644 --- a/app/views/admin/communication/websites/_form.html.erb +++ b/app/views/admin/communication/websites/_form.html.erb @@ -8,6 +8,16 @@ I18n.t("activerecord.attributes.communication/website.about_#{object}") }, include_blank: false %> + <% + unless website.about_type.blank? + case website.about_type + when Research::Journal.name + collection = current_university.research_journals + end + %> + <%= f.input :about_id, + collection: collection %> + <% end %> </div> <div class="col-md-4"> <%= f.input :domain %> diff --git a/app/views/admin/communication/websites/show.html.erb b/app/views/admin/communication/websites/show.html.erb index 7b965af6f..18780fd65 100644 --- a/app/views/admin/communication/websites/show.html.erb +++ b/app/views/admin/communication/websites/show.html.erb @@ -4,6 +4,11 @@ <%= link_to @website.domain_url, @website.domain_url, target: :_blank %> </p> +<p> + <%= I18n.t("activerecord.attributes.communication/website.about_#{@website.about_type}") %> + <%= link_to @website.about, [:admin, @website.about] unless @website.about.nil? %> +</p> + <% content_for :buttons do %> <%= edit_link @website %> <% end %> diff --git a/app/views/admin/research/journals/_form.html.erb b/app/views/admin/research/journals/_form.html.erb index 3b3c86b71..b212e3573 100644 --- a/app/views/admin/research/journals/_form.html.erb +++ b/app/views/admin/research/journals/_form.html.erb @@ -2,11 +2,6 @@ <div class="row"> <div class="col-md-6"> <%= f.input :title %> - <%= f.input :repository %> - <%= f.input :access_token %> - </div> - <div class="col-md-6"> - <%= f.input :description %> </div> </div> <% content_for :buttons do %> diff --git a/app/views/admin/research/journals/index.html.erb b/app/views/admin/research/journals/index.html.erb index f6664f2d4..32384f564 100644 --- a/app/views/admin/research/journals/index.html.erb +++ b/app/views/admin/research/journals/index.html.erb @@ -5,7 +5,7 @@ <tr> <th><%= Research::Journal.human_attribute_name('title') %></th> <th><%= Research::Journal::Volume.model_name.human(count: 2) %></th> - <th>Articles</th> + <th><%= Research::Journal::Article.model_name.human(count: 2) %></th> <th></th> </tr> </thead> @@ -15,7 +15,7 @@ <tr> <td><%= link_to journal, [:admin, journal] %></td> <td><%= link_to "#{journal.volumes.count}", admin_research_journal_volumes_path(journal_id: journal) %></td> - <td></td> + <td><%= link_to "#{journal.articles.count}", admin_research_journal_articles_path(journal_id: journal) %></td> <td class="text-end"> <%= edit_link journal %> <%= destroy_link journal %> diff --git a/app/views/admin/research/journals/show.html.erb b/app/views/admin/research/journals/show.html.erb index ab48f259c..7fe401575 100644 --- a/app/views/admin/research/journals/show.html.erb +++ b/app/views/admin/research/journals/show.html.erb @@ -1,6 +1,11 @@ <% content_for :title, @journal %> -<p><%= @journal.description %></p> +<% if @journal.website %> + <p> + Site : + <%= link_to @journal.website, [:admin, @journal.website] %> + </p> +<% end %> <h2 class="mt-5"><%= Research::Journal::Volume.model_name.human(count: 2) %></h2> diff --git a/config/locales/communication/fr.yml b/config/locales/communication/fr.yml index cb8b96135..b87fa7777 100644 --- a/config/locales/communication/fr.yml +++ b/config/locales/communication/fr.yml @@ -16,5 +16,5 @@ fr: domain: Domaine about_type: Sujet du site about_: Aucun sujet (site indépendant) - about_research_journal: Site de revue scientifique - about_school: Site d'école + about_Research::Journal: Site de revue scientifique + about_School: Site d'école -- GitLab