Skip to content

Commit

Permalink
Merge 8f14329 into f4fe648
Browse files Browse the repository at this point in the history
  • Loading branch information
ash0411-maker committed Jun 8, 2021
2 parents f4fe648 + 8f14329 commit 0c2fadf
Show file tree
Hide file tree
Showing 8 changed files with 185 additions and 10 deletions.
2 changes: 1 addition & 1 deletion app/controllers/concerns/cms/public_filter/layout.rb
Expand Up @@ -167,7 +167,7 @@ def render_template_variables(html)
html.gsub!(::Regexp.compile(template)) do
matchdata = ::Regexp.last_match
if matchdata[:item] == 'released'
released ||= ERB::Util.html_escape(@cur_item.released)
released ||= ERB::Util.html_escape(@cur_item.date)
date = released
else
updated ||= ERB::Util.html_escape(@cur_item.updated)
Expand Down
24 changes: 22 additions & 2 deletions app/models/concerns/cms/content.rb
Expand Up @@ -14,6 +14,9 @@ module Cms::Content
attr_accessor :cur_node, :basename

included do
cattr_accessor(:default_released_type, instance_accessor: false)
self.default_released_type = "fixed"

seqid :id
field :state, type: String, default: "public"
field :name, type: String
Expand All @@ -22,10 +25,11 @@ module Cms::Content
field :depth, type: Integer
field :order, type: Integer, default: 0
field :released, type: DateTime
field :released_type, type: String, default: ->{ self.class.default_released_type }
field :first_released, type: DateTime
field :md5, type: String

permit_params :state, :name, :index_name, :filename, :basename, :order, :released, :route
permit_params :state, :name, :index_name, :filename, :basename, :order, :released, :released_type, :route

validates :state, presence: true
validates :name, presence: true
Expand Down Expand Up @@ -71,6 +75,7 @@ module Cms::Content
export :order
export :date
export :released
export :released_type
export :updated
export :created
export :parent do
Expand Down Expand Up @@ -202,7 +207,16 @@ def private_file(basename)
end

def date
updated || created
case released_type
when "fixed"
self[:released] || first_released || updated || created
when "same_as_created"
created
when "same_as_first_released"
first_released || updated || created
else # same_as_updated
updated || created
end
end

def public?
Expand Down Expand Up @@ -274,6 +288,12 @@ def file_previewable?(file, user:, member:)
true
end

def released_type_options
%w(fixed same_as_updated same_as_created same_as_first_released).map do |v|
[ I18n.t("cms.options.released_type.#{v}"), v ]
end
end

private

def set_filename
Expand Down
8 changes: 3 additions & 5 deletions app/models/concerns/cms/model/page.rb
Expand Up @@ -19,6 +19,8 @@ module Cms::Model::Page

#text_index :name, :html

self.default_released_type = "same_as_updated"

attr_accessor :window_name

field :route, type: String, default: ->{ "cms/page" }
Expand All @@ -41,16 +43,12 @@ module Cms::Model::Page
end
end

def date
released || super
end

def preview_path
site.subdir ? "#{site.subdir}/#{filename}" : filename
end

def mobile_preview_path
::File.join((site.subdir ? site.subdir : ""), site.mobile_location, filename).gsub(/^\//, '')
::File.join((site.subdir.presence || ""), site.mobile_location, filename)
end

def generate_file(opts = {})
Expand Down
18 changes: 17 additions & 1 deletion app/views/cms/agents/addons/release/_form.html.erb
Expand Up @@ -8,5 +8,21 @@
<dd><%= f.select :state, @item.state_options %></dd>

<dt><%= @model.t :released %><%= @model.tt :released %></dt>
<dd><%= f.text_field :released, class: "datetime js-datetime", value: tryb { @item.released.strftime("%Y/%m/%d %H:%M") } %></dd>
<dd>
<% if @item.respond_to?(:released_type) %>
<%= f.select :released_type, @item.released_type_options %>
<% end %>
<%= f.text_field :released, class: "datetime js-datetime", value: tryb { @item.released.strftime("%Y/%m/%d %H:%M") } %>
</dd>
</dl>

<%= jquery do %>
var $el = $("#" + <%== addon[:id].to_json %>);
$el.find("[name='item[released_type]']").on("change", function() {
if ($(this).val() === "fixed") {
$el.find("[name='item[released]']").removeClass("hide");
} else {
$el.find("[name='item[released]']").addClass("hide");
}
}).trigger("change");
<% end %>
8 changes: 7 additions & 1 deletion app/views/cms/agents/addons/release/_show.html.erb
Expand Up @@ -3,5 +3,11 @@
<dd><%= @item.label :state %></dd>

<dt><%= @model.t :released %></dt>
<dd><%= tryb{@item.send(:released).strftime("%Y/%m/%d %H:%M")} %></dd>
<dd>
<% if !@item.respond_to?(:released_type) || @item.released_type == "fixed" %>
<%= tryb { I18n.l(@item.released, format: :long) } %>
<% else %>
<%= @item.date.try { |time| "(" + I18n.l(time, format: :long) + ")" } %>
<% end %>
</dd>
</dl>
5 changes: 5 additions & 0 deletions config/locales/cms/ja.yml
Expand Up @@ -331,6 +331,11 @@ ja:
left:
center: 中央
right:
released_type:
fixed: 手動入力
same_as_updated: 更新日
same_as_created: 作成日
same_as_first_released: 初公開日
line_post_format:
thumb_carousel: サムネイル画像とLINEメッセージ
body_carousel: 本文内の最初の画像とLINEメッセージ
Expand Down
1 change: 1 addition & 0 deletions spec/factories/cms/pages.rb
Expand Up @@ -5,6 +5,7 @@
name { unique_id.to_s }
filename { "#{unique_id}.html" }
route "cms/page"
released_type "fixed"
end

factory :cms_page, class: Cms::Page, traits: [:cms_page] do
Expand Down
129 changes: 129 additions & 0 deletions spec/models/article/page/released_type_spec.rb
@@ -0,0 +1,129 @@

require 'spec_helper'

describe Article::Page, dbscope: :example do
let(:layout_html) do
html = []
html << "<html><body><div id=\"main\" class=\"page\">"
html << "<header class=\"released\">\#{time.page_released.long}</header>"
html << "{{ yield }}"
html << "</div></body></html>"
html
end
let!(:layout) { create :cms_layout, html: layout_html.join }
let!(:node) { create :article_node_page, layout: layout }

describe "#released_type" do
let(:created) { Time.zone.now.beginning_of_minute - 2.weeks }
let(:first_released) { created + 2.days }
let(:released) { first_released + 2.days }
let(:updated) { released + 3.days }
let!(:item) { create :article_page, cur_node: node }

before do
item.set(created: created, first_released: first_released, released: released, updated: updated)
end

context "fixed is given" do
it do
item.released_type = "fixed"
expect(item.date).to eq item.released
end
end

context "same_as_updated is given" do
it do
item.released_type = "same_as_updated"
expect(item.date).to eq item.updated
end
end

context "same_as_created is given" do
it do
item.released_type = "same_as_created"
expect(item.date).to eq item.created
end
end

context "same_as_first_released is given" do
it do
item.released_type = "same_as_first_released"
expect(item.date).to eq item.first_released
end
end
end

describe "published page" do
let(:created) { Time.zone.now.beginning_of_minute - 2.weeks }
let(:first_released) { created + 2.days }
let(:released) { first_released + 2.days }
let(:updated) { released + 3.days }

shared_examples "publised page is" do
let!(:item) do
page = Timecop.freeze(created) do
create(
:article_page, cur_node: node, layout: layout,
first_released: first_released, released: released, released_type: released_type,
state: "closed"
)
end

Timecop.freeze(first_released) do
page.state = "public"
page.save!
end

Timecop.freeze(released) do
page.released = released
page.save!
end

Timecop.freeze(updated) do
page.html = "<p>hello, world!</p>"
page.save!
end

page
end

it do
expect(item.created).to eq created
expect(item.updated).to eq updated
expect(item.first_released).to eq first_released
expect(item.released).to eq released

html = ::File.read(item.path)
html.include?(expected_date)
end
end

context "fixed is given" do
let(:released_type) { "fixed" }
let(:expected_date) { I18n.l(released.to_date, format: :long) }

it_behaves_like "publised page is"
end

context "same_as_updated is given" do
let(:released_type) { "same_as_updated" }
let(:expected_date) { I18n.l(updated.to_date, format: :long) }

it_behaves_like "publised page is"
end

context "same_as_created is given" do
let(:released_type) { "same_as_created" }
let(:expected_date) { I18n.l(created.to_date, format: :long) }

it_behaves_like "publised page is"
end

context "same_as_first_released is given" do
let(:released_type) { "same_as_first_released" }
let(:expected_date) { I18n.l(first_released.to_date, format: :long) }

it_behaves_like "publised page is"
end
end
end

0 comments on commit 0c2fadf

Please sign in to comment.