fixture_me 0.0.1 → 0.0.2
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.
- checksums.yaml +4 -4
- data/README.md +10 -2
- data/fixture_me-0.0.1.gem +0 -0
- data/lib/fixture_me/version.rb +1 -1
- data/lib/fixture_me.rb +113 -18
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d9810644f0c121be6dabdbe00e68646a685bc211
|
4
|
+
data.tar.gz: edaf8ae132ee5c0184a3058e3aebea5d1538a931
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 710dd27e7733e1aa35076e9870f1e8ae968a834ba48030ebe203df62592726ecda5eeb8a85d1c86f5bad2c261f801e34fc6a65ab737f2c5720c367cf22815a75
|
7
|
+
data.tar.gz: 5503d39655aabfd0a3e282f15f8d5bc69c5b3e511e3f51db7bf52daab1b3fddd4639fded7be55cd3770b0867a8ccd91386a898c1bbf4d52152feddb3228116b5
|
data/README.md
CHANGED
@@ -28,18 +28,26 @@ Or install it yourself as:
|
|
28
28
|
rails console
|
29
29
|
```
|
30
30
|
|
31
|
-
|
31
|
+
Once your are inside Rails console
|
32
32
|
|
33
33
|
To generate fixtures for all models.
|
34
34
|
|
35
35
|
A new directory called fixtures would be created inside tmp directory (this is to make sure that this fixture generation would not override existing fixtures)
|
36
36
|
|
37
|
+
|
37
38
|
```ruby
|
38
|
-
FixtureMe::AddFixtures.
|
39
|
+
fixme = FixtureMe::AddFixtures.new
|
40
|
+
fixme.create_all_fixtures
|
39
41
|
```
|
40
42
|
|
43
|
+
to exclude created_at and updated_at columns
|
41
44
|
|
45
|
+
```ruby
|
46
|
+
fixme = FixtureMe::AddFixtures.new
|
47
|
+
fixme.create_all_fixtures_no_timestamps
|
48
|
+
```
|
42
49
|
|
50
|
+
|
43
51
|
To generate fixtures one by one
|
44
52
|
|
45
53
|
a mymodel.yml file would be generated inside that file does not exist in the test/fixtures directory
|
Binary file
|
data/lib/fixture_me/version.rb
CHANGED
data/lib/fixture_me.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require "fixture_me/version"
|
2
|
-
|
2
|
+
require 'fileutils'
|
3
3
|
module FixtureMe
|
4
4
|
|
5
5
|
def add_fixture
|
@@ -19,18 +19,88 @@ module FixtureMe
|
|
19
19
|
end
|
20
20
|
|
21
21
|
|
22
|
+
def add_fixture_no_id_timestamps
|
23
|
+
hash = self.attributes.delete_if { |k, v| ["created_at", "updated_at", "id"].include? k }
|
24
|
+
md5 = Digest::MD5.hexdigest(hash.to_s)
|
25
|
+
string = "#{md5}:\n"
|
26
|
+
hash.each do |key,value|
|
27
|
+
value.gsub!("\n","\n"+" "*4) if value.class == String
|
28
|
+
string += " "*2 + "#{key.to_s}: #{value}\n" unless value.nil?
|
29
|
+
end
|
30
|
+
string += "\n"
|
31
|
+
table_name = self.class.table_name
|
32
|
+
file_name = table_name + ".yml"
|
33
|
+
File.open("#{Rails.root}/test/fixtures/#{file_name}", 'a') do |out|
|
34
|
+
out.write(string)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
|
22
39
|
|
23
40
|
class AddFixtures
|
24
41
|
|
25
42
|
|
26
|
-
def
|
43
|
+
def initialize
|
44
|
+
@fixtures_dir = FileUtils.mkdir_p( "#{Rails.root}/tmp/fixtures/").first
|
45
|
+
end
|
46
|
+
|
47
|
+
def fixtures_dir
|
48
|
+
@fixtures_dir
|
49
|
+
end
|
50
|
+
|
51
|
+
|
52
|
+
def all_models
|
53
|
+
# must eager load all the classes...
|
54
|
+
Dir.glob("#{RAILS_ROOT}/app/models/**/*.rb") do |model_path|
|
55
|
+
begin
|
56
|
+
require model_path
|
57
|
+
rescue
|
58
|
+
# ignore
|
59
|
+
end
|
60
|
+
end
|
61
|
+
# simply return them
|
62
|
+
ActiveRecord::Base.send(:subclasses)
|
63
|
+
#Dir.glob("#{Rails.root}/app/models/*.rb").map{|x| x.split("/").last.split(".").first.camelize}
|
64
|
+
end
|
65
|
+
|
66
|
+
|
67
|
+
|
68
|
+
def get_list_of_unique_models_with_db_table
|
69
|
+
|
70
|
+
|
71
|
+
table_names = ActiveRecord::Base.connection.tables #.map{|a| a.capitalize.singularize}
|
72
|
+
model_names = Dir["#{Rails.root}/app/models/**/*.rb"].map {|f| File.basename(f, '.*').pluralize}
|
73
|
+
|
74
|
+
#Rails.application.eager_load! unless Rails.configuration.cache_classes
|
75
|
+
#ActiveRecord::Base.descendants
|
76
|
+
modelswithtables = table_names & model_names
|
77
|
+
|
78
|
+
end
|
79
|
+
|
80
|
+
|
81
|
+
def create_fixture(table_name, sql, model)
|
82
|
+
|
83
|
+
File.open("#{fixtures_dir}#{table_name}.yml", "w") do |file|
|
84
|
+
objects = ActiveRecord::Base.connection.select_all(sql)
|
85
|
+
objects.each_with_index do |obj, i|
|
86
|
+
model.columns.each do |col|
|
87
|
+
if !col.null && obj[col.name].nil?
|
88
|
+
obj[col.name] = ''
|
89
|
+
end
|
90
|
+
end
|
91
|
+
file.write({"#{table_name}#{i}" => obj}.to_yaml.sub('---', ''))
|
92
|
+
file.write "\n"
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
|
97
|
+
end
|
27
98
|
|
28
|
-
fixtures_dir = "#{Rails.root}/tmp/fixtures/"
|
29
|
-
FileUtils.mkdir_p(fixtures_dir)
|
30
99
|
|
31
|
-
|
32
|
-
|
33
|
-
modelswithtables =
|
100
|
+
def create_all_fixtures
|
101
|
+
|
102
|
+
modelswithtables = get_list_of_unique_models_with_db_table
|
103
|
+
|
34
104
|
modelswithtables.each do |table_name|
|
35
105
|
model = table_name.classify.constantize
|
36
106
|
|
@@ -40,23 +110,45 @@ module FixtureMe
|
|
40
110
|
else
|
41
111
|
sql = "SELECT * FROM #{table_name}"
|
42
112
|
end
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
113
|
+
|
114
|
+
self.create_fixture(table_name, sql, model)
|
115
|
+
|
116
|
+
puts "extracted #{table_name}"
|
117
|
+
end
|
118
|
+
|
119
|
+
end
|
120
|
+
|
121
|
+
|
122
|
+
|
123
|
+
|
124
|
+
def create_all_fixtures_no_timestamps
|
125
|
+
|
126
|
+
modelswithtables = get_list_of_unique_models_with_db_table
|
127
|
+
exclude_columns = ['created_at', 'updated_at']
|
128
|
+
|
129
|
+
|
130
|
+
modelswithtables.each do |table_name|
|
131
|
+
model = table_name.classify.constantize
|
132
|
+
columns = model.attribute_names - exclude_columns
|
133
|
+
|
134
|
+
if model.columns.any?{|c| c.name == 'created_at'}
|
135
|
+
#sql = "SELECT * FROM #{table_name} ORDER BY created_at DESC"
|
136
|
+
sql = model.select(columns).order("created_at DESC").to_sql
|
137
|
+
else
|
138
|
+
#sql = "SELECT * FROM #{table_name}"
|
139
|
+
sql = model.select(columns).to_sql
|
54
140
|
end
|
141
|
+
|
142
|
+
self.create_fixture(table_name, sql, model)
|
143
|
+
|
55
144
|
puts "extracted #{table_name}"
|
56
145
|
end
|
57
146
|
|
58
147
|
end
|
59
148
|
|
149
|
+
|
150
|
+
|
151
|
+
|
60
152
|
#FixtureMe::AddFixtures.create_all_fixtures
|
61
153
|
end
|
62
154
|
|
@@ -64,3 +156,6 @@ module FixtureMe
|
|
64
156
|
|
65
157
|
end
|
66
158
|
ActiveRecord::Base.send(:include, FixtureMe)
|
159
|
+
|
160
|
+
#c = FixtureMe::AddFixtures.new
|
161
|
+
#c.create_all_fixtures
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fixture_me
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- anthony de silva
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-11-
|
11
|
+
date: 2014-11-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -52,6 +52,7 @@ files:
|
|
52
52
|
- LICENSE.txt
|
53
53
|
- README.md
|
54
54
|
- Rakefile
|
55
|
+
- fixture_me-0.0.1.gem
|
55
56
|
- fixture_me.gemspec
|
56
57
|
- lib/.DS_Store
|
57
58
|
- lib/fixture_me.rb
|