Top Level Namespace

Defined Under Namespace

Modules: Visibilize, VisibilizeGenerator Classes: AttributeNotFoundError

Instance Method Summary collapse

Instance Method Details

#define_visibilize_method(column: :visible_id, type: :integer, unique: true, length: 8, lambda: nil) ⇒ Object



33
34
35
36
37
38
39
40
# File 'lib/visibilize.rb', line 33

def define_visibilize_method(column: :visible_id, type: :integer, unique: true, length: 8, lambda: nil)
  define_method(method_name(column)) do
    raise AttributeNotFoundError.new(column, self.class) unless has_attribute?(column)

    value = lambda&.call || VisibilizeGenerator.value(type, self.class, column, length, unique)
    write_attribute(column, value)
  end
end

#method_name(column) ⇒ Object



42
43
44
# File 'lib/visibilize.rb', line 42

def method_name(column)
  "visibilize_#{column}".to_sym
end

#visibilize(options = {}) ⇒ Object

Visibilize

Parameters:

  • options (Hash) (defaults to: {})

Options Hash (options):

  • :column (Symbol)

    The column to be generated

  • :callback (Symbol)

    The callback to be used (before_create, before_save, etc.)

  • :type (Symbol)

    The type of value to be generated (integer, string, uuid, etc.)

  • :unique (Boolean)

    Whether the value should be unique

  • :length (Integer)

    The length of the value to be generated

  • :lambda (Proc)

    A lambda to be used to generate the value



22
23
24
25
26
27
28
29
30
31
# File 'lib/visibilize.rb', line 22

def visibilize(options = {})
  options.reverse_merge!(column: :visible_id, callback: :before_create, type: :integer, unique: true, length: 8)

  # Define a method to fill the column with an appropiate value
  define_visibilize_method(**options.slice(:column, :type, :unique, :length, :lambda))

  # Create a callback to execute method
  callback_type, _, callback_timing = options[:callback].to_s.partition('_')
  set_callback callback_timing.to_sym, callback_type.to_sym, method_name(options[:column])
end