mongo_mapper_ext 0.2.2 → 0.2.3

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.
Files changed (37) hide show
  1. data/Rakefile +5 -5
  2. data/lib/mongo_db_ext/micelaneous.rb +12 -0
  3. data/lib/mongo_mapper_ext/gems.rb +17 -2
  4. data/lib/mongo_mapper_ext/hacks/active_model.rb +16 -0
  5. data/lib/mongo_mapper_ext/hacks/fixes.rb +37 -0
  6. data/lib/mongo_mapper_ext/{micelaneous.rb → logging.rb} +30 -8
  7. data/lib/mongo_mapper_ext/migration.rb +1 -1
  8. data/lib/mongo_mapper_ext/mongo_mapper.rb +0 -25
  9. data/lib/mongo_mapper_ext/plugins/{attributes_cache.rb → attribute_cache.rb} +2 -1
  10. data/lib/mongo_mapper_ext/plugins/attribute_convertors.rb +79 -0
  11. data/lib/mongo_mapper_ext/plugins/belongs_to_with_counter_cache.rb +45 -0
  12. data/lib/mongo_mapper_ext/plugins/carrierwave.rb +60 -0
  13. data/lib/mongo_mapper_ext/plugins/{default_scope.rb → custom_scope.rb} +3 -2
  14. data/lib/mongo_mapper_ext/plugins/db_config.rb +84 -46
  15. data/lib/mongo_mapper_ext/plugins/micelaneous.rb +24 -68
  16. data/lib/mongo_mapper_ext/rad/file_uploader.rb +28 -0
  17. data/lib/mongo_mapper_ext/rad.rb +2 -0
  18. data/lib/mongo_mapper_ext/spec.rb +103 -0
  19. data/lib/mongo_mapper_ext/{migrate.rake → tasks.rb} +3 -15
  20. data/lib/mongo_mapper_ext.rb +41 -24
  21. data/readme.md +74 -2
  22. data/spec/attribute_convertors_spec.rb +71 -0
  23. data/spec/carrierwave_spec/plane.jpg +0 -0
  24. data/spec/carrierwave_spec.rb +42 -0
  25. data/spec/{scope_spec.rb → custom_scope_spec.rb} +26 -32
  26. data/spec/micelaneous_plugin_spec.rb +34 -20
  27. data/spec/micelaneous_spec.rb +105 -24
  28. data/spec/migration_spec.rb +8 -17
  29. data/spec/{mm_spec.rb → mongo_mapper_spec.rb} +0 -0
  30. data/spec/spec_helper.rb +2 -5
  31. data/spec/uploading_spec/ship.jpg +0 -0
  32. data/spec/uploading_spec//321/204/320/260/320/270/314/206/320/273 /321/201 /320/277/321/200/320/276/320/261/320/265/320/273/320/260/320/274/320/270.txt" +1 -0
  33. data/spec/uploading_spec.rb +49 -0
  34. metadata +164 -72
  35. data/lib/mongo_mapper_ext/db_config.rb +0 -67
  36. data/lib/mongo_mapper_ext/hacks/time_measuring.rb +0 -44
  37. data/lib/mongo_mapper_ext/spec/helper.rb +0 -61
