Skip to content

Instantly share code, notes, and snippets.

@takahashim
Last active March 13, 2021 08:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save takahashim/d16712881f9bd06ca0a53eaa8427c5cc to your computer and use it in GitHub Desktop.
Save takahashim/d16712881f9bd06ca0a53eaa8427c5cc to your computer and use it in GitHub Desktop.

コードの主な変更点 (2021-03-13)

.cloudformation/

AWSのCloudFormation用。

.ebextensions/

AWSのElasticBeanstalk用。

lib以下

  • lib/monkey_patching_faker.rb

日本語を使うとFakerがslugにも日本を使おうとしてvalidationでコケるのを、英語にすることで回避するためのpatch。 本家に取り込まれているのでそのうち消せるはず。

  • lib/decidim/cfj/test/factories.rb

rspec用。

  • lib/assets/
  • lib/tasks/

現状はカラ。

test以下

  • test/fixtures/
  • test/helpers
  • test/integration/
  • test/controllers
  • test/mailsers

カラなので見なくてよさそう。

db以下

  • db/seed.rb

seedデータ作成用。lib/monkey_patching_faker を読み込むのと、user_extensionを用のデータを追加している。

  • db/migrate/以下

マイグレーションファイル。今のところは変更なし。

decidim-user_extension

Decidim::UserExtensionモジュール。ユーザー属性拡張をgem(Rails Engine)の形で実装している。

config

  • config/application.rb

minitestからrspecに変更。

  • config/initializers/decidim.rb

Decidimアプリケーションの設定を行っている。いろいろ設定を変更している。

locale修正

メールアドレス(config.mail_sender)修正

HTMLヘッダスニペット(config.enable_html_header_snippets)を設定

Deviseの設定変更し (config.unconfirmed_access_for)、さらにその設定を反映(Devise.allow_unconfirmed_access_for = Decidim.unconfirmed_access_for)

ダウンロード用CSVのカンマを設定(config.default_csv_col_sep)

  • config/initializers/decidim_verifications.rb

Decidim::Verificationsのworkflowに:user_extension_authorization_handlerの情報を追加。

  • config/routes.rb

LetterOpenerWebを追加。

  • config/locales/ja.yml

個別のデータを追加。Decidim本家にフィードバックしたものでも、最新版のDecidimにしか反映されていない場合はここを修正する。

fakerの文字列もここに追加している。

app

app/assets/javascript

  • app/assets/javascript/decidim/editor.js.es6

エディタの改修用JS。

app/assets/config

  • app/assets/config/manifest.js

初期化時に生成されたままのJSファイル。

app/assets/images

空。

app/assets/stylesheets

スタイルシートはいろいろ手を入れている。

  • app/assets/stylesheets/application.css

初期化時のまま。

  • app/assets/stylesheets/forms.scss

UserExtensionFormのためCSSを変更。

app/channels

app/helpers

app/jobs

app/mailers

初期状態のまま。

app/controllers

  • app/controllers/application_controller.rb

デフォルトの空のまま。

  • app/controllers/decidim_controller.rb

最終的にこのファイル自体は空のままになった。

別途、Decidim::UserExtension::EngineDecidim::UserExtension::Concerns::Controllers::NeedsUserExtensionをincludeしている。

app/forms

  • app/forms/decidim/proposals/proposal_wizard_create_step_form.rb

本家のdecidim/decidim-proposals/app/forms/decidim/proposals/proposal_wizard_create_step_form.rbに手を入れたもの。 titleのvalidationに手を入れて、最短8文字まで許すようにしている。etiquetteも消しているのに注意。

--- app/forms/decidim/proposals/proposal_wizard_create_step_form.rb	2021-02-27 01:36:39.000000000 +0900
+++ ../decidim/decidim-proposals/app/forms/decidim/proposals/proposal_wizard_create_step_form.rb	2021-03-02 17:49:24.000000000 +0900
@@ -11,8 +11,8 @@
       attribute :body_template, String
       attribute :user_group_id, Integer
 
