mongo_test_server 0.0.3 → 0.0.4

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.
@@ -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