snusnu-dm-accepts_nested_attributes 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.
@@ -0,0 +1,174 @@
1
+ require 'pathname'
2
+ require Pathname(__FILE__).dirname.expand_path.parent + 'spec_helper'
3
+
4
+ describe DataMapper::Resource do
5
+
6
+ before(:all) do
7
+ DataMapper.auto_migrate!
8
+ end
9
+
10
+ describe ".reject_new_nested_attributes_proc_for(association_name)" do
11
+
12
+ it "should be available" do
13
+ Person.respond_to?(:reject_new_nested_attributes_proc_for).should be_true
14
+ end
15
+
16
+ it "should return the proc that has been stored for the association named association_name" do
17
+ guard = lambda { |attributes| true }
18
+ Person.accepts_nested_attributes_for :profile, :reject_if => guard
19
+ Person.reject_new_nested_attributes_proc_for(:profile).should == guard
20
+ end
21
+
22
+ it "should return nil if association_name is nil" do
23
+ Person.reject_new_nested_attributes_proc_for(nil).should be_nil
24
+ end
25
+
26
+ it "should return nil if association_name is no valid association" do
27
+ Person.reject_new_nested_attributes_proc_for(:foo).should be_nil
28
+ end
29
+
30
+ end
31
+
32
+ describe ".association_for_name(name)" do
33
+
34
+ it "should raise when passed no name" do
35
+ lambda { Person.association_for_name }.should raise_error(ArgumentError)
36
+ end
37
+
38
+ it "should raise when passed nil as name" do
39
+ lambda { Person.association_for_name(nil) }.should raise_error(ArgumentError)
40
+ end
41
+
42
+ it "should raise when there is no association named name" do
43
+ lambda { Person.association_for_name(:foo) }.should raise_error(ArgumentError)
44
+ end
45
+
46
+ it "should not raise when there is an association named name" do
47
+ lambda { Person.association_for_name(:profile) }.should_not raise_error
48
+ end
49
+
50
+ it "should return an instance of DataMapper::Associations::Relationship when there is an association named name" do
51
+ Person.association_for_name(:profile).is_a?(DataMapper::Associations::Relationship).should be_true
52
+ end
53
+
54
+ end
55
+
56
+ describe ".associated_model_for_name(association_name)" do
57
+
58
+ it "should raise when passed no association_name" do
59
+ lambda { Person.associated_model_for_name }.should raise_error(ArgumentError)
60
+ end
61
+
62
+ it "should raise when passed nil as association_name" do
63
+ lambda { Person.associated_model_for_name(nil) }.should raise_error(ArgumentError)
64
+ end
65
+
66
+ it "should raise when there is no association named association_name" do
67
+ lambda { Person.associated_model_for_name(:foo) }.should raise_error(ArgumentError)
68
+ end
69
+
70
+ it "should not raise when there is an association named association_name" do
71
+ lambda { Person.associated_model_for_name(:profile) }.should_not raise_error
72
+ end
73
+
74
+ describe "and association_name points to a has(1) association" do
75
+
76
+ it "should return the class of the associated model when the association named association_name is present" do
77
+ Person.associated_model_for_name(:profile).should == Profile
78
+ end
79
+
80
+ end
81
+
82
+ describe "and association_name points to a has(n) association" do
83
+
84
+ it "should return the class of the associated model when the association named association_name is present" do
85
+ Person.associated_model_for_name(:project_memberships).should == ProjectMembership
86
+ end
87
+
88
+ end
89
+
90
+ describe "and association_name points to a has(n, :through) association" do
91
+
92
+ it "should return the class of the associated model when the association named association_name is present" do
93
+ Person.associated_model_for_name(:projects).should == Project
94
+ end
95
+
96
+ end
97
+
98
+ describe "and association_name points to a belongs_to association" do
99
+
100
+ it "should return the class of the associated model when the association named association_name is present" do
101
+ Profile.associated_model_for_name(:person).should == Person
102
+ end
103
+
104
+ end
105
+
106
+ end
107
+
108
+ describe ".nr_of_possible_child_instances(assocation_name)" do
109
+
110
+ it "should raise when passed no association_name" do
111
+ lambda { Person.nr_of_possible_child_instances }.should raise_error(ArgumentError)
112
+ end
113
+
114
+ it "should raise when passed nil as association_name" do
115
+ lambda { Person.nr_of_possible_child_instances(nil) }.should raise_error(ArgumentError)
116
+ end
117
+
118
+ it "should raise when there is no association named association_name" do
119
+ lambda { Person.nr_of_possible_child_instances(:foo) }.should raise_error(ArgumentError)
120
+ end
121
+
122
+ it "should not raise when there is an association named association_name" do
123
+ lambda { Person.nr_of_possible_child_instances(:profile) }.should_not raise_error
124
+ end
125
+
126
+ it "should return 1 for a belongs_to relation" do
127
+ Profile.nr_of_possible_child_instances(:person).should == 1
128
+ end
129
+
130
+ it "should return 1 for a has(1) relation" do
131
+ Person.nr_of_possible_child_instances(:profile).should == 1
132
+ end
133
+
134
+ it "should return Infinity for a has(n) relation" do
135
+ Person.nr_of_possible_child_instances(:project_memberships).should == Person.n
136
+ end
137
+
138
+ it "should return Infinity for a has(n, :through) relation" do
139
+ Person.nr_of_possible_child_instances(:projects).should == Person.n
140
+ end
141
+
142
+ end
143
+
144
+ describe "#associated_instance_get(association_name)" do
145
+
146
+ before do
147
+ @person = Person.create(:name => 'snusnu')
148
+ @person.profile = Profile.new
149
+ @person.save
150
+ end
151
+
152
+ it "should raise when passed no association_name" do
153
+ lambda { @person.associated_instance_get }.should raise_error
154
+ end
155
+
156
+ it "should raise when passed nil as association_name" do
157
+ lambda { @person.associated_instance_get(nil) }.should raise_error
158
+ end
159
+
160
+ it "should raise when there is no association named association_name" do
161
+ lambda { @person.associated_instance_get(:foo) }.should raise_error
162
+ end
163
+
164
+ it "should return an object that has the same class like the associated resource" do
165
+ @person.associated_instance_get(:profile).class.should == Profile
166
+ end
167
+
168
+ it "should return the associated object when there is an association named association_name" do
169
+ @person.associated_instance_get(:profile).should == @person.profile
170
+ end
171
+
172
+ end
173
+
174
+ end
data/tasks/gemspec.rb ADDED
@@ -0,0 +1,10 @@
1
+ desc "Generate gemspec"
2
+ task :gemspec do |x|
3
+
4
+ # # Clean up extraneous files before checking manifest
5
+ # %x[rake clean]
6
+
7
+ %x[rake debug_gem > #{GEM_NAME}.gemspec]
8
+ puts "Successfully created gemspec for #{GEM_NAME}!"
9
+
10
+ end
data/tasks/hoe.rb ADDED
@@ -0,0 +1,46 @@
1
+ require 'hoe'
2
+
3
+ @config_file = "~/.rubyforge/user-config.yml"
4
+ @config = nil
5
+ RUBYFORGE_USERNAME = "unknown"
6
+ def rubyforge_username
7
+ unless @config
8
+ begin
9
+ @config = YAML.load(File.read(File.expand_path(@config_file)))
10
+ rescue
11
+ puts <<-EOS
12
+ ERROR: No rubyforge config file found: #{@config_file}
13
+ Run 'rubyforge setup' to prepare your env for access to Rubyforge
14
+ - See http://newgem.rubyforge.org/rubyforge.html for more details
15
+ EOS
16
+ exit
17
+ end
18
+ end
19
+ RUBYFORGE_USERNAME.replace @config["username"]
20
+ end
21
+
22
+ # Remove hoe dependency
23
+ class Hoe
24
+ def extra_dev_deps
25
+ @extra_dev_deps.reject! { |dep| dep[0] == "hoe" }
26
+ @extra_dev_deps
27
+ end
28
+ end
29
+
30
+ hoe = Hoe.new(GEM_NAME, GEM_VERSION) do |p|
31
+
32
+ p.developer(AUTHOR, EMAIL)
33
+
34
+ p.description = PROJECT_DESCRIPTION
35
+ p.summary = PROJECT_SUMMARY
36
+ p.url = PROJECT_URL
37
+
38
+ p.rubyforge_name = PROJECT_NAME if PROJECT_NAME
39
+
40
+ p.clean_globs |= %w[ {coverage,doc,log,tmp} **/*.{log,db} profile_results.* **/.DS_Store spec/db ]
41
+
42
+ GEM_DEPENDENCIES.each do |dep|
43
+ p.extra_deps << dep
44
+ end
45
+
46
+ end
data/tasks/install.rb ADDED
@@ -0,0 +1,15 @@
1
+ def sudo_gem(cmd)
2
+ sh "#{SUDO} #{RUBY} -S gem #{cmd}", :verbose => false
3
+ end
4
+
5
+ if WINDOWS
6
+ desc "Install #{GEM_NAME}"
7
+ task :install => :gem do
8
+ sudo_gem "install --no-rdoc --no-ri --local pkg/#{GEM_NAME}-#{GEM_VERSION}.gem"
9
+ end
10
+ else
11
+ desc "Install #{GEM_NAME}"
12
+ task :install => :package do
13
+ sudo_gem "install --no-rdoc --no-ri --local pkg/#{GEM_NAME}-#{GEM_VERSION}.gem"
14
+ end
15
+ end
data/tasks/spec.rb ADDED
@@ -0,0 +1,25 @@
1
+ begin
2
+ gem 'rspec', '>=1.1.12'
3
+ require 'spec'
4
+ require 'spec/rake/spectask'
5
+
6
+ task :default => [ :spec ]
7
+
8
+ desc 'Run specifications'
9
+ Spec::Rake::SpecTask.new(:spec) do |t|
10
+ t.spec_opts << '--options' << 'spec/spec.opts' if File.exists?('spec/spec.opts')
11
+ t.spec_files = Pathname.glob((ROOT + 'spec/**/*_spec.rb').to_s).map { |f| f.to_s }
12
+
13
+ begin
14
+ gem 'rcov', '~>0.8'
15
+ t.rcov = JRUBY ? false : (ENV.has_key?('NO_RCOV') ? ENV['NO_RCOV'] != 'true' : true)
16
+ t.rcov_opts << '--exclude' << 'spec'
17
+ t.rcov_opts << '--text-summary'
18
+ t.rcov_opts << '--sort' << 'coverage' << '--sort-reverse'
19
+ rescue LoadError
20
+ # rcov not installed
21
+ end
22
+ end
23
+ rescue LoadError
24
+ # rspec not installed
25
+ end
metadata ADDED
@@ -0,0 +1,103 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: snusnu-dm-accepts_nested_attributes
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - "Martin Gamsj\xC3\xA4ger"
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-04-13 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: dm-core
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 0.9.11
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: addressable
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 2.0.2
34
+ version:
35
+ description: A DataMapper plugin that adds the possibility to perform nested model attribute assignment
36
+ email:
37
+ - gamsnjaga [a] gmail [d] com
38
+ executables: []
39
+
40
+ extensions: []
41
+
42
+ extra_rdoc_files:
43
+ - History.txt
44
+ - Manifest.txt
45
+ files:
46
+ - .gitignore
47
+ - History.txt
48
+ - LICENSE
49
+ - Manifest.txt
50
+ - README.textile
51
+ - Rakefile
52
+ - TODO
53
+ - lib/dm-accepts_nested_attributes.rb
54
+ - lib/dm-accepts_nested_attributes/associations.rb
55
+ - lib/dm-accepts_nested_attributes/nested_attributes.rb
56
+ - lib/dm-accepts_nested_attributes/version.rb
57
+ - spec/fixtures/person.rb
58
+ - spec/fixtures/profile.rb
59
+ - spec/fixtures/project.rb
60
+ - spec/fixtures/project_membership.rb
61
+ - spec/fixtures/task.rb
62
+ - spec/integration/belongs_to_spec.rb
63
+ - spec/integration/has_1_spec.rb
64
+ - spec/integration/has_n_spec.rb
65
+ - spec/integration/has_n_through_spec.rb
66
+ - spec/shared/rspec_tmbundle_support.rb
67
+ - spec/spec.opts
68
+ - spec/spec_helper.rb
69
+ - spec/unit/accepts_nested_attributes_for_spec.rb
70
+ - spec/unit/resource_spec.rb
71
+ - tasks/gemspec.rb
72
+ - tasks/hoe.rb
73
+ - tasks/install.rb
74
+ - tasks/spec.rb
75
+ has_rdoc: true
76
+ homepage: http://github.com/snusnu/dm-accepts_nested_attributes/tree/master
77
+ post_install_message:
78
+ rdoc_options:
79
+ - --main
80
+ - README.txt
81
+ require_paths:
82
+ - lib
83
+ required_ruby_version: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ version: "0"
88
+ version:
89
+ required_rubygems_version: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ version: "0"
94
+ version:
95
+ requirements: []
96
+
97
+ rubyforge_project: dm-accepts_nested_attributes
98
+ rubygems_version: 1.2.0
99
+ signing_key:
100
+ specification_version: 2
101
+ summary: A DataMapper plugin that adds the possibility to perform nested model attribute assignment
102
+ test_files: []
103
+