Sha256: aab265d94ebb9d202fe258086f49ae66d5c711197efd434907f479342744d69c

Contents?: true

Size: 1.41 KB

Versions: 4

Compression:

Stored size: 1.41 KB

Contents

# @author Kristian Mandrup
#
# Many role storage for storing (embedding) multiple Role instances in a list on the role subject
#
# @note all methods potentially operate directly on values in the data store
#
module TroleGroups::Storage
  class EmbedMany < BaseMany

    # constructor
    # @param [Object] the role subject
    def initialize rolegroupsubject
      super
    end

    def rolegroups_to_embed *rolegroups
      rolegroups.flatten.inject([]) do |res, role| 
        res << create_role(role)
        res
      end
    end           

    # display the rolegroups as a list of symbols
    # @return [Array<Symbol>] rolegroups list
    def display_rolegroups
      return [] if !ds_field_value?
      ds_field_value.map{|rolegroup| rolegroup.name.to_sym }
    end

    # is it set?
    def ds_field_value?
      ds_field_value && !ds_field_value.empty?
    end    
  
    # saves the rolegroups for the role subject in the data store
    # @param [Array<Symbol>] rolegroups list    
    def set_rolegroups *rolegroups
      # creates and embeds new Role instances from symbols
      set_ds_field rolegroups_to_embed(*rolegroups)
    end  

    # clears the role of the user in the data store
    def clear!
      set_ds_field []
    end  
  
    # sets the role to its default state
    def set_default_role!
      clear!
    end
    
    protected
    
    def create_role name
      rolegroup_model.create name
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
troles-0.6.1 lib/trole_groups/storage/embed_many.rb
troles-0.6.0 lib/trole_groups/storage/embed_many.rb
troles-0.5.2 lib/trole_groups/storage/embed_many.rb
troles-0.5.1 lib/trole_groups/storage/embed_many.rb