occams 1.0.4 → 1.0.6

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: aca6dd86629db61b2c905c1e54bf45dc6d4153659bf46868ed4a4c8ee70f9ad0
4
- data.tar.gz: 151a8b8aab7bcc69405e530a1100f18796515fc1e00fec3131c4cf68736f6778
3
+ metadata.gz: 9d020dd30a0e74d5c86211e061b5018c726f9a07e364c96f9c9cc65ebf4762d3
4
+ data.tar.gz: cf50ea17c8fcc9a5bdc6baa008dbfb7503b0d6acbdfa05389f706d6ce934adce
5
5
  SHA512:
6
- metadata.gz: 67407dbc43513ff16a74bef095001a7c4f6bf544a0ab07bbf1c51388478ebd3e6d078bc82714ecd1f9899079d6832ab326a779ec2addad117d36708279337ca3
7
- data.tar.gz: 807c7bd56f6684c6aca8c189bded644f843da7badac3beb883b3471c60ce45252a94486051d08468fc3fa778eff4808b01ff5c497a7c1c0b23586569c5c76242
6
+ metadata.gz: bf49d617a083d592d67dd6b5f72c2f3fb15618c64b5a954dd7fdefc71a578b1800279610bce9322867ef5ca5beef1cf4fa3356e766d1b4520810efb79f89ffbd
7
+ data.tar.gz: 37c7949c2bac89e22933d44177a6a713559fe14db0488062f9564cacd240a8b608e56275a4228d457411abce7478c595488d5b399cbd0566f4daafcb2a261942
data/.travis.yml CHANGED
@@ -10,18 +10,19 @@ addons:
10
10
 
11
11
  language: ruby
12
12
  rvm:
13
- - 2.3.8
14
- - 2.4.9
15
- - 2.5.7
16
- - 2.6.5
13
+ - 2.7.8
14
+ - 3.1.4
15
+ - 3.2.2
17
16
  gemfile:
18
- - test/gemfiles/5.2.gemfile
17
+ - test/gemfiles/6.1.gemfile
19
18
  jobs:
20
19
  include:
21
- - rvm: 2.5.7
22
- gemfile: test/gemfiles/6.0.gemfile
23
- - rvm: 2.6.5
24
- gemfile: test/gemfiles/6.0.gemfile
20
+ - rvm: 2.7.8
21
+ gemfile: test/gemfiles/6.1.gemfile
22
+ - rvm: 3.1.4
23
+ gemfile: test/gemfiles/6.1.gemfile
24
+ - rvm: 3.2.2
25
+ gemfile: test/gemfiles/7.0.gemfile
25
26
  branches:
26
27
  only:
27
28
  - master
data/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # Changelog
2
2
 
