iron_fixture_extractor 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. data/CHANGELOG.md +6 -0
  2. data/Gemfile +7 -9
  3. data/README.md +129 -47
  4. data/Rakefile +5 -6
  5. data/iron_fixture_extractor.gemspec +0 -3
  6. data/lib/fe.rb +18 -43
  7. data/lib/fe/extractor.rb +91 -63
  8. data/lib/fe/version.rb +1 -1
  9. data/spec/README_FOR_DEVELOPERS.md +26 -0
  10. data/spec/dummy_environments/sqlite/dummy1/config/database.yml +11 -0
  11. data/spec/dummy_environments/sqlite/dummy1/data_migrations/001_create_some_data.rb +17 -0
  12. data/spec/dummy_environments/sqlite/dummy1/migrations/20120604043601_create_posts.rb +13 -0
  13. data/spec/dummy_environments/sqlite/dummy1/migrations/20120604043602_create_authors.rb +9 -0
  14. data/spec/dummy_environments/sqlite/dummy1/migrations/20120604043603_create_different_posts.rb +14 -0
  15. data/spec/dummy_environments/sqlite/dummy1/migrations/20120604043639_create_comments.rb +13 -0
  16. data/spec/dummy_environments/sqlite/dummy1/migrations/20120604043808_create_group_members.rb +13 -0
  17. data/spec/dummy_environments/sqlite/dummy1/migrations/20120604043818_create_groups.rb +9 -0
  18. data/spec/dummy_environments/sqlite/dummy1/migrations/20120604043819_create_users.rb +10 -0
  19. data/spec/dummy_environments/sqlite/dummy1/models/author.rb +5 -0
  20. data/spec/dummy_environments/sqlite/dummy1/models/comment.rb +5 -0
  21. data/spec/dummy_environments/sqlite/dummy1/models/complex_thing.rb +4 -0
  22. data/spec/dummy_environments/sqlite/dummy1/models/different_post.rb +9 -0
  23. data/spec/dummy_environments/sqlite/dummy1/models/group.rb +5 -0
  24. data/spec/dummy_environments/sqlite/dummy1/models/group_member.rb +5 -0
  25. data/spec/dummy_environments/sqlite/dummy1/models/post.rb +7 -0
  26. data/spec/dummy_environments/sqlite/dummy1/models/serialized_attribute_encoder.rb +12 -0
  27. data/spec/dummy_environments/sqlite/dummy1/models/user.rb +2 -0
  28. data/spec/dummy_environments/sqlite/dummy1/models/user/admin.rb +3 -0
  29. data/spec/dummy_environments/sqlite/dummy1/models/user/jerk.rb +3 -0
  30. data/spec/execute_extract_code_spec.rb +29 -0
  31. data/spec/extract_spec.rb +37 -0
  32. data/spec/extract_works_with_multiple_extract_queries_in_one_command_spec.rb +12 -0
  33. data/spec/fe_test_env_spec.rb +65 -0
  34. data/spec/get_hash_spec.rb +27 -0
  35. data/spec/load_db_map_option_spec.rb +39 -0
  36. data/spec/load_db_spec.rb +48 -0
  37. data/spec/load_db_works_with_serialized_attributes_spec.rb +18 -0
  38. data/spec/rebuild_spec.rb +18 -0
  39. data/spec/spec_helper.rb +15 -0
  40. data/spec/support/fe_test_env.rb +181 -0
  41. data/spec/support/first_post_w_comments_and_authors.rb +12 -0
  42. data/spec/truncate_tables_for_spec.rb +39 -0
  43. data/spec/works_with_single_table_inheritance_spec.rb +16 -0
  44. data/test/basic_usage_test.ported.rb +114 -0
  45. data/test/{different_target_table_test.rb → different_target_table_test.not_porting.rb} +0 -0
  46. data/test/factory_girl_test.not_porting_now.rb +79 -0
  47. data/test/{fe_test_env.rb → fe_test_env.ported.rb} +0 -0
  48. data/test/{get_hash_test.rb → get_hash_test.ported.rb} +17 -1
  49. data/test/{multi_tree_usage_test.rb → multi_tree_usage_test.ported.rb} +0 -0
  50. data/test/{serialized_attribute_test.rb → serialized_attribute_test.ported.rb} +0 -0
  51. data/test/{sti_test.rb → sti_test.ported.rb} +0 -0
  52. data/test/test_helper.rb +0 -1
  53. metadata +135 -88
  54. data/lib/fe/factory_girl_dsl_methods.rb +0 -28
  55. data/test/basic_usage_test.rb +0 -106
  56. data/test/factory_girl_test.rb +0 -77
