remarkable_mongo 0.1.2

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,33 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe 'validate_presence_of' do
4
+ subject do
5
+ Article.new
6
+ end
7
+
8
+ describe 'messages' do
9
+
10
+ it 'should contain a description' do
11
+ matcher = validate_presence_of(:title, :body)
12
+ matcher.description.should == 'require title and body to be set'
13
+ end
14
+
15
+ it 'should set allow_nil? message' do
16
+ matcher = validate_presence_of(:body)
17
+ matcher.matches?(subject)
18
+ matcher.failure_message.should == 'Expected Article to require body to be set'
19
+ matcher.negative_failure_message.should == 'Did not expect Article to require body to be set'
20
+ end
21
+
22
+ end
23
+
24
+ describe 'matchers' do
25
+ it { should validate_presence_of(:title) }
26
+ it { should_not validate_presence_of(:body) }
27
+ end
28
+
29
+ describe 'macros' do
30
+ should_validate_presence_of(:title)
31
+ should_not_validate_presence_of(:body)
32
+ end
33
+ end
@@ -0,0 +1,64 @@
1
+ # This is based on Shoulda model builder for Test::Unit.
2
+ #
3
+ module ModelBuilder
4
+ def self.included(base)
5
+ return unless base.name =~ /^Spec/
6
+
7
+ base.class_eval do
8
+ after(:each) do
9
+ if @defined_constants
10
+ @defined_constants.each do |class_name|
11
+ Object.send(:remove_const, class_name)
12
+ end
13
+ end
14
+ end
15
+ end
16
+
17
+ base.extend ClassMethods
18
+ end
19
+
20
+ def define_constant(class_name, &block)
21
+ class_name = class_name.to_s.camelize
22
+
23
+ klass = Class.new
24
+ Object.const_set(class_name, klass)
25
+
26
+ klass.class_eval(&block) if block_given?
27
+
28
+ @defined_constants ||= []
29
+ @defined_constants << class_name
30
+
31
+ klass
32
+ end
33
+
34
+ def define_model(name, columns = {}, &block)
35
+ instance = define_constant(name.to_s.classify, &block).new
36
+
37
+ self.class.subject { instance } if self.class.respond_to?(:subject)
38
+ instance
39
+ end
40
+
41
+ module ClassMethods
42
+ # This is a macro to run validations of boolean optionals such as :allow_nil
43
+ # and :allow_blank. This macro tests all scenarios. The specs must have a
44
+ # define_and_validate method defined.
45
+ #
46
+ def create_optional_boolean_specs(optional, base, options={})
47
+ base.describe "with #{optional} option" do
48
+ it { should define_and_validate(options.merge(optional => true)).send(optional) }
49
+ it { should define_and_validate(options.merge(optional => false)).send(optional, false) }
50
+ it { should_not define_and_validate(options.merge(optional => true)).send(optional, false) }
51
+ it { should_not define_and_validate(options.merge(optional => false)).send(optional) }
52
+ end
53
+ end
54
+
55
+ def create_message_specs(base)
56
+ base.describe "with message option" do
57
+ it { should define_and_validate(:message => 'valid_message').message('valid_message') }
58
+ it { should_not define_and_validate(:message => 'not_valid').message('valid_message') }
59
+ end
60
+ end
61
+ end
62
+
63
+ end
64
+
data/spec/models.rb ADDED
@@ -0,0 +1,42 @@
1
+ class Article
2
+ include MongoMapper::Document
3
+
4
+ key :title, String, :required => true
5
+ key :body, String
6
+
7
+ many :comments
8
+ many :unknowns
9
+ many :ratings, :class_name => "Rate"
10
+ many :assets
11
+ belongs_to :user
12
+ belongs_to :unknown
13
+ belongs_to :site, :class_name => 'Site'
14
+ end
15
+
16
+ class Comment
17
+ include MongoMapper::EmbeddedDocument
18
+
19
+ key :body, String
20
+ end
21
+
22
+ class User
23
+ include MongoMapper::Document
24
+
25
+ key :login, String
26
+ end
27
+
28
+ class Rate
29
+ include MongoMapper::EmbeddedDocument
30
+ end
31
+
32
+ class Rating
33
+ include MongoMapper::EmbeddedDocument
34
+ end
35
+
36
+ class Site
37
+ include MongoMapper::Document
38
+ end
39
+
40
+ class Webiste
41
+ include MongoMapper::EmbeddedDocument
42
+ end
data/spec/spec.opts ADDED
@@ -0,0 +1,4 @@
1
+ --colour
2
+ --format progress
3
+ --loadby mtime
4
+ --reverse
@@ -0,0 +1,17 @@
1
+ require "rubygems"
2
+ require "mongo_mapper"
3
+
4
+ MongoMapper.database = "remarkable_mongomapper"
5
+
6
+ def reset_test_db!
7
+ MongoMapper.connection.drop_database("remarkable_mongomapper")
8
+ end
9
+
10
+ Spec::Runner.configure do |config|
11
+ config.before(:all) { reset_test_db! }
12
+ config.after(:all) { reset_test_db! }
13
+ end
14
+
15
+ require File.join(File.dirname(__FILE__), "..", "lib", "remarkable/mongo_mapper")
16
+ require File.join(File.dirname(__FILE__), "models")
17
+ require File.join(File.dirname(__FILE__), "model_builder")
metadata ADDED
@@ -0,0 +1,108 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: remarkable_mongo
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.2
5
+ platform: ruby
6
+ authors:
7
+ - "Nicolas M\xC3\xA9rouze"
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2010-01-11 00:00:00 +01:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: remarkable
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ~>
22
+ - !ruby/object:Gem::Version
23
+ version: 3.1.8
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: mongo_mapper
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 0.6.1
34
+ version:
35
+ description:
36
+ email: nicolas.merouze@gmail.com
37
+ executables: []
38
+
39
+ extensions: []
40
+
41
+ extra_rdoc_files:
42
+ - LICENSE
43
+ - README.md
44
+ files:
45
+ - .gitignore
46
+ - LICENSE
47
+ - README.md
48
+ - Rakefile
49
+ - VERSION
50
+ - lib/remarkable/mongo_mapper.rb
51
+ - lib/remarkable/mongo_mapper/base.rb
52
+ - lib/remarkable/mongo_mapper/describe.rb
53
+ - lib/remarkable/mongo_mapper/human_names.rb
54
+ - lib/remarkable/mongo_mapper/matchers/allow_values_for_matcher.rb
55
+ - lib/remarkable/mongo_mapper/matchers/association_matcher.rb
56
+ - lib/remarkable/mongo_mapper/matchers/have_key_matcher.rb
57
+ - lib/remarkable/mongo_mapper/matchers/validate_confirmation_of_matcher.rb
58
+ - lib/remarkable/mongo_mapper/matchers/validate_length_of_matcher.rb
59
+ - lib/remarkable/mongo_mapper/matchers/validate_presence_of_matcher.rb
60
+ - locales/en.yml
61
+ - spec/matchers/allow_values_for_matcher_spec.rb
62
+ - spec/matchers/association_matcher_spec.rb
63
+ - spec/matchers/have_key_matcher_spec.rb
64
+ - spec/matchers/validate_confirmation_of_matcher_spec.rb
65
+ - spec/matchers/validate_length_of_matcher_spec.rb
66
+ - spec/matchers/validate_presence_of_matcher_spec.rb
67
+ - spec/model_builder.rb
68
+ - spec/models.rb
69
+ - spec/spec.opts
70
+ - spec/spec_helper.rb
71
+ has_rdoc: true
72
+ homepage: http://github.com/nmerouze/remarkable_mongo
73
+ licenses: []
74
+
75
+ post_install_message:
76
+ rdoc_options:
77
+ - --charset=UTF-8
78
+ require_paths:
79
+ - lib
80
+ required_ruby_version: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: "0"
85
+ version:
86
+ required_rubygems_version: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: "0"
91
+ version:
92
+ requirements: []
93
+
94
+ rubyforge_project:
95
+ rubygems_version: 1.3.5
96
+ signing_key:
97
+ specification_version: 3
98
+ summary: Remarkable Matchers for MongoDB ORMs
99
+ test_files:
100
+ - spec/matchers/allow_values_for_matcher_spec.rb
101
+ - spec/matchers/association_matcher_spec.rb
102
+ - spec/matchers/have_key_matcher_spec.rb
103
+ - spec/matchers/validate_confirmation_of_matcher_spec.rb
104
+ - spec/matchers/validate_length_of_matcher_spec.rb
105
+ - spec/matchers/validate_presence_of_matcher_spec.rb
106
+ - spec/model_builder.rb
107
+ - spec/models.rb
108
+ - spec/spec_helper.rb