Module: Rabl::Helpers
- Included in:
- Partials
- Defined in:
- lib/rabl/helpers.rb
Constant Summary collapse
- KNOWN_OBJECT_CLASSES =
Set of class names known to be objects, not collections
['Struct']
Instance Method Summary collapse
-
#collection_root_name ⇒ Object
Returns the root for the collection Sets the name of the collection i.e “people” => { “people” : [] }.
-
#context_scope ⇒ Object
Returns the scope wrapping this engine, used for retrieving data, invoking methods, etc In Rails, this is the controller and in Padrino this is the request context.
-
#data_name(data_token) ⇒ Object
data_name(data) => “user” data_name(@user => :person) => :person data_name(@users) => :user data_name() => “users” data_name([]) => “array”.
-
#data_object(data) ⇒ Object
data_object(data) => <AR Object> data_object(@user => :person) => @user data_object(:user => :person) => @_object.send(:user).
-
#data_object_attribute(data) ⇒ Object
data_object_attribute(data) => @_object.send(data).
-
#determine_object_root(data_token, data_name = nil, include_root = true) ⇒ Object
Returns the object rootname based on if the root should be included Can be called with data as a collection or object determine_object_root(@user, :user, true) => “user” determine_object_root(@user, :person) => “person” determine_object_root([@user, @user]) => “user”.
-
#escape_output(data) ⇒ Object
Escape output if configured and supported.
-
#fetch_result_from_cache(cache_key, cache_options = nil, &block) ⇒ Object
Fetches a key from the cache and stores rabl template result otherwise fetch_from_cache(‘some_key’) { …rabl template result… }.
-
#is_collection?(obj) ⇒ Boolean
Returns true if the obj is a collection of items is_collection?(@user) => false is_collection?([]) => true.
-
#is_name_value?(val) ⇒ Boolean
Returns true if the value is a name value (symbol or string).
-
#is_object?(obj) ⇒ Boolean
Returns true if obj is not a collection is_object?(@user) => true is_object?([]) => false is_object?({}) => false.
-
#object_root_name ⇒ Object
Returns the root (if any) name for an object within a collection Sets the name of the object i.e “person” => { “users” : [{ “person” : {} }] }.
-
#template_cache_configured? ⇒ Boolean
Returns true if the cache has been enabled for the application.
Instance Method Details
#collection_root_name ⇒ Object
Returns the root for the collection Sets the name of the collection i.e “people”
=> { "people" : [] }
97 98 99 |
# File 'lib/rabl/helpers.rb', line 97 def collection_root_name defined?(@_collection_name) ? @_collection_name : nil end |
#context_scope ⇒ Object
Returns the scope wrapping this engine, used for retrieving data, invoking methods, etc In Rails, this is the controller and in Padrino this is the request context
83 84 85 |
# File 'lib/rabl/helpers.rb', line 83 def context_scope defined?(@_scope) ? @_scope : nil end |
#data_name(data_token) ⇒ Object
data_name(data) => “user” data_name(@user => :person) => :person data_name(@users) => :user data_name() => “users” data_name([]) => “array”
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/rabl/helpers.rb', line 26 def data_name(data_token) return unless data_token # nil or false return data_token.values.first if data_token.is_a?(Hash) # @user => :user data = data_object(data_token) if is_collection?(data) # data is a collection object_name = data.table_name if data.respond_to?(:table_name) if !object_name && data.respond_to?(:first) first = data.first object_name = data_name(first).to_s.pluralize if first.present? end object_name ||= data_token if data_token.is_a?(Symbol) object_name elsif is_object?(data) # data is an object object_name = object_root_name if object_root_name object_name ||= data if data.is_a?(Symbol) object_name ||= collection_root_name.to_s.singularize if collection_root_name object_name ||= data.class.respond_to?(:model_name) ? data.class.model_name.element : data.class.to_s.downcase object_name else data_token end end |
#data_object(data) ⇒ Object
data_object(data) => <AR Object> data_object(@user => :person) => @user data_object(:user => :person) => @_object.send(:user)
11 12 13 14 |
# File 'lib/rabl/helpers.rb', line 11 def data_object(data) data = (data.is_a?(Hash) && data.keys.size == 1) ? data.keys.first : data data.is_a?(Symbol) && defined?(@_object) && @_object ? @_object.__send__(data) : data end |
#data_object_attribute(data) ⇒ Object
data_object_attribute(data) => @_object.send(data)
17 18 19 |
# File 'lib/rabl/helpers.rb', line 17 def data_object_attribute(data) escape_output @_object.__send__(data) end |
#determine_object_root(data_token, data_name = nil, include_root = true) ⇒ Object
Returns the object rootname based on if the root should be included Can be called with data as a collection or object determine_object_root(@user, :user, true) => “user” determine_object_root(@user, :person) => “person” determine_object_root([@user, @user]) => “user”
54 55 56 57 58 59 60 61 62 |
# File 'lib/rabl/helpers.rb', line 54 def determine_object_root(data_token, data_name=nil, include_root=true) return if object_root_name == false root_name = data_name.to_s if include_root if is_object?(data_token) || data_token.nil? root_name elsif is_collection?(data_token) object_root_name || (root_name.singularize if root_name) end end |
#escape_output(data) ⇒ Object
Escape output if configured and supported
123 124 125 |
# File 'lib/rabl/helpers.rb', line 123 def escape_output(data) (data && defined?(ERB::Util.h) && Rabl.configuration.escape_all_output) ? ERB::Util.h(data) : data end |
#fetch_result_from_cache(cache_key, cache_options = nil, &block) ⇒ Object
Fetches a key from the cache and stores rabl template result otherwise fetch_from_cache(‘some_key’) { …rabl template result… }
108 109 110 111 |
# File 'lib/rabl/helpers.rb', line 108 def fetch_result_from_cache(cache_key, =nil, &block) = ActiveSupport::Cache.(cache_key, :rabl) Rabl.configuration.cache_engine.fetch(, , &block) end |
#is_collection?(obj) ⇒ Boolean
Returns true if the obj is a collection of items is_collection?(@user) => false is_collection?([]) => true
76 77 78 79 |
# File 'lib/rabl/helpers.rb', line 76 def is_collection?(obj) obj && data_object(obj).respond_to?(:map) && data_object(obj).respond_to?(:each) && (KNOWN_OBJECT_CLASSES & obj.class.ancestors.map(&:name)).empty? end |
#is_name_value?(val) ⇒ Boolean
Returns true if the value is a name value (symbol or string)
102 103 104 |
# File 'lib/rabl/helpers.rb', line 102 def is_name_value?(val) val.is_a?(String) || val.is_a?(Symbol) end |
#is_object?(obj) ⇒ Boolean
Returns true if obj is not a collection is_object?(@user) => true is_object?([]) => false is_object?({}) => false
68 69 70 71 |
# File 'lib/rabl/helpers.rb', line 68 def is_object?(obj) obj && (!data_object(obj).respond_to?(:map) || !data_object(obj).respond_to?(:each) || (KNOWN_OBJECT_CLASSES & obj.class.ancestors.map(&:name)).any?) end |
#object_root_name ⇒ Object
Returns the root (if any) name for an object within a collection Sets the name of the object i.e “person”
> { “users” : [{ “person” : {} }] }
90 91 92 |
# File 'lib/rabl/helpers.rb', line 90 def object_root_name defined?(@_object_root_name) ? @_object_root_name : nil end |
#template_cache_configured? ⇒ Boolean
Returns true if the cache has been enabled for the application
114 115 116 117 118 119 120 |
# File 'lib/rabl/helpers.rb', line 114 def template_cache_configured? if defined?(Rails) defined?(ActionController::Base) && ActionController::Base.perform_caching else Rabl.configuration.perform_caching end end |