@@ -0,0 +1,79 @@
1
+ # About
2
+ # =====
3
+ #
4
+ # This feature is being deprecated in favor of eventually writing a spec demonstrating
5
+ # how to use this with FactoryGirl
6
+ #
7
+ # require 'test_helper'
8
+ # require 'factory_girl'
9
+ # class FactoryGirlTest < ActiveSupport::TestCase
10
+ # setup do
11
+
12
+ # @extract_code = 'Post.includes(:comments, :author).limit(1)'
13
+ # @extract_name = :first_post_w_comments_and_authors
14
+ # FeTestEnv.setup # regular production db
15
+ # Fe.extract(@extract_code, :name => @extract_name) # build fixture yml
16
+ # FeTestEnv.the_env = 'fake_test'
17
+ # FeTestEnv.recreate_schema_without_data
18
+
19
+ # @post_hash = Fe.get_hash(:first_post_w_comments_and_authors, Post,"r1")
20
+
21
+
22
+ # end
23
+ # should "expose a .to_factory_girl_string method" do
24
+ # assert_kind_of Hash, @post_hash
25
+ # assert_respond_to @post_hash, :to_factory_girl_string
26
+ # assert !Hash.instance_methods.include?(:to_factory_girl_string)
27
+
28
+ # @fg_string = @post_hash.to_factory_girl_string
29
+ # assert_match /Post/, @fg_string, "The string should have the model name on the first line"
30
+ # end
31
+
32
+ # should ".to_factory_girl_string should return a monkey patched string implementing .to_proc" do
33
+ # @fg_string = @post_hash.to_factory_girl_string
34
+ # assert_respond_to @fg_string, :to_proc
35
+ # end
36
+
37
+ # should "be just like a factory produced in a non-meta way" do
38
+ # FactoryGirl.define do
39
+ # # This is the essense of the code that .to_factory_girl_string spits out
40
+ # factory :fe2, :class => Post do
41
+ # x = Post.new(Fe.get_hash(:first_post_w_comments_and_authors,Post,"r1"))
42
+ # id x.id
43
+ # author_id x.author_id
44
+ # name x.name
45
+ # content x.content
46
+ # serialized_thing x.serialized_thing
47
+ # created_at x.created_at
48
+ # updated_at x.updated_at
49
+ # end
50
+
51
+ # # We are evaluating the to_factory_girl_string in the block context factory girl
52
+ # # if you wanted to override settings you could do so afterwords
53
+ # factory :fe3, :class => Post, &Proc.new {
54
+ # self.instance_eval(Fe.get_hash(:first_post_w_comments_and_authors,Post,"r1").to_factory_girl_string)
55
+ # # I think You could override attributes set in the fixture here, like:
56
+ # # name "poo poo"
57
+ # }
58
+
59
+ # # This is two levels meta-ness away
60
+ # factory :fe4,
61
+ # :class => Post,
62
+ # &Fe.get_hash(:first_post_w_comments_and_authors,Post,"r1").to_factory_girl_string.to_proc
63
+ # end
64
+
65
+ # @fe2 = FactoryGirl.create(:fe2)
66
+ # assert_kind_of Post, @fe2
67
+
68
+ # @fe3 = FactoryGirl.create(:fe3)
69
+ # assert_kind_of Post, @fe3
70
+ # assert_kind_of Time, @fe3.updated_at, "Objects get the right type"
71
+
72
+ # @fe4 = FactoryGirl.create(:fe4)
73
+ # assert_kind_of Post, @fe4
74
+ # assert_kind_of Time, @fe4.updated_at, "Objects get the right type"
75
+ # end
76
+ # teardown do
77
+ # FeTestEnv.teardown
78
+ # end
79
+ # end
File without changes
@@ -1,6 +1,6 @@
1
1
  require 'test_helper'
