Module: Tramway::Decorators::ClassHelper

Included in:
ApplicationHelper
Defined in:
lib/tramway/decorators/class_helper.rb

Overview

Provides method to determine decorators classes

Class Method Summary collapse

Class Method Details

.decorator_class(object_or_array, decorator = nil, namespace = nil) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/tramway/decorators/class_helper.rb', line 9

def decorator_class(object_or_array, decorator = nil, namespace = nil)
  raise_error_if_object_empty object_or_array, decorator

  return decorator if decorator.present?

  begin
    class_name = decorator_class_name(object_or_array, namespace)
    class_name.constantize
  rescue NameError
    raise NameError, "You should define #{class_name} decorator class."
  end
end

.decorator_class_name(object_or_array_or_class, namespace) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/tramway/decorators/class_helper.rb', line 22

def decorator_class_name(object_or_array_or_class, namespace)
  klass = if Tramway::Decorators::CollectionDecorators.collection?(object_or_array_or_class)
            object_or_array_or_class.first.class
          elsif object_or_array_or_class.is_a?(Class)
            object_or_array_or_class
          else
            object_or_array_or_class.class
          end

  base_class_name = Tramway::Decorators::NameBuilder.default_decorator_class_name(klass)

  klass_name = namespace.present? ? "#{namespace.to_s.camelize}::#{base_class_name}" : base_class_name

  if klass_name.safe_constantize
    klass_name
  else
    raise NameError, "You should define #{klass_name} decorator class in app/decorators/ folder."
  end
end

.raise_error_if_object_empty(object_or_array, decorator) ⇒ Object

:reek:NilCheck { enabled: false }

Raises:

  • (ArgumentError)


43
44
45
46
47
48
49
# File 'lib/tramway/decorators/class_helper.rb', line 43

def raise_error_if_object_empty(object_or_array, decorator)
  return unless object_or_array.blank? && decorator.nil?

  text = 'You should pass object or array that is not empty OR provide a decorator class as a second argument'

  raise ArgumentError, text
end