scim-kit 0.4.0 → 0.5.0

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
  SHA256:
3
- metadata.gz: a34f8dee8da1be1e6851d91b193a1d5ea0f2b14bddab9b36ee8141ea219abeaf
4
- data.tar.gz: 3fe74aa226fc42b5188e5c5dc2699aeb3c8fb8d405829fd7eade63a92ca02953
3
+ metadata.gz: 0b60b3e63ba6e9f5c06f8599ab0bd96bc240368de942e0a1794f9a9a5fff3ad6
4
+ data.tar.gz: d4eba2104e2a74c0e0b392307441c4488daae459cb93f68543cb9f5381963613
5
5
  SHA512:
6
- metadata.gz: a35746b0546fe4661e46fbb07958ee33a753744bc4041c74d4435c1df4c6778fac266266a0e727f8c5e40cacc5c3f5f783f875b22b5dd83966081557b34b1d2c
7
- data.tar.gz: 0d4ccca792c5fcebab61eefda0a38e2ed2d47d6a43d9eb39b219f864a3f096de575670628ef0a15744357d22a7eb84f3b82518409933413f936002f7e2519d80
6
+ metadata.gz: 012120f9e716e26a55f4fbaf62c4801013a8ce15f107e5a586a8d6088c343b1d67da8837fe62984e197a5bd3c800d805e280d5b9edc04225b6f2fee39cf7bfc7
7
+ data.tar.gz: 76da061e7b3a041efe01bce32625efbcd6bd7a62c383f3c5404e9d83d45678b8ab314ec50f0251e604f3656df5af73a94aa10c8b3b008df65397259344a9384a
@@ -9,7 +9,7 @@ AllCops:
9
9
  - 'vendor/**/*'
10
10
  TargetRubyVersion: 2.5
11
11
 
12
- Layout/IndentFirstArrayElement:
12
+ Layout/FirstArrayElementIndentation:
13
13
  EnforcedStyle: consistent
14
14
 
15
15
  Metrics/BlockLength:
@@ -3,6 +3,7 @@ sudo: false
3
3
  language: ruby
4
4
  cache: bundler
5
5
  rvm:
6
- - 2.5.5
7
- - 2.6.3
6
+ - 2.5.7
7
+ - 2.6.5
8
+ - 2.7.0
8
9
  before_install: gem install bundler -v 1.17.1
@@ -1,4 +1,4 @@
1
- Version 0.4.0
1
+ Version 0.5.0
2
2
 
3
3
  # Changelog
4
4
  All notable changes to this project will be documented in this file.
@@ -9,7 +9,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
9
9
  ## [Unreleased]
10
10
  - nil
11
11
 
12
+ ## [0.5.0] - 2020-01-21
13
+ ### Added
14
+ - Add API to traverse a SCIM filter AST
15
+
12
16
  ## [0.4.0] - 2019-06-15
