mongocore 0.2.3 → 0.2.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +9 -4
- data/lib/mongocore/access.rb +31 -22
- data/lib/mongocore/document.rb +2 -1
- data/lib/mongocore/query.rb +1 -1
- data/lib/mongocore.rb +1 -1
- data/mongocore.gemspec +2 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e348dc0ae701c8da46874976c5b32563bb5e3016
|
4
|
+
data.tar.gz: ce8cb95db0f96025242aedc2edc898fb0763372e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3858bf69ee794b819aaa0acfc8e303002e618ca9eb5dcdb2f0bae7a8097612b639e83d4dbb7604d67b5de86d8416fffc372e23e80afd5697cdb2e05d6f5266d4
|
7
|
+
data.tar.gz: 4d5e536cbc8ca2a279148568ae658acf39a5cba8a9e87f20dade9279104c7f9db3747d09d77c58127166c14e97a4f7bdaf4b62928fb9dc0566c38b06889bb67e
|
data/README.md
CHANGED
@@ -15,13 +15,13 @@ With Mongocore you can do:
|
|
15
15
|
|
16
16
|
The schema is specified with a YAML file which supports default values, data types, and security levels for each key.
|
17
17
|
|
18
|
-
Please read [the source code](https://github.com/fugroup/mongocore/tree/master/lib/mongocore) to see how it works, it's fully commented and very small, only 8 files, and
|
18
|
+
Please read [the source code](https://github.com/fugroup/mongocore/tree/master/lib/mongocore) to see how it works, it's fully commented and very small, only 8 files, and 447 lines of fully test driven code.
|
19
19
|
|
20
20
|
| Library | Files | Comment | Lines of code |
|
21
21
|
| -------------------------------------- | ----- | ------- | ------------- |
|
22
22
|
| [Mongoid](http://mongoid.com) | 256 | 14371 | 10590 |
|
23
23
|
| [MongoMapper](http://mongomapper.com) | 91 | 200 | 4070 |
|
24
|
-
| [Mongocore](http://mongocore.com) | 8 |
|
24
|
+
| [Mongocore](http://mongocore.com) | 8 | 253 | 447 |
|
25
25
|
|
26
26
|
<br>
|
27
27
|
|
@@ -143,12 +143,11 @@ c = p.models.featured.count
|
|
143
143
|
# Skip
|
144
144
|
m = Model.find.skip(2).first
|
145
145
|
|
146
|
-
#
|
146
|
+
# Attributes
|
147
147
|
m = Model.first
|
148
148
|
m.attributes # => All attributes
|
149
149
|
m.attributes(:badge) # => Attributes with the badge tag only
|
150
150
|
m.to_json # => All attributes as json
|
151
|
-
m.to_json(:badge, :test) # => Pass multiple tags if needed
|
152
151
|
|
153
152
|
# Track changes
|
154
153
|
m.duration = 33
|
@@ -182,6 +181,12 @@ q = p.models.featured.all
|
|
182
181
|
q = p.models.featured.nested.all
|
183
182
|
m = Model.featured.first
|
184
183
|
|
184
|
+
# Access
|
185
|
+
model = Mongocore::Access.role(:user) do
|
186
|
+
# Reads and writes in the block will be with the above access level
|
187
|
+
Model.first
|
188
|
+
end
|
189
|
+
|
185
190
|
# In your model
|
186
191
|
class Model
|
187
192
|
include Mongocore::Document
|
data/lib/mongocore/access.rb
CHANGED
@@ -11,8 +11,8 @@ module Mongocore
|
|
11
11
|
# where f.ex. you want to show the email to logged in users, but not to all.
|
12
12
|
#
|
13
13
|
|
14
|
-
# Access levels (
|
15
|
-
AL = [:all, :user, :dev, :admin, :super, :app]
|
14
|
+
# Access levels (7)
|
15
|
+
AL = [:all, :user, :owner, :dev, :admin, :super, :app]
|
16
16
|
|
17
17
|
# Holds the keys from the model schema
|
18
18
|
attr_accessor :keys
|
@@ -22,41 +22,50 @@ module Mongocore
|
|
22
22
|
@keys = schema.keys
|
23
23
|
end
|
24
24
|
|
25
|
-
#
|
26
|
-
def
|
27
|
-
|
25
|
+
# Key readable?
|
26
|
+
def read?(key)
|
27
|
+
ok?(keys[key][:read]) rescue false
|
28
28
|
end
|
29
29
|
|
30
|
-
#
|
31
|
-
def
|
32
|
-
|
30
|
+
# Key writable?
|
31
|
+
def write?(key)
|
32
|
+
ok?(keys[key][:write]) rescue false
|
33
33
|
end
|
34
34
|
|
35
|
+
# Ok?
|
36
|
+
def ok?(level)
|
37
|
+
!Mongocore.access || self.class.get.nil? || AL.index(level.to_sym) <= AL.index(self.class.get || :app)
|
38
|
+
end
|
39
|
+
|
40
|
+
|
41
|
+
###########################
|
42
|
+
# Class methods
|
43
|
+
#
|
44
|
+
|
35
45
|
# Reset the access level
|
36
|
-
def reset
|
46
|
+
def self.reset
|
37
47
|
RequestStore.store[:access] = nil
|
38
48
|
end
|
39
49
|
|
40
|
-
#
|
41
|
-
def
|
42
|
-
|
50
|
+
# Get the current access level
|
51
|
+
def self.get
|
52
|
+
RequestStore.store[:access]
|
43
53
|
end
|
44
54
|
|
45
|
-
#
|
46
|
-
def
|
47
|
-
|
55
|
+
# Set the current access level
|
56
|
+
def self.set(level = nil)
|
57
|
+
(level.nil? || set?(level)) ? RequestStore.store[:access] = level : get
|
48
58
|
end
|
49
59
|
|
50
|
-
private
|
51
|
-
|
52
60
|
# Set?
|
53
|
-
def set?(level)
|
54
|
-
AL.index(level)
|
61
|
+
def self.set?(level)
|
62
|
+
AL.index(level) >= AL.index(get || :all)
|
55
63
|
end
|
56
64
|
|
57
|
-
#
|
58
|
-
|
59
|
-
|
65
|
+
# Access block
|
66
|
+
# Run with Mongocore::Access(:user){ # Do something as :user}
|
67
|
+
def self.role(level, &block)
|
68
|
+
set(level); yield.tap{ set(nil)}
|
60
69
|
end
|
61
70
|
|
62
71
|
end
|
data/lib/mongocore/document.rb
CHANGED
@@ -107,7 +107,7 @@ module Mongocore
|
|
107
107
|
|
108
108
|
# Collect the attributes, pass tags like defined in your model yml
|
109
109
|
def attributes(*tags)
|
110
|
-
a = {}; self.class.schema.attributes(tags.map(&:to_s)).each{|k| a[k] = read
|
110
|
+
a = {}; self.class.schema.attributes(tags.map(&:to_s)).each{|k| a[k] = read(k)}; a
|
111
111
|
end
|
112
112
|
|
113
113
|
# Set the attributes
|
@@ -307,6 +307,7 @@ module Mongocore
|
|
307
307
|
find.each{|r| yield(r)}
|
308
308
|
end
|
309
309
|
|
310
|
+
|
310
311
|
# # # # # # # # #
|
311
312
|
# After, before and validation filters
|
312
313
|
# Pass a method name as symbol or a block
|
data/lib/mongocore/query.rb
CHANGED
@@ -165,7 +165,7 @@ module Mongocore
|
|
165
165
|
|
166
166
|
# Call and return the scope if it exists
|
167
167
|
def method_missing(name, *arguments, &block)
|
168
|
-
return @model.send(name, @query, @options, @store.tap{
|
168
|
+
return @model.send(name, @query, @options, @store.tap{|r| r[:chain] << name}) if @model.schema.scopes.has_key?(name)
|
169
169
|
super
|
170
170
|
end
|
171
171
|
|
data/lib/mongocore.rb
CHANGED
data/mongocore.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'mongocore'
|
3
|
-
s.version = '0.2.
|
4
|
-
s.date = '2017-10-
|
3
|
+
s.version = '0.2.5'
|
4
|
+
s.date = '2017-10-30'
|
5
5
|
s.summary = "MongoDB ORM implementation on top of the Ruby MongoDB driver"
|
6
6
|
s.description = "Does validations, associations, scopes, filters, pagination, counter cache, request cache, and nested queries. Using a YAML schema file, which supports default values, data types, and security levels for each key."
|
7
7
|
s.authors = ["Fugroup Limited"]
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongocore
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Fugroup Limited
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-10-
|
11
|
+
date: 2017-10-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mongo
|