Class: ZeroRailsAdapter::PublishedSchema
- Inherits:
-
Object
- Object
- ZeroRailsAdapter::PublishedSchema
- Defined in:
- lib/zero_rails_adapter/published_schema.rb
Constant Summary collapse
- SUPPORTED_COLUMN_TYPES =
%i[ bigint boolean date datetime decimal enum float integer json jsonb string text time timestamp uuid ].freeze
- FORBIDDEN_COLUMN_NAMES =
%w[ access_token api_key api_key_digest device_token key_digest password password_digest password_hash refresh_token secret secret_key token token_digest ].freeze
- FORBIDDEN_TABLE_PREFIXES =
%w[ action_mailbox_ active_storage_ ].freeze
- FORBIDDEN_TABLE_NAMES =
%w[ user_login_change_keys user_lockouts user_password_reset_keys user_previous_password_hashes user_recovery_codes user_remember_keys user_verification_keys ].freeze
Instance Attribute Summary collapse
-
#models ⇒ Object
readonly
Returns the value of attribute models.
Instance Method Summary collapse
- #column_names_for(model) ⇒ Object
- #columns_for(model) ⇒ Object
- #empty? ⇒ Boolean
-
#initialize(mapping, zero_key: ZeroRailsAdapter.configuration.zero_key) ⇒ PublishedSchema
constructor
A new instance of PublishedSchema.
- #zero_keys_for(model) ⇒ Object
Constructor Details
#initialize(mapping, zero_key: ZeroRailsAdapter.configuration.zero_key) ⇒ PublishedSchema
Returns a new instance of PublishedSchema.
25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/zero_rails_adapter/published_schema.rb', line 25 def initialize(mapping, zero_key: ZeroRailsAdapter.configuration.zero_key) value = mapping.respond_to?(:call) ? mapping.call : mapping unless value.respond_to?(:to_h) raise UnsafePublicationError, "Published schema must be a model-to-columns mapping" end @zero_key = zero_key @columns_by_model = value.to_h.each_with_object({}) do |(model, names), result| validate_model!(model) result[model] = validate_columns!(model, names) end @models = @columns_by_model.keys.freeze end |
Instance Attribute Details
#models ⇒ Object (readonly)
Returns the value of attribute models.
23 24 25 |
# File 'lib/zero_rails_adapter/published_schema.rb', line 23 def models @models end |
Instance Method Details
#column_names_for(model) ⇒ Object
44 45 46 |
# File 'lib/zero_rails_adapter/published_schema.rb', line 44 def column_names_for(model) columns_for(model).map(&:name) end |
#columns_for(model) ⇒ Object
48 49 50 |
# File 'lib/zero_rails_adapter/published_schema.rb', line 48 def columns_for(model) @columns_by_model.fetch(model) end |
#empty? ⇒ Boolean
40 41 42 |
# File 'lib/zero_rails_adapter/published_schema.rb', line 40 def empty? models.empty? end |
#zero_keys_for(model) ⇒ Object
52 53 54 55 56 57 58 |
# File 'lib/zero_rails_adapter/published_schema.rb', line 52 def zero_keys_for(model) keys = Array(@zero_key.call(model)).compact.map(&:to_s) return keys.freeze if keys.any? label = model.name.presence || model.table_name raise UnsafePublicationError, "#{label} must define at least one Zero key" end |