iron_fixture_extractor 1.1.0 → 1.1.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/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
|