mongo_mapper_ext 0.2.2 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
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