trusty-cms 7.0.39 → 7.0.40
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/Gemfile +1 -0
- data/Gemfile.lock +6 -7
- data/README.md +25 -0
- data/app/assets/builds/trusty_cms/ckeditor5.css +6966 -0
- data/app/assets/builds/trusty_cms/ckeditor5.css.map +7 -0
- data/app/assets/builds/trusty_cms/ckeditor5.js +105634 -0
- data/app/assets/builds/trusty_cms/ckeditor5.js.map +7 -0
- data/app/assets/config/trusty-cms-manifest.js +2 -0
- data/app/assets/javascripts/admin.js +0 -1
- data/app/assets/stylesheets/admin/_ckeditor.css +109 -0
- data/app/assets/stylesheets/admin/main.scss +1 -0
- data/app/assets/stylesheets/admin/partials/_content.scss +2 -0
- data/app/controllers/admin/assets_controller.rb +78 -23
- data/app/controllers/admin/pages_controller.rb +31 -0
- data/app/javascript/trusty_cms/ckeditor5.js +391 -0
- data/app/models/asset.rb +3 -1
- data/app/views/admin/page_parts/_page_part.html.haml +13 -9
- data/app/views/layouts/application.html.haml +6 -0
- data/config/routes.rb +3 -0
- data/lib/generators/trusty_cms/templates/application.rb.erb +0 -1
- data/lib/trusty_cms/engine.rb +5 -8
- data/lib/trusty_cms/version.rb +1 -1
- data/lib/trusty_cms.rb +2 -0
- data/package.json +20 -2
- data/spec/controllers/assets_controller.rb +66 -0
- data/spec/dummy/config/application.rb +1 -1
- data/spec/dummy/config/storage.yml +7 -0
- data/spec/dummy/db/schema.rb +24 -20
- data/spec/fixtures/files/sample.ics +10 -0
- data/spec/fixtures/files/sample.txt +1 -0
- data/spec/models/asset_spec.rb +39 -0
- data/trusty_cms.gemspec +1 -1
- data/yarn.lock +2213 -493
- metadata +21 -15
- data/app/assets/javascripts/ckeditor/config.js +0 -22
- data/app/assets/javascripts/ckeditor/contents.css +0 -0
data/spec/dummy/db/schema.rb
CHANGED
@@ -10,8 +10,8 @@
|
|
10
10
|
#
|
11
11
|
# It's strongly recommended that you check this file into your version control system.
|
12
12
|
|
13
|
-
ActiveRecord::Schema[7.
|
14
|
-
create_table "active_storage_attachments", charset: "
|
13
|
+
ActiveRecord::Schema[7.2].define(version: 2025_06_06_144908) do
|
14
|
+
create_table "active_storage_attachments", charset: "utf8mb3", force: :cascade do |t|
|
15
15
|
t.string "name", null: false
|
16
16
|
t.string "record_type", null: false
|
17
17
|
t.bigint "record_id", null: false
|
@@ -21,7 +21,7 @@ ActiveRecord::Schema[7.0].define(version: 2025_01_03_191134) do
|
|
21
21
|
t.index ["record_type", "record_id", "name", "blob_id"], name: "index_active_storage_attachments_uniqueness", unique: true
|
22
22
|
end
|
23
23
|
|
24
|
-
create_table "active_storage_blobs", charset: "
|
24
|
+
create_table "active_storage_blobs", charset: "utf8mb3", force: :cascade do |t|
|
25
25
|
t.string "key", null: false
|
26
26
|
t.string "filename", null: false
|
27
27
|
t.string "content_type"
|
@@ -33,13 +33,13 @@ ActiveRecord::Schema[7.0].define(version: 2025_01_03_191134) do
|
|
33
33
|
t.index ["key"], name: "index_active_storage_blobs_on_key", unique: true
|
34
34
|
end
|
35
35
|
|
36
|
-
create_table "active_storage_variant_records", charset: "
|
36
|
+
create_table "active_storage_variant_records", charset: "utf8mb3", force: :cascade do |t|
|
37
37
|
t.bigint "blob_id", null: false
|
38
38
|
t.string "variation_digest", null: false
|
39
39
|
t.index ["blob_id", "variation_digest"], name: "index_active_storage_variant_records_uniqueness", unique: true
|
40
40
|
end
|
41
41
|
|
42
|
-
create_table "admins", charset: "
|
42
|
+
create_table "admins", charset: "utf8mb3", force: :cascade do |t|
|
43
43
|
t.string "email", default: "", null: false
|
44
44
|
t.string "encrypted_password", default: "", null: false
|
45
45
|
t.string "reset_password_token"
|
@@ -67,16 +67,19 @@ ActiveRecord::Schema[7.0].define(version: 2025_01_03_191134) do
|
|
67
67
|
t.text "notes"
|
68
68
|
t.datetime "created_at", precision: nil, null: false
|
69
69
|
t.datetime "updated_at", precision: nil, null: false
|
70
|
+
t.string "otp_secret"
|
71
|
+
t.integer "consumed_timestep"
|
72
|
+
t.boolean "otp_required_for_login"
|
70
73
|
end
|
71
74
|
|
72
|
-
create_table "admins_sites", charset: "
|
75
|
+
create_table "admins_sites", charset: "utf8mb3", force: :cascade do |t|
|
73
76
|
t.integer "admin_id", null: false
|
74
77
|
t.integer "site_id", null: false
|
75
78
|
t.index ["admin_id"], name: "index_admins_sites_on_admin_id"
|
76
79
|
t.index ["site_id"], name: "index_admins_sites_on_site_id"
|
77
80
|
end
|
78
81
|
|
79
|
-
create_table "assets", charset: "
|
82
|
+
create_table "assets", charset: "utf8mb3", force: :cascade do |t|
|
80
83
|
t.string "caption"
|
81
84
|
t.string "title"
|
82
85
|
t.string "asset_file_name"
|
@@ -92,19 +95,19 @@ ActiveRecord::Schema[7.0].define(version: 2025_01_03_191134) do
|
|
92
95
|
t.string "original_extension"
|
93
96
|
end
|
94
97
|
|
95
|
-
create_table "config", charset: "
|
98
|
+
create_table "config", charset: "utf8mb3", force: :cascade do |t|
|
96
99
|
t.string "key", limit: 40, default: "", null: false
|
97
100
|
t.string "value", default: ""
|
98
101
|
t.index ["key"], name: "key", unique: true
|
99
102
|
end
|
100
103
|
|
101
|
-
create_table "extension_meta", charset: "
|
104
|
+
create_table "extension_meta", charset: "utf8mb3", force: :cascade do |t|
|
102
105
|
t.string "name"
|
103
106
|
t.integer "schema_version", default: 0
|
104
107
|
t.boolean "enabled", default: true
|
105
108
|
end
|
106
109
|
|
107
|
-
create_table "layouts", charset: "
|
110
|
+
create_table "layouts", charset: "utf8mb3", force: :cascade do |t|
|
108
111
|
t.string "name", limit: 100
|
109
112
|
t.text "content"
|
110
113
|
t.datetime "created_at", precision: nil
|
@@ -116,20 +119,20 @@ ActiveRecord::Schema[7.0].define(version: 2025_01_03_191134) do
|
|
116
119
|
t.integer "site_id"
|
117
120
|
end
|
118
121
|
|
119
|
-
create_table "page_attachments", charset: "
|
122
|
+
create_table "page_attachments", charset: "utf8mb3", force: :cascade do |t|
|
120
123
|
t.integer "asset_id"
|
121
124
|
t.integer "page_id"
|
122
125
|
t.integer "position"
|
123
126
|
end
|
124
127
|
|
125
|
-
create_table "page_fields", charset: "
|
128
|
+
create_table "page_fields", charset: "utf8mb3", force: :cascade do |t|
|
126
129
|
t.integer "page_id"
|
127
130
|
t.string "name"
|
128
131
|
t.string "content"
|
129
132
|
t.index ["page_id", "name", "content"], name: "index_page_fields_on_page_id_and_name_and_content"
|
130
133
|
end
|
131
134
|
|
132
|
-
create_table "page_parts", charset: "
|
135
|
+
create_table "page_parts", charset: "utf8mb3", force: :cascade do |t|
|
133
136
|
t.string "name", limit: 100
|
134
137
|
t.string "filter_id", limit: 25
|
135
138
|
t.text "content", size: :medium
|
@@ -137,7 +140,7 @@ ActiveRecord::Schema[7.0].define(version: 2025_01_03_191134) do
|
|
137
140
|
t.index ["page_id", "name"], name: "parts_by_page"
|
138
141
|
end
|
139
142
|
|
140
|
-
create_table "pages", charset: "
|
143
|
+
create_table "pages", charset: "utf8mb3", force: :cascade do |t|
|
141
144
|
t.string "title"
|
142
145
|
t.string "slug", limit: 100
|
143
146
|
t.string "breadcrumb", limit: 160
|
@@ -162,7 +165,7 @@ ActiveRecord::Schema[7.0].define(version: 2025_01_03_191134) do
|
|
162
165
|
t.index ["virtual", "status_id"], name: "pages_published"
|
163
166
|
end
|
164
167
|
|
165
|
-
create_table "sessions", charset: "
|
168
|
+
create_table "sessions", charset: "utf8mb3", force: :cascade do |t|
|
166
169
|
t.string "session_id"
|
167
170
|
t.text "data"
|
168
171
|
t.datetime "updated_at", precision: nil
|
@@ -170,7 +173,7 @@ ActiveRecord::Schema[7.0].define(version: 2025_01_03_191134) do
|
|
170
173
|
t.index ["updated_at"], name: "index_sessions_on_updated_at"
|
171
174
|
end
|
172
175
|
|
173
|
-
create_table "sites", charset: "
|
176
|
+
create_table "sites", charset: "utf8mb3", force: :cascade do |t|
|
174
177
|
t.string "name"
|
175
178
|
t.string "domain"
|
176
179
|
t.integer "homepage_id"
|
@@ -184,7 +187,7 @@ ActiveRecord::Schema[7.0].define(version: 2025_01_03_191134) do
|
|
184
187
|
t.string "base_domain"
|
185
188
|
end
|
186
189
|
|
187
|
-
create_table "snippets", charset: "
|
190
|
+
create_table "snippets", charset: "utf8mb3", force: :cascade do |t|
|
188
191
|
t.string "name", limit: 100, default: "", null: false
|
189
192
|
t.string "filter_id", limit: 25
|
190
193
|
t.text "content"
|
@@ -197,7 +200,7 @@ ActiveRecord::Schema[7.0].define(version: 2025_01_03_191134) do
|
|
197
200
|
t.index ["name", "site_id"], name: "name_site_id", unique: true
|
198
201
|
end
|
199
202
|
|
200
|
-
create_table "users", charset: "
|
203
|
+
create_table "users", charset: "utf8mb3", force: :cascade do |t|
|
201
204
|
t.string "name", limit: 100
|
202
205
|
t.string "email"
|
203
206
|
t.string "login", limit: 40, default: "", null: false
|
@@ -218,7 +221,7 @@ ActiveRecord::Schema[7.0].define(version: 2025_01_03_191134) do
|
|
218
221
|
t.datetime "password_reset_sent_at", precision: nil
|
219
222
|
end
|
220
223
|
|
221
|
-
create_table "version_associations", charset: "
|
224
|
+
create_table "version_associations", charset: "utf8mb3", force: :cascade do |t|
|
222
225
|
t.integer "version_id"
|
223
226
|
t.string "foreign_key_name", null: false
|
224
227
|
t.integer "foreign_key_id"
|
@@ -227,7 +230,7 @@ ActiveRecord::Schema[7.0].define(version: 2025_01_03_191134) do
|
|
227
230
|
t.index ["version_id"], name: "index_version_associations_on_version_id"
|
228
231
|
end
|
229
232
|
|
230
|
-
create_table "versions", charset: "utf8mb4", force: :cascade do |t|
|
233
|
+
create_table "versions", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t|
|
231
234
|
t.string "whodunnit"
|
232
235
|
t.datetime "created_at"
|
233
236
|
t.bigint "item_id", null: false
|
@@ -235,6 +238,7 @@ ActiveRecord::Schema[7.0].define(version: 2025_01_03_191134) do
|
|
235
238
|
t.string "event", null: false
|
236
239
|
t.text "object", size: :long
|
237
240
|
t.integer "transaction_id"
|
241
|
+
t.text "object_changes", size: :long
|
238
242
|
t.index ["item_type", "item_id"], name: "index_versions_on_item_type_and_item_id"
|
239
243
|
t.index ["transaction_id"], name: "index_versions_on_transaction_id"
|
240
244
|
end
|
@@ -0,0 +1 @@
|
|
1
|
+
This is a plain text file used for testing unsupported content types.
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'rack/test'
|
3
|
+
|
4
|
+
RSpec.describe Asset, type: :model do
|
5
|
+
let(:fixtures_path) { TrustyCms::Engine.root.join('spec', 'fixtures', 'files') }
|
6
|
+
|
7
|
+
def upload_fixture(filename, content_type)
|
8
|
+
Rack::Test::UploadedFile.new(fixtures_path.join(filename), content_type)
|
9
|
+
end
|
10
|
+
|
11
|
+
describe 'validations' do
|
12
|
+
it 'is valid when the content type is approved' do
|
13
|
+
asset = described_class.new(asset: upload_fixture('sample.ics', 'text/calendar'))
|
14
|
+
|
15
|
+
expect(asset).to be_valid
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'is invalid when the content type is not approved' do
|
19
|
+
asset = described_class.new(asset: upload_fixture('sample.txt', 'text/plain'))
|
20
|
+
|
21
|
+
expect(asset).not_to be_valid
|
22
|
+
expect(asset.errors[:asset]).to include(a_string_matching(/file format/i))
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'is invalid when the file exceeds the maximum size' do
|
26
|
+
Tempfile.open(['large', '.png']) do |tempfile|
|
27
|
+
tempfile.binmode
|
28
|
+
tempfile.write('0' * (10.megabytes + 1))
|
29
|
+
tempfile.rewind
|
30
|
+
|
31
|
+
uploaded = Rack::Test::UploadedFile.new(tempfile.path, 'image/png')
|
32
|
+
asset = described_class.new(asset: uploaded)
|
33
|
+
|
34
|
+
expect(asset).not_to be_valid
|
35
|
+
expect(asset.errors[:asset]).to include(a_string_matching(/10 MB/))
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
data/trusty_cms.gemspec
CHANGED
@@ -30,7 +30,7 @@ a general purpose content management system--not merely a blogging engine.'
|
|
30
30
|
s.add_dependency 'acts_as_tree', '~> 2.9.1'
|
31
31
|
s.add_dependency 'base64'
|
32
32
|
s.add_dependency 'bigdecimal'
|
33
|
-
s.add_dependency '
|
33
|
+
s.add_dependency 'csso-rails', '~> 0.1'
|
34
34
|
s.add_dependency 'delocalize', '>= 0.2', '< 2.0'
|
35
35
|
s.add_dependency 'devise'
|
36
36
|
s.add_dependency 'devise-two-factor'
|