consent 0.3.1 → 0.4

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
- SHA1:
3
- metadata.gz: 83520d7812046af394c1c5828f8456e9759a1984
4
- data.tar.gz: 9d1998404b43857b3b8b4660ad88601fa96c5b01
2
+ SHA256:
3
+ metadata.gz: 81dca1628aeb1c52c3d9d3b892e3c148a9556bf2a2c0c5199ddd6c160155897a
4
+ data.tar.gz: 3e77560cbe9f555e8f8edd42186b3e61b5b2617aa5cc040255bbf9d42c25dbc2
5
5
  SHA512:
6
- metadata.gz: 57045196699fca95ab86ce0a5d293201d43a4287dbe621d46456afa6933ba71a55275a0dfd44aae090744536a48c03de0e6fd256b09c4e0e09a93ce106ed243b
7
- data.tar.gz: 1fab9a82df666af3127df1c9cb892f9e06fa0f842581841c82840150f46ff0753bff8fa587e4285d7fc7024e7912a69f946dc88e5af63dc82952a593b40cefda
6
+ metadata.gz: 5a4b2b6f8d4b797fbe2b7ce0c272f2bd968fcfb059f0545ff31b230ecd0ea62bf0a198940160dab1c494295f08b149fb0b553903896089a0ff93fe8ab45bdce2
7
+ data.tar.gz: 639e12a757f9708cb063d20e77ebbf3d89029811f73e1c7b8730437029aab729d2c4edfa296ce208860c8eca96781b24dd1460425a3d77d5831c5d45166e492a
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.5.0
data/TODO.md ADDED
@@ -0,0 +1 @@
1
+ * DSL validate Consent state
data/consent.gemspec CHANGED
@@ -19,7 +19,7 @@ Gem::Specification.new do |spec|
19
19
 
20
20
  spec.add_development_dependency 'activesupport', '~> 3.2.22'
21
21
  spec.add_development_dependency 'cancancan', '~> 1.15.0'
22
- spec.add_development_dependency 'bundler', '~> 1.12'
22
+ spec.add_development_dependency 'bundler', '~> 2.0'
23
23
  spec.add_development_dependency 'rake', '~> 10.0'
24
24
  spec.add_development_dependency 'rspec', '~> 3.0'
25
25
  end
data/lib/consent.rb CHANGED
@@ -16,7 +16,28 @@ module Consent
16
16
  end
17
17
 
18
18
  def self.subjects
19
- @subjects ||= {}
19
+ @subjects ||= []
20
+ end
21
+
22
+ def self.find_subjects(subject_key)
23
+ @subjects.find do |subject|
24
+ subject.key.eql?(subject_key)
25
+ end
26
+ end
27
+
28
+ def self.find_action(subject_key, action_key)
29
+ Consent.find_subjects(subject_key)
30
+ .map(&:actions).flatten
31
+ .find do |action|
32
+ action.key.eql?(action_key)
33
+ end
34
+ end
35
+
36
+ def self.find_view(subject_key, view_key)
37
+ views = Consent.find_subjects(subject_key)
38
+ .map{|subject| subject.views}
39
+ .reduce({}, &:merge)
40
+ views[view_key]
20
41
  end
21
42
 
22
43
  def self.load_subjects!(paths)
@@ -26,7 +47,7 @@ module Consent
26
47
 
27
48
  def self.define(key, label, options = {}, &block)
28
49
  defaults = options.fetch(:defaults, {})
29
- subjects[key] = Subject.new(key, label).tap do |subject|
50
+ subjects << Subject.new(key, label).tap do |subject|
30
51
  DSL.build(subject, defaults, &block)
31
52
  end
32
53
  end
@@ -7,7 +7,7 @@ module Consent
7
7
  end
8
8
 
9
9
  def each(&block)
10
- Consent.subjects.values.each do |subject|
10
+ Consent.subjects.each do |subject|
11
11
  subject.actions.map do |action|
12
12
  map_permission subject, action
13
13
  end.compact.each(&block)
data/lib/consent/rspec.rb CHANGED
@@ -4,32 +4,18 @@ module Consent
4
4
  module Rspec
5
5
  extend RSpec::Matchers::DSL
6
6
 
7
- def get_view(subject_key, view_key)
8
- Consent.subjects[subject_key].try(:views).try(:[], view_key)
9
- end
10
-
11
- def get_action(subject_key, action_key)
12
- (Consent.subjects[subject_key].try(:actions) || []).find do |action|
13
- action.key.eql?(action_key)
14
- end
15
- end
16
-
17
- def get_action_view_keys(subject_key, action_key)
18
- (get_action(subject_key, action_key).try(:options).try(:[], :views) || []).map(&:key)
19
- end
20
-
21
7
  matcher :consent_action do |action_key|