2
2
  class GetHashTest < ActiveSupport::TestCase
3
- context "Fe" do
3
+ context "Fe#get_hash" do
4
4
  setup do
5
5
  FeTestEnv.setup
6
6
  @extract_code = 'Post.includes(:comments, :author).limit(1)'
@@ -32,4 +32,20 @@ class GetHashTest < ActiveSupport::TestCase
32
32
  FeTestEnv.teardown
33
33
  end
34
34
  end
35
+ context "Fe#get_hashes" do
36
+ setup do
37
+ FeTestEnv.setup
38
+ @extract_code = 'Post.all'
39
+ @extract_name = :all_posts
40
+ extractor = Fe.extract(@extract_code, :name => @extract_name)
41
+ end
42
+ should "work as expected...(this might fail on 1.8.7, where hashes aren't ordered)" do
43
+ uber_fixture_hash = Fe.get_hash(:all_posts, Post, :all)
44
+ fixture_hashes = Fe.get_hashes(:all_posts, Post)
45
+ assert_equal(uber_fixture_hash.values, fixture_hashes, "get_hashes is syntactic sugar for get_hash(...).values")
46
+ end
47
+ teardown do
48
+ FeTestEnv.teardown
49
+ end
50
+ end
35
51
  end
File without changes
data/test/test_helper.rb CHANGED
@@ -5,7 +5,6 @@ require 'shoulda'
5
5
  require 'iron_fixture_extractor'
6
6
  # TEMP, COMMENT OUT IF NEEDED
7
7
  require 'sqlite3'
8
- #require 'ruby-debug'
9
8
  require 'fe_test_env'
10
9
  ActiveRecord::Migration.verbose = false
11
10
  FeTestEnv.reload
metadata CHANGED
@@ -1,82 +1,57 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: iron_fixture_extractor
3
- version: !ruby/object:Gem::Version
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.1.0
4
5
  prerelease:
5
- version: 1.0.0
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - Joe Goggins
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
-
13
- date: 2012-11-30 00:00:00 Z
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
12
+ date: 2013-08-05 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
16
15
  name: activerecord
17
- prerelease: false
18
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
19
17
  none: false
20
- requirements:
18
+ requirements:
21
19
  - - ~>
22
- - !ruby/object:Gem::Version
20
+ - !ruby/object:Gem::Version
23
21
  version: 3.2.1
24
22
  type: :runtime
25
- version_requirements: *id001
26
- - !ruby/object:Gem::Dependency
27
- name: activesupport
28
23
  prerelease: false
29
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: !ruby/object:Gem::Requirement
30
25
  none: false
31
- requirements:
26
+ requirements:
32
27
  - - ~>
33
- - !ruby/object:Gem::Version
28
+ - !ruby/object:Gem::Version
34
29
  version: 3.2.1
35
- type: :runtime
36
- version_requirements: *id002
37
- - !ruby/object:Gem::Dependency
38
- name: shoulda
39
- prerelease: false
40
- requirement: &id003 !ruby/object:Gem::Requirement
30
+ - !ruby/object:Gem::Dependency
31
+ name: activesupport
32
+ requirement: !ruby/object:Gem::Requirement
41
33
  none: false
42
- requirements:
34
+ requirements:
43
35
  - - ~>
44
- - !ruby/object:Gem::Version
45
- version: 3.0.1
46
- type: :development
47
- version_requirements: *id003
48
- - !ruby/object:Gem::Dependency
49
- name: sqlite3
50
- prerelease: false
51
- requirement: &id004 !ruby/object:Gem::Requirement
52
- none: false
53
- requirements:
54
- - - ">="
55
- - !ruby/object:Gem::Version
56
- version: "0"
57
- type: :development
58
- version_requirements: *id004
59
- - !ruby/object:Gem::Dependency
60
- name: factory_girl
36
+ - !ruby/object:Gem::Version
37
+ version: 3.2.1
38
+ type: :runtime
61
39
  prerelease: false