@@ -0,0 +1,28 @@
1
+ require 'carrierwave/processing/mini_magick'
2
+
3
+ module Models
4
+ class FileUploader < CarrierWave::Uploader::Base
5
+ include CarrierWave::MiniMagick
6
+
7
+ storage rad.config.fs.type(:file)
8
+
9
+ # def sanitize_regexp
10
+ # /[^[:word:]\.\-\+\s_]/i
11
+ # end
12
+
13
+ def file_path
14
+ "#{rad.config.fs.prefix('/fs')}/system/#{model.class.model_name.underscore}/#{model.id}"
15
+ end
16
+
17
+ def store_dir
18
+ "#{root}#{file_path}"
19
+ end
20
+
21
+ def extension_white_list
22
+ [/.*/]
23
+ end
24
+
25
+ def cache_dir; rad.config.fs.cache_path! end
26
+ def root; rad.config.fs.path! end
27
+ end
28
+ end
@@ -0,0 +1,2 @@
1
+ require 'rad'
2
+ require 'mongo_mapper_ext/rad/file_uploader'
@@ -0,0 +1,103 @@
1
+ require 'mongo_mapper_ext'
2
+
3
+ #
4
+ # disabling :use_database, all tests will use the same :test database.
5
+ #
6
+ module MongoMapper::Plugins::DbConfig::ClassMethods
7
+ alias_method :_use_database, :use_database
8
+ def use_database database_alias; end
9
+ end
10
+
11
+
12
+ #
13
+ # Disabling indexes in testing environment
14
+ #
15
+ if Object.const_defined?(:Rad)
16
+ MongoMapper::Plugins::Indexes::ClassMethods.class_eval do
17
+ alias_method :original_ensure_index, :ensure_index
18
+ def ensure_index_stub *args; end
19
+ end
20
+
21
+ rad.after :mode, bang: false do
22
+ if rad.production?
23
+ MongoMapper::Plugins::Indexes::ClassMethods.send :alias_method, :ensure_index, :original_ensure_index
24
+ else
25
+ MongoMapper::Plugins::Indexes::ClassMethods.send :alias_method, :ensure_index, :ensure_index_stub
26
+ end
27
+ end
28
+ end
29
+
30
+
31
+ #
32
+ # Clear db before each test
33
+ #
34
+ rspec do
35
+ def self.with_mongo_mapper
36
+ before :all do
37
+ MongoMapper.db_config = {
38
+ 'default' => {'name' => "test"}
39
+ }
40
+
41
+ MongoMapper.database = 'test'
42
+ end
43
+
44
+ before do
45
+ MongoMapper.db_config.each do |db_alias, opt|
46
+ db = MongoMapper.databases[db_alias]
47
+ db.collection_names.each do |name|
48
+ next if name =~ /^system\./
49
+ db.collection(name).drop
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
55
+
56
+
57
+ #
58
+ # Silence logger
59
+ #
60
+ MongoMapper.logger = Logger.new(nil)
61
+ if defined? Paperclip
62
+ Paperclip.class_eval do
63
+ def self.logger
64
+ @logger ||= Logger.new(nil)
65
+ end
66
+ end
67
+ end
68
+
69
+
70
+ #
71
+ # Files
72
+ #
73
+ rspec do
74
+ class << self
75
+ def with_files
76
+ path, cache_path = '/tmp/spec_fs', '/tmp/spec_fs_cache'
77
+
78
+ before do
79
+ rad.config.merge!({fs: {path: path, cache_path: cache_path}}, override: true)
80
+
81
+ Models::FileUploader.storage :file
82
+
83
+ CarrierWave.configure do |config|
84
+ config.storage = :file
85
+ config.enable_processing = false
86
+
87
+ config.cache_dir = rad.config.fs.cache_path!
88
+ config.root = rad.config.fs.path!
89
+ end
90
+ end
91
+
92
+ before do
93
+ path.to_dir.destroy
94
+ cache_path.to_dir.destroy
95
+ end
96
+
97
+ after do
98
+ path.to_dir.destroy
99
+ cache_path.to_dir.destroy
100
+ end
101
+ end
102
+ end
103
+ end
@@ -1,23 +1,11 @@
1
- Rake::TaskManager.class_eval do
2
- def remove_task(task_name)
3
- @tasks.delete(task_name.to_s)
4
- end
5
- end
6
-
7
- def remove_task(task_name)
8
- Rake.application.remove_task(task_name)
9
- end
10
-
11
1
  namespace :db do
12
-
13
- remove_task 'db:migrate'
14
2
  desc "Migrate Database"
15
- task :migrate => :environment do
3
+ task migrate: :environment do
16
4
  ::Migration = MongoMapper::Migration
17
- Dir["#{Rails.root}/lib/db/**/*.rb"].each{|f| require f.sub(/\.rb$/, '')}
5
+ Dir["#{rad.config.runtime_dir!}/db/**/*.rb"].each{|f| require f.sub(/\.rb$/, '')}
18
6
 
19
7
  database_alias = ENV['d'] || ENV['database']
20
- database_alias = 'accounts' if database_alias.blank?
8
+ database_alias = 'default' if database_alias.blank?
21
9
 
22
10
  version = ENV['v'] || ENV['version']
23
11
  if version.blank?
@@ -1,32 +1,49 @@
1
1
  require 'mongo_mapper_ext/gems'
2
2
 
3
3
  require 'mongo_mapper'
4
+ require 'carrierwave'
4
5
 
