Module: Checkin::Dsl::Permissions::ClassMethods

Defined in:
lib/checkin/dsl/permissions.rb

Instance Method Summary collapse

Instance Method Details

#_actions_from_options(args, opts) ⇒ Object



154
155
156
# File 'lib/checkin/dsl/permissions.rb', line 154

def _actions_from_options(args, opts)
  [ opts[:to] ].flatten.compact.uniq.map {|a| "#{a}".to_sym}
end

#_add_rule_to_current_attributes_block(kind, *args) ⇒ Object



142
143
144
145
146
147
148
149
150
151
152
# File 'lib/checkin/dsl/permissions.rb', line 142

def _add_rule_to_current_attributes_block(kind, *args)
  opts    = args.extract_options!
  roles   = _roles_from_options(args, opts)

  rule = ::Checkin::Rule.new(kind, :resources => _current_options[:resources], :roles => roles, :actions_or_attributes => _current_options[:attributes], :scope => _current_options[:scope])

  @_current_attributes_block ||= []
  @_current_attributes_block << rule

  rule
end

#_add_rule_to_current_rule_block(kind, *args) ⇒ Object



121
122
123
124
125
126
127
128
129
130
131
132
# File 'lib/checkin/dsl/permissions.rb', line 121

def _add_rule_to_current_rule_block(kind, *args)
  opts    = args.extract_options!
  actions = _actions_from_options(args, opts)
  roles   = _roles_from_options(args, opts)

  rule = ::Checkin::Rule.new(kind, :resources => _current_options[:resources], :roles => roles, :actions_or_attributes => actions, :scope => _current_options[:scope])

  @_current_rule_block ||= []
  @_current_rule_block << rule

  rule
end

#_current_attributes_blockObject



134
135
136
# File 'lib/checkin/dsl/permissions.rb', line 134

def _current_attributes_block
  @_current_attributes_block ||= []
end

#_current_optionsObject



102
103
104
# File 'lib/checkin/dsl/permissions.rb', line 102

def _current_options
  @_current_options ||= ::ActiveSupport::HashWithIndifferentAccess.new
end

#_current_rule_blockObject



113
114
115
# File 'lib/checkin/dsl/permissions.rb', line 113

def _current_rule_block
  @_current_rule_block ||= []
end

#_reset_current_attributes_blockObject



138
139
140
# File 'lib/checkin/dsl/permissions.rb', line 138

def _reset_current_attributes_block
  @_current_attributes_block = []
end

#_reset_current_optionsObject



106
107
108
109
110
111
# File 'lib/checkin/dsl/permissions.rb', line 106

def _reset_current_options
  scope = _current_options[:scope]
  @_current_options = ::ActiveSupport::HashWithIndifferentAccess.new
  @_current_options[:scope] = scope
  @_current_options
end

#_reset_current_rule_blockObject



117
118
119
# File 'lib/checkin/dsl/permissions.rb', line 117

def _reset_current_rule_block
  @_current_rule_block = []
end

#_roles_from_options(args, opts) ⇒ Object



158
159
160
# File 'lib/checkin/dsl/permissions.rb', line 158

def _roles_from_options(args, opts)
  args.flatten.compact.uniq.map {|a| "#{a}".singularize.to_sym}
end

#add_attribute_rules_block(rules) ⇒ Object



53
54
55
56
# File 'lib/checkin/dsl/permissions.rb', line 53

def add_attribute_rules_block(rules)
  @attribute_rules ||= []
  @attribute_rules = rules + @attribute_rules
end

#add_rule_block(rules) ⇒ Object



44
45
46
47
# File 'lib/checkin/dsl/permissions.rb', line 44

def add_rule_block(rules)
  @rules ||= []
  @rules = rules + @rules
end

#allow(*args) ⇒ Object



86
87
88
89
90
91
92
# File 'lib/checkin/dsl/permissions.rb', line 86

def allow(*args)
  if _current_options[:mode] == :cascade
    _add_rule_to_current_rule_block(:allow, *args)
  elsif _current_options[:mode] == :attributes
    _add_rule_to_current_attributes_block(:allow, *args)
  end
end

#attribute_rulesObject



49
50
51
# File 'lib/checkin/dsl/permissions.rb', line 49

def attribute_rules
  @attribute_rules ||= []
end

#deny(*args) ⇒ Object



94
95
96
97
98
99
100
# File 'lib/checkin/dsl/permissions.rb', line 94

def deny(*args)
  if _current_options[:mode] == :cascade
    _add_rule_to_current_rule_block(:deny, *args)
  elsif _current_options[:mode] == :attributes
    _add_rule_to_current_attributes_block(:deny, *args)
  end
end

#permissions(*args) ⇒ Object



64
65
66
67
68
69
70
71
72
# File 'lib/checkin/dsl/permissions.rb', line 64

def permissions(*args)
  _current_options[:mode] = :cascade
  opts = args.extract_options!
  _current_options[:resources] = [opts[:for]].flatten.compact.uniq.map {|r| "#{r}".singularize.to_sym}
  yield
  add_rule_block(_current_rule_block)
  _reset_current_options
  _reset_current_rule_block
end

#permissions_to_set(*args) ⇒ Object



74
75
76
77
78
79
80
81
82
83
84
# File 'lib/checkin/dsl/permissions.rb', line 74

def permissions_to_set(*args)
  _current_options[:mode] = :attributes
  opts = args.extract_options!
  resources_options = opts[:on]
  _current_options[:resources] = [resources_options].flatten.compact.uniq.map {|r| "#{r}".singularize.to_sym}
  _current_options[:attributes] = args.flatten
  yield
  add_attribute_rules_block(_current_attributes_block)
  _reset_current_options
  _reset_current_attributes_block
end

#rulesObject



40
41
42
# File 'lib/checkin/dsl/permissions.rb', line 40

def rules
  @rules ||= []
end

#scope(scope, &block) ⇒ Object



58
59
60
61
62
# File 'lib/checkin/dsl/permissions.rb', line 58

def scope(scope, &block)
  _current_options[:scope] = scope
  yield
  _current_options.delete(:scope)
end