62
- requirement: &id005 !ruby/object:Gem::Requirement
40
+ version_requirements: !ruby/object:Gem::Requirement
63
41
  none: false
64
- requirements:
65
- - - ">="
66
- - !ruby/object:Gem::Version
67
- version: "0"
68
- type: :development
69
- version_requirements: *id005
70
- description: "When object factories don't work because your data is too complex and creating manual fixtures is cumbersome and brittle: Iron Fixture Extractor (for Rails/ActiveRecord) "
71
- email:
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 3.2.1
46
+ description: ! 'When object factories don''t work because your data is too complex
47
+ and creating manual fixtures is cumbersome and brittle: Iron Fixture Extractor (for
48
+ Rails/ActiveRecord) '
49
+ email:
72
50
  - goggins@umn.edu
73
51
  executables: []
74
-
75
52
  extensions: []
76
-
77
53
  extra_rdoc_files: []
78
-
79
- files:
54
+ files:
80
55
  - .gitignore
81
56
  - CHANGELOG.md
82
57
  - Gemfile
@@ -86,17 +61,51 @@ files:
86
61
  - iron_fixture_extractor.gemspec
87
62
  - lib/fe.rb
88
63
  - lib/fe/extractor.rb
89
- - lib/fe/factory_girl_dsl_methods.rb
90
64
  - lib/fe/railtie.rb
91
65
  - lib/fe/tasks/iron_fixture_extractor.rake
92
66
  - lib/fe/version.rb
93
67
  - lib/iron_fixture_extractor.rb
94
- - test/basic_usage_test.rb
68
+ - spec/README_FOR_DEVELOPERS.md
69
+ - spec/dummy_environments/sqlite/dummy1/config/database.yml
70
+ - spec/dummy_environments/sqlite/dummy1/data_migrations/001_create_some_data.rb
71
+ - spec/dummy_environments/sqlite/dummy1/migrations/20120604043601_create_posts.rb
72
+ - spec/dummy_environments/sqlite/dummy1/migrations/20120604043602_create_authors.rb
73
+ - spec/dummy_environments/sqlite/dummy1/migrations/20120604043603_create_different_posts.rb
74
+ - spec/dummy_environments/sqlite/dummy1/migrations/20120604043639_create_comments.rb
75
+ - spec/dummy_environments/sqlite/dummy1/migrations/20120604043808_create_group_members.rb
76
+ - spec/dummy_environments/sqlite/dummy1/migrations/20120604043818_create_groups.rb
77
+ - spec/dummy_environments/sqlite/dummy1/migrations/20120604043819_create_users.rb
78
+ - spec/dummy_environments/sqlite/dummy1/models/author.rb
79
+ - spec/dummy_environments/sqlite/dummy1/models/comment.rb
80
+ - spec/dummy_environments/sqlite/dummy1/models/complex_thing.rb
81
+ - spec/dummy_environments/sqlite/dummy1/models/different_post.rb
82
+ - spec/dummy_environments/sqlite/dummy1/models/group.rb
83
+ - spec/dummy_environments/sqlite/dummy1/models/group_member.rb
84
+ - spec/dummy_environments/sqlite/dummy1/models/post.rb
85
+ - spec/dummy_environments/sqlite/dummy1/models/serialized_attribute_encoder.rb
86
+ - spec/dummy_environments/sqlite/dummy1/models/user.rb
87
+ - spec/dummy_environments/sqlite/dummy1/models/user/admin.rb
88
+ - spec/dummy_environments/sqlite/dummy1/models/user/jerk.rb
89
+ - spec/execute_extract_code_spec.rb
90
+ - spec/extract_spec.rb
91
+ - spec/extract_works_with_multiple_extract_queries_in_one_command_spec.rb
92
+ - spec/fe_test_env_spec.rb
93
+ - spec/get_hash_spec.rb
94
+ - spec/load_db_map_option_spec.rb
95
+ - spec/load_db_spec.rb
96
+ - spec/load_db_works_with_serialized_attributes_spec.rb
97
+ - spec/rebuild_spec.rb
98
+ - spec/spec_helper.rb
99
+ - spec/support/fe_test_env.rb
100
+ - spec/support/first_post_w_comments_and_authors.rb
101
+ - spec/truncate_tables_for_spec.rb
102
+ - spec/works_with_single_table_inheritance_spec.rb
103
+ - test/basic_usage_test.ported.rb
95
104
  - test/config/database.yml
