abizvn-cms 0.1.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/models/abizvn/cms/article.rb +1 -1
- data/app/models/abizvn/cms/category.rb +4 -2
- data/app/serializers/abizvn/cms/article_lite_serializer.rb +12 -0
- data/app/serializers/abizvn/cms/article_serializer.rb +13 -0
- data/app/serializers/abizvn/cms/category_articles_serializer.rb +15 -0
- data/app/serializers/abizvn/cms/category_lite_serializer.rb +9 -0
- data/db/migrate/20250426050330_update_category_remove_general.rb +22 -0
- data/lib/abizvn/cms/version.rb +5 -5
- data/lib/abizvn/cms.rb +5 -1
- data/spec/rails_helper.rb +3 -0
- data/spec/serializers/abizvn/cms/article_lite_serializer_spec.rb +15 -0
- data/spec/serializers/abizvn/cms/article_serializer_spec.rb +15 -0
- data/spec/serializers/abizvn/cms/category_articles_serializer_spec.rb +17 -0
- data/spec/serializers/abizvn/cms/category_lite_serializer_spec.rb +15 -0
- data/spec/support/cms_validation_helpers.rb +89 -0
- metadata +12 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 48f13fef634b7544938577557639bdd06eb4c1f826c6419d091c129664e56e84
|
4
|
+
data.tar.gz: 4354d670ae9fd96f79524d612d369c088bc5118366d691188a80c10f78f240e7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 65932eb1dabfe60cffe0df00a4488390e41a0ab19ad369bc6a18ed0fc8433340d5b94cc3a8dccc594705088c43aecced54dbc315e0f383e10c1e8ffc1660faa9
|
7
|
+
data.tar.gz: fefe11f53bc65e338a8f30ea8bebb1b4d35ad8fcfe1f434f699fef5f81c5a61bb84f519991507ffa1f0e0a1c7fa953ef1a7233f1e588771ac7163b8abee5e184
|
@@ -9,7 +9,7 @@ module Abizvn
|
|
9
9
|
scope :ordered, -> { order(updated_at: :desc) }
|
10
10
|
|
11
11
|
belongs_to :status, class_name: 'Abizvn::General::GeneralSetting'
|
12
|
-
belongs_to :category, class_name:
|
12
|
+
belongs_to :category, class_name: Abizvn::Cms.category_class, counter_cache: true
|
13
13
|
|
14
14
|
has_many :comments, as: :commentable, dependent: :destroy
|
15
15
|
|
@@ -5,9 +5,11 @@ module Abizvn
|
|
5
5
|
|
6
6
|
self.table_name = 'cms_categories'
|
7
7
|
|
8
|
-
belongs_to :
|
9
|
-
|
8
|
+
belongs_to :status, class_name: 'Abizvn::General::GeneralSetting'
|
9
|
+
|
10
10
|
has_many :articles, foreign_key: :category_id
|
11
|
+
|
12
|
+
validates :status, :code, :name, presence: true
|
11
13
|
end
|
12
14
|
end
|
13
15
|
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Abizvn
|
2
|
+
module Cms
|
3
|
+
class ArticleSerializer < ArticleLiteSerializer
|
4
|
+
attributes :description, :created_at
|
5
|
+
|
6
|
+
attribute :category do |article|
|
7
|
+
if article.category
|
8
|
+
CategoryLiteSerializer.new(article.category).serializable_hash[:data][:attributes]
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Abizvn
|
2
|
+
module Cms
|
3
|
+
class CategoryArticlesSerializer < CategoryLiteSerializer
|
4
|
+
attribute :articles do |entity, params|
|
5
|
+
next unless params[:articles].present?
|
6
|
+
|
7
|
+
articles = params[:articles].select { |x| x.category_id == entity.id }
|
8
|
+
|
9
|
+
articles.map do |article|
|
10
|
+
ArticleLiteSerializer.new(article).serializable_hash[:data][:attributes]
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
class UpdateCategoryRemoveGeneral < ActiveRecord::Migration[7.2]
|
2
|
+
def change
|
3
|
+
change_table :cms_categories do |t|
|
4
|
+
t.string :code
|
5
|
+
t.string :name
|
6
|
+
t.references :status, foreign_key: { to_table: :general_settings }, index: true
|
7
|
+
end
|
8
|
+
|
9
|
+
execute <<-SQL
|
10
|
+
UPDATE cms_categories
|
11
|
+
SET code = gs.code,
|
12
|
+
name = gs.value
|
13
|
+
FROM general_settings gs
|
14
|
+
WHERE cms_categories.general_id = gs.id
|
15
|
+
SQL
|
16
|
+
|
17
|
+
change_column_null :cms_categories, :code, false
|
18
|
+
change_column_null :cms_categories, :name, false
|
19
|
+
|
20
|
+
remove_reference :cms_categories, :general, index: true, foreign_key: { to_table: :general_settings }
|
21
|
+
end
|
22
|
+
end
|
data/lib/abizvn/cms/version.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
module Abizvn
|
2
|
-
module Cms
|
3
|
-
VERSION = "0.
|
4
|
-
end
|
5
|
-
end
|
1
|
+
module Abizvn
|
2
|
+
module Cms
|
3
|
+
VERSION = "0.2.0"
|
4
|
+
end
|
5
|
+
end
|
data/lib/abizvn/cms.rb
CHANGED
data/spec/rails_helper.rb
CHANGED
@@ -35,6 +35,7 @@ end
|
|
35
35
|
|
36
36
|
# Requires factories for testing
|
37
37
|
Dir.glob(File.join(File.dirname(__FILE__), 'factories', '**', '*.rb')).each { |file| require file }
|
38
|
+
Dir.glob(File.join(File.dirname(__FILE__), 'support', '*.rb')).each { |file| require file }
|
38
39
|
|
39
40
|
RSpec.configure do |config|
|
40
41
|
Shoulda::Matchers.configure do |shoulda_config|
|
@@ -44,6 +45,8 @@ RSpec.configure do |config|
|
|
44
45
|
end
|
45
46
|
end
|
46
47
|
|
48
|
+
config.include Abizvn::Cms::CmsValidationHelpers
|
49
|
+
|
47
50
|
# Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
|
48
51
|
config.fixture_paths = [
|
49
52
|
Rails.root.join('spec/fixtures')
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'rails_helper'
|
2
|
+
|
3
|
+
RSpec.describe Abizvn::Cms::ArticleLiteSerializer, type: :serializer do
|
4
|
+
describe "serialization" do
|
5
|
+
context 'order validations' do
|
6
|
+
let (:article1) { FactoryBot.create(:article) }
|
7
|
+
let (:serializer) { described_class.new(article1) }
|
8
|
+
|
9
|
+
it 'returns required attributes' do
|
10
|
+
data = serializer.serializable_hash[:data]
|
11
|
+
validate_article_lite_serialized_data(article1, data)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'rails_helper'
|
2
|
+
|
3
|
+
RSpec.describe Abizvn::Cms::ArticleSerializer, type: :serializer do
|
4
|
+
describe "serialization" do
|
5
|
+
context 'order validations' do
|
6
|
+
let (:article1) { FactoryBot.create(:article) }
|
7
|
+
let (:serializer) { described_class.new(article1) }
|
8
|
+
|
9
|
+
it 'returns required attributes' do
|
10
|
+
data = serializer.serializable_hash[:data]
|
11
|
+
validate_article_serialized_data(article1, data)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'rails_helper'
|
2
|
+
|
3
|
+
RSpec.describe Abizvn::Cms::CategoryArticlesSerializer, type: :serializer do
|
4
|
+
describe "serialization" do
|
5
|
+
context 'order validations' do
|
6
|
+
let!(:category1) { FactoryBot.create(:category) }
|
7
|
+
let!(:article1) { FactoryBot.create(:article, category: category1) }
|
8
|
+
let!(:article2) { FactoryBot.create(:article, category: category1) }
|
9
|
+
let!(:serializer) { described_class.new(category1, params: { articles: [article1, article2] }) }
|
10
|
+
|
11
|
+
it 'returns required attributes' do
|
12
|
+
data = serializer.serializable_hash[:data]
|
13
|
+
validate_category_articles_serialized_data(category1, data)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'rails_helper'
|
2
|
+
|
3
|
+
RSpec.describe Abizvn::Cms::CategoryLiteSerializer, type: :serializer do
|
4
|
+
describe "serialization" do
|
5
|
+
context 'order validations' do
|
6
|
+
let (:category1) { FactoryBot.create(:category) }
|
7
|
+
let (:serializer) { described_class.new(category1) }
|
8
|
+
|
9
|
+
it 'returns required attributes' do
|
10
|
+
data = serializer.serializable_hash[:data]
|
11
|
+
validate_category_lite_serialized_data(category1, data)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,89 @@
|
|
1
|
+
module Abizvn
|
2
|
+
module Cms
|
3
|
+
module CmsValidationHelpers
|
4
|
+
def validate_category_articles_serialized_data(category, serialized_data)
|
5
|
+
expect(serialized_data).to have_key(:id)
|
6
|
+
expect(serialized_data).to have_key(:type)
|
7
|
+
expect(serialized_data).to have_key(:attributes)
|
8
|
+
|
9
|
+
expect(serialized_data[:id]).to eq(category.id.to_s)
|
10
|
+
expect(serialized_data[:type]).to eq(:category_articles)
|
11
|
+
validate_category_articles_data_attributes(category, serialized_data[:attributes])
|
12
|
+
end
|
13
|
+
|
14
|
+
def validate_category_articles_data_attributes(category, data_attributes)
|
15
|
+
validate_category_lite_data_attributes(category, data_attributes)
|
16
|
+
|
17
|
+
expect(data_attributes).to have_key(:articles)
|
18
|
+
expect(data_attributes[:articles].size).to eq(category.articles.size)
|
19
|
+
|
20
|
+
category.articles.each do |article|
|
21
|
+
article_data = data_attributes[:articles].find { |x| x[:id] == (article.slug || article.id) }
|
22
|
+
validate_article_lite_data_attributes(article, article_data)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
|
27
|
+
def validate_category_lite_serialized_data(category, serialized_data)
|
28
|
+
expect(serialized_data).to have_key(:id)
|
29
|
+
expect(serialized_data).to have_key(:type)
|
30
|
+
expect(serialized_data).to have_key(:attributes)
|
31
|
+
|
32
|
+
expect(serialized_data[:id]).to eq(category.id.to_s)
|
33
|
+
expect(serialized_data[:type]).to eq(:category_lite)
|
34
|
+
validate_category_lite_data_attributes(category, serialized_data[:attributes])
|
35
|
+
end
|
36
|
+
|
37
|
+
def validate_category_lite_data_attributes(category, data_attributes)
|
38
|
+
expect(data_attributes).to have_key(:id)
|
39
|
+
expect(data_attributes).to have_key(:code)
|
40
|
+
expect(data_attributes).to have_key(:value)
|
41
|
+
|
42
|
+
expect(data_attributes[:id]).to eq(category.id)
|
43
|
+
expect(data_attributes[:code]).to eq(category.general.code)
|
44
|
+
expect(data_attributes[:value]).to eq(category.general.value)
|
45
|
+
end
|
46
|
+
|
47
|
+
|
48
|
+
def validate_article_lite_serialized_data(article, serialized_data)
|
49
|
+
expect(serialized_data).to have_key(:id)
|
50
|
+
expect(serialized_data).to have_key(:type)
|
51
|
+
expect(serialized_data).to have_key(:attributes)
|
52
|
+
|
53
|
+
expect(serialized_data[:id]).to eq(article.id.to_s)
|
54
|
+
expect(serialized_data[:type]).to eq(:article_lite)
|
55
|
+
validate_article_lite_data_attributes(article, serialized_data[:attributes])
|
56
|
+
end
|
57
|
+
|
58
|
+
def validate_article_lite_data_attributes(article, data_attributes)
|
59
|
+
expect(data_attributes).to have_key(:id)
|
60
|
+
expect(data_attributes).to have_key(:title)
|
61
|
+
expect(data_attributes).to have_key(:updated_at)
|
62
|
+
|
63
|
+
expect(data_attributes[:id]).to eq(article.slug || article.id)
|
64
|
+
expect(data_attributes[:title]).to eq(article.title)
|
65
|
+
expect(data_attributes[:updated_at]).to eq(article.updated_at)
|
66
|
+
end
|
67
|
+
|
68
|
+
|
69
|
+
def validate_article_serialized_data(article, serialized_data)
|
70
|
+
expect(serialized_data).to have_key(:id)
|
71
|
+
expect(serialized_data).to have_key(:type)
|
72
|
+
expect(serialized_data).to have_key(:attributes)
|
73
|
+
|
74
|
+
expect(serialized_data[:id]).to eq(article.id.to_s)
|
75
|
+
expect(serialized_data[:type]).to eq(:article)
|
76
|
+
validate_article_data_attributes(article, serialized_data[:attributes])
|
77
|
+
end
|
78
|
+
|
79
|
+
def validate_article_data_attributes(article, data_attributes)
|
80
|
+
validate_article_lite_data_attributes(article, data_attributes)
|
81
|
+
|
82
|
+
expect(data_attributes).to have_key(:description)
|
83
|
+
expect(data_attributes).to have_key(:created_at)
|
84
|
+
expect(data_attributes[:description]).to eq(article.description)
|
85
|
+
expect(data_attributes[:created_at]).to eq(article.created_at)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: abizvn-cms
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Juan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-
|
11
|
+
date: 2025-04-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -169,12 +169,17 @@ files:
|
|
169
169
|
- app/models/abizvn/cms/application_record.rb
|
170
170
|
- app/models/abizvn/cms/article.rb
|
171
171
|
- app/models/abizvn/cms/category.rb
|
172
|
+
- app/serializers/abizvn/cms/article_lite_serializer.rb
|
173
|
+
- app/serializers/abizvn/cms/article_serializer.rb
|
174
|
+
- app/serializers/abizvn/cms/category_articles_serializer.rb
|
175
|
+
- app/serializers/abizvn/cms/category_lite_serializer.rb
|
172
176
|
- app/views/layouts/abizvn/cms/application.html.erb
|
173
177
|
- config/routes.rb
|
174
178
|
- db/migrate/20250117094449_create_category.rb
|
175
179
|
- db/migrate/20250117094450_create_articles.rb
|
176
180
|
- db/migrate/20250119070204_add_articles_count_to_category.rb
|
177
181
|
- db/migrate/20250301063841_add_slug_to_articles.rb
|
182
|
+
- db/migrate/20250426050330_update_category_remove_general.rb
|
178
183
|
- lib/abizvn/cms.rb
|
179
184
|
- lib/abizvn/cms/engine.rb
|
180
185
|
- lib/abizvn/cms/version.rb
|
@@ -188,7 +193,12 @@ files:
|
|
188
193
|
- spec/models/abizvn/cms/article_spec.rb
|
189
194
|
- spec/models/abizvn/cms/category_spec.rb
|
190
195
|
- spec/rails_helper.rb
|
196
|
+
- spec/serializers/abizvn/cms/article_lite_serializer_spec.rb
|
197
|
+
- spec/serializers/abizvn/cms/article_serializer_spec.rb
|
198
|
+
- spec/serializers/abizvn/cms/category_articles_serializer_spec.rb
|
199
|
+
- spec/serializers/abizvn/cms/category_lite_serializer_spec.rb
|
191
200
|
- spec/spec_helper.rb
|
201
|
+
- spec/support/cms_validation_helpers.rb
|
192
202
|
homepage: https://github.com/abizvncom/abizvn-cms
|
193
203
|
licenses:
|
194
204
|
- MIT
|