Module: ConcernsOnRails
- Defined in:
- lib/concerns_on_rails.rb,
lib/concerns_on_rails/railtie.rb,
lib/concerns_on_rails/version.rb,
lib/concerns_on_rails/encryption.rb,
lib/concerns_on_rails/configuration.rb,
lib/concerns_on_rails/support/money.rb,
lib/concerns_on_rails/legacy_aliases.rb,
lib/concerns_on_rails/support/masker.rb,
lib/concerns_on_rails/models/hashable.rb,
lib/concerns_on_rails/models/lockable.rb,
lib/concerns_on_rails/models/maskable.rb,
lib/concerns_on_rails/models/sortable.rb,
lib/concerns_on_rails/models/storable.rb,
lib/concerns_on_rails/models/taggable.rb,
lib/concerns_on_rails/models/aliasable.rb,
lib/concerns_on_rails/models/auditable.rb,
lib/concerns_on_rails/models/expirable.rb,
lib/concerns_on_rails/models/sluggable.rb,
lib/concerns_on_rails/models/stateable.rb,
lib/concerns_on_rails/models/duplicable.rb,
lib/concerns_on_rails/models/searchable.rb,
lib/concerns_on_rails/support/encryptor.rb,
lib/concerns_on_rails/models/activatable.rb,
lib/concerns_on_rails/models/addressable.rb,
lib/concerns_on_rails/models/encryptable.rb,
lib/concerns_on_rails/models/monetizable.rb,
lib/concerns_on_rails/models/publishable.rb,
lib/concerns_on_rails/models/sanitizable.rb,
lib/concerns_on_rails/models/schedulable.rb,
lib/concerns_on_rails/models/tokenizable.rb,
lib/concerns_on_rails/models/anonymizable.rb,
lib/concerns_on_rails/models/normalizable.rb,
lib/concerns_on_rails/models/sequenceable.rb,
lib/concerns_on_rails/controllers/sortable.rb,
lib/concerns_on_rails/support/address_data.rb,
lib/concerns_on_rails/support/column_guard.rb,
lib/concerns_on_rails/support/random_value.rb,
lib/concerns_on_rails/support/scalar_param.rb,
lib/concerns_on_rails/support/unique_retry.rb,
lib/concerns_on_rails/controllers/cacheable.rb,
lib/concerns_on_rails/models/soft_deletable.rb,
lib/concerns_on_rails/controllers/filterable.rb,
lib/concerns_on_rails/controllers/includable.rb,
lib/concerns_on_rails/support/error_envelope.rb,
lib/concerns_on_rails/controllers/localizable.rb,
lib/concerns_on_rails/controllers/paginatable.rb,
lib/concerns_on_rails/controllers/respondable.rb,
lib/concerns_on_rails/support/html_sanitizers.rb,
lib/concerns_on_rails/controllers/authorizable.rb,
lib/concerns_on_rails/controllers/deprecatable.rb,
lib/concerns_on_rails/controllers/throttleable.rb,
lib/concerns_on_rails/controllers/timezoneable.rb,
lib/concerns_on_rails/models/counter_cacheable.rb,
lib/concerns_on_rails/controllers/idempotentable.rb,
lib/concerns_on_rails/controllers/secure_headable.rb,
lib/concerns_on_rails/support/sequence_calculator.rb,
lib/concerns_on_rails/controllers/error_handleable.rb,
lib/concerns_on_rails/controllers/cursor_paginatable.rb,
lib/concerns_on_rails/controllers/webhook_verifiable.rb,
lib/concerns_on_rails/support/filter_parameter_registry.rb
Defined Under Namespace
Modules: Controllers, Encryption, Models, Support Classes: Configuration, MissingDependency, Railtie
Constant Summary collapse
- VERSION =
"1.24.0".freeze
- LEGACY_MODEL_ALIASES =
Backwards-compatibility aliases for pre-1.6 module paths, resolved lazily: eager
Sluggable = Models::Sluggableassignments would force-load every concern file at boot and defeat the loader's autoload laziness. The first reference toConcernsOnRails::<Name>loads the real module and pins the alias constant, soinclude ConcernsOnRails::Sluggableworks unchanged. New code is encouraged to use the namespaced form:ConcernsOnRails::Models::Sluggable.Note
Sortableresolves to Models::Sortable (as it always has) — the controller concern is only reachable as Controllers::Sortable. %i[ Sluggable Sortable Publishable SoftDeletable Hashable Schedulable Expirable Normalizable Searchable Activatable Tokenizable Stateable Addressable Sequenceable Taggable Sanitizable Maskable Monetizable Auditable Lockable Aliasable Storable CounterCacheable Encryptable Anonymizable Duplicable ].freeze
Class Method Summary collapse
-
.config ⇒ Object
Gem-wide configuration (see Configuration), set from an initializer:.
- .configure_encryption {|encryption| ... } ⇒ Object
- .const_missing(name) ⇒ Object
-
.deprecator ⇒ Object
Gem-wide deprecator backing
alias_association ..., deprecated:(and any future deprecation surface). -
.encryption ⇒ Object
Gem-wide encryption configuration backing Models::Encryptable.
-
.filter_parameter_registry ⇒ Object
Live registry of sensitive field names (populated by Models::Encryptable) consulted at filter time by the proc ConcernsOnRails::Railtie appends to
config.filter_parameters. - .setup {|config| ... } ⇒ Object
Class Method Details
.config ⇒ Object
Gem-wide configuration (see Configuration), set from an initializer:
ConcernsOnRails.setup do |config|
config.cache_store = -> { Rails.cache }
end
111 112 113 |
# File 'lib/concerns_on_rails.rb', line 111 def self.config @config || @config_mutex.synchronize { @config ||= Configuration.new } end |
.configure_encryption {|encryption| ... } ⇒ Object
130 131 132 133 134 135 136 |
# File 'lib/concerns_on_rails.rb', line 130 def self.configure_encryption yield encryption if block_given? # Purge PBKDF2-derived keys built from the previous configuration; purely # memory hygiene (a changed key/salt is a different cache entry anyway). Support::Encryptor.reset_key_cache! encryption end |
.const_missing(name) ⇒ Object
20 21 22 23 24 25 26 |
# File 'lib/concerns_on_rails/legacy_aliases.rb', line 20 def self.const_missing(name) return super unless LEGACY_MODEL_ALIASES.include?(name) # Idempotent under a concurrent first reference: both threads pin the # same module object, and once pinned const_missing never fires again. const_set(name, Models.const_get(name)) end |
.deprecator ⇒ Object
Gem-wide deprecator backing alias_association ..., deprecated: (and any
future deprecation surface). A dedicated instance — not the global
ActiveSupport::Deprecation singleton, whose direct use is itself
deprecated on Rails 7.1+. Default behavior prints to $stderr; Rails apps
can re-route it (e.g. config.active_support.deprecation style):
ConcernsOnRails.deprecator.behavior = :log
100 101 102 103 104 |
# File 'lib/concerns_on_rails.rb', line 100 def self.deprecator @deprecator || @config_mutex.synchronize do @deprecator ||= ActiveSupport::Deprecation.new("2.0", "concerns_on_rails") end end |
.encryption ⇒ Object
Gem-wide encryption configuration backing Models::Encryptable. Memoized like
deprecator; the host app supplies the key (see ConcernsOnRails::Encryption):
ConcernsOnRails.configure_encryption do |c|
c.key = -> { Rails.application.credentials.dig(:encryption, :key) }
end
126 127 128 |
# File 'lib/concerns_on_rails.rb', line 126 def self.encryption @encryption || @config_mutex.synchronize { @encryption ||= Encryption::Config.new } end |
.filter_parameter_registry ⇒ Object
Live registry of sensitive field names (populated by Models::Encryptable)
consulted at filter time by the proc ConcernsOnRails::Railtie appends to
config.filter_parameters.
141 142 143 144 145 |
# File 'lib/concerns_on_rails.rb', line 141 def self.filter_parameter_registry @filter_parameter_registry || @config_mutex.synchronize do @filter_parameter_registry ||= Support::FilterParameterRegistry.new end end |
.setup {|config| ... } ⇒ Object
115 116 117 118 |
# File 'lib/concerns_on_rails.rb', line 115 def self.setup yield config if block_given? config end |