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
- .build_klass_name(base_class_name, namespace) ⇒ Object
- .class_name_for_error(object_or_array, namespace) ⇒ Object
- .decorator_class(object_or_array, decorator = nil, namespace = nil) ⇒ Object
- .decorator_class_name(object_or_array_or_class, namespace) ⇒ Object
- .raise_error_if_object_empty(object_or_array, decorator) ⇒ Object
Class Method Details
.build_klass_name(base_class_name, namespace) ⇒ Object
44 45 46 47 48 49 50 51 52 |
# File 'lib/tramway/decorators/class_helper.rb', line 44 def build_klass_name(base_class_name, namespace) klass_name = namespace.present? ? "#{namespace.to_s.camelize}::#{base_class_name}" : base_class_name unless klass_name.safe_constantize raise NameError, "You should define #{klass_name} decorator class in app/decorators/ folder." end klass_name end |
.class_name_for_error(object_or_array, namespace) ⇒ Object
54 55 56 57 58 59 60 |
# File 'lib/tramway/decorators/class_helper.rb', line 54 def class_name_for_error(object_or_array, namespace) object = object_or_array.respond_to?(:first) ? object_or_array.first : object_or_array base_class_name = "#{object.class.name}Decorator" namespace.present? ? "#{namespace}::#{base_class_name}" : base_class_name end |
.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_for_error(object_or_array, namespace)} 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 |
# File 'lib/tramway/decorators/class_helper.rb', line 22 def decorator_class_name(object_or_array_or_class, namespace) 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 => klass base_class_name = Tramway::Decorators::NameBuilder.default_decorator_class_name(klass) build_klass_name(base_class_name, namespace) end |
.raise_error_if_object_empty(object_or_array, decorator) ⇒ Object
36 37 38 39 40 41 42 |
# File 'lib/tramway/decorators/class_helper.rb', line 36 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 |