Sha256: ce3461f68165178ce2bd95a647d7f34da20de32bd22155f1a7816210a1695b40

Contents?: true

Size: 1.05 KB

Versions: 4

Compression:

Stored size: 1.05 KB

Contents

module IAmICan
  module Reflection
    extend ActiveSupport::Concern

    class_methods do
      def _reflect_of(key)
        _name = i_am_i_can&.send("#{key}_class")
        reflections.each do |name, reflection|
          return name if reflection.class_name == _name
        end; nil
      end

      %w[ subjects roles role_groups permissions ].each do |k|
        # User.__roles => 'stored_roles'
        define_method "__#{k}" do
          instance_variable_get(:"@__#{k}") or
              instance_variable_set(:"@__#{k}", _reflect_of(k.singularize))
        end

        # User.all._roles == User.all.stored_roles
        define_method "_#{k}" do
          send(send("__#{k}")) rescue (raise NoMethodError)
        end
      end
    end

    included do
      # user._roles => Association CollectionProxy, same as: `user.stored_roles`
      %w[ subjects roles role_groups permissions ].each do |k|
        delegate "__#{k}", to: self

        define_method "_#{k}" do
          send(send("__#{k}")) rescue (raise NoMethodError)
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
i_am_i_can-4.3.3 lib/i_am_i_can/support/reflection.rb
i_am_i_can-4.3.2 lib/i_am_i_can/support/reflection.rb
i_am_i_can-4.3.1 lib/i_am_i_can/support/reflection.rb
i_am_i_can-4.3.0 lib/i_am_i_can/support/reflection.rb