5
- [
6
- 'hacks/fixes',
7
- 'hacks/time_measuring',
8
- 'migration',
9
- 'mongo_mapper',
10
- 'view_helpers',
11
- 'db_config',
12
- 'micelaneous',
6
+ %w(
7
+ micelaneous
8
+ ).each{|file| require "mongo_db_ext/#{file}"}
9
+
10
+ %w(
11
+ hacks/fixes
12
+ hacks/active_model
13
13
 
14
- 'plugins/default_scope',
15
- # 'plugins/db_config',
16
- 'plugins/attributes_cache',
17
- 'plugins/micelaneous',
18
- ].each do |file|
19
- require "mongo_mapper_ext/#{file}"
20
- end
14
+ migration
15
+ mongo_mapper
16
+ view_helpers
17
+ logging
18
+
19
+ plugins/db_config
20
+ plugins/custom_scope
21
+ plugins/attribute_cache
22
+ plugins/carrierwave
23
+ plugins/attribute_convertors
24
+ plugins/micelaneous
25
+ plugins/belongs_to_with_counter_cache
26
+ ).each{|file| require "mongo_mapper_ext/#{file}"}
21
27
 
22
- module CommonPluginsAddition
23
- def self.included(model)
24
- model.plugin MongoMapper::Plugins::DefaultScope
25
- # model.plugin MongoMapper::Plugins::DbConfig
26
- model.plugin MongoMapper::Plugins::AttributesCache
27
- model.plugin MongoMapper::Plugins::Micelaneous
28
-
29
- model.attr_protected :id, :_id, :_type, :created_at, :updated_at
28
+ #
29
+ # Default plugins and settings
30
+ #
31
+ module MongoMapper::Plugins
32
+ [CustomScope, AttributeCache, AttributeConvertors, BelongsToWithCounterCache, Micelaneous, CarrierWave, DbConfig].each do |plugin|
33
+ ::MongoMapper::Document.send :include, plugin
30
34
  end
31
35
  end
32
- MongoMapper::Document.append_inclusions(CommonPluginsAddition)
36
+
37
+ #
38
+ # Attribute protection
39
+ #
40
+ MongoMapper::Document.included do
41
+ attr_protected :id, :_id, :_type, :created_at, :updated_at
42
+ end
43
+
44
+
45
+ #
46
+ # Locales
47
+ #
48
+ dir = File.expand_path("#{__FILE__}/../..")
49
+ I18n.load_path += Dir["#{dir}/locales/**/*.{rb,yml}"]
data/readme.md CHANGED
@@ -1,3 +1,75 @@
1
- # Extensions for MongoMapper.
1
+ # Extensions for MongoMapper
2
2
 
