mongo_test_server 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,4 @@
1
+ module MongoTestServer #:nodoc:
2
+ class Engine < ::Rails::Engine #:nodoc:
3
+ end
4
+ end
@@ -0,0 +1,21 @@
1
+ require 'rails'
2
+
3
+ module MongoTestServer
4
+ class MongoTestServerRailtie < ::Rails::Railtie #:nodoc:
5
+ config.before_initialize do
6
+ if Rails.env.test?
7
+ $stderr.puts "MongoTestServer: starting..."
8
+ app_name = ENV['APP_NAME'] || Rails.application.class.to_s.split("::").first.downcase
9
+ config_file = File.expand_path(File.join(Rails.root, 'config', 'mongoid.yml'))
10
+ mongoid_options = YAML.load(ERB.new(File.read(config_file)).result)[ENV['RAILS_ENV']]
11
+ port = mongoid_options['sessions']['default']['hosts'].first.split(':').last.to_i
12
+ MongoTestServer::Mongod.configure do |server|
13
+ server.name = app_name
14
+ server.port = port
15
+ server.path = `which mongod`.chomp
16
+ end
17
+ MongoTestServer::Mongod.server.start
18
+ end
19
+ end
20
+ end
21
+ end
@@ -1,3 +1,3 @@
1
1
  module MongoTestServer
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -10,6 +10,11 @@ require 'yaml'
10
10
  require 'tempfile'
11
11
  require "mongo_test_server/version"
12
12
 
13
+ if defined?(Rails)
14
+ require 'mongo_test_server/railtie'
15
+ require 'mongo_test_server/engine'
16
+ end
17
+
13
18
  module MongoTestServer
14
19
 
15
20
  class Mongod
@@ -47,6 +52,7 @@ module MongoTestServer
47
52
  attr_writer :path
48
53
  attr_writer :name
49
54
  attr_reader :mongo_instance_id
55
+ attr_reader :use_ram_disk
50
56
 
51
57
  def initialize(port=nil, name=nil, path=nil)
52
58
  self.port = port
@@ -59,6 +65,38 @@ module MongoTestServer
59
65
  self.started = false
60
66
  end
61
67
 
68
+ def use_ram_disk=(bool)
69
+ if bool && (`which hdiutil`!='')
70
+ @use_ram_disk = true
71
+ else
72
+ $stderr.puts "MongoTestServer: can't use a ram disk on this system"
73
+ @use_ram_disk = false
74
+ end
75
+ end
76
+
77
+ def use_ram_disk?
78
+ @use_ram_disk
79
+ end
80
+
81
+ def ram_disk_name
82
+ @ram_disk_name ||= "mongodb-ram-#{self.name}"
83
+ end
84
+
85
+ def setup_ram_disk
86
+ @ram_disk_device = `hdiutil attach -nomount ram://1000000`.chomp
87
+ `diskutil erasevolume HFS+ #{ram_disk_name} #{@ram_disk_device}`
88
+ ram_disk_mount
89
+ end
90
+
91
+ def ram_disk_mount
92
+ "/Volumes/#{ram_disk_name}"
93
+ end
94
+
95
+ def teardown_ram_disk
96
+ `umount #{ram_disk_mount} 2> /dev/null`
97
+ `hdiutil detach #{@ram_disk_device} 2> /dev/null`
98
+ end
99
+
62
100
  def mongo_log
63
101
  "#{mongo_dir}/mongo_log"
64
102
  end
@@ -76,7 +114,22 @@ module MongoTestServer
76
114
  end
77
115
 
78
116
  def mongo_dir
79
- @mongo_dir ||= "/tmp/#{self.name}_mongo_testserver_#{@mongo_instance_id}"
117
+ @mongo_dir ||= lambda {
118
+ if self.use_ram_disk?
119
+ $stderr.puts "MongoTestServer: using ramdisk"
120
+ setup_ram_disk
121
+ else
122
+ "/tmp/#{self.name}_mongo_testserver_#{@mongo_instance_id}"
123
+ end
124
+ }.call
125
+ end
126
+
127
+ def remove_mongo_dir
128
+ if self.use_ram_disk?
129
+ teardown_ram_disk
130
+ else
131
+ FileUtils.rm_rf self.mongo_dir
132
+ end
80
133
  end
81
134
 
82
135
  def mongo_cmd_line
@@ -84,7 +137,7 @@ module MongoTestServer
84
137
  end
85
138
 
86
139
  def prepare
87
- FileUtils.rm_rf self.mongo_dir
140
+ remove_mongo_dir
88
141
  FileUtils.mkdir_p self.mongo_dir
89
142
  end
90
143
 
@@ -205,7 +258,7 @@ module MongoTestServer
205
258
  self.killed = true
206
259
  self.started = false
207
260
  mongo_pids.each { |ppid| `kill -9 #{ppid} 2> /dev/null` }
208
- FileUtils.rm_rf self.mongo_dir
261
+ remove_mongo_dir
209
262
  self
210
263
  end
211
264
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongo_test_server
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-11-27 00:00:00.000000000 Z
12
+ date: 2012-11-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: mongo
@@ -89,6 +89,8 @@ files:
89
89
  - README.md
90
90
  - Rakefile
91
91
  - lib/mongo_test_server.rb
92
+ - lib/mongo_test_server/engine.rb
93
+ - lib/mongo_test_server/railtie.rb
92
94
  - lib/mongo_test_server/version.rb
93
95
  - mongo_test_server.gemspec
94
96
  - spec/mongo_test_server/mongo_test_server_spec.rb