fixture_replacement 3.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 +2 -0
- data/CHANGELOG.rdoc +720 -0
- data/GPL_LICENSE +674 -0
- data/MIT_LICENSE +22 -0
- data/README.rdoc +154 -0
- data/Rakefile +8 -0
- data/TODO.rdoc +22 -0
- data/VERSION +1 -0
- data/contributions.rdoc +48 -0
- data/etc/bug_reports/2007_09_28_linoj.txt +51 -0
- data/etc/google_analytics +6 -0
- data/etc/patches/2007_09_14_default_model_name_with_arguments.diff +26 -0
- data/etc/patches/2007_10_14_active_record_specs.diff +396 -0
- data/etc/patches/2007_10_14_protected_attributes.diff +26 -0
- data/etc/patches/2007_10_14_send_patch.diff +79 -0
- data/etc/patches/2007_10_14_spelling_error_in_comments.diff +13 -0
- data/etc/patches/2007_10_17_protected_attributes_second_go.diff +212 -0
- data/etc/patches/2007_10_18_README.diff +137 -0
- data/etc/patches/2007_10_19_readme_tweak.diff +12 -0
- data/etc/patches/2007_10_19_silence_migration.diff +12 -0
- data/etc/patches/2007_10_25_changed_classify_to_camelize.diff +38 -0
- data/etc/patches/2007_11_20_fixture_replacement_generator_should_not_reload_environment_or_boot.patch +13 -0
- data/etc/patches/2007_11_20_string_random_refactor_and_extension.patch +104 -0
- data/etc/patches/2007_11_20_string_random_refactor_and_extension_v2.patch +108 -0
- data/fixture_replacement.gemspec +126 -0
- data/lib/fixture_replacement.rb +16 -0
- data/lib/fixture_replacement/attribute_builder.rb +129 -0
- data/lib/fixture_replacement/class_methods.rb +45 -0
- data/lib/fixture_replacement/method_generator.rb +38 -0
- data/lib/fixture_replacement/version.rb +13 -0
- data/lib/fr.rb +1 -0
- data/philosophy_and_bugs.rdoc +128 -0
- data/rake_tasks/code_quality.rb +37 -0
- data/rake_tasks/docs.rb +59 -0
- data/rake_tasks/gem.rb +27 -0
- data/rake_tasks/specs.rb +7 -0
- data/rake_tasks/tests.rb +7 -0
- data/rake_tasks/website.rb +11 -0
- data/spec/fixture_replacement/attribute_builder_spec.rb +162 -0
- data/spec/fixture_replacement/fixture_replacement_spec.rb +96 -0
- data/spec/fixture_replacement/fixtures/classes.rb +78 -0
- data/spec/fixture_replacement/fr_spec.rb +7 -0
- data/spec/fixture_replacement/integration/attr_protected_attributes_spec.rb +71 -0
- data/spec/fixture_replacement/integration/attributes_for_with_invalid_keys_spec.rb +14 -0
- data/spec/fixture_replacement/integration/attributes_from_spec_without_block.rb +52 -0
- data/spec/fixture_replacement/integration/create_method_spec.rb +61 -0
- data/spec/fixture_replacement/integration/cyclic_dependency_spec.rb +32 -0
- data/spec/fixture_replacement/integration/default_warnings_spec.rb +29 -0
- data/spec/fixture_replacement/integration/extend_spec.rb +37 -0
- data/spec/fixture_replacement/integration/has_and_belongs_to_many_spec.rb +64 -0
- data/spec/fixture_replacement/integration/new_method_spec.rb +96 -0
- data/spec/fixture_replacement/integration/private_methods_spec.rb +43 -0
- data/spec/fixture_replacement/integration/public_methods_spec.rb +21 -0
- data/spec/fixture_replacement/integration/valid_attributes_spec.rb +41 -0
- data/spec/fixture_replacement/integration/validation_spec.rb +54 -0
- data/spec/fixture_replacement/regressions/2008_01_21_random_string_with_sti_spec.rb +71 -0
- data/spec/fixture_replacement/version_spec.rb +7 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +16 -0
- data/spec/spec_helpers.rb +117 -0
- data/test/test_helper.rb +21 -0
- data/test/unit/user_test.rb +57 -0
- metadata +143 -0
@@ -0,0 +1,12 @@
|
|
1
|
+
Index: README
|
2
|
+
===================================================================
|
3
|
+
--- README (revision 65)
|
4
|
+
+++ README (working copy)
|
5
|
+
@@ -144,7 +144,6 @@
|
6
|
+
- default_* methods can take a hash (applied in rev. 11)
|
7
|
+
- Wincent Colaiuta (Huge Thanks)
|
8
|
+
- patch for spelling error in comments (applied in revision 31)
|
9
|
+
- - extra documentation (http://wincent.com/knowledge-base/FixtureReplacement)
|
10
|
+
- patch for specs with sqlite3 (applied in revision 35)
|
11
|
+
- patch to ignore attr_protected in mass assignment (applied in revision 57)
|
12
|
+
- README Documentation (applied in revision 62)
|
@@ -0,0 +1,12 @@
|
|
1
|
+
Index: spec/spec_helper.rb
|
2
|
+
===================================================================
|
3
|
+
--- spec/spec_helper.rb (revision 65)
|
4
|
+
+++ spec/spec_helper.rb (working copy)
|
5
|
+
@@ -5,6 +5,7 @@
|
6
|
+
|
7
|
+
ActiveRecord::Base.establish_connection :adapter => 'sqlite3', :database => ':memory:'
|
8
|
+
|
9
|
+
+ActiveRecord::Migration.verbose = false
|
10
|
+
ActiveRecord::Schema.define do
|
11
|
+
|
12
|
+
create_table :users do |t|
|
@@ -0,0 +1,38 @@
|
|
1
|
+
Index: lib/fixture_replacement/fixture_replacement.rb
|
2
|
+
===================================================================
|
3
|
+
--- lib/fixture_replacement/fixture_replacement.rb (revision 70)
|
4
|
+
+++ lib/fixture_replacement/fixture_replacement.rb (working copy)
|
5
|
+
@@ -40,7 +40,7 @@
|
6
|
+
|
7
|
+
def initialize(method_name, fixture_mod=FixtureReplacement)
|
8
|
+
@model_name = method_name
|
9
|
+
- @model_class = method_name.classify
|
10
|
+
+ @model_class = method_name.camelize
|
11
|
+
@fixture_module = fixture_mod
|
12
|
+
|
13
|
+
add_to_class_singleton(@model_class)
|
14
|
+
Index: spec/fixture_replacement/fixture_replacement_spec.rb
|
15
|
+
===================================================================
|
16
|
+
--- spec/fixture_replacement/fixture_replacement_spec.rb (revision 70)
|
17
|
+
+++ spec/fixture_replacement/fixture_replacement_spec.rb (working copy)
|
18
|
+
@@ -14,6 +14,7 @@
|
19
|
+
end
|
20
|
+
|
21
|
+
class Gender < ActiveRecord::Base; end
|
22
|
+
+class Actress < ActiveRecord::Base; end
|
23
|
+
|
24
|
+
|
25
|
+
|
26
|
+
@@ -118,6 +119,12 @@
|
27
|
+
}.should raise_error
|
28
|
+
end
|
29
|
+
|
30
|
+
+ it "should not raise an error if the model ends with 's'" do
|
31
|
+
+ lambda {
|
32
|
+
+ Generator.new("actress")
|
33
|
+
+ }.should_not raise_error
|
34
|
+
+ end
|
35
|
+
+
|
36
|
+
it "should be able to respond to generate_default_method" do
|
37
|
+
@generator.should respond_to(:generate_default_method)
|
38
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
Index: vendor/plugins/fixture_replacement/generators/fixture_replacement/fixture_replacement_generator.rb
|
2
|
+
===================================================================
|
3
|
+
--- vendor/plugins/fixture_replacement/generators/fixture_replacement/fixture_replacement_generator.rb (revision 83)
|
4
|
+
+++ vendor/plugins/fixture_replacement/generators/fixture_replacement/fixture_replacement_generator.rb (working copy)
|
5
|
+
@@ -1,6 +1,6 @@
|
6
|
+
require 'rbconfig'
|
7
|
+
-require 'config/boot'
|
8
|
+
-require 'config/environment'
|
9
|
+
+require 'config/environment' unless RAILS_GEM_VERSION
|
10
|
+
+require 'config/boot' unless RAILS_ROOT
|
11
|
+
|
12
|
+
class FixtureReplacementGenerator < Rails::Generator::Base
|
13
|
+
DEFAULT_SHEBANG = File.join(Config::CONFIG['bindir'],
|
@@ -0,0 +1,104 @@
|
|
1
|
+
Index: lib/fixture_replacement/string.rb
|
2
|
+
===================================================================
|
3
|
+
--- lib/fixture_replacement/string.rb (revision 83)
|
4
|
+
+++ lib/fixture_replacement/string.rb (working copy)
|
5
|
+
@@ -1,10 +1,21 @@
|
6
|
+
+class String
|
7
|
+
+ def random_chr
|
8
|
+
+ self[rand(size)].chr
|
9
|
+
+ end
|
10
|
+
+
|
11
|
+
+ def random_str(length=10)
|
12
|
+
+ (1..length).collect {random_chr}.join
|
13
|
+
+ end
|
14
|
+
+
|
15
|
+
+ def formatted_random_str(format, length=10)
|
16
|
+
+ format.split(/(%s)/).map {|str| str.sub('%s', random_str(length))}.join
|
17
|
+
+ end
|
18
|
+
|
19
|
+
-class String
|
20
|
+
def self.random(length=10)
|
21
|
+
- chars = ("a".."z").to_a
|
22
|
+
- string = ""
|
23
|
+
- 1.upto(length) { |i| string << chars[rand(chars.size-1)]}
|
24
|
+
- return string
|
25
|
+
+ ("a".."z").sort.join.random_str(length)
|
26
|
+
end
|
27
|
+
+
|
28
|
+
+ def self.formatted_random(format, length=10)
|
29
|
+
+ ("a".."z").sort.join.formatted_random_str(format, length)
|
30
|
+
+ end
|
31
|
+
end
|
32
|
+
-
|
33
|
+
Index: spec/fixture_replacement/extentions_spec.rb
|
34
|
+
===================================================================
|
35
|
+
--- spec/fixture_replacement/extentions_spec.rb (revision 83)
|
36
|
+
+++ spec/fixture_replacement/extentions_spec.rb (working copy)
|
37
|
+
@@ -2,7 +2,9 @@
|
38
|
+
|
39
|
+
describe "String.random" do
|
40
|
+
it "should not be the same as another randomly generated string" do
|
41
|
+
- String.random.should_not == String.random
|
42
|
+
+ (1..100).each do |ctr|
|
43
|
+
+ String.random.should_not == String.random
|
44
|
+
+ end
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should by default be 10 characters long" do
|
48
|
+
@@ -12,9 +14,51 @@
|
49
|
+
it "should be able to specify the length of the random string" do
|
50
|
+
String.random(100).size.should == 100
|
51
|
+
end
|
52
|
+
-
|
53
|
+
+
|
54
|
+
it "should only generate lowercase letters" do
|
55
|
+
- s = String.random(100)
|
56
|
+
- s.upcase.should == s.swapcase
|
57
|
+
+ String.random(100).should =~ /^[a-z]{100}/
|
58
|
+
end
|
59
|
+
-end
|
60
|
+
|
61
|
+
+end
|
62
|
+
+
|
63
|
+
+describe "String.formatted_random" do
|
64
|
+
+ it "should require a format argument to be given" do
|
65
|
+
+ lambda { String.formatted_random }.should raise_error(ArgumentError)
|
66
|
+
+ end
|
67
|
+
+
|
68
|
+
+ it "should be able to generate simple formatted random strings" do
|
69
|
+
+ String.formatted_random('%s@%s.%s').should =~ /^[a-z]{10}@[a-z]{10}\.[a-z]{10}$/
|
70
|
+
+ end
|
71
|
+
+end
|
72
|
+
+
|
73
|
+
+describe "String#random_chr" do
|
74
|
+
+ before(:each) do
|
75
|
+
+ @string = "abcde"
|
76
|
+
+ end
|
77
|
+
+
|
78
|
+
+ it "should always provide a random character from the string" do
|
79
|
+
+ (1..100).each do |ctr|
|
80
|
+
+ @string.include?(@string.random_chr).should be_true
|
81
|
+
+ end
|
82
|
+
+ end
|
83
|
+
+
|
84
|
+
+ it "should rarely generate the same character twice in a row given a very large, random distribution" do
|
85
|
+
+ string = String.random(100)
|
86
|
+
+ ctr = 0
|
87
|
+
+ (1..100).each do |i|
|
88
|
+
+ string.random_chr == string.random_chr && ctr += 1
|
89
|
+
+ end
|
90
|
+
+ ctr.should < 10
|
91
|
+
+ end
|
92
|
+
+end
|
93
|
+
+
|
94
|
+
+describe "String#random_str" do
|
95
|
+
+ it "should be able to generate random strings from a given string of characters" do
|
96
|
+
+ "Jim Beth Sam Cassie".random_str(100).should =~ /^[ BCJSaehimst]{100}$/
|
97
|
+
+ end
|
98
|
+
+end
|
99
|
+
+
|
100
|
+
+describe "String#formatted_random_str" do
|
101
|
+
+ it "should be able to generate random strings from a given string of characters" do
|
102
|
+
+ "Jim Beth Sam Cassie".formatted_random_str('%s@%s.%s').should =~ /^[ BCJSaehimst]{10}@[ BCJSaehimst]{10}\.[ BCJSaehimst]{10}$/
|
103
|
+
+ end
|
104
|
+
+end
|
@@ -0,0 +1,108 @@
|
|
1
|
+
Index: lib/fixture_replacement/string.rb
|
2
|
+
===================================================================
|
3
|
+
--- lib/fixture_replacement/string.rb (revision 83)
|
4
|
+
+++ lib/fixture_replacement/string.rb (working copy)
|
5
|
+
@@ -1,10 +1,25 @@
|
6
|
+
+class String
|
7
|
+
+ def random_chr
|
8
|
+
+ self[rand(size)].chr
|
9
|
+
+ end
|
10
|
+
+
|
11
|
+
+ def random_str(length=10)
|
12
|
+
+ (1..length).collect {random_chr}.join
|
13
|
+
+ end
|
14
|
+
+
|
15
|
+
+ def formatted_random_str(format, length=10)
|
16
|
+
+ result = format.dup
|
17
|
+
+ while result.match(/(%(\d*)s)/) do
|
18
|
+
+ result.sub!($1, random_str($2.empty? ? length : $2.to_i))
|
19
|
+
+ end
|
20
|
+
+ result
|
21
|
+
+ end
|
22
|
+
|
23
|
+
-class String
|
24
|
+
def self.random(length=10)
|
25
|
+
- chars = ("a".."z").to_a
|
26
|
+
- string = ""
|
27
|
+
- 1.upto(length) { |i| string << chars[rand(chars.size-1)]}
|
28
|
+
- return string
|
29
|
+
+ ("a".."z").sort.join.random_str(length)
|
30
|
+
end
|
31
|
+
+
|
32
|
+
+ def self.formatted_random(format, length=10)
|
33
|
+
+ ("a".."z").sort.join.formatted_random_str(format, length)
|
34
|
+
+ end
|
35
|
+
end
|
36
|
+
-
|
37
|
+
Index: spec/fixture_replacement/extentions_spec.rb
|
38
|
+
===================================================================
|
39
|
+
--- spec/fixture_replacement/extentions_spec.rb (revision 83)
|
40
|
+
+++ spec/fixture_replacement/extentions_spec.rb (working copy)
|
41
|
+
@@ -2,7 +2,9 @@
|
42
|
+
|
43
|
+
describe "String.random" do
|
44
|
+
it "should not be the same as another randomly generated string" do
|
45
|
+
- String.random.should_not == String.random
|
46
|
+
+ (1..100).each do |ctr|
|
47
|
+
+ String.random.should_not == String.random
|
48
|
+
+ end
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should by default be 10 characters long" do
|
52
|
+
@@ -12,9 +14,51 @@
|
53
|
+
it "should be able to specify the length of the random string" do
|
54
|
+
String.random(100).size.should == 100
|
55
|
+
end
|
56
|
+
-
|
57
|
+
+
|
58
|
+
it "should only generate lowercase letters" do
|
59
|
+
- s = String.random(100)
|
60
|
+
- s.upcase.should == s.swapcase
|
61
|
+
+ String.random(100).should =~ /^[a-z]{100}/
|
62
|
+
end
|
63
|
+
-end
|
64
|
+
|
65
|
+
+end
|
66
|
+
+
|
67
|
+
+describe "String.formatted_random" do
|
68
|
+
+ it "should require a format argument to be given" do
|
69
|
+
+ lambda { String.formatted_random }.should raise_error(ArgumentError)
|
70
|
+
+ end
|
71
|
+
+
|
72
|
+
+ it "should be able to generate simple formatted random strings" do
|
73
|
+
+ String.formatted_random('%s@%s.%s').should =~ /^[a-z]{10}@[a-z]{10}\.[a-z]{10}$/
|
74
|
+
+ end
|
75
|
+
+end
|
76
|
+
+
|
77
|
+
+describe "String#random_chr" do
|
78
|
+
+ before(:each) do
|
79
|
+
+ @string = "abcde"
|
80
|
+
+ end
|
81
|
+
+
|
82
|
+
+ it "should always provide a random character from the string" do
|
83
|
+
+ (1..100).each do |ctr|
|
84
|
+
+ @string.include?(@string.random_chr).should be_true
|
85
|
+
+ end
|
86
|
+
+ end
|
87
|
+
+
|
88
|
+
+ it "should rarely generate the same character twice in a row given a very large, random distribution" do
|
89
|
+
+ string = String.random(100)
|
90
|
+
+ ctr = 0
|
91
|
+
+ (1..100).each do |i|
|
92
|
+
+ string.random_chr == string.random_chr && ctr += 1
|
93
|
+
+ end
|
94
|
+
+ ctr.should < 10
|
95
|
+
+ end
|
96
|
+
+end
|
97
|
+
+
|
98
|
+
+describe "String#random_str" do
|
99
|
+
+ it "should be able to generate random strings from a given string of characters" do
|
100
|
+
+ "Jim Beth Sam Cassie".random_str(100).should =~ /^[ BCJSaehimst]{100}$/
|
101
|
+
+ end
|
102
|
+
+end
|
103
|
+
+
|
104
|
+
+describe "String#formatted_random_str" do
|
105
|
+
+ it "should be able to generate random strings from a given string of characters" do
|
106
|
+
+ "Jim Beth Sam Cassie".formatted_random_str('%s@%s.%s').should =~ /^[ BCJSaehimst]{10}@[ BCJSaehimst]{10}\.[ BCJSaehimst]{10}$/
|
107
|
+
+ end
|
108
|
+
+end
|
@@ -0,0 +1,126 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run `rake gemspec`
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{fixture_replacement}
|
8
|
+
s.version = "3.0.1"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Scott Taylor"]
|
12
|
+
s.date = %q{2009-11-21}
|
13
|
+
s.description = %q{FixtureReplacement is a Rails plugin that provides a simple way to
|
14
|
+
quickly populate your test database with model objects without having to manage multiple,
|
15
|
+
brittle fixture files. You can easily set up complex object graphs (with models which
|
16
|
+
reference other models) and add new objects on the fly.
|
17
|
+
}
|
18
|
+
s.email = %q{scott@railsnewbie.com}
|
19
|
+
s.extra_rdoc_files = [
|
20
|
+
"README.rdoc"
|
21
|
+
]
|
22
|
+
s.files = [
|
23
|
+
".gitignore",
|
24
|
+
"CHANGELOG.rdoc",
|
25
|
+
"GPL_LICENSE",
|
26
|
+
"MIT_LICENSE",
|
27
|
+
"README.rdoc",
|
28
|
+
"Rakefile",
|
29
|
+
"TODO.rdoc",
|
30
|
+
"VERSION",
|
31
|
+
"contributions.rdoc",
|
32
|
+
"etc/bug_reports/2007_09_28_linoj.txt",
|
33
|
+
"etc/google_analytics",
|
34
|
+
"etc/patches/2007_09_14_default_model_name_with_arguments.diff",
|
35
|
+
"etc/patches/2007_10_14_active_record_specs.diff",
|
36
|
+
"etc/patches/2007_10_14_protected_attributes.diff",
|
37
|
+
"etc/patches/2007_10_14_send_patch.diff",
|
38
|
+
"etc/patches/2007_10_14_spelling_error_in_comments.diff",
|
39
|
+
"etc/patches/2007_10_17_protected_attributes_second_go.diff",
|
40
|
+
"etc/patches/2007_10_18_README.diff",
|
41
|
+
"etc/patches/2007_10_19_readme_tweak.diff",
|
42
|
+
"etc/patches/2007_10_19_silence_migration.diff",
|
43
|
+
"etc/patches/2007_10_25_changed_classify_to_camelize.diff",
|
44
|
+
"etc/patches/2007_11_20_fixture_replacement_generator_should_not_reload_environment_or_boot.patch",
|
45
|
+
"etc/patches/2007_11_20_string_random_refactor_and_extension.patch",
|
46
|
+
"etc/patches/2007_11_20_string_random_refactor_and_extension_v2.patch",
|
47
|
+
"fixture_replacement.gemspec",
|
48
|
+
"lib/fixture_replacement.rb",
|
49
|
+
"lib/fixture_replacement/attribute_builder.rb",
|
50
|
+
"lib/fixture_replacement/class_methods.rb",
|
51
|
+
"lib/fixture_replacement/method_generator.rb",
|
52
|
+
"lib/fixture_replacement/version.rb",
|
53
|
+
"lib/fr.rb",
|
54
|
+
"philosophy_and_bugs.rdoc",
|
55
|
+
"rake_tasks/code_quality.rb",
|
56
|
+
"rake_tasks/docs.rb",
|
57
|
+
"rake_tasks/gem.rb",
|
58
|
+
"rake_tasks/specs.rb",
|
59
|
+
"rake_tasks/tests.rb",
|
60
|
+
"rake_tasks/website.rb",
|
61
|
+
"spec/fixture_replacement/attribute_builder_spec.rb",
|
62
|
+
"spec/fixture_replacement/fixture_replacement_spec.rb",
|
63
|
+
"spec/fixture_replacement/fixtures/classes.rb",
|
64
|
+
"spec/fixture_replacement/fr_spec.rb",
|
65
|
+
"spec/fixture_replacement/integration/attr_protected_attributes_spec.rb",
|
66
|
+
"spec/fixture_replacement/integration/attributes_for_with_invalid_keys_spec.rb",
|
67
|
+
"spec/fixture_replacement/integration/attributes_from_spec_without_block.rb",
|
68
|
+
"spec/fixture_replacement/integration/create_method_spec.rb",
|
69
|
+
"spec/fixture_replacement/integration/cyclic_dependency_spec.rb",
|
70
|
+
"spec/fixture_replacement/integration/default_warnings_spec.rb",
|
71
|
+
"spec/fixture_replacement/integration/extend_spec.rb",
|
72
|
+
"spec/fixture_replacement/integration/has_and_belongs_to_many_spec.rb",
|
73
|
+
"spec/fixture_replacement/integration/new_method_spec.rb",
|
74
|
+
"spec/fixture_replacement/integration/private_methods_spec.rb",
|
75
|
+
"spec/fixture_replacement/integration/public_methods_spec.rb",
|
76
|
+
"spec/fixture_replacement/integration/valid_attributes_spec.rb",
|
77
|
+
"spec/fixture_replacement/integration/validation_spec.rb",
|
78
|
+
"spec/fixture_replacement/regressions/2008_01_21_random_string_with_sti_spec.rb",
|
79
|
+
"spec/fixture_replacement/version_spec.rb",
|
80
|
+
"spec/spec.opts",
|
81
|
+
"spec/spec_helper.rb",
|
82
|
+
"spec/spec_helpers.rb",
|
83
|
+
"test/test_helper.rb",
|
84
|
+
"test/unit/user_test.rb"
|
85
|
+
]
|
86
|
+
s.homepage = %q{http://replacefixtures.rubyforge.org}
|
87
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
88
|
+
s.require_paths = ["lib"]
|
89
|
+
s.rubygems_version = %q{1.3.5}
|
90
|
+
s.summary = %q{The original fixture replacement solution for rails}
|
91
|
+
s.test_files = [
|
92
|
+
"spec/fixture_replacement/attribute_builder_spec.rb",
|
93
|
+
"spec/fixture_replacement/fixture_replacement_spec.rb",
|
94
|
+
"spec/fixture_replacement/fixtures/classes.rb",
|
95
|
+
"spec/fixture_replacement/fr_spec.rb",
|
96
|
+
"spec/fixture_replacement/integration/attr_protected_attributes_spec.rb",
|
97
|
+
"spec/fixture_replacement/integration/attributes_for_with_invalid_keys_spec.rb",
|
98
|
+
"spec/fixture_replacement/integration/attributes_from_spec_without_block.rb",
|
99
|
+
"spec/fixture_replacement/integration/create_method_spec.rb",
|
100
|
+
"spec/fixture_replacement/integration/cyclic_dependency_spec.rb",
|
101
|
+
"spec/fixture_replacement/integration/default_warnings_spec.rb",
|
102
|
+
"spec/fixture_replacement/integration/extend_spec.rb",
|
103
|
+
"spec/fixture_replacement/integration/has_and_belongs_to_many_spec.rb",
|
104
|
+
"spec/fixture_replacement/integration/new_method_spec.rb",
|
105
|
+
"spec/fixture_replacement/integration/private_methods_spec.rb",
|
106
|
+
"spec/fixture_replacement/integration/public_methods_spec.rb",
|
107
|
+
"spec/fixture_replacement/integration/valid_attributes_spec.rb",
|
108
|
+
"spec/fixture_replacement/integration/validation_spec.rb",
|
109
|
+
"spec/fixture_replacement/regressions/2008_01_21_random_string_with_sti_spec.rb",
|
110
|
+
"spec/fixture_replacement/version_spec.rb",
|
111
|
+
"spec/spec_helper.rb",
|
112
|
+
"spec/spec_helpers.rb",
|
113
|
+
"test/test_helper.rb",
|
114
|
+
"test/unit/user_test.rb"
|
115
|
+
]
|
116
|
+
|
117
|
+
if s.respond_to? :specification_version then
|
118
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
119
|
+
s.specification_version = 3
|
120
|
+
|
121
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
122
|
+
else
|
123
|
+
end
|
124
|
+
else
|
125
|
+
end
|
126
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
$LOAD_PATH.unshift File.expand_path(File.join(File.dirname(__FILE__), "."))
|
2
|
+
load "fixture_replacement/version.rb"
|
3
|
+
load "fixture_replacement/class_methods.rb"
|
4
|
+
load "fixture_replacement/attribute_builder.rb"
|
5
|
+
load "fixture_replacement/method_generator.rb"
|
6
|
+
|
7
|
+
module FixtureReplacement
|
8
|
+
class InvalidInstance < StandardError; end
|
9
|
+
|
10
|
+
include FixtureReplacement::Version
|
11
|
+
extend FixtureReplacement::ClassMethods
|
12
|
+
end
|
13
|
+
|
14
|
+
load "fr.rb"
|
15
|
+
|
16
|
+
FixtureReplacement.load_example_data
|
@@ -0,0 +1,129 @@
|
|
1
|
+
module FixtureReplacement
|
2
|
+
class AttributeBuilder
|
3
|
+
class << self
|
4
|
+
def validate_instances!
|
5
|
+
instances.each do |fixture|
|
6
|
+
fixture.validate!
|
7
|
+
end
|
8
|
+
|
9
|
+
true
|
10
|
+
end
|
11
|
+
|
12
|
+
def instances
|
13
|
+
@instances ||= []
|
14
|
+
end
|
15
|
+
|
16
|
+
def add_instance(instance)
|
17
|
+
instances << instance
|
18
|
+
end
|
19
|
+
|
20
|
+
def clear_out_instances!
|
21
|
+
@instances = nil
|
22
|
+
end
|
23
|
+
|
24
|
+
def find_by_fixture_name(arg)
|
25
|
+
instances.detect { |instance| instance.fixture_name == arg }
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def initialize(fixture_name, options={}, &block)
|
30
|
+
options.symbolize_keys!
|
31
|
+
|
32
|
+
check_valid_keys(options, [:from, :class])
|
33
|
+
|
34
|
+
@fixture_name = fixture_name.to_sym
|
35
|
+
@attributes_proc = block || lambda {}
|
36
|
+
@from = options[:from].to_sym if options.has_key?(:from)
|
37
|
+
@class = options[:class]
|
38
|
+
|
39
|
+
self.class.add_instance(self)
|
40
|
+
end
|
41
|
+
|
42
|
+
attr_reader :fixture_name
|
43
|
+
attr_reader :from
|
44
|
+
|
45
|
+
def active_record_class
|
46
|
+
@active_record_class ||= find_active_record_class
|
47
|
+
end
|
48
|
+
|
49
|
+
def instantiate(hash_to_merge = {}, instance = active_record_class.new)
|
50
|
+
returning instance do
|
51
|
+
instantiate_parent_fixture(instance)
|
52
|
+
call_attribute_body(instance, hash_to_merge)
|
53
|
+
add_given_keys(instance, hash_to_merge)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def validate!
|
58
|
+
new_instance = instantiate
|
59
|
+
|
60
|
+
unless new_instance.valid?
|
61
|
+
errors = "new_#{fixture_name} is not valid! - Errors: "
|
62
|
+
errors << new_instance.errors.map { |key, value| "[#{key}: #{value}]"}.join(", ")
|
63
|
+
raise InvalidInstance, errors
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
private
|
68
|
+
|
69
|
+
class InvalidKeyError < StandardError; end
|
70
|
+
|
71
|
+
def check_valid_keys(options_given, valid_keys)
|
72
|
+
options_given.each do |key, _|
|
73
|
+
unless valid_keys.include?(key)
|
74
|
+
raise InvalidKeyError, "#{key.inspect} is not a valid option to attributes_for. Valid keys are: #{valid_keys.inspect}"
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def instantiate_parent_fixture(instance)
|
80
|
+
derived_fixture.instantiate({}, instance) if derived_fixture?
|
81
|
+
end
|
82
|
+
|
83
|
+
def call_attribute_body(instance, hash_to_merge)
|
84
|
+
if @attributes_proc.arity == 2
|
85
|
+
@attributes_proc.call(instance, hash_to_merge)
|
86
|
+
else
|
87
|
+
@attributes_proc.call(instance)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
def add_given_keys(instance, hash_to_merge)
|
92
|
+
hash_to_merge.each do |key, value|
|
93
|
+
instance.send("#{key}=", value)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
def find_derived_fixture
|
98
|
+
self.class.find_by_fixture_name(from)
|
99
|
+
end
|
100
|
+
|
101
|
+
def derived_fixture
|
102
|
+
@derived_fixture ||= find_derived_fixture
|
103
|
+
end
|
104
|
+
|
105
|
+
def derived_fixture?
|
106
|
+
derived_fixture ? true : false
|
107
|
+
end
|
108
|
+
|
109
|
+
def constantize(symbol)
|
110
|
+
symbol.to_s.camelize.constantize
|
111
|
+
end
|
112
|
+
|
113
|
+
def find_active_record_class
|
114
|
+
if @class
|
115
|
+
@class
|
116
|
+
else
|
117
|
+
begin
|
118
|
+
constantize(fixture_name)
|
119
|
+
rescue NameError => e
|
120
|
+
if derived_fixture?
|
121
|
+
derived_fixture.active_record_class
|
122
|
+
else
|
123
|
+
raise e
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|