mongocore 0.3.0 → 0.3.1
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/CHANGELOG.md +7 -0
- data/README.md +3 -0
- data/lib/mongocore/access.rb +4 -4
- data/lib/mongocore/document.rb +13 -13
- data/lib/mongocore/ext.rb +1 -0
- data/lib/mongocore/query.rb +5 -5
- data/lib/mongocore/schema.rb +1 -1
- data/lib/mongocore.rb +5 -2
- data/mongocore.gemspec +3 -3
- 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: b41d351659b6eb32abc203fcf4bfca71475fa310
|
4
|
+
data.tar.gz: 0f62bcc88e7c58aa4574fd0bd2c78366bbba886a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fdf761b37d0e415e7806bfa5e908737160ae2a9f59d6f0315c58b05cb8dad87448bd3d79049fe9ab224b3c9baf5164b430de8be51ffadfff914182ca0c911055
|
7
|
+
data.tar.gz: 91d1fc13533117f0ddf899d6fd29b18a5110c490731f35a9914e2ced321c0658d29ac066ab8a5dc9ad8c436246acac6d5603d99ebffd7dff2364f916e2d63b8d
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
**Version 0.3.1** - *2017-11-25*
|
2
|
+
|
3
|
+
- Fixed bug where error didn't get reset on validation
|
4
|
+
- Can set association = nil
|
5
|
+
- Added default sort option
|
6
|
+
- Renamed a few internal variables
|
7
|
+
|
1
8
|
**Version 0.3.0** - *2017-10-30*
|
2
9
|
|
3
10
|
- Removed support for dependent destroy
|
data/README.md
CHANGED
@@ -56,6 +56,9 @@ Mongocore.access = true
|
|
56
56
|
# Enable timestamps, auto-save created_at and updated_at keys
|
57
57
|
Mongocore.timestamps = true
|
58
58
|
|
59
|
+
# Default sorting, last will be opposite. Should be indexed.
|
60
|
+
Mongocore.sort = {:_id => 1}
|
61
|
+
|
59
62
|
# Pagination results per page
|
60
63
|
Mogocore.per_page = 20
|
61
64
|
|
data/lib/mongocore/access.rb
CHANGED
@@ -3,7 +3,7 @@ module Mongocore
|
|
3
3
|
|
4
4
|
# # # # # # # #
|
5
5
|
# The Access class is responsible for checking if an attribute
|
6
|
-
# can be read or written. It uses
|
6
|
+
# can be read or written. It uses 7 access levels and the
|
7
7
|
# read and write attributes in the schema yml file for the model.
|
8
8
|
#
|
9
9
|
# If your current access level is above the key level, then you
|
@@ -24,17 +24,17 @@ module Mongocore
|
|
24
24
|
|
25
25
|
# Key readable?
|
26
26
|
def read?(key)
|
27
|
-
ok?(keys[key][:read] || :all) rescue false
|
27
|
+
ok?(@keys[key][:read] || :all) rescue false
|
28
28
|
end
|
29
29
|
|
30
30
|
# Key writable?
|
31
31
|
def write?(key)
|
32
|
-
ok?(keys[key][:write] || :all) rescue false
|
32
|
+
ok?(@keys[key][:write] || :all) rescue false
|
33
33
|
end
|
34
34
|
|
35
35
|
# Ok?
|
36
36
|
def ok?(level)
|
37
|
-
!Mongocore.access || self.class.get.nil? || AL.index(level.to_sym) <= AL.index(
|
37
|
+
!Mongocore.access || (g = self.class.get).nil? || AL.index(level.to_sym) <= AL.index(g || :app)
|
38
38
|
end
|
39
39
|
|
40
40
|
|
data/lib/mongocore/document.rb
CHANGED
@@ -38,10 +38,10 @@ module Mongocore
|
|
38
38
|
# Instance variables
|
39
39
|
# @errors is used for validates
|
40
40
|
# @changes keeps track of object changes
|
41
|
-
# @
|
41
|
+
# @persisted indicates whether this is saved or not
|
42
42
|
#
|
43
43
|
|
44
|
-
attr_accessor :errors, :changes, :
|
44
|
+
attr_accessor :errors, :changes, :persisted, :original
|
45
45
|
|
46
46
|
# # # # # # # # # # #
|
47
47
|
# The class initializer, called when you write Model.new
|
@@ -50,11 +50,11 @@ module Mongocore
|
|
50
50
|
#
|
51
51
|
def initialize(a = {})
|
52
52
|
|
53
|
-
# Store attributes. Storing
|
54
|
-
self.attributes = self.class.schema.defaults.merge(a).tap{|r|
|
53
|
+
# Store attributes. Storing original state for dirty tracking.
|
54
|
+
self.attributes = self.class.schema.defaults.merge(a).tap{|r| @original = r.dup}
|
55
55
|
|
56
56
|
# The _id is a BSON object, create new unless it exists
|
57
|
-
@_id ? @
|
57
|
+
@_id ? @persisted = true : @_id = BSON::ObjectId.new
|
58
58
|
|
59
59
|
# The errors hash
|
60
60
|
@errors = Hash.new{|h, k| h[k] = []}
|
@@ -86,8 +86,8 @@ module Mongocore
|
|
86
86
|
end
|
87
87
|
|
88
88
|
# Run filters before and after accessing the db
|
89
|
-
def filter(cmd,
|
90
|
-
run(:before, cmd); yield.tap{@
|
89
|
+
def filter(cmd, persisted = true, &block)
|
90
|
+
run(:before, cmd); yield.tap{@persisted = persisted; run(:after, cmd)}
|
91
91
|
end
|
92
92
|
|
93
93
|
# Reload the document from db and update attributes
|
@@ -131,7 +131,7 @@ module Mongocore
|
|
131
131
|
|
132
132
|
# Valid?
|
133
133
|
def valid?
|
134
|
-
self.class.filters.valid?(self)
|
134
|
+
@errors.clear; self.class.filters.valid?(self)
|
135
135
|
end
|
136
136
|
|
137
137
|
# Available filters are :save, :update, :delete
|
@@ -145,11 +145,11 @@ module Mongocore
|
|
145
145
|
#
|
146
146
|
|
147
147
|
# Saved? Persisted?
|
148
|
-
def saved?; !!@
|
148
|
+
def saved?; !!@persisted; end
|
149
149
|
alias_method :persisted?, :saved?
|
150
150
|
|
151
151
|
# Unsaved? New record?
|
152
|
-
def unsaved?; !@
|
152
|
+
def unsaved?; !@persisted; end
|
153
153
|
alias_method :new_record?, :unsaved?
|
154
154
|
|
155
155
|
# Short cut for setting up a Mongocore::Query object
|
@@ -185,7 +185,7 @@ module Mongocore
|
|
185
185
|
v = self.class.schema.convert(key, val)
|
186
186
|
|
187
187
|
# Record change for dirty attributes
|
188
|
-
read!(key).tap{|r| @changes[key] = [@
|
188
|
+
read!(key).tap{|r| @changes[key] = [@original[key], v] if v != r} if @changes
|
189
189
|
|
190
190
|
# Write attribute
|
191
191
|
write!(key, v)
|
@@ -210,7 +210,7 @@ module Mongocore
|
|
210
210
|
return @changes.has_key?($1.to_sym) if key =~ /(.+)_changed\?/
|
211
211
|
|
212
212
|
# Attributes was
|
213
|
-
return @
|
213
|
+
return @original[$1.to_sym] if key =~ /(.+)_was/
|
214
214
|
|
215
215
|
# Pass if nothing found
|
216
216
|
super
|
@@ -234,7 +234,7 @@ module Mongocore
|
|
234
234
|
return false unless valid? if o[:validate]
|
235
235
|
|
236
236
|
# Create a new query
|
237
|
-
filter(type){one.send((@
|
237
|
+
filter(type){one.send((@persisted ? :update : :insert), attributes).ok?}
|
238
238
|
end
|
239
239
|
|
240
240
|
# Replace _id with id, takes a hash
|
data/lib/mongocore/ext.rb
CHANGED
data/lib/mongocore/query.rb
CHANGED
@@ -24,8 +24,8 @@ module Mongocore
|
|
24
24
|
# Storing the Mongo::Collection object
|
25
25
|
@collection = Mongocore.db[@colname]
|
26
26
|
|
27
|
-
# Storing query and options
|
28
|
-
s[:
|
27
|
+
# Storing query and options
|
28
|
+
s[:limit] ||= 0; s[:chain] ||= []; s[:source] ||= nil; s[:fields] ||= {}; s[:skip] ||= 0
|
29
29
|
@query, @options, @store = @model.schema.ids(hashify(q)), o, s
|
30
30
|
|
31
31
|
# Set up cache
|
@@ -45,7 +45,7 @@ module Mongocore
|
|
45
45
|
|
46
46
|
# Cursor
|
47
47
|
def cursor
|
48
|
-
@collection.find(@query, @options).projection(@store[:fields]).skip(@store[:skip]).sort(@store[:sort]).limit(@store[:limit])
|
48
|
+
@collection.find(@query, @options).projection(@store[:fields]).skip(@store[:skip]).sort(@store[:sort] || Mongocore.sort).limit(@store[:limit])
|
49
49
|
end
|
50
50
|
|
51
51
|
# Insert
|
@@ -86,7 +86,7 @@ module Mongocore
|
|
86
86
|
|
87
87
|
# Return last document
|
88
88
|
def last(*args)
|
89
|
-
sort(
|
89
|
+
sort((a = Mongocore.sort.dup).each{|k, v| a[k] = v * -1}).limit(1).first(*args)
|
90
90
|
end
|
91
91
|
|
92
92
|
# Return all documents
|
@@ -135,7 +135,7 @@ module Mongocore
|
|
135
135
|
|
136
136
|
# Sort
|
137
137
|
def sort(o = {})
|
138
|
-
find(@query, @options, @store.tap{store[:sort].merge!(o)})
|
138
|
+
find(@query, @options, @store.tap{(store[:sort] ||= {}).merge!(o)})
|
139
139
|
end
|
140
140
|
|
141
141
|
# Limit
|
data/lib/mongocore/schema.rb
CHANGED
data/lib/mongocore.rb
CHANGED
@@ -7,7 +7,7 @@ require 'mongo'
|
|
7
7
|
require 'request_store'
|
8
8
|
|
9
9
|
module Mongocore
|
10
|
-
VERSION = '0.3.
|
10
|
+
VERSION = '0.3.1'
|
11
11
|
|
12
12
|
# # # # # #
|
13
13
|
# Mongocore Ruby Database Driver.
|
@@ -16,7 +16,7 @@ module Mongocore
|
|
16
16
|
# @license: MIT, contributions are welcome.
|
17
17
|
# # # # # #
|
18
18
|
|
19
|
-
class << self; attr_accessor :db, :schema, :cache, :access, :timestamps, :per_page, :debug; end
|
19
|
+
class << self; attr_accessor :db, :schema, :cache, :access, :timestamps, :sort, :per_page, :debug; end
|
20
20
|
|
21
21
|
# Schema path is $app_root/config/db/schema/:model_name.yml
|
22
22
|
@schema = File.join(Dir.pwd, 'config', 'db', 'schema')
|
@@ -30,6 +30,9 @@ module Mongocore
|
|
30
30
|
# Enable timestamps, auto-save created_at and updated_at fields
|
31
31
|
@timestamps = true
|
32
32
|
|
33
|
+
# Default sorting, last will be opposite. Should be indexed.
|
34
|
+
@sort = {:_id => 1}
|
35
|
+
|
33
36
|
# Pagination results per page
|
34
37
|
@per_page = 20
|
35
38
|
|
data/mongocore.gemspec
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'mongocore'
|
3
|
-
s.version = '0.3.
|
4
|
-
s.date = '2017-
|
3
|
+
s.version = '0.3.1'
|
4
|
+
s.date = '2017-11-25'
|
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
|
-
s.authors = [
|
7
|
+
s.authors = ['Fugroup Limited']
|
8
8
|
s.email = 'mail@fugroup.net'
|
9
9
|
|
10
10
|
s.add_runtime_dependency 'mongo', '~> 2.2'
|
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.3.
|
4
|
+
version: 0.3.1
|
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-
|
11
|
+
date: 2017-11-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mongo
|