3
+ ## v1.0.6 - 9/5/2023
4
+
5
+ - Fixed [cms:siblings Nav tag](https://github.com/avonderluft/occams/wiki/Content-Tags#siblings) to handle edge case when page(s) are excluded by the `exclude` parameter
6
+ - Added [cms:children Nav tag](https://github.com/avonderluft/occams/wiki/Content-Tags#children) to render unordered list of links for children of current page
7
+
8
+ ## v1.0.5 - 8/31/2023
9
+
10
+ - All tests now green on Rails 6.1 and 7.0, each tested with rubies 2.7.8, 3.1.4 and 3.2.2.
11
+ - Tests added for new tags
12
+ - TODO: set up CI pipeline
13
+
3
14
  ## v1.0.4 - 8/26/2023
4
15
 
5
16
  - Added [cms:breadcrumbs Nav tag](https://github.com/avonderluft/occams/wiki/Content-Tags#breadcrumbs)
data/Gemfile CHANGED
@@ -10,7 +10,6 @@ group :development, :test do
10
10
  gem 'capybara', '~> 3.39.0'
11
11
  gem 'image_processing', '>= 1.2'
12
12
  gem 'kaminari', '~> 1.2', '>= 1.2.2'
13
- gem 'puma', '~> 3.12.2'
14
13
  gem 'rubocop', '~> 0.55.0', require: false
15
14
  gem 'selenium-webdriver', '~> 4.9.0'
16
15
  gem 'sqlite3', '~> 1.4.2'
data/README.md CHANGED
@@ -1,10 +1,7 @@
1
1
  # ocCaM'S
2
2
 
3
- Prefer Simplicity
4
-
5
- ## Raison d'etre
6
-
7
- ocCaM'S is a revival of [ComfortableMexicanSofa](https://github.com/comfy/comfortable-mexican-sofa), with all due thanks and acknowledgements to [Oleg Khabarov](https://github.com/GBH), et al. 'Comfy' was the simplest and cleanest Rails-based CMS that I had used. Its last commit was in 2020, and I simply did not want to see it die on the vine as [RadiantCMS](https://github.com/radiant/radiant) did some years ago.
3
+ [![Gem Version](https://img.shields.io/gem/v/occams.svg?style=flat)](http://rubygems.org/gems/occams)
4
+ [![Gem Downloads](https://img.shields.io/gem/dt/occams.svg?style=flat)](http://rubygems.org/gems/occams)
8
5
 
9
6
  ```
10
7
  ____ __ __ _ ____
@@ -15,13 +12,20 @@ ocCaM'S is a revival of [ComfortableMexicanSofa](https://github.com/comfy/comfor
15
12
 
16
13
  ```
17
14
 
15
+ Prefer Simplicity.
16
+
17
+ ## Raison d'etre
18
+
19
+ ocCaM'S is a revival of [ComfortableMexicanSofa](https://github.com/comfy/comfortable-mexican-sofa), with all due thanks and acknowledgements to [Oleg Khabarov](https://github.com/GBH), et al. 'Comfy' was the simplest and cleanest Rails-based CMS that I had used. Its last commit was in 2020, and I simply did not want to see it die on the vine as [RadiantCMS](https://github.com/radiant/radiant) did some years ago.
20
+
21
+
18
22
  ## The name
19
23
 
20
24
  ocCaM'S, pronounced "AH-kums" is a nod to [Occam's Razor](https://en.wikipedia.org/wiki/Occam%27s_razor) - for this Rails-based Content Management System endeavors to follow the principle that the preferred solution is that which is simplest and built with the smallest possible set of components.
21
25
 
22
26
  ## Features
23
27
 
24
- * Simple drop-in integration with Rails 6.0+ apps with minimal configuration
28
+ * Simple drop-in integration with Rails 6.1+ apps with minimal configuration
25
29
  * CMS stays away from the rest of your application
26
30
 
27
31
  Referring to the [ComfortableMexicanSofa](https://github.com/comfy/comfortable-mexican-sofa) documentation, substituting 'Occams' for 'ComfortableMexicanSofa' where appropriate.
@@ -36,13 +40,13 @@ Referring to the [ComfortableMexicanSofa](https://github.com/comfy/comfortable-m
36
40
  ## Dependencies
37
41
 
38
42
  * File attachments are handled by [ActiveStorage](https://github.com/rails/rails/tree/master/activestorage). Make sure that you can run appropriate migrations by running: `rails active_storage:install` and then `rake db:migrate`
39
- * Image resizing is done on Rails 7 or greater, with[ImageMagick](http://www.imagemagick.org/script/download.php), so make sure it's installed
43
+ * Image resizing is done with[ImageMagick](http://www.imagemagick.org/script/download.php), so make sure it's installed
40
44
  * Pagination is handled by [kaminari](https://github.com/amatsuda/kaminari) or [will_paginate](https://github.com/mislav/will_paginate). Please add one of those to your Gemfile.
41
45
 
42
46
  ## Compatibility
43
47
 
44
- - Install and basic functionality validated on Ruby 3.2.2. with Rails 6.1.7.4 and 7.0.6+
45
- - Rails 7 is recommended, since performance is noticably better
48
+ - Test suite passing on Ruby 2.7.8, 3.1.4 and 3.2.2 with Rails 6.1 and 7.0+
49
+ - Rails 7+ is recommended, since performance is noticably better than 6
46
50
 
47
51
  ## Installation
48
52
 
@@ -103,13 +107,13 @@ For more detail see [CONTRIBUTING](CONTRIBUTING.md)
103
107
 
104
108
  #### Testing
105
109
 
106
- - `bin/rails db:migrate`
110
+ - `bin/rails db:migrate RAILS_ENV=test`
107
111
  - `rake db:test:prepare`
108
112
  - `rake test`
109
113
 
110
114
  #### Acknowledgements
111
115
 
112
- - Obviously to Oleg Khabarov, the creator of [ComfortableMexicanSofa](https://github.com/comfy/comfortable-mexican-sofa). This is his work, with just a few updates and additions.
116
+ - Obviously to [Oleg Khabarov](https://github.com/GBH), the creator of [ComfortableMexicanSofa](https://github.com/comfy/comfortable-mexican-sofa). This is his work, with a few updates and additions.
113
117
  - Thanks to [Roman Almeida](https://github.com/nasmorn) for contributing OEM License for [Redactor Text Editor](http://imperavi.com/redactor)
114
118
 
115
119
  ---
data/TODOS.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # ToDos
2
2
 
3
+ - set up Buildkite CI and add build badge to README
4
+ - add duplicate page function in admin UI
3
5
  - add admin content search to list layouts, pages and snippets - see https://blog.robertsj.com/search/
4
6
  - add application console for testing
5
7
  - add feature to resize file_link'd images
6
- - get the original [ComfortableMexicanSofa](https://github.com/comfy/comfortable-mexican-sofa) tests working with Rails 7 and Ruby 3
data/bin/setup CHANGED
@@ -1,6 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
2
  require 'fileutils'
3
- include FileUtils
4
3
 
5
4
  # path to your application root.
6
5
  APP_ROOT = File.expand_path('..', __dir__)
@@ -9,20 +8,18 @@ def system!(*args)
9
8
  system(*args) || abort("\n== Command #{args} failed ==")
10
9
  end
11
10
 
12
- chdir APP_ROOT do
13
- # This script is a starting point to setup your application.
11
+ FileUtils.chdir APP_ROOT do
12
+ # This script is a way to set up or update your development environment automatically.
13
+ # This script is idempotent, so that you can run it at any time and get an expectable outcome.
14
14
  # Add necessary setup steps to this file.
15
15
 
16
16
  puts '== Installing dependencies =='
17
17
  system! 'gem install bundler --conservative'
18
18
  system('bundle check') || system!('bundle install')
19
19
 
20
- # Install JavaScript dependencies if using Yarn
21
- # system('bin/yarn')
22
-
23
20
  # puts "\n== Copying sample files =="
24
21
  # unless File.exist?('config/database.yml')
25
- # cp 'config/database.yml.sample', 'config/database.yml'
22
+ # FileUtils.cp 'config/database.yml.sample', 'config/database.yml'
26
23
  # end
27
24
 
28
25
  puts "\n== Preparing database =="
@@ -12,20 +12,16 @@ module Occams
12
12
  class Application < Rails::Application
13
13
  require_relative '../lib/occams'
14
14
 
15
- config.load_defaults 5.2
16
-
17
- # Settings in config/environments/* take precedence over those specified here.
18
- # Application configuration should go into files in config/initializers
19
- # -- all .rb files in that directory are automatically loaded.
20
-
21
- # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
22
- # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
23
- # config.time_zone = 'Central Time (US & Canada)'
24
-
25
- # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
26
- # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
27
- # config.i18n.default_locale = :de
28
-
15
+ # Initialize configuration defaults for originally generated Rails version.
16
+ config.load_defaults 6.1
17
+
18
+ # Configuration for the application, engines, and railties goes here.
19
+ #
20
+ # These settings can be overridden in specific environments using the files
21
+ # in config/environments, which are processed later.
22
+ #
23
+ # config.time_zone = "Central Time (US & Canada)"
24
+ # config.eager_load_paths << Rails.root.join("extras")
29
25
  # Ensuring that all ActiveStorage routes are loaded before out globbing route.
30
26
  config.railties_order = [ActiveStorage::Engine, :main_app, :all]
31
27
 
@@ -33,5 +29,7 @@ module Occams
33
29
  config.paths['config/routes.rb'] << 'config/cms_routes.rb'
34
30
 
35
31
  config.i18n.enforce_available_locales = true
32
+
33
+ config.active_record.yaml_column_permitted_classes = [Symbol, Date, Time, ActiveSupport::TimeWithZone, ActiveSupport::TimeZone]
36
34
  end
37
35
  end
data/config/cable.yml ADDED
@@ -0,0 +1,10 @@
1
+ development:
2
+ adapter: async
3
+
4
+ test:
5
+ adapter: test
6
+
7
+ production:
8
+ adapter: redis
9
+ url: <%= ENV.fetch("REDIS_URL") { "redis://localhost:6379/1" } %>
10
+ channel_prefix: occams_production
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Load the rails application
4
- require File.expand_path('application', __dir__)
3
+ # Load the Rails application.
4
+ require_relative 'application'
5
5
 
6
- # Initialize the rails application
6
+ # Initialize the Rails application.
7
7
  Occams::Application.initialize!
@@ -1,10 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'active_support/core_ext/integer/time'
4
+
3
5
  defined?(Occams::Application) && Occams::Application.configure do
4
6
  # Settings specified here will take precedence over those in config/application.rb.
5
7
 
6
- # In the development environment your application's code is reloaded on
7
- # every request. This slows down response time but is perfect for development
8
+ # In the development environment your application's code is reloaded any time
9
+ # it changes. This slows down response time but is perfect for development
8
10
  # since you don't have to restart the web server when you make code changes.
9
11
  config.cache_classes = false
10
12
 
@@ -14,10 +16,14 @@ defined?(Occams::Application) && Occams::Application.configure do
14
16
  # Show full error reports.
15
17
  config.consider_all_requests_local = true
16
18
 
19
+ # Enable server timing
20
+ config.server_timing = true
21
+
17
22
  # Enable/disable caching. By default caching is disabled.
18
23
  # Run rails dev:cache to toggle caching.
19
24
  if Rails.root.join('tmp/caching-dev.txt').exist?
20
25
  config.action_controller.perform_caching = true
26
+ config.action_controller.enable_fragment_cache_logging = true
21
27
 
22
28
  config.cache_store = :memory_store
23
29
  config.public_file_server.headers = {
@@ -29,7 +35,7 @@ defined?(Occams::Application) && Occams::Application.configure do
29
35
  config.cache_store = :null_store
30
36
  end
31
37
 
32
- # Store uploaded files on the local file system (see config/storage.yml for options)
38
+ # Store uploaded files on the local file system (see config/storage.yml for options).
33
39
  config.active_storage.service = :local
34
40
 
35
41
  # Don't care if the mailer can't send.
@@ -40,6 +46,12 @@ defined?(Occams::Application) && Occams::Application.configure do
40
46
  # Print deprecation notices to the Rails logger.
41
47
  config.active_support.deprecation = :log
42
48
 
49
+ # Raise exceptions for disallowed deprecations.
50
+ config.active_support.disallowed_deprecation = :raise
51
+
52
+ # Tell Active Support which deprecation messages to disallow.
53
+ config.active_support.disallowed_deprecation_warnings = []
54
+
43
55
  # Raise an error on page load if there are pending migrations.
44
56
  config.active_record.migration_error = :page_load
45
57
 
@@ -48,6 +60,9 @@ defined?(Occams::Application) && Occams::Application.configure do
48
60
  # number of complex assets.
49
61
  config.assets.debug = true
50
62
 
63
+ # Highlight code that triggered database queries in logs.
64
+ config.active_record.verbose_query_logs = true
65
+
51
66
  # Suppress logger output for asset requests.
52
67
  config.assets.quiet = true
53
68
 
@@ -56,4 +71,12 @@ defined?(Occams::Application) && Occams::Application.configure do
56
71
  config.file_watcher = ActiveSupport::EventedFileUpdateChecker
57
72
 
58
73
  config.active_job.queue_adapter = :inline
74
+ # Raises error for missing translations.
75
+ # config.i18n.raise_on_missing_translations = true
76
+
77
+ # Annotate rendered view with file names.
78
+ # config.action_view.annotate_rendered_view_with_filenames = true
79
+
80
+ # Uncomment if you wish to allow Action Cable access from any origin.
81
+ # config.action_cable.disable_request_forgery_protection = true
59
82
  end
@@ -0,0 +1,95 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support/core_ext/integer/time'
4
+
5
+ defined?(Occams::Application) && Occams::Application.configure do
6
+ # Settings specified here will take precedence over those in config/application.rb.
7
+
8
+ # Code is not reloaded between requests.
9
+ config.cache_classes = true
10
+
11
+ # Eager load code on boot. This eager loads most of Rails and
12
+ # your application in memory, allowing both threaded web servers
13
+ # and those relying on copy on write to perform better.
14
+ # Rake tasks automatically ignore this option for performance.
15
+ config.eager_load = true
16
+
17
+ # Full error reports are disabled and caching is turned on.
18
+ config.consider_all_requests_local = false
19
+ config.action_controller.perform_caching = true
20
+
21
+ # Ensures that a master key has been made available in either ENV["RAILS_MASTER_KEY"]
22
+ # or in config/master.key. This key is used to decrypt credentials (and other encrypted files).
23
+ # config.require_master_key = true
24
+
25
+ # Disable serving static files from the `/public` folder by default since
26
+ # Apache or NGINX already handles this.
27
+ config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?
28
+
29
+ # Compress CSS using a preprocessor.
30
+ # config.assets.css_compressor = :sass
31
+
32
+ # Do not fallback to assets pipeline if a precompiled asset is missed.
33
+ config.assets.compile = false
34
+
35
+ # Enable serving of images, stylesheets, and JavaScripts from an asset server.
36
+ # config.asset_host = "http://assets.example.com"
37
+
38
+ # Specifies the header that your server uses for sending files.
39
+ # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for Apache
40
+ # config.action_dispatch.x_sendfile_header = "X-Accel-Redirect" # for NGINX
41
+
42
+ # Store uploaded files on the local file system (see config/storage.yml for options).
43
+ config.active_storage.service = :local
44
+
45
+ # Mount Action Cable outside main process or domain.
46
+ # config.action_cable.mount_path = nil
47
+ # config.action_cable.url = "wss://example.com/cable"
48
+ # config.action_cable.allowed_request_origins = [ "http://example.com", /http:\/\/example.*/ ]
49
+
50
+ # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
51
+ # config.force_ssl = true
52
+
53
+ # Include generic and useful information about system operation, but avoid logging too much
54
+ # information to avoid inadvertent exposure of personally identifiable information (PII).
55
+ config.log_level = :info
56
+
57
+ # Prepend all log lines with the following tags.
58
+ config.log_tags = [:request_id]
59
+
60
+ # Use a different cache store in production.
61
+ # config.cache_store = :mem_cache_store
62
+
63
+ # Use a real queuing backend for Active Job (and separate queues per environment).
64
+ # config.active_job.queue_adapter = :resque
65
+ # config.active_job.queue_name_prefix = "occams_production"
66
+
67
+ config.action_mailer.perform_caching = false
68
+
69
+ # Ignore bad email addresses and do not raise email delivery errors.
70
+ # Set this to true and configure the email server for immediate delivery to raise delivery errors.
71
+ # config.action_mailer.raise_delivery_errors = false
72
+
73
+ # Enable locale fallbacks for I18n (makes lookups for any locale fall back to
74
+ # the I18n.default_locale when a translation cannot be found).
75
+ config.i18n.fallbacks = true
76
+
77
+ # Don't log any deprecations.
78
+ config.active_support.report_deprecations = false
79
+
80
+ # Use default logging formatter so that PID and timestamp are not suppressed.
81
+ config.log_formatter = Logger::Formatter.new
82
+
83
+ # Use a different logger for distributed setups.
84
+ # require "syslog/logger"
85
+ # config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new "app-name")
86
+
87
+ if ENV['RAILS_LOG_TO_STDOUT'].present?
88
+ logger = ActiveSupport::Logger.new($stdout)
89
+ logger.formatter = config.log_formatter
90
+ config.logger = ActiveSupport::TaggedLogging.new(logger)
91
+ end
92
+
93
+ # Do not dump schema after migrations.
94
+ config.active_record.dump_schema_after_migration = false
95
+ end
@@ -1,18 +1,22 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'active_support/core_ext/integer/time'
4
+
5
+ # The test environment is used exclusively to run your application's
6
+ # test suite. You never need to work with it otherwise. Remember that
7
+ # your test database is "scratch space" for the test suite and is wiped
8
+ # and recreated between test runs. Don't rely on the data there!
9
+
3
10
  defined?(Occams::Application) && Occams::Application.configure do
4
11
  # Settings specified here will take precedence over those in config/application.rb.
5
12
 
6
- # The test environment is used exclusively to run your application's
7
- # test suite. You never need to work with it otherwise. Remember that
8
- # your test database is "scratch space" for the test suite and is wiped
9
- # and recreated between test runs. Don't rely on the data there!
13
+ # Turn false under Spring and add config.action_view.cache_template_loading = true.
10
14
  config.cache_classes = true
11
15
 
12
- # Do not eager load code on boot. This avoids loading your whole application
13
- # just for the purpose of running a single test. If you are using a tool that
14
- # preloads Rails for running tests, you may have to set it to true.
15
- config.eager_load = false
16
+ # Eager loading loads your whole application. When running a single test locally,
17
+ # this probably isn't necessary. It's a good idea to do in a continuous integration
18
+ # system, or in some way before deploying your code.
19
+ config.eager_load = ENV['CI'].present?
16
20
 
17
21
  # Configure public file server for tests with Cache-Control for performance.
18
22
  config.public_file_server.enabled = true
@@ -23,6 +27,7 @@ defined?(Occams::Application) && Occams::Application.configure do
23
27
  # Show full error reports and disable caching.
24
28
  config.consider_all_requests_local = true
25
29
  config.action_controller.perform_caching = false
30
+ config.cache_store = :null_store
26
31
 
27
32
  # Raise exceptions instead of rendering exception templates.
28
33
  config.action_dispatch.show_exceptions = false
@@ -30,8 +35,9 @@ defined?(Occams::Application) && Occams::Application.configure do
30
35
  # Disable request forgery protection in test environment.
31
36
  config.action_controller.allow_forgery_protection = false
32
37
 
33
- # Store uploaded files on the local file system in a temporary directory
38
+ # Store uploaded files on the local file system in a temporary directory.
34
39
  config.active_storage.service = :test
40
+
35
41
  config.action_mailer.perform_caching = false
36
42
 
37
43
  # Tell Action Mailer not to deliver emails to the real world.
@@ -43,8 +49,15 @@ defined?(Occams::Application) && Occams::Application.configure do
43
49
  config.active_support.deprecation = :stderr
44
50
 
45
51
  config.active_job.queue_adapter = :inline
52
+ # Raise exceptions for disallowed deprecations.
53
+ config.active_support.disallowed_deprecation = :raise
54
+
55
+ # Tell Active Support which deprecation messages to disallow.
56
+ config.active_support.disallowed_deprecation_warnings = []
57
+
58
+ # Raises error for missing translations.
59
+ # config.i18n.raise_on_missing_translations = true
46
60
 
47
- # TODO: This is temporary fix so TravisCI runs until Rails 5.2.3 is out.
48
- # See: https://github.com/rails/rails/pull/35607
49
- config.secret_key_base = SecureRandom.hex(64)
61
+ # Annotate rendered view with file names.
62
+ # config.action_view.annotate_rendered_view_with_filenames = true
50
63
  end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Be sure to restart your server when you modify this file.
4
+
5
+ # Version of your assets, change this if you want to expire all your assets.
6
+ Rails.application.config.assets.version = '1.0'
7
+
8
+ # Add additional assets to the asset load path.
9
+ # Rails.application.config.assets.paths << Emoji.images_path
10
+
11
+ # Precompile additional assets.
12
+ # application.js, application.css, and all non-JS/CSS in the app/assets
13
+ # folder are already added.
14
+ # Rails.application.config.assets.precompile += %w( admin.js admin.css )
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Be sure to restart your server when you modify this file.
4
+
5
+ # Define an application-wide content security policy.
6
+ # See the Securing Rails Applications Guide for more information:
7
+ # https://guides.rubyonrails.org/security.html#content-security-policy-header
8
+
9
+ # Rails.application.configure do
10
+ # config.content_security_policy do |policy|
11
+ # policy.default_src :self, :https
12
+ # policy.font_src :self, :https, :data
13
+ # policy.img_src :self, :https, :data
14
+ # policy.object_src :none
15
+ # policy.script_src :self, :https
16
+ # policy.style_src :self, :https
17
+ # # Specify URI for violation reports
18
+ # # policy.report_uri "/csp-violation-report-endpoint"
19
+ # end
20
+ #
21
+ # # Generate session nonces for permitted importmap and inline scripts
22
+ # config.content_security_policy_nonce_generator = ->(request) { request.session.id.to_s }
23
+ # config.content_security_policy_nonce_directives = %w(script-src)
24
+ #
25
+ # # Report violations without enforcing the policy.
26
+ # # config.content_security_policy_report_only = true
27
+ # end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Be sure to restart your server when you modify this file.
4
+
5
+ # Configure parameters to be filtered from the log file. Use this to limit dissemination of
6
+ # sensitive information. See the ActiveSupport::ParameterFilter documentation for supported
7
+ # notations and behaviors.
8
+ Rails.application.config.filter_parameters += %i[
9
+ passw secret token _key crypt salt certificate otp ssn
10
+ ]
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Be sure to restart your server when you modify this file.
4
+
5
+ # Add new inflection rules using the following format. Inflections
6
+ # are locale specific, and you may define rules for as many different
7
+ # locales as you wish. All of these examples are active by default:
8
+ # ActiveSupport::Inflector.inflections(:en) do |inflect|
9
+ # inflect.plural /^(ox)$/i, "\\1en"
10
+ # inflect.singular /^(ox)en/i, "\\1"
11
+ # inflect.irregular "person", "people"
12
+ # inflect.uncountable %w( fish sheep )
13
+ # end
14
+
15
+ # These inflection rules are supported but not enabled by default:
16
+ # ActiveSupport::Inflector.inflections(:en) do |inflect|
17
+ # inflect.acronym "RESTful"
18
+ # end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module JSON
4
+ module_function
5
+
6
+ def parse(source, opts = {})
7
+ Parser.new(source, **opts).parse
8
+ end
9
+ end
@@ -0,0 +1,144 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Be sure to restart your server when you modify this file.
4
+ #
5
+ # This file eases your Rails 7.0 framework defaults upgrade.
6
+ #
7
+ # Uncomment each configuration one by one to switch to the new default.
8
+ # Once your application is ready to run with all new defaults, you can remove
9
+ # this file and set the `config.load_defaults` to `7.0`.
10
+ #
11
+ # Read the Guide for Upgrading Ruby on Rails for more info on each option.
12
+ # https://guides.rubyonrails.org/upgrading_ruby_on_rails.html
13
+
14
+ # `button_to` view helper will render `<button>` element, regardless of whether
15
+ # or not the content is passed as the first argument or as a block.
16
+ # Rails.application.config.action_view.button_to_generates_button_tag = true
17
+
18
+ # `stylesheet_link_tag` view helper will not render the media attribute by default.
19
+ # Rails.application.config.action_view.apply_stylesheet_media_default = false
20
+
21
+ # Change the digest class for the key generators to `OpenSSL::Digest::SHA256`.
22
+ # Changing this default means invalidate all encrypted messages generated by
23
+ # your application and, all the encrypted cookies. Only change this after you
24
+ # rotated all the messages using the key rotator.
25
+ #
26
+ # See upgrading guide for more information on how to build a rotator.
27
+ # https://guides.rubyonrails.org/v7.0/upgrading_ruby_on_rails.html
28
+ # Rails.application.config.active_support.key_generator_hash_digest_class = OpenSSL::Digest::SHA256
29
+
30
+ # Change the digest class for ActiveSupport::Digest.
31
+ # Changing this default means that for example Etags change and
32
+ # various cache keys leading to cache invalidation.
33
+ # Rails.application.config.active_support.hash_digest_class = OpenSSL::Digest::SHA256
34
+
35
+ # Don't override ActiveSupport::TimeWithZone.name and use the default Ruby
36
+ # implementation.
37
+ # Rails.application.config.active_support.remove_deprecated_time_with_zone_name = true
38
+
39
+ # Calls `Rails.application.executor.wrap` around test cases.
40
+ # This makes test cases behave closer to an actual request or job.
41
+ # Several features that are normally disabled in test, such as Active Record query cache
42
+ # and asynchronous queries will then be enabled.
43
+ # Rails.application.config.active_support.executor_around_test_case = true
44
+
45
+ # Set both the `:open_timeout` and `:read_timeout` values for `:smtp` delivery method.
46
+ # Rails.application.config.action_mailer.smtp_timeout = 5
47
+
48
+ # The ActiveStorage video previewer will now use scene change detection to generate
49
+ # better preview images (rather than the previous default of using the first frame
50
+ # of the video).
51
+ # Rails.application.config.active_storage.video_preview_arguments =
52
+ # "-vf 'select=eq(n\\,0)+eq(key\\,1)+gt(scene\\,0.015),loop=loop=-1:size=2,trim=start_frame=1' -frames:v 1 -f image2"
53
+
54
+ # Automatically infer `inverse_of` for associations with a scope.
55
+ # Rails.application.config.active_record.automatic_scope_inversing = true
56
+
57
+ # Raise when running tests if fixtures contained foreign key violations
58
+ # Rails.application.config.active_record.verify_foreign_keys_for_fixtures = true
59
+
60
+ # Disable partial inserts.
61
+ # This default means that all columns will be referenced in INSERT queries
62
+ # regardless of whether they have a default or not.
63
+ # Rails.application.config.active_record.partial_inserts = false
64
+
65
+ # Protect from open redirect attacks in `redirect_back_or_to` and `redirect_to`.
66
+ # Rails.application.config.action_controller.raise_on_open_redirects = true
67
+
68
+ # Change the variant processor for Active Storage.
69
+ # Changing this default means updating all places in your code that
70
+ # generate variants to use image processing macros and ruby-vips
71
+ # operations. See the upgrading guide for detail on the changes required.
72
+ # The `:mini_magick` option is not deprecated; it's fine to keep using it.
73
+ # Rails.application.config.active_storage.variant_processor = :vips
74
+
75
+ # Enable parameter wrapping for JSON.
76
+ # Previously this was set in an initializer. It's fine to keep using that initializer if you've customized it.
77
+ # To disable parameter wrapping entirely, set this config to `false`.
78
+ # Rails.application.config.action_controller.wrap_parameters_by_default = true
79
+
80
+ # Specifies whether generated namespaced UUIDs follow the RFC 4122 standard for namespace IDs provided as a
81
+ # `String` to `Digest::UUID.uuid_v3` or `Digest::UUID.uuid_v5` method calls.
82
+ #
83
+ # See https://guides.rubyonrails.org/configuring.html#config-active-support-use-rfc4122-namespaced-uuids for
84
+ # more information.
85
+ # Rails.application.config.active_support.use_rfc4122_namespaced_uuids = true
86
+
87
+ # Change the default headers to disable browsers' flawed legacy XSS protection.
88
+ # Rails.application.config.action_dispatch.default_headers = {
89
+ # "X-Frame-Options" => "SAMEORIGIN",
90
+ # "X-XSS-Protection" => "0",
91
+ # "X-Content-Type-Options" => "nosniff",
92
+ # "X-Download-Options" => "noopen",
93
+ # "X-Permitted-Cross-Domain-Policies" => "none",
94
+ # "Referrer-Policy" => "strict-origin-when-cross-origin"
95
+ # }
96
+
97
+ # ** Please read carefully, this must be configured in config/application.rb **
98
+ # Change the format of the cache entry.
99
+ # Changing this default means that all new cache entries added to the cache
100
+ # will have a different format that is not supported by Rails 6.1 applications.
101
+ # Only change this value after your application is fully deployed to Rails 7.0
102
+ # and you have no plans to rollback.
103
+ # When you're ready to change format, add this to `config/application.rb` (NOT this file):
104
+ # config.active_support.cache_format_version = 7.0
105
+
106
+ # Cookie serializer: 2 options
107
+ #
108
+ # If you're upgrading and haven't set `cookies_serializer` previously, your cookie serializer
109
+ # is `:marshal`. The default for new apps is `:json`.
110
+ #
111
+ # Rails.application.config.action_dispatch.cookies_serializer = :json
112
+ #
113
+ #
114
+ # To migrate an existing application to the `:json` serializer, use the `:hybrid` option.
115
+ #
116
+ # Rails transparently deserializes existing (Marshal-serialized) cookies on read and
117
+ # re-writes them in the JSON format.
118
+ #
119
+ # It is fine to use `:hybrid` long term; you should do that until you're confident *all* your cookies
120
+ # have been converted to JSON. To keep using `:hybrid` long term, move this config to its own
121
+ # initializer or to `config/application.rb`.
122
+ #
123
+ # Rails.application.config.action_dispatch.cookies_serializer = :hybrid
124
+ #
125
+ #
126
+ # If your cookies can't yet be serialized to JSON, keep using `:marshal` for backward-compatibility.
127
+ #
128
+ # If you have configured the serializer elsewhere, you can remove this section of the file.
129
+ #
130
+ # See https://guides.rubyonrails.org/action_controller_overview.html#cookies for more information.
131
+
132
+ # Change the return value of `ActionDispatch::Request#content_type` to the Content-Type header without modification.
133
+ # Rails.application.config.action_dispatch.return_only_request_media_type_on_content_type = false
134
+
135
+ # Active Storage `has_many_attached` relationships will default to replacing the current collection instead of appending to it.
136
+ # Thus, to support submitting an empty collection, the `file_field` helper will render an hidden field
137
+ # `include_hidden` by default when `multiple_file_field_include_hidden` is set to `true`.
138
+ # See https://guides.rubyonrails.org/configuring.html#config-active-storage-multiple-file-field-include-hidden for more information.
139
+ # Rails.application.config.active_storage.multiple_file_field_include_hidden = true
140
+
141
+ # ** Please read carefully, this must be configured in config/application.rb (NOT this file) **
142
+ # Disables the deprecated #to_s override in some Ruby core classes
143
+ # See https://guides.rubyonrails.org/configuring.html#config-active-support-disable-to-s-conversion for more information.
144
+ # config.active_support.disable_to_s_conversion = true
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Define an application-wide HTTP permissions policy. For further
4
+ # information see https://developers.google.com/web/updates/2018/06/feature-policy
5
+ #
6
+ # Rails.application.config.permissions_policy do |f|
7
+ # f.camera :none
8
+ # f.gyroscope :none
9
+ # f.microphone :none
10
+ # f.usb :none
11
+ # f.fullscreen :self
12
+ # f.payment :self, "https://secure.example.com"
13
+ # end
@@ -7,12 +7,16 @@ class CreateActiveStorageTables < ActiveRecord::Migration[6.0]
7
7
  t.string :service_name, null: false
8
8
  t.text :metadata
9
9
  t.bigint :byte_size, null: false
10
- t.string :checksum, null: false
10
+ t.string :checksum, null: true
11
11
  t.datetime :created_at, null: false
12
12
 
13
13
  t.index [ :key ], unique: true
14
14
  end
15
15
 
16
+ if configured_service = ActiveStorage::Blob.service.name
17
+ ActiveStorage::Blob.unscoped.update_all(service_name: configured_service)
18
+ end
19
+
16
20
  create_table :active_storage_attachments do |t|
17
21
  t.string :name, null: false
18
22
  t.references :record, null: false, polymorphic: true, index: false
@@ -23,12 +27,24 @@ class CreateActiveStorageTables < ActiveRecord::Migration[6.0]
23
27
  t.index [ :record_type, :record_id, :name, :blob_id ], name: "index_active_storage_attachments_uniqueness", unique: true
24
28
  end
25
29
 
26
- create_table :active_storage_variant_records do |t|
27
- t.belongs_to :blob, null: false, index: false
30
+ create_table :active_storage_variant_records, id: primary_key_type, if_not_exists: true do |t|
31
+ t.belongs_to :blob, null: false, index: false, type: blobs_primary_key_type
28
32
  t.string :variation_digest, null: false
29
33
 
30
34
  t.index %i[ blob_id variation_digest ], name: "index_active_storage_variant_records_uniqueness", unique: true
31
35
  t.foreign_key :active_storage_blobs, column: :blob_id
32
36
  end
33
37
  end
38
+
39
+ private
40
+ def primary_key_type
41
+ config = Rails.configuration.generators
42
+ config.options[config.orm][:primary_key_type] || :primary_key
43
+ end
44
+
45
+ def blobs_primary_key_type
46
+ pkey_name = connection.primary_key(:active_storage_blobs)
47
+ pkey_column = connection.columns(:active_storage_blobs).find { |c| c.name == pkey_name }
48
+ pkey_column.bigint? ? :bigint : pkey_column.type
49
+ end
34
50
  end
@@ -1,4 +1,4 @@
1
- class CreateCms < ActiveRecord::Migration[5.2]
1
+ class CreateCms < ActiveRecord::Migration[6.0]
2
2
 
3
3
  LIMIT = 16777215
4
4
 
@@ -15,15 +15,14 @@
15
15
  # and/or pass in style overrides with the 'style' parameter, as above
16
16
 
17
17
  class Occams::Content::Tag::Audio < Occams::Content::Tag
18
- attr_reader :path, :locals
18
+ attr_reader :path, :style, :locals
19
19
 
20
20
  def initialize(context:, params: [], source: nil)
21
21
  super
22
- options = params.extract_options!
22
+ @locals = params.extract_options!
23
23
  @path = params[0]
24
24
  @style = ''
25
- @style = "<style>.audioplayer {#{options['style']}}</style>" if options['style']
26
- @style = options['style']
25
+ @style = "<style>.audioplayer {#{@locals['style']}}</style>" if @locals['style']
27
26
 
28
27
  return if @path.present?
29
28
 
@@ -16,13 +16,13 @@
16
16
  # and/or pass in style overrides with the 'style' parameter, as above
17
17
 
18
18
  class Occams::Content::Tag::Breadcrumbs < Occams::Content::Tag
19
- attr_reader :path, :locals
19
+ attr_reader :links, :style, :locals
20
20
 
21
21
  def initialize(context:, params: [], source: nil)
22
22
  super
23
- options = params.extract_options!
23
+ @locals = params.extract_options!
24
24
  @style = ''
25
- @style = "<style>#breadcrumbs {#{options['style']}}</style>" if options['style']
25
+ @style = "<style>#breadcrumbs {#{@locals['style']}}</style>" if @locals['style']
26
26
 
27
27
  @links = '<div id="breadcrumbs">'
28
28
  context.ancestors.reverse.each do |a|
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Nav Tag for unordered list of links to the children of the current page
4
+ # {{ cms:children }}
5
+ # {{ cms:children style: "font-weight: bold", exclude: "404-page, search-page" }}
6
+ # To customize your children style, add a 'children' id to your CSS, e.g
7
+ # #children {
8
+ # color: #006633;
9
+ # font-size: 90%;
10
+ # margin-bottom: 4px;
11
+ # font-style: italic;
12
+ # }
13
+ # and/or pass in style overrides with the 'style' parameter, as above
14
+ #
15
+ # To exclude children, list their slugs with the 'exclude' parameter
16
+ # as comma-delimited string, e.g. as above - exclude: "404-page, search-page"
17
+
18
+ class Occams::Content::Tag::Children < Occams::Content::Tag
19
+ attr_reader :list, :style, :locals
20
+
21
+ def initialize(context:, params: [], source: nil)
22
+ super
23
+ @locals = params.extract_options!
24
+ @style = ''
25
+ @style = "<style>#children {#{@locals['style']}}</style>" if @locals['style']
26
+ @exclude = []
27
+ @exclude = @locals['exclude'].split(',') if @locals['exclude']
28
+ @list = ''
29
+ # ActiveRecord_Associations_CollectionProxy
30
+ page_children = context.children.order(:position).to_ary
31
+ page_children.delete_if { |child| @exclude.include? child.slug }
32
+ return unless page_children.any?
33
+
34
+ @list = '<ul id="children">'
35
+ page_children.each do |c|
36
+ next if Rails.env == 'production' && !c.is_published
37
+
38
+ @list += "<li><a href=#{c.url(relative: true)}>#{c.label}</a></li>"
39
+ end
40
+ @list += '</ul>'
41
+ end
42
+
43
+ def content
44
+ format("#{@style}#{@list}")
45
+ end
46
+ end
47
+
48
+ Occams::Content::Renderer.register_tag(
49
+ :children, Occams::Content::Tag::Children
50
+ )
@@ -6,10 +6,8 @@
6
6
  # To customize your siblings style, add a 'siblings' id to your CSS, e.g
7
7
  # #siblings {
8
8
  # color: #006633;
9
- # font-family: Verdana, Arial, Helvetica, sans-serif;
10
9
  # font-size: 95%;
11
10
  # margin-top: 12px;
12
- # margin-bottom: 4px;
13
11
  # font-style: italic;
14
12
  # }
15
13
  # and/or pass in style overrides with the 'style' parameter (see above)
@@ -20,24 +18,24 @@
20
18
  # style and exclude parameters are optional
21
19
 
22
20
  class Occams::Content::Tag::Siblings < Occams::Content::Tag
23
- attr_reader :path, :locals
21
+ attr_reader :locals, :style, :links
24
22
 
25
23
  def initialize(context:, params: [], source: nil)
26
24
  super
27
- options = params.extract_options!
25
+ @locals = params.extract_options!
28
26
  @style = ''
29
- @style = "<style>#siblings {#{options['style']}}</style>" if options['style']
27
+ @style = "<style>#siblings {#{@locals['style']}}</style>" if @locals['style']
30
28
  @exclude = []
31
- @exclude = options['exclude'].split(',') if options['exclude']
29
+ @exclude = @locals['exclude'].split(',') if @locals['exclude']
32
30
  @links = '<div id="siblings">'
33
31
 
34
32
  prevp = false
35
33
  sibs = context.self_and_siblings.sort_by(&:position)
34
+ sibs.delete_if { |sib| @exclude.include? sib.slug }
36
35
  page_idx = sibs.index(context)
37
36
  sibs.each do |sib|
38
37
  sib_idx = sibs.index(sib)
39
38
  next if sibs.index(sib) == page_idx
40
- next if @exclude.include? sib.slug
41
39
  next if Rails.env == 'production' && !sib.is_published
42
40
 
43
41
  if sib_idx == page_idx - 1
@@ -32,4 +32,5 @@ require_relative 'content/tags/template'
32
32
 
33
33
  require_relative 'content/tags/audio'
34
34
  require_relative 'content/tags/breadcrumbs'
35
+ require_relative 'content/tags/children'
35
36
  require_relative 'content/tags/siblings'
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Occams
4
- VERSION = '1.0.4'
4
+ VERSION = '1.0.6'
5
5
  end
data/occams.gemspec CHANGED
@@ -28,7 +28,8 @@ Gem::Specification.new do |s|
28
28
  s.add_runtime_dependency 'kramdown', '~> 2.4', '>= 2.4.0'
29
29
  s.add_runtime_dependency 'mimemagic', '~> 0.4', '>= 0.4.3'
30
30
  s.add_runtime_dependency 'mini_magick', '~> 4.12', '>= 4.12.0'
31
- s.add_dependency 'rails', '>= 6.1.0'
31
+ s.add_runtime_dependency 'rails', '>= 6.1.0'
32
32
  s.add_runtime_dependency 'rails-i18n', '>= 6.0.0'
33
33
  s.add_runtime_dependency 'sassc-rails', '~> 2.1', '>= 2.1.2'
34
+ s.add_runtime_dependency 'sprockets-rails', '~> 3.4', '>= 3.4.2'
34
35
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: occams
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.4
4
+ version: 1.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew vonderLuft
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-08-26 00:00:00.000000000 Z
11
+ date: 2023-09-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: active_link_to
@@ -218,6 +218,26 @@ dependencies:
218
218
  - - ">="
219
219
  - !ruby/object:Gem::Version
220
220
  version: 2.1.2
221
+ - !ruby/object:Gem::Dependency
222
+ name: sprockets-rails
223
+ requirement: !ruby/object:Gem::Requirement
224
+ requirements:
225
+ - - "~>"
226
+ - !ruby/object:Gem::Version
227
+ version: '3.4'
228
+ - - ">="
229
+ - !ruby/object:Gem::Version
230
+ version: 3.4.2
231
+ type: :runtime
232
+ prerelease: false
233
+ version_requirements: !ruby/object:Gem::Requirement
234
+ requirements:
235
+ - - "~>"
236
+ - !ruby/object:Gem::Version
237
+ version: '3.4'
238
+ - - ">="
239
+ - !ruby/object:Gem::Version
240
+ version: 3.4.2
221
241
  description: Occams is a powerful Rails 6-7+ CMS Engine
222
242
  email:
223
243
  - wonder@hey.com
@@ -577,12 +597,21 @@ files:
577
597
  - config.ru
578
598
  - config/application.rb
579
599
  - config/boot.rb
600
+ - config/cable.yml
580
601
  - config/cms_routes.rb
581
602
  - config/database.yml
582
603
  - config/environment.rb
583
604
  - config/environments/development.rb
605
+ - config/environments/production.rb
584
606
  - config/environments/test.rb
607
+ - config/initializers/assets.rb
608
+ - config/initializers/content_security_policy.rb
609
+ - config/initializers/filter_parameter_logging.rb
610
+ - config/initializers/inflections.rb
611
+ - config/initializers/json.rb
612
+ - config/initializers/new_framework_defaults_7_0.rb
585
613
  - config/initializers/occams.rb
614
+ - config/initializers/permissions_policy.rb
586
615
  - config/locales/ar.yml
587
616
  - config/locales/ca.yml
588
617
  - config/locales/cs.yml
@@ -656,6 +685,7 @@ files:
656
685
  - lib/occams/content/tags/audio.rb
657
686
  - lib/occams/content/tags/breadcrumbs.rb
658
687
  - lib/occams/content/tags/checkbox.rb
688
+ - lib/occams/content/tags/children.rb
659
689
  - lib/occams/content/tags/date.rb
660
690
  - lib/occams/content/tags/datetime.rb
661
691
  - lib/occams/content/tags/file.rb