Module: EasyRoles::ClassMethods

Defined in:
lib/easy_roles.rb

Instance Method Summary collapse

Instance Method Details

#easy_roles(name, options = {}) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/easy_roles.rb', line 8

def easy_roles(name, options = {})
  
  options[:method] ||= :serialize
  
  if options[:method] == :serialize
    serialize name.to_sym, Array
    respond_to?(:before_validation_on_create) ? before_validation_on_create(:make_default_roles) : before_validation(:make_default_roles, :on => :create)
  
    class_eval "      def has_role?(role)\n        \#{name}.include?(role)\n      end\n\n      def add_role(role)\n        clear_roles if self.\#{name}.nil?\n        has_role?(role) ? false : self.\#{name} << role\n      end\n    \n      def add_role!(role)\n        add_role(role)\n        self.save!\n      end\n\n      def remove_role(role)\n        self.\#{name}.delete(role)\n      end\n    \n      def remove_role!(role)\n        remove_role(role)\n        self.save!\n      end\n    \n      def clear_roles\n        self.\#{name} = []\n      end\n    \n      def make_default_roles\n        clear_roles if \#{name}.nil?\n      end\n    \n      private :make_default_roles\n    EOC\n  elsif options[:method] == :bitmask\n    \n    def_name = (name == :roles) ? :easy_roles : :roles\n    \n    class_eval <<-EOC\n      def self.list_roles\n        \#{name.to_s.upcase}\n      end\n    \n      def \#{def_name}=(roles)\n        self.\#{name} = (roles & \#{name.to_s.upcase}).map { |r| 2**\#{name.to_s.upcase}.index(r) }.sum\n      end\n\n      def \#{def_name}\n        \#{name.to_s.upcase}.reject { |r| ((\#{name} || 0) & 2**\#{name.to_s.upcase}.index(r)).zero? }\n      end\n      \n      def has_role?(role)\n        \#{def_name}.include?(role)\n      end\n      \n      def add_role(role)\n        new_roles = \#{def_name}.push(role).uniq\n        self.\#{def_name} = new_roles\n      end\n      \n      def add_role!(role)\n        add_role(role)\n        self.save!\n      end\n      \n      def remove_role(role)\n        new_roles = \#{def_name}\n        new_roles.delete(role)\n        self.\#{def_name} = new_roles\n      end\n      \n      def remove_role!(role)\n        remove_role(role)\n        self.save!\n      end\n      \n      def clear_roles\n        self.\#{name} = 0\n      end\n      \n      def clear_roles!\n        self.\#{name} = 0\n        self.save!\n      end\n    EOC\n  end\nend\n"