mongocore 0.1.10 → 0.2.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
  SHA1:
3
- metadata.gz: fda911c258361d99b7afe5d80a9c010193f3fa80
4
- data.tar.gz: 9e1f6e38fb9bc010800c2cb762e16b7c5e32635a
3
+ metadata.gz: 0a86b7528d0b827a5b34c351f9307408f4ef5f3f
4
+ data.tar.gz: d011a3b1ac8f3b2ff62bfe3ce256712c6b931dca
5
5
  SHA512:
6
- metadata.gz: f5cc8bbb7c477681380ca6500d47c00c4d6aafea39dbb960e7c619d77e3b2a8379f970b87212350e766670e66fad4c12ab0a2b02aa4c15d1e4e1150befe76ff6
7
- data.tar.gz: 75eac89002d5db829468ead10e60068ffa89690193947774ec7da5238ce2eddac463b01dd8b814d258506f6628300c710f382a01e9310ca88b39a9df1d21b26a
6
+ metadata.gz: 9fd4a39adb5aecb254e867455502ccf2debdace855f2a5dec3640643c70d5ea7122b1a367d291478a6c854b7d76c2673c6608df198cd9f1d02b7da165acf6e51
7
+ data.tar.gz: f4e627193ae0cf71b37b975a1cd95c33c3270fd1b83ab3e72ccb11f63cfca874802f256112889f679a553c9c59076834f7fb5964a316a13a660321af5e5270d8
data/README.md CHANGED
@@ -87,6 +87,7 @@ m.save
87
87
 
88
88
  # Finding
89
89
  query = Model.find
90
+ query = Model.where # Alias
90
91
 
91
92
  # Query doesn't get executed until you call all, count, last or first
92
93
  m = query.all
@@ -103,6 +104,14 @@ m = Model.find.paginate
103
104
  m = Model.find.paginate(:per_page => 10, :page => 5)
104
105
  m.total # => Total number of results
105
106
 
107
+ # Use each to fetch one by one
108
+ Model.each do |m|
109
+ puts m
110
+ end
111
+
112
+ # Works with finds, scopes and associations
113
+ Model.find(:duration => 50).each{|m| puts m}
114
+
106
115
  # All of these can be used:
107
116
  # https://docs.mongodb.com/manual/reference/operator/query-comparison
108
117
  m = Model.find(:house => {:$ne => nil, :$eq => 'Nice'}).last
@@ -148,7 +157,9 @@ m.duration_changed?
148
157
  m.duration_was
149
158
  m.changes
150
159
  m.saved?
160
+ m.persisted? # Alias for saved?
151
161
  m.unsaved?
162
+ m.new_record? # Alias for unsaved?
152
163
 
153
164
  # Validate
154
165
  m.valid?
@@ -41,7 +41,7 @@ module Mongocore
41
41
  # @saved indicates whether this is saved or not
42
42
  #
43
43
 
44
- attr_accessor :errors, :changes, :saved
44
+ attr_accessor :errors, :changes, :saved, :state
45
45
 
46
46
  # # # # # # # # # # #
47
47
  # The class initializer, called when you write Model.new
@@ -50,8 +50,8 @@ module Mongocore
50
50
  #
51
51
  def initialize(a = {})
52
52
 
53
- # Defaults
54
- self.attributes = self.class.schema.defaults.merge(a)
53
+ # Store attributes. Storing state state for dirty tracking.
54
+ self.attributes = self.class.schema.defaults.merge(a).tap{|r| self.state = r.dup}
55
55
 
56
56
  # The _id is a BSON object, create new unless it exists
57
57
  @_id ? @saved = true : @_id = BSON::ObjectId.new
@@ -117,7 +117,7 @@ module Mongocore
117
117
 
118
118
  # Changed?
119
119
  def changed?
120
- changes.any?
120
+ @changes.any?
121
121
  end
122
122
 
123
123
  # JSON format
@@ -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] = r if v != r} if @changes
188
+ read!(key).tap{|r| @changes[key] = [@state[key], v] if v != r} if @changes
189
189
 
190
190
  # Write attribute
191
191
  write!(key, v)
@@ -203,15 +203,14 @@ module Mongocore
203
203
 
204
204
  # Write or read
205
205
  if self.class.schema.keys.has_key?(key = $1.to_sym)
206
- return write(key, args.first) if $2
207
- return read(key)
206
+ return $2 ? write(key, args.first) : read(key)
208
207
  end
209
208
 
210
209
  # Attributes changed?
211
- return changes.has_key?($1.to_sym) if key =~ /(.+)_changed\?/
210
+ return @changes.has_key?($1.to_sym) if key =~ /(.+)_changed\?/
212
211
 
213
212
  # Attributes was
214
- return changes[$1.to_sym] if key =~ /(.+)_was/
213
+ return @state[$1.to_sym] if key =~ /(.+)_was/
215
214
 
216
215
  # Pass if nothing found
217
216
  super
@@ -227,6 +226,11 @@ module Mongocore
227
226
  a.each{|k, v| a[k] = v.to_s if v.is_a?(BSON::ObjectId)}; a.delete(:_id); {:id => id}.merge(a)
228
227
  end
229
228
 
229
+ # Print info about the instance
230
+ def inspect
231
+ "#<#{self.class} #{attributes.sort.map{|r| %{#{r[0]}: #{r[1].inspect}}}.join(', ')}>"
232
+ end
233
+
230
234
  private
231
235
 
232
236
  # Persist for save and update
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.1.10'
10
+ VERSION = '0.2.0'
11
11
 
12
12
  # # # # # #
13
13
  # Mongocore Ruby Database Driver.
data/mongocore.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'mongocore'
3
- s.version = '0.1.10'
3
+ s.version = '0.2.0'
4
4
  s.date = '2017-10-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."
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongocore
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.10
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fugroup Limited