22
8
  chain :with_views do |*views|
23
9
  @views = views
24
10
  end
25
11
 
26
12
  match do |subject_key|
27
- action = get_action(subject_key, action_key)
13
+ action = Consent.find_action(subject_key, action_key)
28
14
  action && @views ? action.view_keys.sort.eql?(@views.sort) : !action.nil?
29
15
  end
30
16
 
31
17
  failure_message do |subject_key|
32
- action = get_action(subject_key, action_key)
18
+ action = Consent.find_action(subject_key, action_key)
33
19
  message = "expected %s (%s) to provide action %s" % [
34
20
  subject_key.to_s, subject.class, action_key
35
21
  ]
@@ -48,12 +34,12 @@ module Consent
48
34
  end
49
35
 
50
36
  match do |subject_key|
51
- view = get_view(subject_key, view_key)
37
+ view = Consent.find_view(subject_key, view_key)
52
38
  conditions ? view.try(:conditions, *@context).eql?(conditions) : !view.nil?
53
39
  end
54
40
 
55
41
  failure_message do |subject_key|
56
- view = get_view(subject_key, view_key)
42
+ view = Consent.find_view(subject_key, view_key)
57
43
  message = "expected %s (%s) to provide view %s with %p, but" % [
58
44
  subject_key.to_s, subject.class, view_key, conditions
59
45
  ]
@@ -62,7 +48,7 @@ module Consent
62
48
  actual_conditions = view.conditions(*@context)
63
49
  '%s conditions are %p' % [message, actual_conditions]
64
50
  else
65
- actual_views = Consent.subjects[subject_key].try(:views).try(:keys)
51
+ actual_views = Consent.find_subjects(subject_key).map(&:views).map(&:keys).flatten
66
52
  '%s available views are %p' % [message, actual_views]
67
53
  end
68
54
  end
@@ -1,3 +1,3 @@
1
1
  module Consent
2
- VERSION = '0.3.1'.freeze
2
+ VERSION = '0.4'.freeze
3
3
  end
@@ -7,6 +7,8 @@ module Consent
7
7
  template "permissions.rb.erb", "app/permissions/#{file_path}.rb", assigns: {
8
8
  description: description
9
9
  }
10
+
11
+ template "permissions_spec.rb.erb", "spec/permissions/#{file_path}_spec.rb"
10
12
  end
11
13
  end
12
14
  end
@@ -0,0 +1,18 @@
1
+ require 'rails_helper'
2
+
3
+ describe '<%= @name %> permissions', type: :permissions do
4
+ subject { <%= @name %> }
5
+ # Define the user to be spec'ed
6
+ #
7
+ # let(:user) { double(entity_ids: [1, 2]) }
8
+
9
+ # Define consent expectations for views
10
+ #
11
+ # it { is_expected.to consent_view(:entity, {entity_id: [1, 2]}).to(user) }
12
+
13
+ # Define consent expectations for actions
14
+ #
15
+ # it { is_expected.to consent_action(:read) }
16
+ # it { is_expected.to consent_action(:update) }
17
+ # it { is_expected.to consent_action(:create) }
18
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: consent
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: '0.4'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Carlos Palhares
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-11-08 00:00:00.000000000 Z
11
+ date: 2019-03-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '1.12'
47
+ version: '2.0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '1.12'
54
+ version: '2.0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rake
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -89,10 +89,12 @@ extra_rdoc_files: []
89
89
  files:
90
90
  - ".gitignore"
91
91
  - ".rspec"
92
+ - ".ruby-version"
92
93
  - ".travis.yml"
93
94
  - Gemfile
94
95
  - README.md
95
96
  - Rakefile
97
+ - TODO.md
96
98
  - bin/console
97
99
  - bin/setup
98
100
  - consent.gemspec
@@ -109,6 +111,7 @@ files:
109
111
  - lib/consent/view.rb
110
112
  - lib/generators/consent/permissions_generator.rb
111
113
  - lib/generators/consent/templates/permissions.rb.erb
114
+ - lib/generators/consent/templates/permissions_spec.rb.erb
112
115
  homepage:
113
116
  licenses: []
114
117
  metadata: {}
@@ -128,7 +131,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
128
131
  version: '0'
129
132
  requirements: []
130
133
  rubyforge_project:
131
- rubygems_version: 2.4.8
134
+ rubygems_version: 2.7.3
132
135
  signing_key:
133
136
  specification_version: 4
134
137
  summary: Consent