sevencan 0.1.5 → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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