uorm 0.0.10 → 0.0.11
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.
- data/Gemfile.lock +10 -17
- data/lib/uorm.rb +20 -17
- data/lib/uorm/attributes.rb +4 -3
- data/lib/uorm/attributes/field.rb +30 -0
- data/lib/uorm/attributes/field_collection.rb +9 -0
- data/lib/uorm/attributes/type.rb +68 -0
- data/lib/uorm/crud.rb +72 -0
- data/lib/uorm/crud/callbacks.rb +13 -0
- data/lib/uorm/crud/persistance_helper.rb +21 -0
- data/lib/uorm/hash.rb +13 -0
- data/lib/uorm/model.rb +2 -2
- data/lib/uorm/mongo.rb +3 -13
- data/lib/uorm/mongo/object_id.rb +10 -8
- data/lib/uorm/mongo/persistance.rb +30 -26
- data/lib/uorm/redis.rb +5 -14
- data/lib/uorm/redis/adapter.rb +8 -0
- data/lib/uorm/redis/persistance.rb +6 -16
- data/spec/mongo_spec.rb +258 -0
- data/spec/redis_spec.rb +161 -0
- data/spec/spec_helper.rb +9 -21
- data/spec/support/test_persistance.rb +51 -0
- data/uorm.gemspec +4 -6
- metadata +25 -33
- data/lib/uorm/callbacks.rb +0 -11
- data/lib/uorm/dsl.rb +0 -51
- data/lib/uorm/field.rb +0 -13
- data/lib/uorm/field_collection.rb +0 -7
- data/lib/uorm/mongo/db.rb +0 -27
- data/lib/uorm/redis/db.rb +0 -19
- data/lib/uorm/type.rb +0 -65
- data/lib/uorm/version.rb +0 -3
- data/spec/em-mongo_spec.rb +0 -176
- data/spec/redis_synchrony_spec.rb +0 -117
data/Gemfile.lock
CHANGED
@@ -1,39 +1,32 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
uorm (0.0.
|
5
|
-
activesupport
|
4
|
+
uorm (0.0.11)
|
6
5
|
em-synchrony
|
7
6
|
|
8
7
|
GEM
|
9
8
|
remote: https://rubygems.org/
|
10
9
|
specs:
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
bson (1.8.0)
|
15
|
-
activesupport
|
16
|
-
bson_ext (1.8.0)
|
17
|
-
bson (~> 1.8.0)
|
10
|
+
bson (1.8.2)
|
11
|
+
bson_ext (1.8.2)
|
12
|
+
bson (~> 1.8.2)
|
18
13
|
columnize (0.3.6)
|
19
|
-
debugger (1.2.
|
14
|
+
debugger (1.2.4)
|
20
15
|
columnize (>= 0.3.1)
|
21
16
|
debugger-linecache (~> 1.1.1)
|
22
|
-
debugger-ruby_core_source (~> 1.1.
|
17
|
+
debugger-ruby_core_source (~> 1.1.7)
|
23
18
|
debugger-linecache (1.1.2)
|
24
19
|
debugger-ruby_core_source (>= 1.1.1)
|
25
|
-
debugger-ruby_core_source (1.1.
|
20
|
+
debugger-ruby_core_source (1.1.7)
|
26
21
|
diff-lcs (1.1.3)
|
27
22
|
em-mongo (0.4.3)
|
28
23
|
bson (>= 1.1.3)
|
29
24
|
eventmachine (>= 0.12.10)
|
30
|
-
em-synchrony (1.0.
|
25
|
+
em-synchrony (1.0.3)
|
31
26
|
eventmachine (>= 1.0.0.beta.1)
|
32
27
|
eventmachine (1.0.0)
|
33
28
|
hiredis (0.4.5)
|
34
|
-
|
35
|
-
multi_json (1.5.0)
|
36
|
-
oj (2.0.0)
|
29
|
+
rake (10.0.3)
|
37
30
|
redis (3.0.2)
|
38
31
|
rspec (2.12.0)
|
39
32
|
rspec-core (~> 2.12.0)
|
@@ -52,7 +45,7 @@ DEPENDENCIES
|
|
52
45
|
debugger
|
53
46
|
em-mongo
|
54
47
|
hiredis
|
55
|
-
|
48
|
+
rake
|
56
49
|
redis
|
57
50
|
rspec
|
58
51
|
uorm!
|
data/lib/uorm.rb
CHANGED
@@ -1,29 +1,32 @@
|
|
1
1
|
require 'uorm/version'
|
2
|
+
require 'time'
|
2
3
|
|
3
|
-
|
4
|
+
module Uorm
|
5
|
+
autoload :Model, 'uorm/model'
|
4
6
|
|
5
|
-
|
7
|
+
autoload :CRUD, 'uorm/crud'
|
8
|
+
module CRUD
|
9
|
+
autoload :PersistanceHelper, 'uorm/crud/persistance_helper'
|
10
|
+
autoload :Callbacks, 'uorm/crud/callbacks'
|
11
|
+
end
|
6
12
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
autoload :Model, 'uorm/model'
|
14
|
-
autoload :Callbacks, 'uorm/callbacks'
|
13
|
+
autoload :Attributes, 'uorm/attributes'
|
14
|
+
module Attributes
|
15
|
+
autoload :Field, 'uorm/attributes/field'
|
16
|
+
autoload :FieldCollection, 'uorm/attributes/field_collection'
|
17
|
+
autoload :Type, 'uorm/attributes/type'
|
18
|
+
end
|
15
19
|
|
16
|
-
autoload :Redis,
|
20
|
+
autoload :Redis, 'uorm/redis'
|
17
21
|
module Redis
|
18
|
-
autoload :Persistance,
|
19
|
-
autoload :DB, 'uorm/redis/db'
|
22
|
+
autoload :Persistance, 'uorm/redis/persistance'
|
20
23
|
end
|
21
24
|
|
22
|
-
autoload :Mongo,
|
25
|
+
autoload :Mongo, 'uorm/mongo'
|
23
26
|
module Mongo
|
24
27
|
require 'uorm/mongo/object_id'
|
25
|
-
|
26
|
-
autoload :DB, 'uorm/mongo/db'
|
27
|
-
autoload :Persistance, 'uorm/mongo/persistance'
|
28
|
+
autoload :Persistance, 'uorm/mongo/persistance'
|
28
29
|
end
|
30
|
+
|
31
|
+
autoload :Hash, 'uorm/hash'
|
29
32
|
end
|
data/lib/uorm/attributes.rb
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
module Uorm
|
2
2
|
module Attributes
|
3
|
+
|
3
4
|
def self.included base
|
4
5
|
base.instance_eval do
|
5
6
|
def field name, options
|
6
|
-
fields << Field.new(name, options[:type])
|
7
|
+
fields << ::Uorm::Attributes::Field.new(name, options[:type])
|
7
8
|
|
8
9
|
define_method name do
|
9
10
|
get_attribute name
|
@@ -15,7 +16,7 @@ module Uorm
|
|
15
16
|
end
|
16
17
|
|
17
18
|
def fields
|
18
|
-
@fields ||= FieldCollection.new
|
19
|
+
@fields ||= ::Uorm::Attributes::FieldCollection.new
|
19
20
|
end
|
20
21
|
end
|
21
22
|
end
|
@@ -40,7 +41,7 @@ module Uorm
|
|
40
41
|
end
|
41
42
|
|
42
43
|
def initialize_attributes values
|
43
|
-
@attributes =
|
44
|
+
@attributes = ::Uorm::Hash.new
|
44
45
|
update_attributes values
|
45
46
|
end
|
46
47
|
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Uorm
|
2
|
+
module Attributes
|
3
|
+
class Field
|
4
|
+
attr_reader :name, :type
|
5
|
+
|
6
|
+
def initialize name, type
|
7
|
+
@name = name.to_sym
|
8
|
+
@type = parse_type type
|
9
|
+
end
|
10
|
+
|
11
|
+
def convert value
|
12
|
+
type.convert value if value
|
13
|
+
end
|
14
|
+
|
15
|
+
def as_json value
|
16
|
+
type.as_json value if value
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def parse_type type
|
22
|
+
if ::Uorm::Attributes::Type.const_defined? type
|
23
|
+
return ::Uorm::Attributes::Type.const_get type
|
24
|
+
else
|
25
|
+
raise Attributes::Type::NotFound.new "Unknown type: #{type}"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
module Uorm
|
2
|
+
module Attributes
|
3
|
+
module Type
|
4
|
+
|
5
|
+
class Integer
|
6
|
+
class << self
|
7
|
+
def convert value
|
8
|
+
value.to_i
|
9
|
+
end
|
10
|
+
|
11
|
+
def as_json value
|
12
|
+
convert value
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
class Boolean
|
18
|
+
class << self
|
19
|
+
def convert value
|
20
|
+
value ? true : false
|
21
|
+
end
|
22
|
+
|
23
|
+
def as_json value
|
24
|
+
convert value
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
class Float
|
30
|
+
class << self
|
31
|
+
def convert value
|
32
|
+
value.to_f
|
33
|
+
end
|
34
|
+
|
35
|
+
def as_json value
|
36
|
+
convert value
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
class Time
|
42
|
+
class << self
|
43
|
+
def convert value
|
44
|
+
::Time.parse value.to_s
|
45
|
+
rescue
|
46
|
+
::Time.utc(value.to_i)
|
47
|
+
end
|
48
|
+
|
49
|
+
def as_json value
|
50
|
+
value.to_i
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
class String
|
56
|
+
class << self
|
57
|
+
def convert value
|
58
|
+
value.to_s
|
59
|
+
end
|
60
|
+
|
61
|
+
def as_json value
|
62
|
+
convert value
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
data/lib/uorm/crud.rb
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
module Uorm
|
2
|
+
module CRUD
|
3
|
+
|
4
|
+
def self.included base
|
5
|
+
base.class_eval do
|
6
|
+
include ::Uorm::CRUD::PersistanceHelper
|
7
|
+
end
|
8
|
+
|
9
|
+
base.instance_eval do
|
10
|
+
def all args = {}, &block
|
11
|
+
if block_given?
|
12
|
+
persistance.all(args) { |attrs| yield new(attrs) if attrs }
|
13
|
+
else
|
14
|
+
persistance.all(args).map { |attrs| new(attrs) }
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def find id, &block
|
19
|
+
if block_given?
|
20
|
+
persistance.find(id) { |attrs| yield new(attrs) if attrs }
|
21
|
+
else
|
22
|
+
new persistance.find(id)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def create attrs, &block
|
27
|
+
obj = new(attrs)
|
28
|
+
(block_given?) ? obj.save(&block) : obj.save
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def save &block
|
34
|
+
if id
|
35
|
+
if block_given?
|
36
|
+
cb = ::Uorm::CRUD::Callbacks::Update.new
|
37
|
+
cb.callback(&block)
|
38
|
+
persistance.update self, cb
|
39
|
+
else
|
40
|
+
persistance.update self
|
41
|
+
end
|
42
|
+
else
|
43
|
+
if block_given?
|
44
|
+
cb = ::Uorm::CRUD::Callbacks::Create.new
|
45
|
+
cb.callback(&block)
|
46
|
+
persistance.create self, cb
|
47
|
+
else
|
48
|
+
persistance.create self
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
self
|
53
|
+
end
|
54
|
+
|
55
|
+
def update attrs, &block
|
56
|
+
update_attributes attrs
|
57
|
+
if block_given?
|
58
|
+
cb = ::Uorm::CRUD::Callbacks::Update.new
|
59
|
+
cb.callback(&block) if block_given?
|
60
|
+
persistance.update self, cb
|
61
|
+
else
|
62
|
+
persistance.update self
|
63
|
+
end
|
64
|
+
self
|
65
|
+
end
|
66
|
+
|
67
|
+
def delete
|
68
|
+
persistance.delete self
|
69
|
+
self
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Uorm
|
2
|
+
module CRUD
|
3
|
+
module PersistanceHelper
|
4
|
+
def self.included base
|
5
|
+
base.instance_eval do
|
6
|
+
def persistance= value
|
7
|
+
@@persistance = value
|
8
|
+
end
|
9
|
+
|
10
|
+
def persistance
|
11
|
+
@@persistance
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def persistance
|
17
|
+
self.class.persistance
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/uorm/hash.rb
ADDED
data/lib/uorm/model.rb
CHANGED
data/lib/uorm/mongo.rb
CHANGED
@@ -1,28 +1,18 @@
|
|
1
|
+
require 'em-mongo'
|
2
|
+
require 'em-synchrony'
|
1
3
|
require 'em-synchrony/em-mongo'
|
2
4
|
|
3
5
|
module Uorm
|
4
6
|
module Mongo
|
5
7
|
def self.included base
|
6
8
|
base.instance_eval do
|
7
|
-
field :id, type:
|
8
|
-
|
9
|
-
def persistance
|
10
|
-
@persistance ||= Persistance.new self, "#{self.to_s.downcase}s"
|
11
|
-
end
|
12
|
-
|
13
|
-
def collection
|
14
|
-
persistance.collection
|
15
|
-
end
|
9
|
+
field :id, type: :ObjectId
|
16
10
|
end
|
17
11
|
|
18
12
|
def initialize values = {}
|
19
13
|
values[:id] ||= values.delete('_id') || values.delete(:_id)
|
20
14
|
super values
|
21
15
|
end
|
22
|
-
|
23
|
-
def persistance
|
24
|
-
self.class.persistance
|
25
|
-
end
|
26
16
|
end
|
27
17
|
end
|
28
18
|
end
|
data/lib/uorm/mongo/object_id.rb
CHANGED
@@ -1,13 +1,15 @@
|
|
1
1
|
module Uorm
|
2
|
-
module
|
3
|
-
|
4
|
-
class
|
5
|
-
|
6
|
-
|
7
|
-
|
2
|
+
module Attributes
|
3
|
+
module Type
|
4
|
+
class ObjectId
|
5
|
+
class << self
|
6
|
+
def convert value
|
7
|
+
::BSON::ObjectId value.to_s
|
8
|
+
end
|
8
9
|
|
9
|
-
|
10
|
-
|
10
|
+
def as_json value
|
11
|
+
value.to_s
|
12
|
+
end
|
11
13
|
end
|
12
14
|
end
|
13
15
|
end
|
@@ -1,47 +1,48 @@
|
|
1
1
|
module Uorm
|
2
2
|
module Mongo
|
3
|
-
class Persistance
|
4
|
-
attr_reader :collection, :model
|
5
|
-
|
6
|
-
def initialize model, collection_name
|
7
|
-
@model = model
|
8
|
-
@collection = DB.collection collection_name
|
9
|
-
end
|
10
|
-
|
11
|
-
def new? object
|
12
|
-
object.id ? false : true
|
13
|
-
end
|
14
|
-
|
3
|
+
class Persistance < Struct.new :model, :client
|
15
4
|
def all query = {}, &block
|
16
5
|
formatted = format_query(query)
|
17
|
-
|
18
6
|
if block_given?
|
19
|
-
|
7
|
+
client.afind(formatted).each(&block)
|
20
8
|
else
|
21
|
-
|
9
|
+
client.find(formatted)
|
22
10
|
end
|
23
11
|
end
|
24
12
|
|
25
13
|
def find id, &block
|
26
|
-
object_id = BSON::ObjectId(id.to_s)
|
14
|
+
object_id = ::BSON::ObjectId(id.to_s)
|
27
15
|
if block_given?
|
28
|
-
|
16
|
+
client.afirst(_id: object_id).callback(&block)
|
29
17
|
else
|
30
|
-
|
18
|
+
client.first(_id: object_id)
|
31
19
|
end
|
32
20
|
end
|
33
21
|
|
34
|
-
def create object,
|
35
|
-
|
36
|
-
|
22
|
+
def create object, cb = nil
|
23
|
+
if cb
|
24
|
+
safe_insert = client.safe_insert attributes_without_id object
|
25
|
+
safe_insert.callback do |object_id|
|
26
|
+
object.id = object_id
|
27
|
+
cb.succeed object
|
28
|
+
end
|
29
|
+
else
|
30
|
+
object.id = ::EM::Synchrony.sync client.safe_insert attributes_without_id object
|
31
|
+
end
|
37
32
|
end
|
38
33
|
|
39
|
-
def update object
|
40
|
-
|
34
|
+
def update object, cb = nil
|
35
|
+
if cb
|
36
|
+
safe_update = client.safe_update({ _id: object.id }, attributes_without_id(object))
|
37
|
+
safe_update.callback { cb.succeed object }
|
38
|
+
else
|
39
|
+
::EM::Synchrony.sync client.safe_update({ _id: object.id }, attributes_without_id(object))
|
40
|
+
end
|
41
41
|
end
|
42
42
|
|
43
43
|
def delete object
|
44
|
-
|
44
|
+
# wont return a deferrable :/
|
45
|
+
client.remove _id: object.id
|
45
46
|
end
|
46
47
|
|
47
48
|
private
|
@@ -49,11 +50,14 @@ module Uorm
|
|
49
50
|
def format_query hash, field = nil
|
50
51
|
hash.inject({}) do |memo, (key, value)|
|
51
52
|
raise "#{key} field unknown" unless current = field || model.fields.get(key)
|
52
|
-
|
53
|
-
memo[key] = value.is_a?(Hash) ? format_query(value, current) : current.convert(value)
|
53
|
+
memo[key] = value.respond_to?(:to_hash) ? format_query(value.to_hash, current) : current.convert(value)
|
54
54
|
memo
|
55
55
|
end
|
56
56
|
end
|
57
|
+
|
58
|
+
def attributes_without_id object
|
59
|
+
object.attributes.except(:id)
|
60
|
+
end
|
57
61
|
end
|
58
62
|
end
|
59
63
|
end
|