-      validates :title, :body, presence: true
-      validates :title, length: { in: 8..150 }
+      validates :title, :body, presence: true, etiquette: true
+      validates :title, length: { in: 15..150 }
       validates :body, proposal_length: {
         minimum: 15,
         maximum: ->(record) { record.component.settings.proposal_length }
  • app/forms/decidim/proposals/admin/proposal_form.rb

同じく管理画面用に手を入れたもの。2020/12/24にmap_modelが追加されたのに注意。

--- app/forms/decidim/proposals/admin/proposal_form.rb	2021-02-27 01:36:39.000000000 +0900
+++ ../decidim/decidim-proposals/app/forms/decidim/proposals/admin/proposal_form.rb	2021-02-21 02:16:34.000000000 +0900
@@ -6,13 +6,21 @@
       # A form object to be used when admin users want to create a proposal.
       class ProposalForm < Decidim::Proposals::Admin::ProposalBaseForm
         translatable_attribute :title, String do |field, _locale|
-          validates field, length: { in: 8..150 }, if: proc { |resource| resource.send(field).present? }
+          validates field, length: { in: 15..150 }, if: proc { |resource| resource.send(field).present? }
         end
         translatable_attribute :body, String
 
         validates :title, :body, translatable_presence: true
 
         validate :notify_missing_attachment_if_errored
+
+        def map_model(model)
+          super(model)
+          presenter = ProposalPresenter.new(model)
+
+          self.title = presenter.title(all_locales: title.is_a?(Hash))
+          self.body = presenter.body(all_locales: body.is_a?(Hash))
+        end
       end
     end
   end

app/models

app/services

  • app/services/user_extension_authorization_handler.rb

Decidim::UserExtensionのためのAuthorizationHandler。基本的には何もしない。

app/uploaders

  • app/uploaders/decidim/application_uploader.rb

decidim/decidim#6720 に対応するための変更が入っている

codeforjapan/decidim-cfj#101 も関係してる?

また、0.23.2 (#7322)のときに入ったskip_ssrf_protection?が漏れているのに注意

--- a/app/uploaders/decidim/application_uploader.rb
+++ b/../decidim/decidim-core/app/uploaders/decidim/application_uploader.rb
@@ -17,6 +17,10 @@ def store_dir
       default_path
     end
 
+    def skip_ssrf_protection?(_uri)
+      true
+    end
+
     protected
 
     # Validates that the associated model is always within an organization in
@@ -26,13 +30,6 @@ def validate_inside_organization
       return if model.is_a?(Decidim::Organization)
       return if model.respond_to?(:organization) && model.organization.is_a?(Decidim::Organization)
 
-      # HACK: Temporary fix for https://github.com/decidim/decidim/issues/6720
-      # If this is fixed by decidim, this file (application_uploader.rb)
-      # should be deleted to keep in sync with upstream!
-      return if model.class.to_s == "decidim/hero_homepage_content_block"
-      #      Fix for https://github.com/codeforjapan/decidim-cfj/issues/101
-      return if model.nil?
-
       raise CarrierWave::IntegrityError, I18n.t("carrierwave.errors.not_inside_organization")
     end
   end

app/views

  • app/views/decidim/blogs/posts/show.html.erb

#24 の回避用に修正。

--- app/views/decidim/proposals/admin/proposals/_form.html.erb	2020-11-09 22:27:37.000000000 +0900
+++ ../decidim/decidim-proposals/app/views/decidim/proposals/admin/proposals/_form.html.erb	2021-02-21 02:16:34.000000000 +0900
@@ -5,7 +5,7 @@
 
   <div class="card-section">
     <div class="row column hashtags__container">
-      <%= form.translated :text_field, :title, class: "js-hashtags", hashtaggable: true %>
+      <%= form.translated :text_field, :title, autofocus: true, class: "js-hashtags", hashtaggable: true %>
     </div>
 
     <div class="row column hashtags__container">
  • app/views/decidim/blogs/posts/show.html.erb

#107 に関連して、 #126 でブログ詳細ページのレイアウトの修正。

--- app/views/decidim/blogs/posts/show.html.erb	2020-11-14 01:13:10.000000000 +0900
+++ ../decidim/decidim-blogs/app/views/decidim/blogs/posts/show.html.erb	2021-02-21 02:16:34.000000000 +0900
@@ -16,16 +16,18 @@
 %>
 
 <div class="row column view-header">
+  <div class="m-bottom">
   <%= link_to :posts, class: "small hollow" do %>
     <%= icon "chevron-left", class: "icon--small", role: "img", "aria-hidden": true %>
     <%= t(".back") %>
   <% end %>
+  </div>
   <h2 class="heading2"><%= translated_attribute post.title %></h2>
   <%= cell "decidim/author", present(post.author), from: post %>
 </div>
 <div class="row">
-  <div class="columns section view-side mediumlarge-4 mediumlarge-push-8 large-3 large-push-9">
     <% if show_endorsements_card? %>
+      <div class="columns section view-side mediumlarge-4 mediumlarge-push-8 large-3 large-push-9">
       <div class="card">
         <div class="card__content">
           <div class="row collapse buttons__row">
@@ -44,9 +46,9 @@
           <%= follow_button_for(post) %>
         </div>
       </div>
-    <% end %>
   </div>
-  <div class="columns mediumlarge-8 mediumlarge-pull-4">
+  <% end %>
+  <div class="columns mediumlarge-8 <%= "mediumlarge-pull-4" if show_endorsements_card? %>">
     <div class="section">
       <%= decidim_sanitize translated_attribute post.body %>
     </div>
  • app/views/layouts/decidim/_main_footer.html.erb

#101 で一時的にリンクを非表示にするために導入したが、元に戻したので現状は不要なはず。

bin

  • bin/get_author_rank.sh
  • bin/get_comments.sh

管理用CLIツール(スクリプト)。

lib

  • lib/decidim/cfj/test/factories.rb

decidim-cfj用のspecを書くためのfactory置き場。requireしているだけ。今のところは使ってない(decidim-cfj独自のfactoryを使っていないため)。

  • lib/monkey_patching_faker.rb

Fakerのslug日本語の扱い(slugは日本語ロケールでも日本語化しない)の修正。将来的にはDecidim本体の更新によって捨てられるはず。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment