cmor_blog 0.0.44.pre → 0.0.45.pre

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 91c0bf356a37ac55f326bb8a8cc4bb3e4b2d623be744cb2a137a14cf9e4e0eab
4
- data.tar.gz: cae31b1e3586e9b351fc0bfc1031466bfb73afff7b4e39f613af94200d255d41
3
+ metadata.gz: 97a7d0f0313e974c46029c6a8007a232efe65b7ccb0e7887db726f7a06f8ad0d
4
+ data.tar.gz: 21da5ddbe8126eb3ca1001dc0facce11c34fac5571031db3e86fa3d13bef0313
5
5
  SHA512:
6
- metadata.gz: b4b0c266f02fd459e88a432dc47a3c9dc983059442a28c097230b390761427f357fc107a377be8849c92d096ce17dd31ded7d57827a9f4982d2aafd8bc035e6b
7
- data.tar.gz: a7b67b2ca5df633ab8881b937fdba4a2cfde627179e1d976c78db670ec0da0fd7316da1f2a267c0ae5010ba6fe486c9c941a7267956226157013bbd3203effae
6
+ metadata.gz: bffa2904af71c91cd81e4454b677a805f0c44286ef1f28aaca6427c226d5d71027ad9cd3d009dbab8a801c4d762af7b4eba7b8e97832603888533a51411a19e7
7
+ data.tar.gz: 494486d7f401a088a73aa5ecb88fa01a6ca9135aefd672d222e6a9553afcc2db91b8b3d69f3977b0c760aeef7d4c0e2efcdb476450be36c811c525ccd7573195
@@ -10,4 +10,4 @@
10
10
  // Read Sprockets README (https://github.com/sstephenson/sprockets#sprockets-directives) for details
11
11
  // about supported directives.
12
12
  //
13
- //= require_tree .
13
+ //= require_tree ./application
@@ -0,0 +1 @@
1
+ //= require cmor/blog/application
@@ -18,14 +18,14 @@ module Cmor
18
18
 
19
19
  def load_collection_scope
20
20
  if params.has_key?(:year)
21
- super.published.for_date(params[:year], params[:month], params[:day])
21
+ super.published.for_locale.for_date(params[:year], params[:month], params[:day])
22
22
  else
23
- super.published
23
+ super.published.for_locale
24
24
  end
25
25
  end
26
26
 
27
27
  def load_resource_scope
28
- super.published.friendly
28
+ super.published.for_locale.friendly
29
29
  end
30
30
  end
31
31
  end
@@ -19,7 +19,7 @@ module Cmor
19
19
  # = blog_render_monthly_navigation if controller.class.name.deconstantize == 'Cmor::Blog'
20
20
  #
21
21
  def blog_render_monthly_navigation
22
- posts = Cmor::Blog::Post.published.all.pluck(:created_at)
22
+ posts = Cmor::Blog::Post.published.for_locale.all.pluck(:created_at)
23
23
  posts_by_month = posts.group_by {|t| t.beginning_of_month }
24
24
  render partial: 'cmor/blog/posts/monthly_navigation', locals: { posts_by_month: posts_by_month}
25
25
  end
@@ -19,11 +19,13 @@ module Cmor
19
19
  extend FriendlyId
20
20
  friendly_id :title, use: :slugged
21
21
 
22
- belongs_to :creator, class_name: Cmor::Blog.creator_class_name, foreign_key: 'created_by_id'
22
+ belongs_to :creator, class_name: Cmor::Blog.creator_class_name, foreign_key: 'created_by_id', optional: true
23
23
  belongs_to :updater, class_name: Cmor::Blog.creator_class_name, foreign_key: 'updated_by_id', optional: true
24
24
 
25
25
  scope :for_date, ->(year, month, day) { where(created_at: "#{year}-#{month || 1}-#{day || 1}".to_date.beginning_of_month.."#{year}-#{month || 1}-#{day || 1}".to_date.end_of_month) }
26
26
 
27
+ validates :title, :body, presence: true
28
+
27
29
  def human
28
30
  title
29
31
  end
@@ -112,6 +114,8 @@ module Cmor
112
114
  end
113
115
 
114
116
  include PreviewPictureConcern
117
+
118
+ include Cmor::Core::Model::LocalizationConcern
115
119
  end
116
120
  end
117
121
  end
@@ -1,13 +1,25 @@
1
1
  module Cmor
2
2
  module Blog
3
+ # Example:
4
+ #
5
+ # # app/controllers/application_controller.rb
6
+ # class ApplicationController < ActionController::Base
7
+ # view_helper Cmor::Blog::ApplicationViewHelper, as: :blog_helper
8
+ # end
9
+ #
3
10
  class ApplicationViewHelper < Rao::ViewHelper::Base
11
+ # Example:
12
+ #
13
+ # # app/views/layouts/application.html.haml
14
+ # = blog_helper(self).render_recent_posts(3)
15
+ #
4
16
  def render_recent_posts(count)
5
- posts = Cmor::Blog::Post.limit(count).all
17
+ posts = Cmor::Blog::Post.published.for_locale.limit(count).all
6
18
  c.render html: posts.collect { |p| render_post(p.id) }.join("<hr />").html_safe
7
19
  end
8
20
 
9
21
  def render_post(id)
10
- post = Cmor::Blog::Post.where(id: id).first
22
+ post = Cmor::Blog::Post.published.for_locale.where(id: id).first
11
23
  render(post: post) if post.present?
12
24
  end
13
25
  end
@@ -4,7 +4,7 @@
4
4
  = link_to(post.title, cmor_blog.url_for(post))
5
5
  %small
6
6
  %span.post-creation-information.text-muted
7
- = "#{l(post.created_at)} | #{post.creator.send(Cmor::Blog::Configuration.creator_label_method_name)}"
7
+ = "#{l(post.created_at)} | #{Cmor::Blog::Configuration.creator_label_for_post_proc.call(post)}"
8
8
  - if Cmor::Core.features?(:cmor_comments)
9
9
  |
10
10
  %span.comments-information
@@ -3,7 +3,7 @@
3
3
  = link_to(post.title, cmor_blog.url_for(post))
4
4
  %small
5
5
  %span.post-creation-information.text-muted
6
- = "#{l(post.created_at)} | #{post.creator.send(Cmor::Blog::Configuration.creator_label_method_name)}"
6
+ = "#{l(post.created_at)} | #{Cmor::Blog::Configuration.creator_label_for_post_proc.call(post)}"
7
7
  - if Cmor::Core.features?(:cmor_comments)
8
8
  |
9
9
  %span.comments-information
@@ -4,7 +4,7 @@
4
4
  = link_to(post.title, cmor_blog.url_for(post))
5
5
  %small
6
6
  %span.post-creation-information.text-muted
7
- = "#{l(post.created_at)} | #{post.creator.send(Cmor::Blog::Configuration.creator_label_method_name)}"
7
+ = "#{l(post.created_at)} | #{Cmor::Blog::Configuration.creator_label_for_post_proc.call(post)}"
8
8
  - if Cmor::Core.features?(:cmor_comments)
9
9
  |
10
10
  %span.comments-information
@@ -7,7 +7,7 @@
7
7
  = link_to(post.title, cmor_blog.url_for(post))
8
8
  %small
9
9
  %span.post-creation-information.text-muted
10
- = "#{l(post.created_at)} | #{post.creator.send(Cmor::Blog::Configuration.creator_label_method_name)}"
10
+ = "#{l(post.created_at)} | #{Cmor::Blog::Configuration.creator_label_for_post_proc.call(post)}"
11
11
  - if Cmor::Core.features?(:cmor_comments)
12
12
  |
13
13
  %span.comments-information
@@ -12,17 +12,18 @@ de:
12
12
  attributes:
13
13
  cmor/blog/post:
14
14
  id: ID
15
- assets: Anhänge
16
15
  asset_details_count: Anhänge
17
- title: Titel
18
- tags: Tags
16
+ assets: Anhänge
19
17
  body: Inhalt
18
+ created_by_id: Erstellt von
19
+ creator: Erstellt von
20
+ locale: Sprache
20
21
  position: Position
21
22
  published: Veröffentlicht
22
23
  published_at: Veröffentlicht am
23
- created_by_id: Erstellt von
24
- creator: Erstellt von
25
24
  slug: Freundliche ID
25
+ tags: Tags
26
+ title: Titel
26
27
  updated_by_id: Aktualisiert von
27
28
  updater: Aktualisiert von
28
29
  created_at: Erstellt am
@@ -12,17 +12,18 @@ en:
12
12
  attributes:
13
13
  cmor/blog/post:
14
14
  id: ID
15
- assets: Asset
16
15
  asset_details_count: Assets
17
- title: Title
18
- tags: Tags
16
+ assets: Asset
19
17
  body: Body
18
+ created_by_id: Created by
19
+ creator: Created by
20
+ locale: Locale
20
21
  position: Position
21
22
  published: Published
22
23
  published_at: Published at
23
- created_by_id: Created by
24
- creator: Created by
25
24
  slug: Slug
25
+ tags: Tags
26
+ title: Title
26
27
  updated_by_id: Updated by
27
28
  updater: Updated by
28
29
  created_at: Created at
@@ -0,0 +1,5 @@
1
+ class AddLocaleToCmorBlogPosts < ActiveRecord::Migration[5.2]
2
+ def change
3
+ add_column :cmor_blog_posts, :locale, :string
4
+ end
5
+ end
@@ -32,8 +32,8 @@ module Cmor
32
32
  { combine_options: { resize: "320x240^", extent: "384x216", gravity: "center" } }
33
33
  end
34
34
 
35
- mattr_accessor(:creator_label_method_name) do
36
- :to_s
35
+ mattr_accessor(:creator_label_for_post_proc) do
36
+ -> (post) { post.creator&.to_s }
37
37
  end
38
38
  end
39
39
  end
data/lib/cmor_blog.rb CHANGED
@@ -8,4 +8,5 @@ require 'rails-i18n'
8
8
  require 'rao-resources_controller'
9
9
  require 'rao-service'
10
10
 
11
- require 'cmor/blog'
11
+ require 'cmor/core/model/localization_concern'
12
+ require 'cmor/blog'
@@ -46,9 +46,17 @@ Cmor::Blog.configure do |config|
46
46
  #
47
47
  config.preview_picture_asset_variant_options = { combine_options: { resize: "320x240^", extent: "384x216", gravity: "center" } }
48
48
 
49
- # Method to call on creator for display.
49
+ # Define how the author will be shown on posts.
50
50
  #
51
- # default: config.creator_label_method_name = :to_s
51
+ # You can generalize the label by not taking the creator into account at all:
52
52
  #
53
- config.creator_label_method_name = :to_s
53
+ # config.creator_label_for_post_proc = -> (post) { "Site Owner" }
54
+ #
55
+ # You can show a default when the creator is not set:
56
+ #
57
+ # config.creator_label_for_post_proc = -> (post) { post.creator&.to_s || "Site owner" }
58
+ #
59
+ # default: config.creator_label_for_post_proc = -> (post) { post.creator&.to_s }
60
+ #
61
+ config.creator_label_for_post_proc = -> (post) { post.creator&.to_s }
54
62
  end
@@ -1,55 +1,61 @@
1
1
  require 'rails_helper'
2
2
 
3
3
  RSpec.describe Cmor::Blog::Post, type: :model do
4
- before(:each) { ActiveStorage::Attachment.destroy_all; ActiveStorage::Blob.destroy_all; }
4
+ it { expect(described_class).to respond_to(:for_locale) }
5
+ it { expect(subject).to respond_to(:locale) }
6
+ it { expect(subject).to validate_inclusion_of(:locale).in_array(I18n.available_locales.map(&:to_s)) }
5
7
 
6
8
  describe 'assets' do
7
- let(:assets) {[
8
- { io: File.open(Cmor::Blog::Engine.root.join(*%w(spec files cmor blog asset example.jpg))), filename: 'example.jpg'},
9
- { io: File.open(Cmor::Blog::Engine.root.join(*%w(spec files cmor blog asset example.jpg))), filename: 'example.jpg'}
10
- ]}
9
+ before(:each) { ActiveStorage::Attachment.destroy_all; ActiveStorage::Blob.destroy_all; }
11
10
 
12
- subject { build(:cmor_blog_post) }
11
+ describe '#assets' do
12
+ let(:assets) {[
13
+ { io: File.open(Cmor::Blog::Engine.root.join(*%w(spec files cmor blog asset example.jpg))), filename: 'example.jpg'},
14
+ { io: File.open(Cmor::Blog::Engine.root.join(*%w(spec files cmor blog asset example.jpg))), filename: 'example.jpg'}
15
+ ]}
13
16
 
14
- before(:each) { subject.save }
17
+ subject { build(:cmor_blog_post) }
15
18
 
16
- it { expect{ subject.append_assets = assets; subject.save }.to change { Cmor::Blog::AssetDetail.count }.from(0).to(2) }
17
- it { expect{ subject.append_assets = assets; subject.save }.to change { ActiveStorage::Attachment.count }.from(0).to(2) }
18
- end
19
+ before(:each) { subject.save }
19
20
 
20
- describe 'appending assets' do
21
- let(:original_assets) {[
22
- { io: File.open(Cmor::Blog::Engine.root.join(*%w(spec files cmor blog asset example.jpg))), filename: 'example.jpg'},
23
- { io: File.open(Cmor::Blog::Engine.root.join(*%w(spec files cmor blog asset example.jpg))), filename: 'example.jpg'}
24
- ]}
21
+ it { expect{ subject.append_assets = assets; subject.save }.to change { Cmor::Blog::AssetDetail.count }.from(0).to(2) }
22
+ it { expect{ subject.append_assets = assets; subject.save }.to change { ActiveStorage::Attachment.count }.from(0).to(2) }
23
+ end
25
24
 
26
- let(:new_assets) {[
27
- { io: File.open(Cmor::Blog::Engine.root.join(*%w(spec files cmor blog asset example.jpg))), filename: 'example.jpg'}
28
- ]}
25
+ describe '#appending assets' do
26
+ let(:original_assets) {[
27
+ { io: File.open(Cmor::Blog::Engine.root.join(*%w(spec files cmor blog asset example.jpg))), filename: 'example.jpg'},
28
+ { io: File.open(Cmor::Blog::Engine.root.join(*%w(spec files cmor blog asset example.jpg))), filename: 'example.jpg'}
29
+ ]}
29
30
 
30
- subject { build(:cmor_blog_post, assets: original_assets) }
31
+ let(:new_assets) {[
32
+ { io: File.open(Cmor::Blog::Engine.root.join(*%w(spec files cmor blog asset example.jpg))), filename: 'example.jpg'}
33
+ ]}
31
34
 
32
- before(:each) { subject.save }
35
+ subject { build(:cmor_blog_post, assets: original_assets) }
33
36
 
34
- it { expect{ subject.append_assets = new_assets; subject.save }.to change { Cmor::Blog::AssetDetail.count }.from(2).to(3) }
35
- it { expect{ subject.append_assets = new_assets; subject.save }.to change { ActiveStorage::Attachment.count }.from(2).to(3) }
36
- end
37
+ before(:each) { subject.save }
38
+
39
+ it { expect{ subject.append_assets = new_assets; subject.save }.to change { Cmor::Blog::AssetDetail.count }.from(2).to(3) }
40
+ it { expect{ subject.append_assets = new_assets; subject.save }.to change { ActiveStorage::Attachment.count }.from(2).to(3) }
41
+ end
37
42
 
38
- describe 'overwriting assets' do
39
- let(:original_assets) {[
40
- { io: File.open(Cmor::Blog::Engine.root.join(*%w(spec files cmor blog asset example.jpg))), filename: 'example.jpg'},
41
- { io: File.open(Cmor::Blog::Engine.root.join(*%w(spec files cmor blog asset example.jpg))), filename: 'example.jpg'}
42
- ]}
43
+ describe '#overwriting assets' do
44
+ let(:original_assets) {[
45
+ { io: File.open(Cmor::Blog::Engine.root.join(*%w(spec files cmor blog asset example.jpg))), filename: 'example.jpg'},
46
+ { io: File.open(Cmor::Blog::Engine.root.join(*%w(spec files cmor blog asset example.jpg))), filename: 'example.jpg'}
47
+ ]}
43
48
 
44
- let(:new_assets) {[
45
- { io: File.open(Cmor::Blog::Engine.root.join(*%w(spec files cmor blog asset example.jpg))), filename: 'example.jpg'}
46
- ]}
49
+ let(:new_assets) {[
50
+ { io: File.open(Cmor::Blog::Engine.root.join(*%w(spec files cmor blog asset example.jpg))), filename: 'example.jpg'}
51
+ ]}
47
52
 
48
- subject { build(:cmor_blog_post, assets: original_assets) }
53
+ subject { build(:cmor_blog_post, assets: original_assets) }
49
54
 
50
- before(:each) { subject.save }
55
+ before(:each) { subject.save }
51
56
 
52
- it { expect{ subject.overwrite_assets = new_assets; subject.save }.to change { Cmor::Blog::AssetDetail.count }.from(2).to(1) }
53
- it { expect{ subject.overwrite_assets = new_assets; subject.save }.to change { ActiveStorage::Attachment.count }.from(2).to(1) }
57
+ it { expect{ subject.overwrite_assets = new_assets; subject.save }.to change { Cmor::Blog::AssetDetail.count }.from(2).to(1) }
58
+ it { expect{ subject.overwrite_assets = new_assets; subject.save }.to change { ActiveStorage::Attachment.count }.from(2).to(1) }
59
+ end
54
60
  end
55
- end
61
+ end
@@ -0,0 +1,8 @@
1
+ require 'shoulda-matchers'
2
+
3
+ Shoulda::Matchers.configure do |config|
4
+ config.integrate do |with|
5
+ with.test_framework :rspec
6
+ with.library :rails
7
+ end
8
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cmor_blog
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.44.pre
4
+ version: 0.0.45.pre
5
5
  platform: ruby
6
6
  authors:
7
7
  - Roberto Vasquez Angel
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-01-29 00:00:00.000000000 Z
11
+ date: 2020-03-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -16,42 +16,42 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 5.2.0
19
+ version: 5.2.3
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 5.2.0
26
+ version: 5.2.3
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: cmor_core
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - '='
32
32
  - !ruby/object:Gem::Version
33
- version: 0.0.44.pre
33
+ version: 0.0.45.pre
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - '='
39
39
  - !ruby/object:Gem::Version
40
- version: 0.0.44.pre
40
+ version: 0.0.45.pre
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: cmor_core_frontend
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - '='
46
46
  - !ruby/object:Gem::Version
47
- version: 0.0.44.pre
47
+ version: 0.0.45.pre
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - '='
53
53
  - !ruby/object:Gem::Version
54
- version: 0.0.44.pre
54
+ version: 0.0.45.pre
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: sqlite3
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -440,6 +440,8 @@ files:
440
440
  - MIT-LICENSE
441
441
  - Rakefile
442
442
  - app/assets/javascripts/cmor/blog/application.js
443
+ - app/assets/javascripts/cmor/blog/application/keep.js
444
+ - app/assets/javascripts/cmor_blog.js
443
445
  - app/assets/stylesheets/cmor/blog/application.css
444
446
  - app/assets/stylesheets/cmor/blog/application/truncate.css
445
447
  - app/assets/stylesheets/cmor_blog.css
@@ -458,13 +460,13 @@ files:
458
460
  - app/views/cmor/blog/posts/_post_in_index_with_preview_picture.haml
459
461
  - app/views/cmor/blog/posts/index.html.haml
460
462
  - app/views/cmor/blog/posts/show.html.haml
461
- - app/views/layouts/cmor/blog/application.html.erb
462
463
  - config/initializers/assets.rb
463
464
  - config/locales/de.yml
464
465
  - config/locales/en.yml
465
466
  - config/routes.rb
466
467
  - db/migrate/20160214133500_create_cmor_blog_posts.rb
467
468
  - db/migrate/20180429134813_create_cmor_blog_asset_details.rb
469
+ - db/migrate/20200217105600_add_locale_to_cmor_blog_posts.rb
468
470
  - lib/cmor/blog.rb
469
471
  - lib/cmor/blog/configuration.rb
470
472
  - lib/cmor/blog/engine.rb
@@ -742,6 +744,7 @@ files:
742
744
  - spec/support/capybara.rb
743
745
  - spec/support/factory_bot.rb
744
746
  - spec/support/rao-shoulda_matchers.rb
747
+ - spec/support/shoulda_matchers.rb
745
748
  homepage: https://github.com/content-management-on-rails
746
749
  licenses:
747
750
  - MIT
@@ -1,14 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <title>Blog</title>
5
- <%= stylesheet_link_tag "cmor/blog/application", media: "all" %>
6
- <%= javascript_include_tag "cmor/blog/application" %>
7
- <%= csrf_meta_tags %>
8
- </head>
9
- <body>
10
-
11
- <%= yield %>
12
-
13
- </body>
14
- </html>