mongo_mapper 0.6.10 → 0.7.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.
- data/README.rdoc +5 -14
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/lib/mongo_mapper.rb +48 -56
- data/lib/mongo_mapper/document.rb +136 -164
- data/lib/mongo_mapper/embedded_document.rb +29 -354
- data/lib/mongo_mapper/plugins.rb +31 -0
- data/lib/mongo_mapper/plugins/associations.rb +105 -0
- data/lib/mongo_mapper/plugins/associations/base.rb +123 -0
- data/lib/mongo_mapper/plugins/associations/belongs_to_polymorphic_proxy.rb +30 -0
- data/lib/mongo_mapper/plugins/associations/belongs_to_proxy.rb +25 -0
- data/lib/mongo_mapper/plugins/associations/collection.rb +21 -0
- data/lib/mongo_mapper/plugins/associations/embedded_collection.rb +50 -0
- data/lib/mongo_mapper/plugins/associations/in_array_proxy.rb +139 -0
- data/lib/mongo_mapper/plugins/associations/many_documents_as_proxy.rb +28 -0
- data/lib/mongo_mapper/plugins/associations/many_documents_proxy.rb +117 -0
- data/lib/mongo_mapper/plugins/associations/many_embedded_polymorphic_proxy.rb +31 -0
- data/lib/mongo_mapper/plugins/associations/many_embedded_proxy.rb +23 -0
- data/lib/mongo_mapper/plugins/associations/many_polymorphic_proxy.rb +13 -0
- data/lib/mongo_mapper/plugins/associations/one_proxy.rb +68 -0
- data/lib/mongo_mapper/plugins/associations/proxy.rb +118 -0
- data/lib/mongo_mapper/plugins/callbacks.rb +65 -0
- data/lib/mongo_mapper/plugins/clone.rb +13 -0
- data/lib/mongo_mapper/plugins/descendants.rb +16 -0
- data/lib/mongo_mapper/plugins/dirty.rb +119 -0
- data/lib/mongo_mapper/plugins/equality.rb +23 -0
- data/lib/mongo_mapper/plugins/identity_map.rb +122 -0
- data/lib/mongo_mapper/plugins/inspect.rb +14 -0
- data/lib/mongo_mapper/plugins/keys.rb +324 -0
- data/lib/mongo_mapper/plugins/logger.rb +17 -0
- data/lib/mongo_mapper/plugins/pagination.rb +24 -0
- data/lib/mongo_mapper/plugins/pagination/proxy.rb +68 -0
- data/lib/mongo_mapper/plugins/protected.rb +45 -0
- data/lib/mongo_mapper/plugins/rails.rb +45 -0
- data/lib/mongo_mapper/plugins/serialization.rb +105 -0
- data/lib/mongo_mapper/plugins/validations.rb +46 -0
- data/lib/mongo_mapper/query.rb +130 -0
- data/lib/mongo_mapper/support.rb +40 -17
- data/lib/mongo_mapper/support/descendant_appends.rb +46 -0
- data/lib/mongo_mapper/support/find.rb +77 -0
- data/mongo_mapper.gemspec +55 -38
- data/performance/read_write.rb +52 -0
- data/specs.watchr +23 -2
- data/test/functional/associations/test_belongs_to_proxy.rb +12 -10
- data/test/functional/associations/test_many_documents_as_proxy.rb +4 -21
- data/test/functional/associations/test_many_documents_proxy.rb +2 -8
- data/test/functional/associations/test_many_embedded_polymorphic_proxy.rb +59 -39
- data/test/functional/associations/test_many_embedded_proxy.rb +145 -81
- data/test/functional/associations/test_many_polymorphic_proxy.rb +2 -40
- data/test/functional/associations/test_one_proxy.rb +25 -10
- data/test/functional/test_binary.rb +2 -8
- data/test/functional/test_callbacks.rb +1 -5
- data/test/functional/test_dirty.rb +27 -23
- data/test/functional/test_document.rb +224 -165
- data/test/functional/test_embedded_document.rb +72 -82
- data/test/functional/test_identity_map.rb +508 -0
- data/test/functional/test_modifiers.rb +15 -5
- data/test/functional/test_pagination.rb +1 -3
- data/test/functional/test_protected.rb +155 -0
- data/test/functional/test_string_id_compatibility.rb +7 -12
- data/test/functional/test_validations.rb +26 -58
- data/test/models.rb +0 -39
- data/test/test_helper.rb +37 -3
- data/test/unit/associations/test_base.rb +5 -5
- data/test/unit/associations/test_proxy.rb +8 -6
- data/test/unit/test_descendant_appends.rb +71 -0
- data/test/unit/test_document.rb +71 -76
- data/test/unit/test_dynamic_finder.rb +27 -29
- data/test/unit/test_embedded_document.rb +555 -601
- data/test/unit/{test_key.rb → test_keys.rb} +2 -5
- data/test/unit/test_mongo_mapper.rb +69 -9
- data/test/unit/test_pagination.rb +40 -32
- data/test/unit/test_plugins.rb +50 -0
- data/test/unit/{test_finder_options.rb → test_query.rb} +74 -65
- data/test/unit/test_rails.rb +123 -0
- data/test/unit/{test_serializations.rb → test_serialization.rb} +1 -2
- data/test/unit/test_support.rb +23 -7
- data/test/unit/test_time_zones.rb +3 -4
- data/test/unit/test_validations.rb +58 -17
- metadata +53 -36
- data/lib/mongo_mapper/associations.rb +0 -78
- data/lib/mongo_mapper/associations/base.rb +0 -119
- data/lib/mongo_mapper/associations/belongs_to_polymorphic_proxy.rb +0 -26
- data/lib/mongo_mapper/associations/belongs_to_proxy.rb +0 -21
- data/lib/mongo_mapper/associations/collection.rb +0 -19
- data/lib/mongo_mapper/associations/in_array_proxy.rb +0 -137
- data/lib/mongo_mapper/associations/many_documents_as_proxy.rb +0 -26
- data/lib/mongo_mapper/associations/many_documents_proxy.rb +0 -115
- data/lib/mongo_mapper/associations/many_embedded_polymorphic_proxy.rb +0 -31
- data/lib/mongo_mapper/associations/many_embedded_proxy.rb +0 -54
- data/lib/mongo_mapper/associations/many_polymorphic_proxy.rb +0 -11
- data/lib/mongo_mapper/associations/one_proxy.rb +0 -64
- data/lib/mongo_mapper/associations/proxy.rb +0 -116
- data/lib/mongo_mapper/callbacks.rb +0 -61
- data/lib/mongo_mapper/dirty.rb +0 -117
- data/lib/mongo_mapper/dynamic_finder.rb +0 -74
- data/lib/mongo_mapper/finder_options.rb +0 -145
- data/lib/mongo_mapper/key.rb +0 -36
- data/lib/mongo_mapper/mongo_mapper.rb +0 -125
- data/lib/mongo_mapper/pagination.rb +0 -66
- data/lib/mongo_mapper/rails_compatibility/document.rb +0 -15
- data/lib/mongo_mapper/rails_compatibility/embedded_document.rb +0 -28
- data/lib/mongo_mapper/serialization.rb +0 -54
- data/lib/mongo_mapper/serializers/json_serializer.rb +0 -48
- data/lib/mongo_mapper/validations.rb +0 -39
- data/test/functional/test_rails_compatibility.rb +0 -25
@@ -1,28 +0,0 @@
|
|
1
|
-
module MongoMapper
|
2
|
-
module RailsCompatibility
|
3
|
-
module EmbeddedDocument
|
4
|
-
def self.included(model)
|
5
|
-
model.class_eval do
|
6
|
-
extend ClassMethods
|
7
|
-
|
8
|
-
alias_method :new_record?, :new?
|
9
|
-
end
|
10
|
-
|
11
|
-
class << model
|
12
|
-
alias has_many many
|
13
|
-
alias has_one one
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
module ClassMethods
|
18
|
-
def column_names
|
19
|
-
keys.keys
|
20
|
-
end
|
21
|
-
|
22
|
-
def human_name
|
23
|
-
self.name.demodulize.titleize
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
@@ -1,54 +0,0 @@
|
|
1
|
-
require 'active_support/json'
|
2
|
-
|
3
|
-
module MongoMapper
|
4
|
-
module Serialization
|
5
|
-
class Serializer
|
6
|
-
attr_reader :options
|
7
|
-
|
8
|
-
def initialize(record, options={})
|
9
|
-
@record, @options = record, options.dup
|
10
|
-
end
|
11
|
-
|
12
|
-
def serializable_key_names
|
13
|
-
key_names = @record.attributes.keys
|
14
|
-
|
15
|
-
if options[:only]
|
16
|
-
options.delete(:except)
|
17
|
-
key_names = key_names & Array(options[:only]).collect { |n| n.to_s }
|
18
|
-
else
|
19
|
-
options[:except] = Array(options[:except])
|
20
|
-
key_names = key_names - options[:except].collect { |n| n.to_s }
|
21
|
-
end
|
22
|
-
|
23
|
-
key_names
|
24
|
-
end
|
25
|
-
|
26
|
-
def serializable_method_names
|
27
|
-
Array(options[:methods]).inject([]) do |method_attributes, name|
|
28
|
-
method_attributes << name if @record.respond_to?(name.to_s)
|
29
|
-
method_attributes
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
def serializable_names
|
34
|
-
serializable_key_names + serializable_method_names
|
35
|
-
end
|
36
|
-
|
37
|
-
def serializable_record
|
38
|
-
returning(serializable_record = {}) do
|
39
|
-
serializable_names.each { |name| serializable_record[name] = @record.send(name) }
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
def serialize
|
44
|
-
# overwrite to implement
|
45
|
-
end
|
46
|
-
|
47
|
-
def to_s(&block)
|
48
|
-
serialize(&block)
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
require 'mongo_mapper/serializers/json_serializer'
|
@@ -1,48 +0,0 @@
|
|
1
|
-
module MongoMapper
|
2
|
-
module Serialization
|
3
|
-
def self.included(base)
|
4
|
-
base.cattr_accessor :include_root_in_json, :instance_writer => false
|
5
|
-
base.extend ClassMethods
|
6
|
-
end
|
7
|
-
|
8
|
-
def to_json(options={})
|
9
|
-
apply_to_json_defaults(options)
|
10
|
-
|
11
|
-
if include_root_in_json
|
12
|
-
"{#{self.class.json_class_name}: #{JsonSerializer.new(self, options).to_s}}"
|
13
|
-
else
|
14
|
-
JsonSerializer.new(self, options).to_s
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
def from_json(json)
|
19
|
-
self.attributes = ActiveSupport::JSON.decode(json)
|
20
|
-
self
|
21
|
-
end
|
22
|
-
|
23
|
-
class JsonSerializer < MongoMapper::Serialization::Serializer
|
24
|
-
def serialize
|
25
|
-
serializable_record.to_json
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
module ClassMethods
|
30
|
-
def json_class_name
|
31
|
-
@json_class_name ||= name.demodulize.underscore.inspect
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
private
|
36
|
-
def apply_to_json_defaults(options)
|
37
|
-
unless options[:only]
|
38
|
-
methods = [options.delete(:methods)].flatten.compact
|
39
|
-
methods << :id
|
40
|
-
options[:methods] = methods.uniq
|
41
|
-
end
|
42
|
-
|
43
|
-
except = [options.delete(:except)].flatten.compact
|
44
|
-
except << :_id
|
45
|
-
options[:except] = except
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
@@ -1,39 +0,0 @@
|
|
1
|
-
module MongoMapper
|
2
|
-
module Validations
|
3
|
-
module Macros
|
4
|
-
def validates_uniqueness_of(*args)
|
5
|
-
add_validations(args, MongoMapper::Validations::ValidatesUniquenessOf)
|
6
|
-
end
|
7
|
-
end
|
8
|
-
|
9
|
-
class ValidatesUniquenessOf < Validatable::ValidationBase
|
10
|
-
option :scope, :case_sensitive
|
11
|
-
default :case_sensitive => true
|
12
|
-
|
13
|
-
def valid?(instance)
|
14
|
-
value = instance[attribute]
|
15
|
-
return true if allow_blank && value.blank?
|
16
|
-
base_conditions = case_sensitive ? {self.attribute => value} : {}
|
17
|
-
doc = instance.class.first(base_conditions.merge(scope_conditions(instance)).merge(where_conditions(instance)))
|
18
|
-
doc.nil? || instance._id == doc._id
|
19
|
-
end
|
20
|
-
|
21
|
-
def message(instance)
|
22
|
-
super || "has already been taken"
|
23
|
-
end
|
24
|
-
|
25
|
-
def scope_conditions(instance)
|
26
|
-
return {} unless scope
|
27
|
-
Array(scope).inject({}) do |conditions, key|
|
28
|
-
conditions.merge(key => instance[key])
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
def where_conditions(instance)
|
33
|
-
conditions = {}
|
34
|
-
conditions[attribute] = /#{instance[attribute].to_s}/i unless case_sensitive
|
35
|
-
conditions
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class TestRailsCompatibility < Test::Unit::TestCase
|
4
|
-
class Item
|
5
|
-
include MongoMapper::EmbeddedDocument
|
6
|
-
key :for_all, String
|
7
|
-
end
|
8
|
-
|
9
|
-
class Order
|
10
|
-
include MongoMapper::Document
|
11
|
-
many :items, :class_name => 'TestRailsCompatibility::Item'
|
12
|
-
key :order_only, String
|
13
|
-
end
|
14
|
-
|
15
|
-
context "Document" do
|
16
|
-
setup do
|
17
|
-
Order.collection.remove
|
18
|
-
end
|
19
|
-
|
20
|
-
should "alias new to new_record?" do
|
21
|
-
instance = Order.new
|
22
|
-
instance.new_record?.should == instance.new?
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|