Sha256: eff01204e9af8abf61c96d5a9b86a251b208d341ed2680c0209b477fef9b557a

Contents?: true

Size: 1.62 KB

Versions: 12

Compression:

Stored size: 1.62 KB

Contents

module Praxis
  module Extensions
    module FieldExpansion
      extend ActiveSupport::Concern

      included do
        Praxis::ActionDefinition.send(:include, ActionDefinitionExtension)
      end


      def expanded_fields
        @expansion ||= request.action.expanded_fields(self.request, self.media_type)
      end


      module ActionDefinitionExtension
        extend ActiveSupport::Concern

        def expanded_fields(request, media_type)
          use_fields = self.params && self.params.attributes.key?(:fields)
          use_view = self.params && self.params.attributes.key?(:view)

          # Determine what, if any, fields to display.
          fields = if use_fields
            request.params.fields.fields
          else
            true
          end

          # Determine the view that COULD be applicable.
          view = if use_view && (view_name = request.params.view)
            media_type.views[view_name]
          else
            media_type.views[:default]
          end

          expandable = if fields == true
            # We want to show ALL of the available fields.
            # This can never be applied to the type (it's likely infinitely recursive).
            # So use view_name determimed above.
            view
          else
            # We want to show SOME of fields available on a view or type.
            if use_view && request.params.view
              # Use the requested view.
              view
            else
              # Use the type.
              media_type
            end
          end

          Praxis::FieldExpander.expand(expandable,fields)
        end
      end

    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
praxis-2.0.pre.9 lib/praxis/extensions/field_expansion.rb
praxis-2.0.pre.8 lib/praxis/extensions/field_expansion.rb
praxis-2.0.pre.7 lib/praxis/extensions/field_expansion.rb
praxis-2.0.pre.6 lib/praxis/extensions/field_expansion.rb
praxis-2.0.pre.5 lib/praxis/extensions/field_expansion.rb
praxis-2.0.pre.4 lib/praxis/extensions/field_expansion.rb
praxis-2.0.pre.3 lib/praxis/extensions/field_expansion.rb
praxis-2.0.pre.2 lib/praxis/extensions/field_expansion.rb
praxis-2.0.pre.1 lib/praxis/extensions/field_expansion.rb
praxis-0.22.pre.2 lib/praxis/extensions/field_expansion.rb
praxis-0.22.pre.1 lib/praxis/extensions/field_expansion.rb
praxis-0.21 lib/praxis/extensions/field_expansion.rb