poros 0.3.1 → 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 +4 -4
- data/.travis.yml +12 -8
- data/README.md +25 -3
- data/bundler1.gemfile +7 -0
- data/lib/poros/class_methods.rb +15 -4
- data/lib/poros/config.rb +13 -0
- data/lib/poros/query.rb +4 -1
- data/lib/poros/version.rb +1 -1
- data/lib/poros.rb +4 -0
- data/poros.gemspec +4 -4
- metadata +17 -19
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: c7e3b46d74b70a0f801c765e6bc38fe972456e18085b27d409a58cc9753383b3
|
|
4
|
+
data.tar.gz: 540803ca53b42bbf081b0d3abb4d169625d5e9621dbfdd8d44b68b23c756e46c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 9abc0878efeae1d62cceff5d4ff677736342a36e5268ce2a58c6334d5ebe48ff605eda0bab95fd302168d328f4739074d31bf076d65a2821b1ba6a9d5380d7a0
|
|
7
|
+
data.tar.gz: 0a037b68fa58a9c25f09a5aff82c7edb290459a373ab06e1f19e152313091fac343117a11b5d012c43b28e3222e92ec7f3dca0fd094ca8d83c9c674dd74a7b15
|
data/.travis.yml
CHANGED
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
sudo: false
|
|
2
2
|
language: ruby
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
3
|
+
matrix:
|
|
4
|
+
include:
|
|
5
|
+
- rvm: 2.1
|
|
6
|
+
gemfile: bundler1.gemfile
|
|
7
|
+
- rvm: 2.2
|
|
8
|
+
gemfile: bundler1.gemfile
|
|
9
|
+
- rvm: 2.3
|
|
10
|
+
- rvm: 2.4
|
|
11
|
+
- rvm: 2.5
|
|
12
|
+
- rvm: 2.6
|
|
13
|
+
- rvm: 2.7
|
|
14
|
+
- rvm: ruby-head
|
data/README.md
CHANGED
|
@@ -48,6 +48,28 @@ other_widget = Widget.find('uuid')
|
|
|
48
48
|
many_widgets = Widget.where(order: 1, name: /regex/)
|
|
49
49
|
```
|
|
50
50
|
|
|
51
|
+
If you want to use an attribute that's actually a class like `Date` you will
|
|
52
|
+
need to specifically allow it. This is a safety feature of YAML and will help
|
|
53
|
+
protect your code base from malicious users.
|
|
54
|
+
|
|
55
|
+
```ruby
|
|
56
|
+
|
|
57
|
+
Poros::Config.configure do |config|
|
|
58
|
+
config[:permitted_classes] << Date
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
class Person
|
|
62
|
+
include Poros
|
|
63
|
+
|
|
64
|
+
poro_attr :name, :birthday
|
|
65
|
+
|
|
66
|
+
def initialize(name: '', birthday: Date.today)
|
|
67
|
+
@name = name
|
|
68
|
+
@birthday = birthday
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
```
|
|
72
|
+
|
|
51
73
|
`#initialize` must use keyword arguments and contain at least all the
|
|
52
74
|
attributes defined in `poro_attr`. In the future I may define this function for
|
|
53
75
|
you but for right now I'm not sure I want to go that direction.
|
|
@@ -58,9 +80,9 @@ you but for right now I'm not sure I want to go that direction.
|
|
|
58
80
|
speed up searching but if your index gets really big the initial load of a
|
|
59
81
|
model will take quite a long time.
|
|
60
82
|
|
|
61
|
-
`self.data_directory` you can
|
|
62
|
-
save to the default of `./db/#{self}`. If you do
|
|
63
|
-
seperate each model into
|
|
83
|
+
`self.data_directory` you can redefine this method if you don't want it to
|
|
84
|
+
save to the default of `./db/#{self}`. If you do redefine it you _must_
|
|
85
|
+
seperate each model into its own folder or it will have _lots_ of issues.
|
|
64
86
|
|
|
65
87
|
`.where` acts a bit like ActiveRecord and it takes exact matches, regexs, arrays, or
|
|
66
88
|
lambdas in any combination.
|
data/bundler1.gemfile
ADDED
data/lib/poros/class_methods.rb
CHANGED
|
@@ -25,10 +25,13 @@ module Poros
|
|
|
25
25
|
end
|
|
26
26
|
|
|
27
27
|
def find(uuid)
|
|
28
|
-
attrs = YAML.
|
|
28
|
+
attrs = YAML.safe_load(
|
|
29
|
+
File.read(file_path(uuid)),
|
|
30
|
+
permitted_classes: Poros::Config.configuration[:permitted_classes],
|
|
31
|
+
)
|
|
29
32
|
attrs.delete(:uuid)
|
|
30
33
|
|
|
31
|
-
object = new(attrs)
|
|
34
|
+
object = new(**attrs)
|
|
32
35
|
object.uuid = uuid
|
|
33
36
|
object
|
|
34
37
|
end
|
|
@@ -53,7 +56,10 @@ module Poros
|
|
|
53
56
|
def all
|
|
54
57
|
Dir.glob(File.join(data_directory, '*.yml')).map { |file|
|
|
55
58
|
next if file == index_file
|
|
56
|
-
data = YAML.
|
|
59
|
+
data = YAML.safe_load(
|
|
60
|
+
File.read(file),
|
|
61
|
+
permitted_classes: Poros::Config.configuration[:permitted_classes],
|
|
62
|
+
)
|
|
57
63
|
find(data[:uuid])
|
|
58
64
|
}.compact
|
|
59
65
|
end
|
|
@@ -65,7 +71,12 @@ module Poros
|
|
|
65
71
|
def index_data
|
|
66
72
|
return @index_data if defined? @index_data
|
|
67
73
|
|
|
68
|
-
data = File.exist?(index_file) ?
|
|
74
|
+
data = File.exist?(index_file) ?
|
|
75
|
+
YAML.safe_load(
|
|
76
|
+
File.read(index_file),
|
|
77
|
+
permitted_classes: Poros::Config.configuration[:permitted_classes],
|
|
78
|
+
) : {}
|
|
79
|
+
|
|
69
80
|
# Make sure we always have every index as a key
|
|
70
81
|
poro_indexes.each do |index|
|
|
71
82
|
data[index] = {} unless data.has_key?(index)
|
data/lib/poros/config.rb
ADDED
data/lib/poros/query.rb
CHANGED
|
@@ -41,7 +41,10 @@ module Poros
|
|
|
41
41
|
if table_scan.size > 0
|
|
42
42
|
scanned_results = Dir.glob(File.join(@object.data_directory, '*.yml')).map { |file|
|
|
43
43
|
next if file == @object.index_file
|
|
44
|
-
data = YAML.
|
|
44
|
+
data = YAML.safe_load(
|
|
45
|
+
File.read(file),
|
|
46
|
+
permitted_classes: Poros::Config.configuration[:permitted_classes],
|
|
47
|
+
)
|
|
45
48
|
data[:uuid] if table_scan.all? { |key, value|
|
|
46
49
|
case value
|
|
47
50
|
when Regexp
|
data/lib/poros/version.rb
CHANGED
data/lib/poros.rb
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
require 'yaml'
|
|
2
2
|
require 'securerandom'
|
|
3
3
|
|
|
4
|
+
require 'poros/config'
|
|
5
|
+
|
|
4
6
|
require 'poros/query'
|
|
5
7
|
require 'poros/instance_methods'
|
|
6
8
|
require 'poros/class_methods'
|
|
7
9
|
require 'poros/relations'
|
|
8
10
|
|
|
9
11
|
module Poros
|
|
12
|
+
include Poros::Config
|
|
13
|
+
|
|
10
14
|
include Poros::InstanceMethods
|
|
11
15
|
include Poros::ClassMethods
|
|
12
16
|
include Poros::Relations
|
data/poros.gemspec
CHANGED
|
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
|
|
|
10
10
|
spec.summary = 'Persist and query your objects'
|
|
11
11
|
spec.description = 'Persist your objects and query them in an active record like way'
|
|
12
12
|
spec.authors = ["Sean Ross Earle"]
|
|
13
|
-
spec.email = ["sean.earle@
|
|
13
|
+
spec.email = ["sean.r.earle@gmail.com"]
|
|
14
14
|
spec.homepage = "https://github.com/HellRok/Poros"
|
|
15
15
|
spec.license = "MIT"
|
|
16
16
|
|
|
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
|
|
|
21
21
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
22
22
|
spec.require_paths = ["lib"]
|
|
23
23
|
|
|
24
|
-
spec.add_development_dependency "bundler"
|
|
25
|
-
spec.add_development_dependency "rake"
|
|
26
|
-
spec.add_development_dependency "minitest"
|
|
24
|
+
spec.add_development_dependency "bundler"
|
|
25
|
+
spec.add_development_dependency "rake"
|
|
26
|
+
spec.add_development_dependency "minitest"
|
|
27
27
|
end
|
metadata
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: poros
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.5.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Sean Ross Earle
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: exe
|
|
10
9
|
cert_chain: []
|
|
11
10
|
date: 2018-04-22 00:00:00.000000000 Z
|
|
@@ -14,47 +13,47 @@ dependencies:
|
|
|
14
13
|
name: bundler
|
|
15
14
|
requirement: !ruby/object:Gem::Requirement
|
|
16
15
|
requirements:
|
|
17
|
-
- - "
|
|
16
|
+
- - ">="
|
|
18
17
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: '
|
|
18
|
+
version: '0'
|
|
20
19
|
type: :development
|
|
21
20
|
prerelease: false
|
|
22
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
22
|
requirements:
|
|
24
|
-
- - "
|
|
23
|
+
- - ">="
|
|
25
24
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: '
|
|
25
|
+
version: '0'
|
|
27
26
|
- !ruby/object:Gem::Dependency
|
|
28
27
|
name: rake
|
|
29
28
|
requirement: !ruby/object:Gem::Requirement
|
|
30
29
|
requirements:
|
|
31
|
-
- - "
|
|
30
|
+
- - ">="
|
|
32
31
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: '
|
|
32
|
+
version: '0'
|
|
34
33
|
type: :development
|
|
35
34
|
prerelease: false
|
|
36
35
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
36
|
requirements:
|
|
38
|
-
- - "
|
|
37
|
+
- - ">="
|
|
39
38
|
- !ruby/object:Gem::Version
|
|
40
|
-
version: '
|
|
39
|
+
version: '0'
|
|
41
40
|
- !ruby/object:Gem::Dependency
|
|
42
41
|
name: minitest
|
|
43
42
|
requirement: !ruby/object:Gem::Requirement
|
|
44
43
|
requirements:
|
|
45
|
-
- - "
|
|
44
|
+
- - ">="
|
|
46
45
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: '
|
|
46
|
+
version: '0'
|
|
48
47
|
type: :development
|
|
49
48
|
prerelease: false
|
|
50
49
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
50
|
requirements:
|
|
52
|
-
- - "
|
|
51
|
+
- - ">="
|
|
53
52
|
- !ruby/object:Gem::Version
|
|
54
|
-
version: '
|
|
53
|
+
version: '0'
|
|
55
54
|
description: Persist your objects and query them in an active record like way
|
|
56
55
|
email:
|
|
57
|
-
- sean.earle@
|
|
56
|
+
- sean.r.earle@gmail.com
|
|
58
57
|
executables: []
|
|
59
58
|
extensions: []
|
|
60
59
|
extra_rdoc_files: []
|
|
@@ -65,8 +64,10 @@ files:
|
|
|
65
64
|
- LICENSE.txt
|
|
66
65
|
- README.md
|
|
67
66
|
- Rakefile
|
|
67
|
+
- bundler1.gemfile
|
|
68
68
|
- lib/poros.rb
|
|
69
69
|
- lib/poros/class_methods.rb
|
|
70
|
+
- lib/poros/config.rb
|
|
70
71
|
- lib/poros/info.rb
|
|
71
72
|
- lib/poros/instance_methods.rb
|
|
72
73
|
- lib/poros/query.rb
|
|
@@ -77,7 +78,6 @@ homepage: https://github.com/HellRok/Poros
|
|
|
77
78
|
licenses:
|
|
78
79
|
- MIT
|
|
79
80
|
metadata: {}
|
|
80
|
-
post_install_message:
|
|
81
81
|
rdoc_options: []
|
|
82
82
|
require_paths:
|
|
83
83
|
- lib
|
|
@@ -92,9 +92,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
92
92
|
- !ruby/object:Gem::Version
|
|
93
93
|
version: '0'
|
|
94
94
|
requirements: []
|
|
95
|
-
|
|
96
|
-
rubygems_version: 2.7.6
|
|
97
|
-
signing_key:
|
|
95
|
+
rubygems_version: 4.0.3
|
|
98
96
|
specification_version: 4
|
|
99
97
|
summary: Persist and query your objects
|
|
100
98
|
test_files: []
|