mongoid_rails_fixtures 0.0.1
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/.gitignore +6 -0
- data/Gemfile +9 -0
- data/README.rdoc +61 -0
- data/Rakefile +8 -0
- data/lib/mongoid_rails_fixtures.rb +24 -0
- data/lib/mongoid_rails_fixtures/mongoid_ext/fixtures.rb +982 -0
- data/lib/mongoid_rails_fixtures/mongoid_ext/mongoid_ext.rb +20 -0
- data/lib/mongoid_rails_fixtures/mongoid_ext/railtie_ext.rb +15 -0
- data/lib/mongoid_rails_fixtures/mongoid_ext/test_case.rb +20 -0
- data/lib/mongoid_rails_fixtures/mongoid_ext/test_help.rb +19 -0
- data/lib/mongoid_rails_fixtures/mongoid_ext/timestamps_ext.rb +27 -0
- data/lib/mongoid_rails_fixtures/tasks/database.rake +34 -0
- data/lib/mongoid_rails_fixtures/tasks/test.rake +8 -0
- data/mongoid_rails_fixtures.gemspec +29 -0
- data/test/config.rb +43 -0
- data/test/fixture_test.rb +39 -0
- data/test/fixtures/users.yml +5 -0
- data/test/models/user.rb +10 -0
- data/test/test_helper.rake +9 -0
- metadata +177 -0
@@ -0,0 +1,20 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Mongoid #:nodoc
|
4
|
+
class Config #:nodoc
|
5
|
+
# current rails behavior is to not migrate before tests
|
6
|
+
attr_accessor :migrate_before_tests
|
7
|
+
# current rails behavior is to delete existing fixtures before create
|
8
|
+
attr_accessor :delete_existing_fixtures_before_create
|
9
|
+
end
|
10
|
+
|
11
|
+
Mongoid.configure.delete_existing_fixtures_before_create = true
|
12
|
+
|
13
|
+
# originally in AR/database_statements
|
14
|
+
# Inserts the given fixture into the table. Overridden in adapters that require
|
15
|
+
# something beyond a simple insert (eg. Oracle).
|
16
|
+
def self.insert_fixture(fixture, table_name)
|
17
|
+
klass = table_name.singularize.capitalize.constantize
|
18
|
+
klass.create fixture.instance_variable_get(:@fixture)
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
if defined?(Rails::Railtie)
|
4
|
+
module Rails #:nodoc:
|
5
|
+
module Mongoid #:nodoc:
|
6
|
+
class Railtie < Rails::Railtie
|
7
|
+
|
8
|
+
rake_tasks do
|
9
|
+
load "mongoid_rails_fixtures/tasks/database.rake"
|
10
|
+
load "mongoid_rails_fixtures/tasks/test.rake"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Mongoid
|
2
|
+
class TestCase < ActiveSupport::TestCase #:nodoc:
|
3
|
+
def assert_date_from_db(expected, actual, message = nil)
|
4
|
+
assert_equal expected.to_s, actual.to_s, message
|
5
|
+
end
|
6
|
+
|
7
|
+
def with_kcode(kcode)
|
8
|
+
if RUBY_VERSION < '1.9'
|
9
|
+
orig_kcode, $KCODE = $KCODE, kcode
|
10
|
+
begin
|
11
|
+
yield
|
12
|
+
ensure
|
13
|
+
$KCODE = orig_kcode
|
14
|
+
end
|
15
|
+
else
|
16
|
+
yield
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
if defined?(Mongoid)
|
2
|
+
# TODO: change path after gemify
|
3
|
+
require File.dirname(__FILE__) + '/test_case'
|
4
|
+
|
5
|
+
class ActiveSupport::TestCase
|
6
|
+
include Mongoid::TestFixtures
|
7
|
+
self.fixture_path = "#{Rails.root}/test/fixtures/"
|
8
|
+
end
|
9
|
+
|
10
|
+
ActiveSupport::TestCase.send :define_method, :fixture_path do
|
11
|
+
"#{Rails.root}/test/fixtures/"
|
12
|
+
end
|
13
|
+
|
14
|
+
ActionController::IntegrationTest.fixture_path = ActiveSupport::TestCase.fixture_path
|
15
|
+
|
16
|
+
def create_fixtures(*table_names, &block)
|
17
|
+
Fixtures.create_fixtures(ActiveSupport::TestCase.fixture_path, table_names, {}, &block)
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mongoid #:nodoc:
|
3
|
+
module Timestamps
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
included do
|
6
|
+
field :created_at, :type => Time
|
7
|
+
field :updated_at, :type => Time
|
8
|
+
set_callback :create, :before, :set_created_at
|
9
|
+
set_callback :save, :before, :set_updated_at
|
10
|
+
|
11
|
+
class_inheritable_accessor :record_timestamps, :instance_writer => false
|
12
|
+
self.record_timestamps = true
|
13
|
+
end
|
14
|
+
|
15
|
+
# Update the created_at field on the Document to the current time. This is
|
16
|
+
# only called on create.
|
17
|
+
def set_created_at
|
18
|
+
self.created_at = Time.now.utc if !created_at
|
19
|
+
end
|
20
|
+
|
21
|
+
# Update the updated_at field on the Document to the current time.
|
22
|
+
# This is only called on create and on save.
|
23
|
+
def set_updated_at
|
24
|
+
self.updated_at = Time.now.utc
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
namespace :db do
|
2
|
+
namespace :fixtures do
|
3
|
+
desc "Load fixtures into the current environment's database. Load specific fixtures using FIXTURES=x,y. Load from subdirectory in test/fixtures using FIXTURES_DIR=z. Specify an alternative path (eg. spec/fixtures) using FIXTURES_PATH=spec/fixtures."
|
4
|
+
task :load => :environment do
|
5
|
+
base_dir = ENV['FIXTURES_PATH'] ? File.join(Rails.root, ENV['FIXTURES_PATH']) : File.join(Rails.root, 'test', 'fixtures')
|
6
|
+
fixtures_dir = ENV['FIXTURES_DIR'] ? File.join(base_dir, ENV['FIXTURES_DIR']) : base_dir
|
7
|
+
|
8
|
+
(ENV['FIXTURES'] ? ENV['FIXTURES'].split(/,/).map {|f| File.join(fixtures_dir, f) } : Dir.glob(File.join(fixtures_dir, '*.{yml,csv}'))).each do |fixture_file|
|
9
|
+
Fixtures.create_fixtures(File.dirname(fixture_file), File.basename(fixture_file, '.*'))
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
desc "Search for a fixture given a LABEL or ID. Specify an alternative path (eg. spec/fixtures) using FIXTURES_PATH=spec/fixtures."
|
14
|
+
task :identify => :environment do
|
15
|
+
label, id = ENV["LABEL"], ENV["ID"]
|
16
|
+
raise "LABEL or ID required" if label.blank? && id.blank?
|
17
|
+
|
18
|
+
puts %Q(The fixture ID for "#{label}" is #{Fixtures.identify(label)}.) if label
|
19
|
+
|
20
|
+
base_dir = ENV['FIXTURES_PATH'] ? File.join(Rails.root, ENV['FIXTURES_PATH']) : File.join(Rails.root, 'test', 'fixtures')
|
21
|
+
Dir["#{base_dir}/**/*.yml"].each do |file|
|
22
|
+
if data = YAML::load(ERB.new(IO.read(file)).result)
|
23
|
+
data.keys.each do |key|
|
24
|
+
key_id = Fixtures.identify(key)
|
25
|
+
|
26
|
+
if key == label || key_id == id.to_i
|
27
|
+
puts "#{file}: #{key} (#{key_id})"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.platform = Gem::Platform::RUBY
|
3
|
+
s.name = 'mongoid_rails_fixtures'
|
4
|
+
s.version = '0.0.1'
|
5
|
+
s.summary = 'Fixtures for Mongoid in classic rails style.'
|
6
|
+
s.description = 'Retain your old testing workflow with Mongodb power'
|
7
|
+
|
8
|
+
# only tested with 1.9.1
|
9
|
+
s.required_ruby_version = '>= 1.8.6'
|
10
|
+
s.required_rubygems_version = ">= 1.3.6"
|
11
|
+
|
12
|
+
s.author = 'Alan Da Costa'
|
13
|
+
s.email = 'alandacosta@gmail.com.com'
|
14
|
+
s.date = %q{2010-06-29}
|
15
|
+
s.homepage = "http://github.com/adacosta/#{s.name}"
|
16
|
+
|
17
|
+
s.require_paths = ["lib"]
|
18
|
+
s.files = Dir['.gitignore', 'Gemfile', 'Rakefile', 'README.rdoc', "#{s.name}.gemspec", 'lib/**/*']
|
19
|
+
s.test_files = Dir['test/**/*']
|
20
|
+
s.has_rdoc = false
|
21
|
+
|
22
|
+
rails_version = '>= 3.0.0.rc'
|
23
|
+
|
24
|
+
s.add_dependency('bundler', '>=0.9.26')
|
25
|
+
s.add_dependency('mongoid', '>=2.0.0.beta.7')
|
26
|
+
s.add_dependency('rails', rails_version)
|
27
|
+
s.add_dependency('railties', rails_version)
|
28
|
+
s.add_dependency('activesupport', rails_version)
|
29
|
+
end
|
data/test/config.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
# we have to beat the main lib to the bundle load in order to have Rails present for testing
|
2
|
+
require 'rubygems'
|
3
|
+
# Set up gems listed in the Gemfile.
|
4
|
+
if File.exist?( File.dirname(__FILE__) + "/../Gemfile")
|
5
|
+
require 'bundler'
|
6
|
+
Bundler.setup
|
7
|
+
end
|
8
|
+
|
9
|
+
Bundler.require(:default) if defined?(Bundler)
|
10
|
+
|
11
|
+
require 'test/unit'
|
12
|
+
|
13
|
+
require File.dirname(__FILE__) + '/../lib/mongoid_rails_fixtures'
|
14
|
+
|
15
|
+
# require all models
|
16
|
+
Dir[File.dirname(__FILE__) + "/models/*.rb"].each {|file| require file }
|
17
|
+
|
18
|
+
Rake.application.add_import File.dirname(__FILE__) + '/test_helper.rake'
|
19
|
+
Rake.application.add_import File.dirname(__FILE__) + '/../lib/mongoid_rails_fixtures/tasks/database.rake'
|
20
|
+
Rake.application.load_imports
|
21
|
+
|
22
|
+
module MongoidRailsFixtures
|
23
|
+
class TestRailsApp < Rails::Application; end
|
24
|
+
end
|
25
|
+
MongoidRailsFixtures::TestRailsApp.initialize!
|
26
|
+
|
27
|
+
# connect to our local mongodb
|
28
|
+
Mongoid.configure do |config|
|
29
|
+
config.master = Mongo::Connection.new.db("mongoid_test")
|
30
|
+
end
|
31
|
+
|
32
|
+
# borrowed from http://thinkingdigitally.com/archive/capturing-output-from-puts-in-ruby/
|
33
|
+
require 'stringio'
|
34
|
+
module Kernel
|
35
|
+
def capture_stdout
|
36
|
+
out = StringIO.new
|
37
|
+
$stdout = out
|
38
|
+
yield
|
39
|
+
return out
|
40
|
+
ensure
|
41
|
+
$stdout = STDOUT
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/config'
|
2
|
+
|
3
|
+
module Mongoid
|
4
|
+
class TestCase < ActiveSupport::TestCase #:nodoc:
|
5
|
+
|
6
|
+
def setup
|
7
|
+
drop_collections
|
8
|
+
end
|
9
|
+
|
10
|
+
def teardown; end
|
11
|
+
|
12
|
+
def test_fixture_invoke
|
13
|
+
# verify db is empty
|
14
|
+
bob = User.where(:username => 'bob').first
|
15
|
+
assert_equal 0, User.count, "Users should be empty loaded"
|
16
|
+
|
17
|
+
# load and verify fixture
|
18
|
+
Rake::Task['db:fixtures:load'].invoke
|
19
|
+
bob = User.where(:username => 'bob').first
|
20
|
+
assert (User.count > 0), "Users should have loaded"
|
21
|
+
assert bob.respond_to?(:username), "Bob should have a username"
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_identify_fixture
|
25
|
+
ENV["LABEL"] = 'users'
|
26
|
+
output = capture_stdout do
|
27
|
+
Rake::Task['db:fixtures:identify'].invoke
|
28
|
+
end
|
29
|
+
assert_equal 'The fixture ID for "users" is 344172009.', output.string.chomp, "Identity should have ID for users"
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def drop_collections
|
35
|
+
(Mongoid.master.collections.reject { |c| c.name == 'system.indexes' }).map(&:drop)
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
data/test/models/user.rb
ADDED
metadata
ADDED
@@ -0,0 +1,177 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mongoid_rails_fixtures
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 29
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 1
|
10
|
+
version: 0.0.1
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Alan Da Costa
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2010-06-29 00:00:00 -07:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: bundler
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 15
|
30
|
+
segments:
|
31
|
+
- 0
|
32
|
+
- 9
|
33
|
+
- 26
|
34
|
+
version: 0.9.26
|
35
|
+
type: :runtime
|
36
|
+
version_requirements: *id001
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: mongoid
|
39
|
+
prerelease: false
|
40
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ">="
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
hash: 4246949665
|
46
|
+
segments:
|
47
|
+
- 2
|
48
|
+
- 0
|
49
|
+
- 0
|
50
|
+
- beta
|
51
|
+
- 7
|
52
|
+
version: 2.0.0.beta.7
|
53
|
+
type: :runtime
|
54
|
+
version_requirements: *id002
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rails
|
57
|
+
prerelease: false
|
58
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
59
|
+
none: false
|
60
|
+
requirements:
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
hash: 1005551048
|
64
|
+
segments:
|
65
|
+
- 3
|
66
|
+
- 0
|
67
|
+
- 0
|
68
|
+
- rc
|
69
|
+
version: 3.0.0.rc
|
70
|
+
type: :runtime
|
71
|
+
version_requirements: *id003
|
72
|
+
- !ruby/object:Gem::Dependency
|
73
|
+
name: railties
|
74
|
+
prerelease: false
|
75
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
76
|
+
none: false
|
77
|
+
requirements:
|
78
|
+
- - ">="
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
hash: 1005551048
|
81
|
+
segments:
|
82
|
+
- 3
|
83
|
+
- 0
|
84
|
+
- 0
|
85
|
+
- rc
|
86
|
+
version: 3.0.0.rc
|
87
|
+
type: :runtime
|
88
|
+
version_requirements: *id004
|
89
|
+
- !ruby/object:Gem::Dependency
|
90
|
+
name: activesupport
|
91
|
+
prerelease: false
|
92
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
93
|
+
none: false
|
94
|
+
requirements:
|
95
|
+
- - ">="
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
hash: 1005551048
|
98
|
+
segments:
|
99
|
+
- 3
|
100
|
+
- 0
|
101
|
+
- 0
|
102
|
+
- rc
|
103
|
+
version: 3.0.0.rc
|
104
|
+
type: :runtime
|
105
|
+
version_requirements: *id005
|
106
|
+
description: Retain your old testing workflow with Mongodb power
|
107
|
+
email: alandacosta@gmail.com.com
|
108
|
+
executables: []
|
109
|
+
|
110
|
+
extensions: []
|
111
|
+
|
112
|
+
extra_rdoc_files: []
|
113
|
+
|
114
|
+
files:
|
115
|
+
- .gitignore
|
116
|
+
- Gemfile
|
117
|
+
- Rakefile
|
118
|
+
- README.rdoc
|
119
|
+
- mongoid_rails_fixtures.gemspec
|
120
|
+
- lib/mongoid_rails_fixtures/mongoid_ext/fixtures.rb
|
121
|
+
- lib/mongoid_rails_fixtures/mongoid_ext/mongoid_ext.rb
|
122
|
+
- lib/mongoid_rails_fixtures/mongoid_ext/railtie_ext.rb
|
123
|
+
- lib/mongoid_rails_fixtures/mongoid_ext/test_case.rb
|
124
|
+
- lib/mongoid_rails_fixtures/mongoid_ext/test_help.rb
|
125
|
+
- lib/mongoid_rails_fixtures/mongoid_ext/timestamps_ext.rb
|
126
|
+
- lib/mongoid_rails_fixtures/tasks/database.rake
|
127
|
+
- lib/mongoid_rails_fixtures/tasks/test.rake
|
128
|
+
- lib/mongoid_rails_fixtures.rb
|
129
|
+
- test/config.rb
|
130
|
+
- test/fixture_test.rb
|
131
|
+
- test/fixtures/users.yml
|
132
|
+
- test/models/user.rb
|
133
|
+
- test/test_helper.rake
|
134
|
+
has_rdoc: true
|
135
|
+
homepage: http://github.com/adacosta/mongoid_rails_fixtures
|
136
|
+
licenses: []
|
137
|
+
|
138
|
+
post_install_message:
|
139
|
+
rdoc_options: []
|
140
|
+
|
141
|
+
require_paths:
|
142
|
+
- lib
|
143
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
144
|
+
none: false
|
145
|
+
requirements:
|
146
|
+
- - ">="
|
147
|
+
- !ruby/object:Gem::Version
|
148
|
+
hash: 59
|
149
|
+
segments:
|
150
|
+
- 1
|
151
|
+
- 8
|
152
|
+
- 6
|
153
|
+
version: 1.8.6
|
154
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
155
|
+
none: false
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
hash: 23
|
160
|
+
segments:
|
161
|
+
- 1
|
162
|
+
- 3
|
163
|
+
- 6
|
164
|
+
version: 1.3.6
|
165
|
+
requirements: []
|
166
|
+
|
167
|
+
rubyforge_project:
|
168
|
+
rubygems_version: 1.3.7
|
169
|
+
signing_key:
|
170
|
+
specification_version: 3
|
171
|
+
summary: Fixtures for Mongoid in classic rails style.
|
172
|
+
test_files:
|
173
|
+
- test/config.rb
|
174
|
+
- test/fixture_test.rb
|
175
|
+
- test/fixtures/users.yml
|
176
|
+
- test/models/user.rb
|
177
|
+
- test/test_helper.rake
|