Customization examples of model classes
Private eazyBI
These customizations require basic Ruby on Rails framework knowledge.
Here are examples of how to customize some of the eazyBI standard model classes.
User password custom validation
Here is an example how to add additional validation for a user password (in this example – validate that is contains at least one digit). Create a file app/models/user_custom_validations.rb with the following content:
module UserCustomValidations
extend ActiveSupport::Concern
included do
validate :custom_validate_password_complexity
end
# will be called from an initializer
def self.include!
Rails.logger.info "Including UserCustomValidations in User class"
::User.send :include, self
end
private
def custom_validate_password_complexity
return if password.blank?
errors.add(:password, 'should contain at least one digit') unless password =~ /\d/
end
end
And in a custom initializer (see later) include UserCustomValidations.include! method call.
Save matching MDX queries in system events
Here is an example how to save in system events all MDX queries (that are generated by eazyBI reports) which match a specific regular expression (in this example, if it contains reference to a [Customers] dimension. Create a file app/models/system_event_extensions.rb with the following content:
module SystemEventExtensions
extend ActiveSupport::Concern
included do
alias_method_chain :save_query, :customers
end
# will be called from an initializer
def self.include!
Rails.logger.info "Including SystemEventExtensions in SystemEvent class"
::SystemEvent.send :include, self
end
def save_query_with_customers
if payload[:mdx] =~ /\[Customers\]/
save!
else
save_query_without_customers
end
end
end
And in a custom initializer (see later) include SystemEventExtensions.include! method call.
Include customizations in an initializer
Create a custom initializer config/initializers/include_customizations.rb with the following content:
# list customizations that should be included
customizations = [UserCustomValidations, SystemEventExtensions]
# in the production mode will be included on startup
if Rails.configuration.cache_classes
customizations.each(&:include!)
else # in the development mode need to include after code reloading
ActionDispatch::Reloader.to_prepare do
customizations.each(&:include!)
end
end