sevencan 0.1.5 → 0.1.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cab00c00fec7af86d2509a2b230efaa721bd7692
4
- data.tar.gz: 3f7dd30e8767d0e07507faf4da416e027a3a9b7a
3
+ metadata.gz: 606360b04132f4de7de36627b65179277b25f4ab
4
+ data.tar.gz: 08ba8054f132143faec82f2b4cabb5a0bb88e562
5
5
  SHA512:
6
- metadata.gz: 5f76d9618fc8520c5e1e434e305e5688c434a473111275ae7d88c1cc595c1d19659f6198446bf6e01ee33b9a346ea03b13895485ef8e84f5e0d90440912e3d90
7
- data.tar.gz: 56fa080533c6d972e6f0a08eb13e3b62d97c71acfd3fac1e64863d737634b85316021175e134bc2f9208fd7e26284532d86352504c5188fd8f4add43bdc2209d
6
+ metadata.gz: e3249251be80676b09a6f47bcdc9da176b0f8537fb7374306221b831cabb1b0d3cf554a6ad73e448d2f9e9109268d89a7da8fadb499ad4be914408b9c309e4eb
7
+ data.tar.gz: 79f8a63eed2372dc95e5c82366e611b1533af8b26f458eee5716461009d0b37701f3363da388a28e9d5f888e3fa373f294a56329273c1f2f15382c881a61c131
data/README.md CHANGED
@@ -59,6 +59,10 @@ class MyTopicAbilities
59
59
  can :review_topic
60
60
  end
61
61
 
62
+ abilities Proc.new { current_user.permissions.include?(:topic_manager) } do
63
+ can_manager_topic
64
+ end
65
+
62
66
 
63
67
  def can_manager_topic
64
68
  can :edit_topic, :destroy_topic
@@ -28,10 +28,8 @@ module Seven
28
28
  return @abilities if @abilities
29
29
  @abilities = []
30
30
 
31
- self.class.rule_procs.each do |field, scope, rule_proc|
32
- if field
33
- next if current_user.nil? || !scope.include?(current_user.public_send(field))
34
- end
31
+ self.class.rule_procs.each do |checker, rule_proc|
32
+ next if checker && (current_user.nil? || !instance_eval(&checker))
35
33
  instance_eval(&rule_proc)
36
34
  end
37
35
 
@@ -54,14 +52,27 @@ module Seven
54
52
  # Params:
55
53
  # field: current_user method
56
54
  # scope: run rule proc if Array(scope).include?(current_user#{field})
55
+ #
56
+ # or
57
+ #
58
+ # proc
57
59
  def abilities(field = nil, scope = nil, &rule_proc)
58
- if field
59
- raise Seven::ArgsError, 'Scope cannot be nil' unless scope
60
- formatted_scope = scope.is_a?(Array) ? scope : [scope]
60
+ checker = case field
61
+ when Proc
62
+ field
63
+ when Symbol, String
64
+ raise Seven::ArgsError, 'Scope cannot be nil' if scope.nil?
65
+ tmp_scope = scope.is_a?(Array) ? scope : [scope]
66
+ Proc.new { tmp_scope.include?(current_user.public_send(field)) }
67
+ when nil
68
+ nil
69
+ else
70
+ raise Seven::ArgsError, "Invalid field '#{field}'" if scope.nil?
61
71
  end
62
72
 
73
+
63
74
  @rule_procs ||= []
64
- @rule_procs << [field ? field.to_sym : nil, formatted_scope, rule_proc]
75
+ @rule_procs << [checker, rule_proc]
65
76
  end
66
77
  end
67
78
  end
data/lib/seven/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Seven
2
- VERSION = "0.1.5"
2
+ VERSION = "0.1.6"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sevencan
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - jiangzhi.xie
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-02-21 00:00:00.000000000 Z
11
+ date: 2017-02-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler