with_model 0.1.4 → 0.1.5
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/.rspec +1 -0
- data/CHANGELOG +5 -0
- data/lib/with_model/base.rb +1 -0
- data/lib/with_model/version.rb +1 -1
- data/spec/active_record_behaviors_spec.rb +85 -42
- data/spec/spec_helper.rb +23 -1
- data/spec/with_model_spec.rb +11 -0
- metadata +26 -4
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--colour
|
data/CHANGELOG
CHANGED
data/lib/with_model/base.rb
CHANGED
data/lib/with_model/version.rb
CHANGED
@@ -1,60 +1,103 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe "ActiveRecord behaviors" do
|
4
|
-
describe "a temporary ActiveRecord model created with with_model
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
:scope
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
4
|
+
describe "a temporary ActiveRecord model created with with_model" do
|
5
|
+
context "that has a named_scope" do
|
6
|
+
before do
|
7
|
+
class RegularModel < ActiveRecord::Base
|
8
|
+
scope_method =
|
9
|
+
if respond_to?(:scope) && !protected_methods.include?('scope')
|
10
|
+
:scope # ActiveRecord 3.x
|
11
|
+
else
|
12
|
+
:named_scope # ActiveRecord 2.x
|
13
|
+
end
|
14
|
+
|
15
|
+
send scope_method, :title_is_foo, :conditions => {:title => 'foo'}
|
16
|
+
end
|
17
|
+
RegularModel.connection.drop_table(RegularModel.table_name) rescue nil
|
18
|
+
RegularModel.connection.create_table(RegularModel.table_name) do |t|
|
19
|
+
t.string 'title'
|
20
|
+
t.text 'content'
|
21
|
+
t.timestamps
|
22
|
+
end
|
21
23
|
end
|
22
|
-
end
|
23
24
|
|
24
|
-
|
25
|
-
|
26
|
-
|
25
|
+
after do
|
26
|
+
RegularModel.connection.drop_table(@model.table_name) rescue nil
|
27
|
+
end
|
27
28
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
29
|
+
with_model :blog_post do
|
30
|
+
table do |t|
|
31
|
+
t.string 'title'
|
32
|
+
t.text 'content'
|
33
|
+
t.timestamps
|
34
|
+
end
|
35
|
+
|
36
|
+
model do
|
37
|
+
scope_method =
|
38
|
+
if respond_to?(:scope) && !protected_methods.include?('scope')
|
39
|
+
:scope # ActiveRecord 3.x
|
40
|
+
else
|
41
|
+
:named_scope # ActiveRecord 2.x
|
42
|
+
end
|
43
|
+
|
44
|
+
send scope_method, :title_is_foo, :conditions => {:title => 'foo'}
|
45
|
+
end
|
33
46
|
end
|
34
47
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
end
|
48
|
+
describe "the named scope" do
|
49
|
+
it "should work like a regular named scope" do
|
50
|
+
included = RegularModel.create!(:title => 'foo', :content => "Include me!")
|
51
|
+
excluded = RegularModel.create!(:title => 'bar', :content => "Include me!")
|
52
|
+
|
53
|
+
RegularModel.title_is_foo.should == [included]
|
42
54
|
|
43
|
-
|
55
|
+
included = BlogPost.create!(:title => 'foo', :content => "Include me!")
|
56
|
+
excluded = BlogPost.create!(:title => 'bar', :content => "Include me!")
|
57
|
+
|
58
|
+
BlogPost.title_is_foo.should == [included]
|
59
|
+
end
|
44
60
|
end
|
45
61
|
end
|
46
62
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
63
|
+
context "that has a polymorphic belongs_to" do
|
64
|
+
before do
|
65
|
+
class Animal < ActiveRecord::Base
|
66
|
+
has_many :tea_cups, :as => :pet
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
with_model :tea_cup do
|
71
|
+
table do |t|
|
72
|
+
t.belongs_to :pet, :polymorphic => true
|
73
|
+
end
|
74
|
+
model do
|
75
|
+
belongs_to :pet, :polymorphic => true
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
with_table :animals
|
80
|
+
|
81
|
+
with_model :stuffed_animal do
|
82
|
+
table
|
83
|
+
model do
|
84
|
+
has_many :tea_cups, :as => :pet
|
85
|
+
end
|
86
|
+
end
|
51
87
|
|
52
|
-
|
88
|
+
describe "the polymorphic belongs_to" do
|
89
|
+
it "should work like a regular polymorphic belongs_to" do
|
90
|
+
animal = Animal.create!
|
91
|
+
stuffed_animal = StuffedAnimal.create!
|
53
92
|
|
54
|
-
|
55
|
-
|
93
|
+
tea_cup_for_animal = TeaCup.create!(:pet => animal)
|
94
|
+
tea_cup_for_animal.pet_type.should == "Animal"
|
95
|
+
animal.tea_cups.should include(tea_cup_for_animal)
|
56
96
|
|
57
|
-
|
97
|
+
tea_cup_for_stuffed_animal = TeaCup.create!(:pet => stuffed_animal)
|
98
|
+
tea_cup_for_stuffed_animal.pet_type.should == "StuffedAnimal"
|
99
|
+
stuffed_animal.tea_cups.should include(tea_cup_for_stuffed_animal)
|
100
|
+
end
|
58
101
|
end
|
59
102
|
end
|
60
103
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -18,4 +18,26 @@ end
|
|
18
18
|
ActiveRecord::Base.establish_connection(:adapter => 'sqlite3', :database => ":memory:")
|
19
19
|
|
20
20
|
# For readme_spec.rb
|
21
|
-
module SomeModule; end
|
21
|
+
module SomeModule; end
|
22
|
+
|
23
|
+
if defined?(ActiveModel)
|
24
|
+
shared_examples_for "ActiveModel" do
|
25
|
+
require 'test/unit/assertions'
|
26
|
+
require 'active_model/lint'
|
27
|
+
include Test::Unit::Assertions
|
28
|
+
include ActiveModel::Lint::Tests
|
29
|
+
|
30
|
+
# to_s is to support ruby-1.9
|
31
|
+
ActiveModel::Lint::Tests.public_instance_methods.map{|m| m.to_s}.grep(/^test/).each do |m|
|
32
|
+
example m.gsub('_',' ') do
|
33
|
+
begin
|
34
|
+
send m
|
35
|
+
rescue
|
36
|
+
puts $!.message
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
before { @model = subject }
|
42
|
+
end
|
43
|
+
end
|
data/spec/with_model_spec.rb
CHANGED
@@ -38,6 +38,13 @@ describe "a temporary ActiveRecord model created with with_model" do
|
|
38
38
|
}.should raise_error(ActiveRecord::RecordNotFound)
|
39
39
|
end
|
40
40
|
|
41
|
+
if defined?(ActiveModel)
|
42
|
+
describe "the class" do
|
43
|
+
subject { BlogPost.new }
|
44
|
+
it_should_behave_like "ActiveModel"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
41
48
|
it "should have methods defined in its model block" do
|
42
49
|
blog_post.new(:title => 'New blog post').fancy_title.should == "Title: New blog post"
|
43
50
|
end
|
@@ -51,6 +58,10 @@ describe "a temporary ActiveRecord model created with with_model" do
|
|
51
58
|
BlogPost.with_model?.should be_true
|
52
59
|
end
|
53
60
|
end
|
61
|
+
|
62
|
+
it "should have a base_class of itself" do
|
63
|
+
BlogPost.base_class.should == BlogPost
|
64
|
+
end
|
54
65
|
end
|
55
66
|
|
56
67
|
context "after an example which uses with_model without shadowing an existing constant" do
|
metadata
CHANGED
@@ -1,8 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: with_model
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
4
|
+
hash: 17
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
- 5
|
10
|
+
version: 0.1.5
|
6
11
|
platform: ruby
|
7
12
|
authors:
|
8
13
|
- Case Commons, LLC
|
@@ -10,7 +15,7 @@ autorequire:
|
|
10
15
|
bindir: bin
|
11
16
|
cert_chain: []
|
12
17
|
|
13
|
-
date: 2011-
|
18
|
+
date: 2011-05-18 00:00:00 -04:00
|
14
19
|
default_executable:
|
15
20
|
dependencies:
|
16
21
|
- !ruby/object:Gem::Dependency
|
@@ -21,9 +26,19 @@ dependencies:
|
|
21
26
|
requirements:
|
22
27
|
- - ">="
|
23
28
|
- !ruby/object:Gem::Version
|
29
|
+
hash: 9
|
30
|
+
segments:
|
31
|
+
- 2
|
32
|
+
- 3
|
33
|
+
- 5
|
24
34
|
version: 2.3.5
|
25
35
|
- - <
|
26
36
|
- !ruby/object:Gem::Version
|
37
|
+
hash: 63
|
38
|
+
segments:
|
39
|
+
- 4
|
40
|
+
- 0
|
41
|
+
- 0
|
27
42
|
version: 4.0.0
|
28
43
|
type: :runtime
|
29
44
|
version_requirements: *id001
|
@@ -39,6 +54,7 @@ extra_rdoc_files: []
|
|
39
54
|
files:
|
40
55
|
- .autotest
|
41
56
|
- .gitignore
|
57
|
+
- .rspec
|
42
58
|
- CHANGELOG
|
43
59
|
- Gemfile
|
44
60
|
- LICENSE
|
@@ -70,17 +86,23 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
70
86
|
requirements:
|
71
87
|
- - ">="
|
72
88
|
- !ruby/object:Gem::Version
|
89
|
+
hash: 3
|
90
|
+
segments:
|
91
|
+
- 0
|
73
92
|
version: "0"
|
74
93
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
75
94
|
none: false
|
76
95
|
requirements:
|
77
96
|
- - ">="
|
78
97
|
- !ruby/object:Gem::Version
|
98
|
+
hash: 3
|
99
|
+
segments:
|
100
|
+
- 0
|
79
101
|
version: "0"
|
80
102
|
requirements: []
|
81
103
|
|
82
104
|
rubyforge_project:
|
83
|
-
rubygems_version: 1.
|
105
|
+
rubygems_version: 1.3.7
|
84
106
|
signing_key:
|
85
107
|
specification_version: 3
|
86
108
|
summary: Dynamically build a model within an Rspec context
|