object_selector 1.0.1 → 1.0.2
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 +4 -4
- data/.gemspec +1 -1
- data/.gitignore +1 -0
- data/README.md +33 -5
- data/lib/object_selector/model.rb +3 -1
- data/lib/object_selector/provider/first_needle_found_in_sorted_haystack.rb +33 -0
- metadata +3 -3
- data/Gemfile.lock +0 -36
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cbd053025df7ac52e17a117c5e7a0dc22d64fc52
|
4
|
+
data.tar.gz: 100090edd145c02e1cc199ca2a7a481e81a96948
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a8aafff0b3d2898ef5b5a669f916491fad23fae155000b02f68460a2793c7e38f672668796ac4f58d08202c55b4d6c08f703d708ca78746f67a8274304817439
|
7
|
+
data.tar.gz: 8452389e765a4f5cf2297cdb17cb1953238301ad02fed31c68e83caf56b05c6194f2014f5abdb7830ce20f3fb59677216886cbb451515d64e2262f052edcee49
|
data/.gemspec
CHANGED
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
# Object Selector
|
2
2
|
|
3
|
-
##
|
3
|
+
## Quickstart
|
4
|
+
|
5
|
+
### Regex Rule List Provider
|
4
6
|
|
5
|
-
### Quickstart
|
6
7
|
```ruby
|
7
8
|
> Struct.new("MyFirstObject")
|
8
9
|
> Struct.new("MySecondObject")
|
@@ -27,6 +28,33 @@ Struct::MyFirstObject
|
|
27
28
|
Struct::MySecondObject
|
28
29
|
```
|
29
30
|
|
31
|
+
### First needle found in sorted haystack provider
|
32
|
+
|
33
|
+
```ruby
|
34
|
+
> Struct.new("MyFirstObject")
|
35
|
+
> Struct.new("MySecondObject")
|
36
|
+
> selector = ObjectSelector.new(
|
37
|
+
ObjectSelector::Provider::FirstNeedleFoundInSortedHaystack.new({
|
38
|
+
rules: [
|
39
|
+
{
|
40
|
+
needle: 'a',
|
41
|
+
object: Struct::MyFirstObject.new
|
42
|
+
},
|
43
|
+
{
|
44
|
+
needle: 'b',
|
45
|
+
object: Struct::MySecondObject.new
|
46
|
+
}
|
47
|
+
]
|
48
|
+
})
|
49
|
+
)
|
50
|
+
|
51
|
+
> selector.select(['b', 'a'])
|
52
|
+
Struct::MyFirstObject
|
53
|
+
|
54
|
+
> selector.select(['c', 'b'])
|
55
|
+
Struct::MySecondObject
|
56
|
+
```
|
57
|
+
|
30
58
|
### Testing
|
31
59
|
|
32
60
|
#### Local
|
@@ -36,8 +64,8 @@ $ bundle exec rspec
|
|
36
64
|
|
37
65
|
#### CI
|
38
66
|
```bash
|
39
|
-
docker-compose --file docker-compose.yml --project-name object_selector
|
40
|
-
EXIT_CODE=$(docker ps -a -f "name=
|
41
|
-
docker-compose --file docker-compose.yml --project-name object_selector
|
67
|
+
docker-compose --file docker-compose.yml --project-name object_selector up --abort-on-container-exit --remove-orphans --build --force-recreate
|
68
|
+
EXIT_CODE=$(docker ps -a -f "name=objectselector_tests" -q | xargs docker inspect -f "{{ .State.ExitCode }}")
|
69
|
+
docker-compose --file docker-compose.yml --project-name object_selector down --rmi local
|
42
70
|
exit $EXIT_CODE
|
43
71
|
```
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'object_selector/provider/regex_rule_list'
|
2
|
+
require 'object_selector/provider/first_needle_found_in_sorted_haystack'
|
2
3
|
require 'object_selector/error'
|
3
4
|
|
4
5
|
module ObjectSelector
|
@@ -12,8 +13,9 @@ module ObjectSelector
|
|
12
13
|
end
|
13
14
|
|
14
15
|
##
|
15
|
-
# @param [String] value to match
|
16
|
+
# @param [String, Array] value to match against
|
16
17
|
# @return [Object]
|
18
|
+
# @raise [ObjectSelector::Error::NoMatchError] when no match
|
17
19
|
##
|
18
20
|
def select(value)
|
19
21
|
@provider.select(value)
|
@@ -0,0 +1,33 @@
|
|
1
|
+
|
2
|
+
module ObjectSelector
|
3
|
+
module Provider
|
4
|
+
|
5
|
+
class FirstNeedleFoundInSortedHaystack
|
6
|
+
|
7
|
+
##
|
8
|
+
# @param [Array<Hash>] rules
|
9
|
+
# @option rules [String, Number] :needle
|
10
|
+
# @option rules [Object] :object
|
11
|
+
##
|
12
|
+
def initialize(rules:)
|
13
|
+
raise ArgumentError, 'Rules should be an array' if not rules.is_a?(Array)
|
14
|
+
@rules = rules
|
15
|
+
end
|
16
|
+
|
17
|
+
##
|
18
|
+
# @param [Array<String>] haystack
|
19
|
+
# @return [Object] returns selected object key in rules
|
20
|
+
# @raise [ObjectSelector::Error::NoMatchError]
|
21
|
+
##
|
22
|
+
def select(haystack)
|
23
|
+
object = @rules.map { |rule|
|
24
|
+
break rule[:object] if haystack.sort.include?(rule[:needle])
|
25
|
+
}
|
26
|
+
raise ObjectSelector::Error::NoMatchError, 'No rules matched' if object.is_a?(Array) and object.all? &:nil?
|
27
|
+
return object
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: object_selector
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Charles Mulder
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-03-14 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description:
|
14
14
|
email:
|
@@ -24,12 +24,12 @@ files:
|
|
24
24
|
- ".ruby-version"
|
25
25
|
- Dockerfile
|
26
26
|
- Gemfile
|
27
|
-
- Gemfile.lock
|
28
27
|
- README.md
|
29
28
|
- docker-compose.yml
|
30
29
|
- lib/object_selector.rb
|
31
30
|
- lib/object_selector/error.rb
|
32
31
|
- lib/object_selector/model.rb
|
32
|
+
- lib/object_selector/provider/first_needle_found_in_sorted_haystack.rb
|
33
33
|
- lib/object_selector/provider/regex_rule_list.rb
|
34
34
|
homepage: https://github.com/hetznerZA/object_selector-regex_rule_list
|
35
35
|
licenses: []
|
data/Gemfile.lock
DELETED
@@ -1,36 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
object_selector (1.0.0)
|
5
|
-
|
6
|
-
GEM
|
7
|
-
remote: https://rubygems.org/
|
8
|
-
specs:
|
9
|
-
diff-lcs (1.3)
|
10
|
-
faker (1.7.3)
|
11
|
-
i18n (~> 0.5)
|
12
|
-
i18n (0.8.0)
|
13
|
-
rspec (3.5.0)
|
14
|
-
rspec-core (~> 3.5.0)
|
15
|
-
rspec-expectations (~> 3.5.0)
|
16
|
-
rspec-mocks (~> 3.5.0)
|
17
|
-
rspec-core (3.5.4)
|
18
|
-
rspec-support (~> 3.5.0)
|
19
|
-
rspec-expectations (3.5.0)
|
20
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
21
|
-
rspec-support (~> 3.5.0)
|
22
|
-
rspec-mocks (3.5.0)
|
23
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
24
|
-
rspec-support (~> 3.5.0)
|
25
|
-
rspec-support (3.5.0)
|
26
|
-
|
27
|
-
PLATFORMS
|
28
|
-
ruby
|
29
|
-
|
30
|
-
DEPENDENCIES
|
31
|
-
faker (~> 1.6, >= 1.6.3)
|
32
|
-
object_selector!
|
33
|
-
rspec (~> 3.5)
|
34
|
-
|
35
|
-
BUNDLED WITH
|
36
|
-
1.14.4
|