mongo_doc-rails 0.2.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 +1 -0
- data/README.md +22 -0
- data/Rakefile +39 -0
- data/VERSION +1 -0
- data/lib/mongo_doc-rails.rb +2 -0
- data/lib/mongo_doc/active_model.rb +16 -0
- data/lib/mongo_doc/active_model/active_model_compliance.rb +18 -0
- data/lib/mongo_doc/active_model/validations.rb +19 -0
- data/mongo_doc-rails.gemspec +63 -0
- data/spec/active_model/active_model_compliance_spec.rb +128 -0
- data/spec/active_model/validations_spec.rb +29 -0
- data/spec/spec.opts +2 -0
- data/spec/spec_helper.rb +7 -0
- metadata +118 -0
data/.gitignore
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
pkg
|
data/README.md
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
LightMongo-Rails
|
2
|
+
================
|
3
|
+
|
4
|
+
LightMongo-Rails provides ActionPack compatibility for [LightMongo][lm], allowing you to use form_for and other such helpers.
|
5
|
+
|
6
|
+
Installation
|
7
|
+
------------
|
8
|
+
|
9
|
+
`gem install light_mongo-rails`, assuming you already have LightMongo and Rails 3 on the boil.
|
10
|
+
|
11
|
+
Usage
|
12
|
+
-----
|
13
|
+
|
14
|
+
class MyModel
|
15
|
+
include LightMongo::Model
|
16
|
+
end
|
17
|
+
|
18
|
+
Then use like a normal LightMongo::Document.
|
19
|
+
|
20
|
+
NB: You are still welcome to include LightMongo::Document when in Rails, you just might hit some trouble using the ActionPack helpers.
|
21
|
+
|
22
|
+
[lm]:http://github.com/elliotcm/light_mongo
|
data/Rakefile
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'rake'
|
2
|
+
|
3
|
+
begin
|
4
|
+
require 'jeweler'
|
5
|
+
Jeweler::Tasks.new do |gem|
|
6
|
+
gem.name = "mongo_doc-rails"
|
7
|
+
gem.summary = "Rails 3 integration for MongoDoc"
|
8
|
+
gem.description = "MongoDoc-Rails provides an interface between the MongoDoc::Document and the Rails 3 ActionPack."
|
9
|
+
gem.email = "elliot.cm@gmail.com, leshill@gmail.com"
|
10
|
+
gem.homepage = "http://github.com/elliotcm/mongo_doc-rails"
|
11
|
+
gem.authors = ["Elliot Crosby-McCullough, Les Hill"]
|
12
|
+
gem.add_dependency "mongo_doc", ">=0.5.0"
|
13
|
+
gem.add_dependency "activemodel", ">=3.0.0.beta"
|
14
|
+
gem.add_development_dependency "rspec", "= 1.3.0"
|
15
|
+
end
|
16
|
+
Jeweler::GemcutterTasks.new
|
17
|
+
|
18
|
+
task :spec => :check_dependencies
|
19
|
+
rescue LoadError
|
20
|
+
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
21
|
+
end
|
22
|
+
|
23
|
+
require 'spec/rake/spectask'
|
24
|
+
Spec::Rake::SpecTask.new(:spec) do |spec|
|
25
|
+
spec.spec_opts = ['--options', "#{File.expand_path(File.dirname(__FILE__))}/spec/spec.opts"]
|
26
|
+
spec.libs << 'lib' << 'spec'
|
27
|
+
spec.spec_files = FileList['spec/**/*_spec.rb']
|
28
|
+
end
|
29
|
+
|
30
|
+
Spec::Rake::SpecTask.new(:rcov) do |spec|
|
31
|
+
spec.spec_opts = ['--options', "#{File.expand_path(File.dirname(__FILE__))}/spec/spec.opts"]
|
32
|
+
spec.libs << 'lib' << 'spec'
|
33
|
+
spec.pattern = 'spec/**/*_spec.rb'
|
34
|
+
spec.rcov = true
|
35
|
+
end
|
36
|
+
|
37
|
+
task :spec => :check_dependencies
|
38
|
+
|
39
|
+
task :default => :spec
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.2.1
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'mongo_doc/active_model/active_model_compliance'
|
2
|
+
require 'mongo_doc/active_model/validations'
|
3
|
+
|
4
|
+
module MongoDoc
|
5
|
+
module ActiveModel
|
6
|
+
VERSION = '0.2.0'
|
7
|
+
|
8
|
+
def self.included(klass)
|
9
|
+
klass.class_eval do
|
10
|
+
include MongoDoc::Document
|
11
|
+
include MongoDoc::ActiveModel::ActiveModelCompliance
|
12
|
+
extend MongoDoc::ActiveModel::Validations::ClassMethods
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'active_model'
|
2
|
+
|
3
|
+
module MongoDoc
|
4
|
+
module ActiveModel
|
5
|
+
module ActiveModelCompliance
|
6
|
+
def destroyed?
|
7
|
+
_id.nil?
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.included(klass)
|
11
|
+
klass.class_eval do
|
12
|
+
include ::ActiveModel::Validations
|
13
|
+
extend ::ActiveModel::Naming
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module MongoDoc
|
2
|
+
module ActiveModel
|
3
|
+
module Validations
|
4
|
+
module ClassMethods
|
5
|
+
def validates_embedded(*attr_names)
|
6
|
+
validates_with ValidatesEmbedded, _merge_attributes(attr_names)
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
class ValidatesEmbedded < ::ActiveModel::EachValidator
|
11
|
+
def validate(record)
|
12
|
+
attributes.each do |attr|
|
13
|
+
record.errors.add(attr) unless record.send(attr).valid?
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{mongo_doc-rails}
|
8
|
+
s.version = "0.2.1"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Elliot Crosby-McCullough, Les Hill"]
|
12
|
+
s.date = %q{2010-04-08}
|
13
|
+
s.description = %q{MongoDoc-Rails provides an interface between the MongoDoc::Document and the Rails 3 ActionPack.}
|
14
|
+
s.email = %q{elliot.cm@gmail.com, leshill@gmail.com}
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"README.md"
|
17
|
+
]
|
18
|
+
s.files = [
|
19
|
+
".gitignore",
|
20
|
+
"README.md",
|
21
|
+
"Rakefile",
|
22
|
+
"VERSION",
|
23
|
+
"lib/mongo_doc-rails.rb",
|
24
|
+
"lib/mongo_doc/active_model.rb",
|
25
|
+
"lib/mongo_doc/active_model/active_model_compliance.rb",
|
26
|
+
"lib/mongo_doc/active_model/validations.rb",
|
27
|
+
"mongo_doc-rails.gemspec",
|
28
|
+
"spec/active_model/active_model_compliance_spec.rb",
|
29
|
+
"spec/active_model/validations_spec.rb",
|
30
|
+
"spec/spec.opts",
|
31
|
+
"spec/spec_helper.rb"
|
32
|
+
]
|
33
|
+
s.homepage = %q{http://github.com/elliotcm/mongo_doc-rails}
|
34
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
35
|
+
s.require_paths = ["lib"]
|
36
|
+
s.rubygems_version = %q{1.3.6}
|
37
|
+
s.summary = %q{Rails 3 integration for MongoDoc}
|
38
|
+
s.test_files = [
|
39
|
+
"spec/active_model/active_model_compliance_spec.rb",
|
40
|
+
"spec/active_model/validations_spec.rb",
|
41
|
+
"spec/spec_helper.rb"
|
42
|
+
]
|
43
|
+
|
44
|
+
if s.respond_to? :specification_version then
|
45
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
46
|
+
s.specification_version = 3
|
47
|
+
|
48
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
49
|
+
s.add_runtime_dependency(%q<mongo_doc>, [">= 0.5.0"])
|
50
|
+
s.add_runtime_dependency(%q<activemodel>, [">= 3.0.0.beta"])
|
51
|
+
s.add_development_dependency(%q<rspec>, ["= 1.3.0"])
|
52
|
+
else
|
53
|
+
s.add_dependency(%q<mongo_doc>, [">= 0.5.0"])
|
54
|
+
s.add_dependency(%q<activemodel>, [">= 3.0.0.beta"])
|
55
|
+
s.add_dependency(%q<rspec>, ["= 1.3.0"])
|
56
|
+
end
|
57
|
+
else
|
58
|
+
s.add_dependency(%q<mongo_doc>, [">= 0.5.0"])
|
59
|
+
s.add_dependency(%q<activemodel>, [">= 3.0.0.beta"])
|
60
|
+
s.add_dependency(%q<rspec>, ["= 1.3.0"])
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
@@ -0,0 +1,128 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class ActiveModelComplianceTest
|
4
|
+
include MongoDoc::Document
|
5
|
+
end
|
6
|
+
|
7
|
+
describe MongoDoc::ActiveModel do
|
8
|
+
let(:model) { ActiveModelComplianceTest.new }
|
9
|
+
|
10
|
+
describe "#to_param" do
|
11
|
+
let(:string_id) { mock }
|
12
|
+
|
13
|
+
before(:each) do
|
14
|
+
model.instance_variable_set(:@_id, mock(:oid, :to_s => string_id))
|
15
|
+
end
|
16
|
+
|
17
|
+
it "returns the string form of the document id" do
|
18
|
+
model.to_param.should == string_id
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "#valid?" do
|
23
|
+
subject { model }
|
24
|
+
it "responds to #valid?" do
|
25
|
+
should respond_to(:valid?)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "#new_record?" do
|
30
|
+
subject { model }
|
31
|
+
it "responds to #new_record?" do
|
32
|
+
should respond_to(:new_record?)
|
33
|
+
end
|
34
|
+
|
35
|
+
context "when the object has an id" do
|
36
|
+
before(:each) do
|
37
|
+
model.instance_variable_set(:@_id, mock(:id))
|
38
|
+
end
|
39
|
+
|
40
|
+
it "is false" do
|
41
|
+
should_not be_new_record
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
context "when the object has no id" do
|
46
|
+
before(:each) do
|
47
|
+
model.instance_variable_set(:@_id, nil)
|
48
|
+
end
|
49
|
+
|
50
|
+
it "is true" do
|
51
|
+
should be_new_record
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
describe "#destroyed?" do
|
57
|
+
subject { model }
|
58
|
+
|
59
|
+
it "responds to #destroyed?" do
|
60
|
+
should respond_to(:destroyed?)
|
61
|
+
end
|
62
|
+
|
63
|
+
context "when the object has an id" do
|
64
|
+
before(:each) do
|
65
|
+
model.instance_variable_set(:@_id, mock(:id))
|
66
|
+
end
|
67
|
+
|
68
|
+
it "is false" do
|
69
|
+
should_not be_destroyed
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
context "when the object has no id" do
|
74
|
+
before(:each) do
|
75
|
+
model.instance_variable_set(:@_id, nil)
|
76
|
+
end
|
77
|
+
|
78
|
+
it "is true" do
|
79
|
+
should be_destroyed
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
describe "#errors" do
|
85
|
+
subject { model }
|
86
|
+
it "responds to errors" do
|
87
|
+
should respond_to(:errors)
|
88
|
+
end
|
89
|
+
|
90
|
+
describe "#[]" do
|
91
|
+
it "returns an array on a missing key lookup" do
|
92
|
+
model.errors[:does_not_exist].should be_an(Array)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
describe "#full_messages" do
|
97
|
+
it "returns an array" do
|
98
|
+
model.errors.full_messages.should be_an(Array)
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
describe ".model_name" do
|
104
|
+
it "responds to model_name" do
|
105
|
+
ActiveModelComplianceTest.should respond_to(:model_name)
|
106
|
+
end
|
107
|
+
|
108
|
+
it "is a string" do
|
109
|
+
ActiveModelComplianceTest.model_name.should be_a(String)
|
110
|
+
end
|
111
|
+
|
112
|
+
it "has a human inflector" do
|
113
|
+
ActiveModelComplianceTest.model_name.human.should be_a(String)
|
114
|
+
end
|
115
|
+
|
116
|
+
it "has a partial path inflector" do
|
117
|
+
ActiveModelComplianceTest.model_name.partial_path.should be_a(String)
|
118
|
+
end
|
119
|
+
|
120
|
+
it "has a singular inflector" do
|
121
|
+
ActiveModelComplianceTest.model_name.singular.should be_a(String)
|
122
|
+
end
|
123
|
+
|
124
|
+
it "has a plural inflector" do
|
125
|
+
ActiveModelComplianceTest.model_name.plural.should be_a(String)
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe MongoDoc::ActiveModel::Validations do
|
4
|
+
|
5
|
+
class ValidationTest
|
6
|
+
extend MongoDoc::ActiveModel::Validations::ClassMethods
|
7
|
+
end
|
8
|
+
|
9
|
+
it "has the validates_embedded macro" do
|
10
|
+
ValidationTest.should respond_to(:validates_embedded)
|
11
|
+
end
|
12
|
+
|
13
|
+
describe MongoDoc::ActiveModel::Validations::ValidatesEmbedded do
|
14
|
+
let(:embedded) { stub(:null_object => true) }
|
15
|
+
let(:record) { stub(:name => embedded, :errors => stub(:null_object => true)) }
|
16
|
+
let(:validator) { MongoDoc::ActiveModel::Validations::ValidatesEmbedded.new(:attributes => :name) }
|
17
|
+
|
18
|
+
it "checks the validity of the named attribute" do
|
19
|
+
embedded.should_receive :valid?
|
20
|
+
validator.validate(record)
|
21
|
+
end
|
22
|
+
|
23
|
+
it "adds an invalid error if the named attribute is not valid" do
|
24
|
+
embedded.should_receive(:valid?).and_return(false)
|
25
|
+
record.errors.should_receive(:add).with(:name)
|
26
|
+
validator.validate(record)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/spec/spec.opts
ADDED
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,118 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mongo_doc-rails
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 2
|
8
|
+
- 1
|
9
|
+
version: 0.2.1
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Elliot Crosby-McCullough, Les Hill
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2010-04-08 00:00:00 -04:00
|
18
|
+
default_executable:
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: mongo_doc
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 0
|
29
|
+
- 5
|
30
|
+
- 0
|
31
|
+
version: 0.5.0
|
32
|
+
type: :runtime
|
33
|
+
version_requirements: *id001
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
name: activemodel
|
36
|
+
prerelease: false
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
segments:
|
42
|
+
- 3
|
43
|
+
- 0
|
44
|
+
- 0
|
45
|
+
- beta
|
46
|
+
version: 3.0.0.beta
|
47
|
+
type: :runtime
|
48
|
+
version_requirements: *id002
|
49
|
+
- !ruby/object:Gem::Dependency
|
50
|
+
name: rspec
|
51
|
+
prerelease: false
|
52
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
54
|
+
- - "="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
segments:
|
57
|
+
- 1
|
58
|
+
- 3
|
59
|
+
- 0
|
60
|
+
version: 1.3.0
|
61
|
+
type: :development
|
62
|
+
version_requirements: *id003
|
63
|
+
description: MongoDoc-Rails provides an interface between the MongoDoc::Document and the Rails 3 ActionPack.
|
64
|
+
email: elliot.cm@gmail.com, leshill@gmail.com
|
65
|
+
executables: []
|
66
|
+
|
67
|
+
extensions: []
|
68
|
+
|
69
|
+
extra_rdoc_files:
|
70
|
+
- README.md
|
71
|
+
files:
|
72
|
+
- .gitignore
|
73
|
+
- README.md
|
74
|
+
- Rakefile
|
75
|
+
- VERSION
|
76
|
+
- lib/mongo_doc-rails.rb
|
77
|
+
- lib/mongo_doc/active_model.rb
|
78
|
+
- lib/mongo_doc/active_model/active_model_compliance.rb
|
79
|
+
- lib/mongo_doc/active_model/validations.rb
|
80
|
+
- mongo_doc-rails.gemspec
|
81
|
+
- spec/active_model/active_model_compliance_spec.rb
|
82
|
+
- spec/active_model/validations_spec.rb
|
83
|
+
- spec/spec.opts
|
84
|
+
- spec/spec_helper.rb
|
85
|
+
has_rdoc: true
|
86
|
+
homepage: http://github.com/elliotcm/mongo_doc-rails
|
87
|
+
licenses: []
|
88
|
+
|
89
|
+
post_install_message:
|
90
|
+
rdoc_options:
|
91
|
+
- --charset=UTF-8
|
92
|
+
require_paths:
|
93
|
+
- lib
|
94
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
95
|
+
requirements:
|
96
|
+
- - ">="
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
segments:
|
99
|
+
- 0
|
100
|
+
version: "0"
|
101
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
102
|
+
requirements:
|
103
|
+
- - ">="
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
segments:
|
106
|
+
- 0
|
107
|
+
version: "0"
|
108
|
+
requirements: []
|
109
|
+
|
110
|
+
rubyforge_project:
|
111
|
+
rubygems_version: 1.3.6
|
112
|
+
signing_key:
|
113
|
+
specification_version: 3
|
114
|
+
summary: Rails 3 integration for MongoDoc
|
115
|
+
test_files:
|
116
|
+
- spec/active_model/active_model_compliance_spec.rb
|
117
|
+
- spec/active_model/validations_spec.rb
|
118
|
+
- spec/spec_helper.rb
|