3
- [add readme, for now go to specs]
3
+ ## Simultaneous use of multiple databases
4
+
5
+ MongoMapper.db_config = {
6
+ 'default' => {'name' => "default_test"}
7
+ 'global' => {'name' => 'global_test'},
8
+ }
9
+
10
+ # Comment will be connected to :default database
11
+ module Comment
12
+ belongs_to :user
13
+ end
14
+
15
+ # User will be connected to :global database
16
+ module User
17
+ use_database :global
18
+
19
+ has_many :comments
20
+ end
21
+
22
+ ## Migrations
23
+
24
+ # Works with multiple databases, support versions
25
+ Migration.define :default, 1 do |m|
26
+ m.up{Sample.create name: 'name'}
27
+ m.down{Sample.destroy_all}
28
+ end
29
+
30
+ # Tell it the version of database You need, and it's smart enough to figure out all needed :up or :down
31
+ Migration.update(:global, 1)
32
+
33
+
34
+ ## Custom Scope
35
+ :with_scope, :default_scope, :with_exclusive_scope, see spec for details.
36
+
37
+ ## Counter Cache
38
+
39
+ class Comment
40
+ belongs_to :post, counter_cache: true
41
+ end
42
+
43
+ Post.comments_count
44
+
45
+ ## Attribute Converters
46
+
47
+ For editing complex objects in forms:
48
+
49
+ class Post
50
+ key :tags, Array, as_string: :line
51
+ end
52
+
53
+ @post.tags_as_string = "personal, article"
54
+ @post.tags # => ['personal', 'article']
55
+ @post.tags_as_string # => "personal, article"
56
+
57
+ ## Handy upserts
58
+
59
+ @post.upsert! :$inc => {comments_count: 1}
60
+
61
+ ## CarrierWave integration
62
+
63
+ File attachments (stored on File System, S3, MongoDB-GridFS)
64
+
65
+ class User
66
+ mount_uploader :avatar, AvatarUploader
67
+ end
68
+
69
+ ## more
70
+
71
+ Attribute Cache, Spec Helpers (auto-clean db before each test).
72
+
73
+ # License
74
+
75
+ Copyright (c) Alexey Petrushin [http://4ire.net](http://4ire.net), released under the MIT license.
@@ -0,0 +1,71 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Attribute Convertors" do
4
+ with_mongo_mapper
5
+
6
+ after(:all){remove_constants %w(AsStringSample)}
7
+
8
+ before do
9
+ @convertors = MongoMapper::Plugins::AttributeConvertors::ClassMethods::ATTRIBUTE_CONVERTORS
10
+ @convertors[:test_convertor] = {
11
+ from_string: -> s {"from_string: #{s}"},
12
+ to_string: -> v {"to_string: #{v}"}
13
+ }
14
+ end
15
+
16
+ it ":line convertor" do
17
+ v = ['a', 'b']
18
+ str_v = 'a, b'
19
+ @convertors[:line][:from_string].call(str_v).should == v
20
+ @convertors[:line][:to_string].call(v).should == str_v
21
+ end
22
+
23
+ it ":yaml convertor" do
24
+ v = {'a' => 'b'}
25
+ str_v = v.to_yaml.strip
26
+
27
+ @convertors[:yaml][:from_string].call(str_v).should == v
28
+ @convertors[:yaml][:to_string].call(v).should == str_v
29
+ end
30
+
31
+ it ":json convertor" do
32
+ v = {'a' => 'b'}
33
+ str_v = v.to_json.strip
34
+ @convertors[:json][:from_string].call(str_v).should == v
35
+ @convertors[:json][:to_string].call(v).should == str_v
36
+ end
37
+
38
+ it ":key extension" do
39
+ class ::AsStringSample
40
+ include MongoMapper::Document
41
+ include MongoMapper::Plugins::Micelaneous
42
+
43
+ key :key, String, as_string: :test_convertor
44
+ key :protected_key, String, as_string: :test_convertor, protected: true
45
+ end
46
+
47
+ o = AsStringSample.new
48
+
49
+ # get
50
+ o.key_as_string.should == 'to_string: '
51
+ o.key = 'value'
52
+ o.clear_cache
53
+ o.key_as_string.should == 'to_string: value'
54
+
55
+ # set
56
+ o.key_as_string = ''
57
+ o.key.should == 'from_string: '
58
+ o.key_as_string = 'value'
59
+ o.key.should == 'from_string: value'
60
+
61
+ # mass assignment
62
+ o.key = ''
63
+ o.update_attributes key_as_string: 'value'
64
+ o.key.should == 'from_string: value'
65
+
66
+ # protection
67
+ o.protected_key = ''
68
+ o.update_attributes protected_key_as_string: 'value'
69
+ o.protected_key.should == ''
70
+ end
71
+ end
Binary file
@@ -0,0 +1,42 @@
1
+ require 'spec_helper'
2
+
3
+ describe "MongoMapper & CarrierWave" do
4
+ with_mongo_mapper
5
+ with_tmp_spec_dir
6
+
7
+ before :all do
8
+ class PlaneUploader < CarrierWave::Uploader::Base
9
+ storage :file
10
+
11
+ class << self
12
+ attr_accessor :store_dir
13
+ end
14
+
15
+ def store_dir
16
+ self.class.store_dir
17
+ end
18
+ end
19
+
20
+ class Plane
21
+ include MongoMapper::Document
22
+
23
+ mount_uploader :image, PlaneUploader
24
+ end
25
+ end
26
+ after(:all){remove_constants :Plane, :PlaneUploader}
27
+
28
+ before do
29
+ PlaneUploader.store_dir = "#{spec_dir}/data"
30
+ end
31
+
32
+ it "basic" do
33
+ plane = Plane.new
34
+ File.open "#{spec_dir}/plane.jpg" do |f|
35
+ plane.image = f
36
+ plane.save!
37
+ end
38
+
39
+ plane.image.current_path.should == '/tmp/carrierwave_spec/data/plane.jpg'
40
+ File.should exist("#{spec_dir}/data/plane.jpg")
41
+ end
42
+ end
@@ -1,29 +1,23 @@
1
1
  require 'spec_helper'
2
2
 
3
- require "mongo_mapper_ext/plugins/default_scope"
4
-
5
3
  describe "MongoMapper Default Scope" do
6
- before :all do
7
- MongoMapper.database = 'test'
8
- end
4
+ with_mongo_mapper
9
5
 
10
- before :each do
6
+ before do
11
7
  class ::ScopeSample
12
8
  include MongoMapper::Document
13
- plugin MongoMapper::Plugins::DefaultScope
9
+ include MongoMapper::Plugins::CustomScope
14
10
 
15
11
  key :name, String
16
12
  key :_type, String
17
13
  end
18
14
 
19
15
  ScopeSample.delete_all
20
- ScopeSample.create! :name => 'a'
21
- ScopeSample.create! :name => 'b'
16
+ ScopeSample.create! name: 'a'
17
+ ScopeSample.create! name: 'b'
22
18
  end
23
19
 
24
- after :each do
25
- Object.send :remove_const, :ScopeSample if Object.const_defined? :ScopeSample
26
- end
20
+ after(:all){remove_constants :ScopeSample}
27
21
 
28
22
  it "should not affect objects without default_scope" do
29
23
  ScopeSample.count.should == 2
@@ -31,7 +25,7 @@ describe "MongoMapper Default Scope" do
31
25
  end
32
26
 
33
27
  it "default_scope" do
34
- ScopeSample.send :default_scope, :name => 'a'
28
+ ScopeSample.send :default_scope, name: 'a'
35
29
  ScopeSample.count.should == 1
36
30
  ScopeSample.all.count.should == 1
37
31
  ScopeSample.first.name.should == 'a'
@@ -39,7 +33,7 @@ describe "MongoMapper Default Scope" do
39
33
 
40
34
  it "default_scope as block" do
41
35
  ScopeSample.send :default_scope do
42
- {:name => 'a'}
36
+ {name: 'a'}
43
37
  end
44
38
  ScopeSample.count.should == 1
45
39
  ScopeSample.all.count.should == 1
@@ -47,12 +41,12 @@ describe "MongoMapper Default Scope" do
47
41
  end
48
42
 
49
43
  it "default_scope should be inherited" do
50
- ScopeSample.send :default_scope, :name => 'a'
44
+ ScopeSample.send :default_scope, name: 'a'
51
45
  class ScopeSampleAncestor < ScopeSample
52
46
  end
53
47
 
54
- ScopeSampleAncestor.create! :name => 'a'
55
- ScopeSampleAncestor.create! :name => 'b'
48
+ ScopeSampleAncestor.create! name: 'a'
49
+ ScopeSampleAncestor.create! name: 'b'
56
50
 
57
51
  ScopeSampleAncestor.count.should == 1
58
52
  ScopeSampleAncestor.all.count.should == 1
@@ -60,13 +54,13 @@ describe "MongoMapper Default Scope" do
60
54
  end
61
55
 
62
56
  it "ancestors should be able to override default_scope" do
63
- ScopeSample.send :default_scope, :name => 'a'
57
+ ScopeSample.send :default_scope, name: 'a'
64
58
  class ScopeSampleAncestor2 < ScopeSample
65
- default_scope :name => 'b'
59
+ default_scope name: 'b'
66
60
  end
67
61
 
68
- ScopeSampleAncestor2.create! :name => 'a'
69
- ScopeSampleAncestor2.create! :name => 'b'
62
+ ScopeSampleAncestor2.create! name: 'a'
63
+ ScopeSampleAncestor2.create! name: 'b'
70
64
 
71
65
  ScopeSampleAncestor2.count.should == 1
72
66
  ScopeSampleAncestor2.all.count.should == 1
@@ -74,13 +68,13 @@ describe "MongoMapper Default Scope" do
74
68
  end
75
69
 
76
70
  it "shouldn't allow to nest with_exclusive_scope" do
77
- lambda{
71
+ -> {
78
72
  ScopeSample.with_exclusive_scope do
79
73
  ScopeSample.with_exclusive_scope{}
80
74
  end
81
75
  }.should raise_error(AssertionError)
82
76
 
83
- lambda{
77
+ -> {
84
78
  ScopeSample.with_exclusive_scope do
85
79
  ScopeSample.with_scope{}
86
80
  end
@@ -88,10 +82,10 @@ describe "MongoMapper Default Scope" do
88
82
  end
89
83
 
90
84
  it "with_exclusive_scope should clear other scopes" do
91
- ScopeSample.send :default_scope, :name => 'a'
85
+ ScopeSample.send :default_scope, name: 'a'
92
86
 
93
- ScopeSample.with_scope :name => 'a' do
94
- ScopeSample.with_exclusive_scope :name => 'b' do
87
+ ScopeSample.with_scope name: 'a' do
88
+ ScopeSample.with_exclusive_scope name: 'b' do
95
89
  ScopeSample.count.should == 1
96
90
  ScopeSample.first.name.should == 'b'
97
91
  end
@@ -99,7 +93,7 @@ describe "MongoMapper Default Scope" do
99
93
  end
100
94
 
101
95
  it "with_scope" do
102
- ScopeSample.with_scope :name => 'a' do
96
+ ScopeSample.with_scope name: 'a' do
103
97
  ScopeSample.count.should == 1
104
98
  ScopeSample.first.name.should == 'a'
105
99
  end
@@ -109,13 +103,13 @@ describe "MongoMapper Default Scope" do
109
103
  ScopeSample.class_eval do
110
104
  key :name2, String
111
105
  key :name3, String
112
- default_scope :name => 'a'
106
+ default_scope name: 'a'
113
107
  end
114
- ScopeSample.create! :name => 'a', :name2 => 'a2', :name3 => 'a3'
115
- ScopeSample.create! :name => 'b', :name2 => 'b2', :name3 => 'b3'
108
+ ScopeSample.create! name: 'a', name2: 'a2', name3: 'a3'
109
+ ScopeSample.create! name: 'b', name2: 'b2', name3: 'b3'
116
110
 
117
- ScopeSample.with_scope :name2 => 'a2' do
118
- ScopeSample.with_scope :name3 => 'a3' do
111
+ ScopeSample.with_scope name2: 'a2' do
112
+ ScopeSample.with_scope name3: 'a3' do
119
113
  ScopeSample.count.should == 1
120
114
  ScopeSample.first.name2.should == 'a2'
121
115
  end
@@ -1,40 +1,27 @@
1
1
  require 'spec_helper'
2
2
 
3
- require "mongo_mapper_ext/micelaneous"
4
- require "mongo_mapper_ext/plugins/micelaneous"
5
-
6
3
  describe "MongoMapper Default Scope" do
4
+ with_mongo_mapper
7
5
 
8
6
  before :all do
9
7
  class ::Post
10
8
  include MongoMapper::Document
11
- plugin MongoMapper::Plugins::Micelaneous
9
+ include MongoMapper::Plugins::Micelaneous
12
10
 
13
- key :comments_count, Integer, :default => 0
11
+ key :comments_count, Integer, default: 0
14
12
  has_many :comments
15
13
  end
16
14
 
17
15
  class ::Comment
18
16
  include MongoMapper::Document
19
- plugin MongoMapper::Plugins::Micelaneous
17
+ include MongoMapper::Plugins::Micelaneous
20
18
 
21
19
  key :post_id
22
- belongs_to :post, :counter_cache => true
23
- end
24
-
25
- MongoMapper.database = 'test'
26
- end
27
-
28
- after :all do
29
- %w{Post Comment}.each do |obj_name|
30
- Object.send :remove_const, obj_name if Object.const_defined? obj_name
20
+ belongs_to :post, counter_cache: true
31
21
  end
32
- end
22
+ end
23
+ after(:all){remove_constants %w{Post Comment Post2 Namespace}}
33
24
 
34
- before :each do
35
- [Post, Comment].every.delete_all
36
- end
37
-
38
25
  it "should increase count of comments" do
39
26
  post = Post.create!
40
27
  comment = post.comments.create!
@@ -53,4 +40,31 @@ describe "MongoMapper Default Scope" do
53
40
  post.reload
54
41
  post.comments_count.should == 0
55
42
  end
43
+
44
+ describe "model_name" do
45
+ it "basic" do
46
+ Post.model_name.should == "Post"
47
+ Post.model_name "SuperPost"
48
+ Post.model_name.should == "SuperPost"
49
+ end
50
+
51
+ it "by default should be initialized from class alias" do
52
+ class ::Post2
53
+ include MongoMapper::Document
54
+ include MongoMapper::Plugins::Micelaneous
55
+
56
+ self.alias 'PostAlias'
57
+ end
58
+
59
+ module ::Namespace
60
+ class Post
61
+ include MongoMapper::Document
62
+ include MongoMapper::Plugins::Micelaneous
63
+ end
64
+ end
65
+
66
+ Post2.model_name.should == 'PostAlias'
67
+ Namespace::Post.model_name.should == 'Post' # not the Namespace::Post
68
+ end
69
+ end
56
70
  end