17
+ ### Added
13
18
  - add implementation of SCIM 2.0 filter parser. [RFC-7644](https://tools.ietf.org/html/rfc7644#section-3.4.2.2)
14
19
 
15
20
  ## [0.3.2] - 2019-02-23
@@ -39,7 +44,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
39
44
  - \_assign does not coerce values by default.
40
45
  - errors are merged together instead of overwritten during attribute validation.
41
46
 
42
- [Unreleased]: https://github.com/mokhan/scim-kit/compare/v0.4.0...HEAD
47
+ [Unreleased]: https://github.com/mokhan/scim-kit/compare/v0.5.0...HEAD
48
+ [0.4.0]: https://github.com/mokhan/scim-kit/compare/v0.4.0...v0.5.0
43
49
  [0.4.0]: https://github.com/mokhan/scim-kit/compare/v0.3.2...v0.4.0
44
50
  [0.3.2]: https://github.com/mokhan/scim-kit/compare/v0.3.1...v0.3.2
45
51
  [0.3.1]: https://github.com/mokhan/scim-kit/compare/v0.3.0...v0.3.1
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- scim-kit (0.4.0)
4
+ scim-kit (0.5.0)
5
5
  activemodel (>= 5.2.0)
6
6
  net-hippie (~> 0.2)
7
7
  parslet (~> 1.8)
@@ -11,77 +11,79 @@ PATH
11
11
  GEM
12
12
  remote: https://rubygems.org/
13
13
  specs:
14
- activemodel (5.2.3)
15
- activesupport (= 5.2.3)
16
- activesupport (5.2.3)
14
+ activemodel (6.0.2.1)
15
+ activesupport (= 6.0.2.1)
16
+ activesupport (6.0.2.1)
17
17
  concurrent-ruby (~> 1.0, >= 1.0.2)
18
18
  i18n (>= 0.7, < 2)
19
19
  minitest (~> 5.1)
20
20
  tzinfo (~> 1.1)
21
- addressable (2.6.0)
22
- public_suffix (>= 2.0.2, < 4.0)
21
+ zeitwerk (~> 2.2)
22
+ addressable (2.7.0)
23
+ public_suffix (>= 2.0.2, < 5.0)
23
24
  ast (2.4.0)
24
25
  bundler-audit (0.6.1)
25
26
  bundler (>= 1.2.0, < 3)
26
27
  thor (~> 0.18)
27
- byebug (11.0.1)
28
+ byebug (11.1.0)
28
29
  concurrent-ruby (1.1.5)
29
30
  crack (0.4.3)
30
31
  safe_yaml (~> 1.0.0)
31
32
  diff-lcs (1.3)
32
- ffaker (2.11.0)
33
- hashdiff (0.4.0)
34
- i18n (1.6.0)
33
+ ffaker (2.13.0)
34
+ hashdiff (1.0.0)
35
+ i18n (1.8.2)
35
36
  concurrent-ruby (~> 1.0)
36
- jaro_winkler (1.5.2)
37
+ jaro_winkler (1.5.4)
37
38
  jbuilder (2.9.1)
38
39
  activesupport (>= 4.2.0)
39
- minitest (5.11.3)
40
- net-hippie (0.2.6)
41
- parallel (1.17.0)
42
- parser (2.6.3.0)
40
+ minitest (5.14.0)
41
+ net-hippie (0.3.1)
42
+ parallel (1.19.1)
43
+ parser (2.7.0.2)
43
44
  ast (~> 2.4.0)
44
45
  parslet (1.8.2)
45
- public_suffix (3.1.0)
46
+ public_suffix (4.0.3)
46
47
  rainbow (3.0.0)
47
- rake (10.5.0)
48
- rspec (3.8.0)
49
- rspec-core (~> 3.8.0)
50
- rspec-expectations (~> 3.8.0)
51
- rspec-mocks (~> 3.8.0)
52
- rspec-core (3.8.1)
53
- rspec-support (~> 3.8.0)
54
- rspec-expectations (3.8.4)
48
+ rake (13.0.1)
49
+ rspec (3.9.0)
50
+ rspec-core (~> 3.9.0)
51
+ rspec-expectations (~> 3.9.0)
52
+ rspec-mocks (~> 3.9.0)
53
+ rspec-core (3.9.1)
54
+ rspec-support (~> 3.9.1)
55
+ rspec-expectations (3.9.0)
55
56
  diff-lcs (>= 1.2.0, < 2.0)
56
- rspec-support (~> 3.8.0)
57
- rspec-mocks (3.8.1)
57
+ rspec-support (~> 3.9.0)
58
+ rspec-mocks (3.9.1)
58
59
  diff-lcs (>= 1.2.0, < 2.0)
59
- rspec-support (~> 3.8.0)
60
- rspec-support (3.8.2)
61
- rubocop (0.71.0)
60
+ rspec-support (~> 3.9.0)
61
+ rspec-support (3.9.2)
62
+ rubocop (0.79.0)
62
63
  jaro_winkler (~> 1.5.1)
63
64
  parallel (~> 1.10)
64
- parser (>= 2.6)
65
+ parser (>= 2.7.0.1)
65
66
  rainbow (>= 2.2.2, < 4.0)
66
67
  ruby-progressbar (~> 1.7)
67
68
  unicode-display_width (>= 1.4.0, < 1.7)
68
- rubocop-rspec (1.33.0)
69
- rubocop (>= 0.60.0)
69
+ rubocop-rspec (1.37.1)
70
+ rubocop (>= 0.68.1)
70
71
  ruby-progressbar (1.10.1)
71
72
  safe_yaml (1.0.5)
72
73
  thor (0.20.3)
73
74
  thread_safe (0.3.6)
74
- tilt (2.0.9)
75
+ tilt (2.0.10)
75
76
  tilt-jbuilder (0.7.1)
76
77
  jbuilder
77
78
  tilt (>= 1.3.0, < 3)
78
- tzinfo (1.2.5)
79
+ tzinfo (1.2.6)
79
80
  thread_safe (~> 0.1)
80
- unicode-display_width (1.6.0)
81
- webmock (3.6.0)
81
+ unicode-display_width (1.6.1)
82
+ webmock (3.8.0)
82
83
  addressable (>= 2.3.6)
83
84
  crack (>= 0.3.2)
84
85
  hashdiff (>= 0.4.0, < 2.0.0)
86
+ zeitwerk (2.2.2)
85
87
 
86
88
  PLATFORMS
87
89
  ruby
@@ -91,7 +93,7 @@ DEPENDENCIES
91
93
  bundler-audit (~> 0.6)
92
94
  byebug
93
95
  ffaker (~> 2.7)
94
- rake (~> 10.0)
96
+ rake (~> 13.0)
95
97
  rspec (~> 3.0)
96
98
  rubocop (~> 0.52)
97
99
  rubocop-rspec (~> 1.22)
@@ -20,6 +20,7 @@ module Scim
20
20
  module Kit
21
21
  class Error < StandardError; end
22
22
  class UnknownAttributeError < Error; end
23
+ class NotImplementedError < Error; end
23
24
  TYPE_ERROR = ArgumentError.new(:type)
24
25
 
25
26
  def self.logger
@@ -12,6 +12,8 @@ require 'scim/kit/v2/mutability'
12
12
  require 'scim/kit/v2/resource'
13
13
  require 'scim/kit/v2/error'
14
14
  require 'scim/kit/v2/filter'
15
+ require 'scim/kit/v2/filter/node'
16
+ require 'scim/kit/v2/filter/visitor'
15
17
  require 'scim/kit/v2/resource_type'
16
18
  require 'scim/kit/v2/returned'
17
19
  require 'scim/kit/v2/schema'
@@ -125,6 +125,12 @@ module Scim
125
125
  rule(:underscore) { str('_') }
126
126
  rule(:version) { digit >> dot >> digit }
127
127
  rule(:assign) { str('=') }
128
+
129
+ class << self
130
+ def parse(filter)
131
+ Node.new(new.parse(filter))
132
+ end
133
+ end
128
134
  end
129
135
  end
130
136
  end
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'parslet'
4
+
5
+ module Scim
6
+ module Kit
7
+ module V2
8
+ class Filter
9
+ # @private
10
+ class Node
11
+ def initialize(hash)
12
+ @hash = hash
13
+ end
14
+
15
+ def operator
16
+ self[:operator].to_sym
17
+ end
18
+
19
+ def attribute
20
+ self[:attribute].to_s
21
+ end
22
+
23
+ def value
24
+ self[:value].to_s[1..-2]
25
+ end
26
+
27
+ def not?
28
+ @hash.key?(:not)
29
+ end
30
+
31
+ def accept(visitor)
32
+ visitor.visit(self)
33
+ end
34
+
35
+ def left
36
+ self.class.new(self[:left])
37
+ end
38
+
39
+ def right
40
+ self.class.new(self[:right])
41
+ end
42
+
43
+ def inspect
44
+ @hash.inspect
45
+ end
46
+
47
+ private
48
+
49
+ def [](key)
50
+ @hash[key]
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,98 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'parslet'
4
+
5
+ module Scim
6
+ module Kit
7
+ module V2
8
+ class Filter
9
+ # @private
10
+ class Visitor
11
+ VISITORS = {
12
+ and: :visit_and,
13
+ co: :visit_contains,
14
+ eq: :visit_equals,
15
+ ew: :visit_ends_with,
16
+ ge: :visit_greater_than_equals,
17
+ gt: :visit_greater_than,
18
+ le: :visit_less_than_equals,
19
+ lt: :visit_less_than,
20
+ ne: :visit_not_equals,
21
+ or: :visit_or,
22
+ pr: :visit_presence,
23
+ sw: :visit_starts_with
24
+ }.freeze
25
+
26
+ def visit(node)
27
+ visitor_for(node).call(node)
28
+ end
29
+
30
+ protected
31
+
32
+ def visitor_for(node)
33
+ method(VISITORS.fetch(node.operator, :visit_unknown))
34
+ end
35
+
36
+ def visit_and(node)
37
+ visit(node.left).merge(visit(node.right))
38
+ raise error_for(:visit_and)
39
+ end
40
+
41
+ def visit_or(_node)
42
+ raise error_for(:visit_or)
43
+ end
44
+
45
+ def visit_equals(_node)
46
+ raise error_for(:visit_equals)
47
+ end
48
+
49
+ def visit_not_equals(_node)
50
+ raise error_for(:visit_not_equals)
51
+ end
52
+
53
+ def visit_contains(_node)
54
+ raise error_for(:visit_contains)
55
+ end
56
+
57
+ def visit_starts_with(_node)
58
+ raise error_for(:visit_starts_with)
59
+ end
60
+
61
+ def visit_ends_with(_node)
62
+ raise error_for(:visit_ends_with)
63
+ end
64
+
65
+ def visit_greater_than(_node)
66
+ raise error_for(:visit_greater_than)
67
+ end
68
+
69
+ def visit_greater_than_equals(_node)
70
+ raise error_for(:visit_greater_than_equals)
71
+ end
72
+
73
+ def visit_less_than(_node)
74
+ raise error_for(:visit_less_than)
75
+ end
76
+
77
+ def visit_less_than_equals(_node)
78
+ raise error_for(:visit_less_than_equals)
79
+ end
80
+
81
+ def visit_presence(_node)
82
+ raise error_for(:visit_presence)
83
+ end
84
+
85
+ def visit_unknown(_node)
86
+ raise error_for(:visit_unknown)
87
+ end
88
+
89
+ private
90
+
91
+ def error_for(method)
92
+ ::Scim::Kit::NotImplementedError.new("#{method} is not implemented")
93
+ end
94
+ end
95
+ end
96
+ end
97
+ end
98
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Scim
4
4
  module Kit
5
- VERSION = '0.4.0'
5
+ VERSION = '0.5.0'
6
6
  end
7
7
  end
@@ -39,7 +39,7 @@ Gem::Specification.new do |spec|
39
39
  spec.add_development_dependency 'bundler-audit', '~> 0.6'
40
40
  spec.add_development_dependency 'byebug'
41
41
  spec.add_development_dependency 'ffaker', '~> 2.7'
42
- spec.add_development_dependency 'rake', '~> 10.0'
42
+ spec.add_development_dependency 'rake', '~> 13.0'
43
43
  spec.add_development_dependency 'rspec', '~> 3.0'
44
44
  spec.add_development_dependency 'rubocop', '~> 0.52'
45
45
  spec.add_development_dependency 'rubocop-rspec', '~> 1.22'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: scim-kit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - mo
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-06-15 00:00:00.000000000 Z
11
+ date: 2020-01-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -142,14 +142,14 @@ dependencies:
142
142
  requirements:
143
143
  - - "~>"
144
144
  - !ruby/object:Gem::Version
145
- version: '10.0'
145
+ version: '13.0'
146
146
  type: :development
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
150
  - - "~>"
151
151
  - !ruby/object:Gem::Version
152
- version: '10.0'
152
+ version: '13.0'
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: rspec
155
155
  requirement: !ruby/object:Gem::Requirement
@@ -245,6 +245,8 @@ files:
245
245
  - lib/scim/kit/v2/configuration.rb
246
246
  - lib/scim/kit/v2/error.rb
247
247
  - lib/scim/kit/v2/filter.rb
248
+ - lib/scim/kit/v2/filter/node.rb
249
+ - lib/scim/kit/v2/filter/visitor.rb
248
250
  - lib/scim/kit/v2/messages.rb
249
251
  - lib/scim/kit/v2/meta.rb
250
252
  - lib/scim/kit/v2/mutability.rb
@@ -289,7 +291,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
289
291
  - !ruby/object:Gem::Version
290
292
  version: '0'
291
293
  requirements: []
292
- rubygems_version: 3.0.3
294
+ rubygems_version: 3.1.2
293
295
  signing_key:
294
296
  specification_version: 4
295
297
  summary: A simple toolkit for working with SCIM 2.0