iron_fixture_extractor 1.1.0 → 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +5 -0
- data/README.md +28 -0
- data/lib/fe/extractor.rb +11 -10
- data/lib/fe/version.rb +1 -1
- metadata +3 -3
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -172,6 +172,34 @@ In a nutshell:
|
|
172
172
|
See spec/README_FOR_DEVELOPERS.md for more details.
|
173
173
|
|
174
174
|
|
175
|
+
|
176
|
+
#### TODO: JOE REPLACE THE ABOVE CONTENT WITH THIS METHOD
|
177
|
+
Alternatively, another way to lower the barrier to contributing is to submodule the Gem into your project
|
178
|
+
and hack in the features you need to support your app specific, then add
|
179
|
+
a test case to the Gem itself that illustrates your change...
|
180
|
+
|
181
|
+
#### TODO: Write a "For Rspec users", include an initializer:
|
182
|
+
|
183
|
+
# config/initializers/iron_fixture_extractor.rb
|
184
|
+
Fe.fixtures_root = 'spec/fe_fixtures' if defined?(Fe)
|
185
|
+
|
186
|
+
#### TODO: Write something up about bug with has_many :through
|
187
|
+
* If you have a query that utilizes a has_many :through. Make sure to
|
188
|
+
put the table that facilitates the :through AFTER the one that uses it.
|
189
|
+
ie.
|
190
|
+
|
191
|
+
# NOT WORKING
|
192
|
+
query='Etl::Receipt.includes(:audits, :instcd_to_jobid_mappings, :dars_job_queue_lists => {:job_queue_runs => [:job_queue_outs, {:job_queue_reqs => {:job_queue_subreqs => :job_queue_courses}}]})'
|
193
|
+
t=Fe.extract(query,:name => 'poo')
|
194
|
+
|
195
|
+
# WORKING
|
196
|
+
query='Etl::Receipt.includes(:audits, {:dars_job_queue_lists => {:job_queue_runs => [:job_queue_outs, {:job_queue_reqs => {:job_queue_subreqs => :job_queue_courses}}]}}, :instcd_to_jobid_mappings)'
|
197
|
+
t=Fe.extract(query,:name => 'poo')
|
198
|
+
|
199
|
+
* Beers, kudos, praise, and glory for a developer who can find the
|
200
|
+
reason for this and a fix...I tried, but couldn't figure it out, hence
|
201
|
+
the work around.
|
202
|
+
|
175
203
|
## Footnotes
|
176
204
|
I used various ideas from the following blog posts, gists, and existing
|
177
205
|
ruby gems, thanks to the authors of these pages:
|
data/lib/fe/extractor.rb
CHANGED
@@ -57,10 +57,15 @@ module Fe
|
|
57
57
|
raise "No models to load, relax your :only or :except filters (or don't bother calling this method)" if the_tables.empty?
|
58
58
|
|
59
59
|
the_tables.each do |table_name|
|
60
|
+
class_name = if self.table_name_to_model_name_hash.kind_of?(Hash)
|
61
|
+
self.table_name_to_model_name_hash[table_name]
|
62
|
+
else
|
63
|
+
ActiveSupport::Deprecation.warn "your fe_manifest.yml does not contain a table_name_to_model_name_hash (as found in 1.0.0 or earlier). Version 2.0.0 will require this. See test cases for how to manually jigger your fe_manifest.ymls to function."
|
64
|
+
nil
|
65
|
+
end
|
60
66
|
if options[:map].nil?
|
61
67
|
# Vanilla create_fixtures will work fine when no mapping is being used
|
62
68
|
ActiveRecord::Fixtures.create_fixtures(self.target_path, table_name)
|
63
|
-
next
|
64
69
|
else
|
65
70
|
# Map table_name via a function (great for prefixing)
|
66
71
|
new_table_name = if options[:map].kind_of?(Proc)
|
@@ -71,7 +76,6 @@ module Fe
|
|
71
76
|
else
|
72
77
|
table_name # No mapping for this table name
|
73
78
|
end
|
74
|
-
class_name = self.table_name_to_model_name_hash[table_name]
|
75
79
|
fixtures = ActiveRecord::Fixtures.new( ActiveRecord::Base.connection,
|
76
80
|
new_table_name,
|
77
81
|
class_name,
|
@@ -87,6 +91,7 @@ module Fe
|
|
87
91
|
# calls. aka this code should be eliminated/live elsewhere.
|
88
92
|
case ActiveRecord::Base.connection.adapter_name
|
89
93
|
when /oracle/i
|
94
|
+
model = class_name.constantize
|
90
95
|
if model.column_names.include? "id"
|
91
96
|
sequence_name = model.sequence_name.to_s
|
92
97
|
max_id = model.maximum(:id)
|
@@ -212,18 +217,14 @@ module Fe
|
|
212
217
|
raise "This gem only knows how to extract stuff w ActiveRecord" unless record.kind_of? ActiveRecord::Base
|
213
218
|
key = record.class.base_class.to_s # the base_class is key for correctly handling STI
|
214
219
|
@output_hash[key] ||= Set.new # Set ensures no duplicates
|
215
|
-
@output_hash[key].add
|
216
|
-
record.association_cache.
|
217
|
-
|
218
|
-
assoc_value = assoc_cache.last.target
|
219
|
-
unless assoc_value.kind_of? Array
|
220
|
-
assoc_value = Array(assoc_value)
|
221
|
-
end
|
222
|
-
assoc_value.each do |a|
|
220
|
+
@output_hash[key].add(record)
|
221
|
+
record.association_cache.each_pair do |assoc_name,association_def|
|
222
|
+
Array(association_def.target).each do |a|
|
223
223
|
self.recurse(a)
|
224
224
|
end
|
225
225
|
end
|
226
226
|
end
|
227
|
+
|
227
228
|
def write_model_fixtures
|
228
229
|
FileUtils.mkdir_p(self.target_path)
|
229
230
|
self.output_hash.each_pair do |key,records|
|
data/lib/fe/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: iron_fixture_extractor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -143,7 +143,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
143
143
|
version: '0'
|
144
144
|
segments:
|
145
145
|
- 0
|
146
|
-
hash:
|
146
|
+
hash: -3292280525626444386
|
147
147
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
148
148
|
none: false
|
149
149
|
requirements:
|
@@ -152,7 +152,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
152
152
|
version: '0'
|
153
153
|
segments:
|
154
154
|
- 0
|
155
|
-
hash:
|
155
|
+
hash: -3292280525626444386
|
156
156
|
requirements: []
|
157
157
|
rubyforge_project:
|
158
158
|
rubygems_version: 1.8.23
|