96
- - test/different_target_table_test.rb
97
- - test/factory_girl_test.rb
98
- - test/fe_test_env.rb
99
- - test/get_hash_test.rb
105
+ - test/different_target_table_test.not_porting.rb
106
+ - test/factory_girl_test.not_porting_now.rb
107
+ - test/fe_test_env.ported.rb
108
+ - test/get_hash_test.ported.rb
100
109
  - test/migrations/20120604043601_create_posts.rb
101
110
  - test/migrations/20120604043602_create_authors.rb
102
111
  - test/migrations/20120604043603_create_different_posts.rb
@@ -115,45 +124,83 @@ files:
115
124
  - test/models/user.rb
116
125
  - test/models/user/admin.rb
117
126
  - test/models/user/jerk.rb
118
- - test/multi_tree_usage_test.rb
119
- - test/serialized_attribute_test.rb
120
- - test/sti_test.rb
127
+ - test/multi_tree_usage_test.ported.rb
128
+ - test/serialized_attribute_test.ported.rb
129
+ - test/sti_test.ported.rb
121
130
  - test/test_data_migrations/001_create_some_data.rb
122
131
  - test/test_helper.rb
123
132
  homepage: https://github.com/joegoggins/iron_fixture_extractor
124
133
  licenses: []
125
-
126
134
  post_install_message:
127
135
  rdoc_options: []
128
-
129
- require_paths:
136
+ require_paths:
130
137
  - lib
131
- required_ruby_version: !ruby/object:Gem::Requirement
138
+ required_ruby_version: !ruby/object:Gem::Requirement
132
139
  none: false
133
- requirements:
134
- - - ">="
135
- - !ruby/object:Gem::Version
136
- version: "0"
137
- required_rubygems_version: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - ! '>='
142
+ - !ruby/object:Gem::Version
143
+ version: '0'
144
+ segments:
145
+ - 0
146
+ hash: 553662890390521503
147
+ required_rubygems_version: !ruby/object:Gem::Requirement
138
148
  none: false
139
- requirements:
140
- - - ">="
141
- - !ruby/object:Gem::Version
142
- version: "0"
149
+ requirements:
150
+ - - ! '>='
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ segments:
154
+ - 0
155
+ hash: 553662890390521503
143
156
  requirements: []
144
-
145
157
  rubyforge_project:
146
- rubygems_version: 1.8.15
158
+ rubygems_version: 1.8.23
147
159
  signing_key:
148
160
  specification_version: 3
149
161
  summary: Simplified dynamic fixture extraction for ActiveRecord
150
- test_files:
151
- - test/basic_usage_test.rb
162
+ test_files:
163
+ - spec/README_FOR_DEVELOPERS.md
164
+ - spec/dummy_environments/sqlite/dummy1/config/database.yml
165
+ - spec/dummy_environments/sqlite/dummy1/data_migrations/001_create_some_data.rb
166
+ - spec/dummy_environments/sqlite/dummy1/migrations/20120604043601_create_posts.rb
167
+ - spec/dummy_environments/sqlite/dummy1/migrations/20120604043602_create_authors.rb
168
+ - spec/dummy_environments/sqlite/dummy1/migrations/20120604043603_create_different_posts.rb
169
+ - spec/dummy_environments/sqlite/dummy1/migrations/20120604043639_create_comments.rb
170
+ - spec/dummy_environments/sqlite/dummy1/migrations/20120604043808_create_group_members.rb
171
+ - spec/dummy_environments/sqlite/dummy1/migrations/20120604043818_create_groups.rb
172
+ - spec/dummy_environments/sqlite/dummy1/migrations/20120604043819_create_users.rb
173
+ - spec/dummy_environments/sqlite/dummy1/models/author.rb
174
+ - spec/dummy_environments/sqlite/dummy1/models/comment.rb
175
+ - spec/dummy_environments/sqlite/dummy1/models/complex_thing.rb
176
+ - spec/dummy_environments/sqlite/dummy1/models/different_post.rb
177
+ - spec/dummy_environments/sqlite/dummy1/models/group.rb
178
+ - spec/dummy_environments/sqlite/dummy1/models/group_member.rb
179
+ - spec/dummy_environments/sqlite/dummy1/models/post.rb
180
+ - spec/dummy_environments/sqlite/dummy1/models/serialized_attribute_encoder.rb
181
+ - spec/dummy_environments/sqlite/dummy1/models/user.rb
182
+ - spec/dummy_environments/sqlite/dummy1/models/user/admin.rb
183
+ - spec/dummy_environments/sqlite/dummy1/models/user/jerk.rb
184
+ - spec/execute_extract_code_spec.rb
185
+ - spec/extract_spec.rb
186
+ - spec/extract_works_with_multiple_extract_queries_in_one_command_spec.rb
187
+ - spec/fe_test_env_spec.rb
188
+ - spec/get_hash_spec.rb
189
+ - spec/load_db_map_option_spec.rb
190
+ - spec/load_db_spec.rb
191
+ - spec/load_db_works_with_serialized_attributes_spec.rb
192
+ - spec/rebuild_spec.rb
193
+ - spec/spec_helper.rb
194
+ - spec/support/fe_test_env.rb
195
+ - spec/support/first_post_w_comments_and_authors.rb
196
+ - spec/truncate_tables_for_spec.rb
197
+ - spec/works_with_single_table_inheritance_spec.rb
198
+ - test/basic_usage_test.ported.rb
152
199
  - test/config/database.yml
153
- - test/different_target_table_test.rb
154
- - test/factory_girl_test.rb
155
- - test/fe_test_env.rb
156
- - test/get_hash_test.rb
200
+ - test/different_target_table_test.not_porting.rb
201
+ - test/factory_girl_test.not_porting_now.rb
202
+ - test/fe_test_env.ported.rb
203
+ - test/get_hash_test.ported.rb
157
204
  - test/migrations/20120604043601_create_posts.rb
158
205
  - test/migrations/20120604043602_create_authors.rb
159
206
  - test/migrations/20120604043603_create_different_posts.rb
@@ -172,8 +219,8 @@ test_files:
172
219
  - test/models/user.rb
173
220
  - test/models/user/admin.rb
174
221
  - test/models/user/jerk.rb
175
- - test/multi_tree_usage_test.rb
176
- - test/serialized_attribute_test.rb
177
- - test/sti_test.rb
222
+ - test/multi_tree_usage_test.ported.rb
223
+ - test/serialized_attribute_test.ported.rb
224
+ - test/sti_test.ported.rb
178
225
  - test/test_data_migrations/001_create_some_data.rb
179
226
  - test/test_helper.rb
@@ -1,28 +0,0 @@
1
- module Fe
2
- module FactoryGirlDslMethods
3
- def fe_factory(name, options = {})
4
- unless extract_name = options.delete(:extract_name)
5
- raise "Must specify extract_name (the fixture set name)"
6
- end
7
- unless fixture_name = options.delete(:fixture_name)
8
- raise "Must specify fixture_name" # TODO:Later, make this default to :first once impelmented in Fe
9
- end
10
- unless options.has_key?(:class)
11
- raise "Must specify the class when using with iron fixture extractor"
12
- end
13
-
14
- # CONTINUE HERE. We need to figure out how to build a
15
- # block for Factory girl from the hash that lives in the yaml.
16
- #
17
- fe_hash = Fe.get_hash(extract_name, options[:class],fixture_name)
18
-
19
- the_block = Proc.new {
20
- }
21
-
22
- factory(name,options,&the_block)
23
-
24
- factory_inst = ::FactoryGirl.factory_by_name(name)
25
- # require 'debugger'; debugger; puts 'DSLExt'
26
- end
27
- end
28
- end