models-to-sql-rails 1.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 +7 -0
- data/README.md +99 -0
- data/Rakefile +41 -0
- data/VERSION +1 -0
- data/lib/dumper.rb +121 -0
- data/lib/models_to_sql.rb +5 -0
- data/lib/models_to_sql/active_record.rb +11 -0
- data/lib/models_to_sql/array.rb +9 -0
- data/lib/models_to_sql/climber.rb +62 -0
- metadata +69 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: c18b60c7971694627a2e1b273688134030ec21b6
|
4
|
+
data.tar.gz: a8f46346393fa8b05ed11d393544f4f37d1d4ce3
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 87080b2f35d0923e9d92c79c8a0939456ff03827f125b87a5fdca17a0863f607d1a7ac4fc96517a96e943cf7655729781f2ffabee38258dfb32fb0dc00212459
|
7
|
+
data.tar.gz: ccff590f8be39b73dd4c8c2ff391fdaf0f6325d587e3bb0468f6ac0e28420a16450da5cfbda8fa6632ae3b22a1b081f808adc93d74db8c36e1fad58713171c5c
|
data/README.md
ADDED
@@ -0,0 +1,99 @@
|
|
1
|
+
Introduction
|
2
|
+
---------------
|
3
|
+
Models to SQL Rails is a gem that allows you to dump ActiveRecord models graphs back into SQL or Rails fixtures format. With this gem you can easily convert a model or an array of models to a script like:
|
4
|
+
```sql
|
5
|
+
INSERT INTO modelName ('title','description') values ('Awesome Title', 'Wow, amaze description, much doge.');
|
6
|
+
```
|
7
|
+
This was just a example, this is a powerful and simple gem that can solve a lot of problems.
|
8
|
+
|
9
|
+
Usage
|
10
|
+
---------------
|
11
|
+
If you want use this gem in your project, you must add the following line to your `gemfile`:
|
12
|
+
```ruby
|
13
|
+
gem 'models-to-sql-rails', :git => 'git://github.com/paladini/models-to-sql-rails.git'
|
14
|
+
```
|
15
|
+
Then, you must open your terminal (Ctrl+Alt+T) and run the following command on your project root path:
|
16
|
+
```shell
|
17
|
+
bundle install
|
18
|
+
```
|
19
|
+
Now you're ready to start coding - easy, no?
|
20
|
+
|
21
|
+
Examples
|
22
|
+
--------------
|
23
|
+
|
24
|
+
Imagine that you have a scenario like that:
|
25
|
+
|
26
|
+
```ruby
|
27
|
+
require 'models_to_sql'
|
28
|
+
|
29
|
+
items = []
|
30
|
+
for i in 0..10
|
31
|
+
items << Item.new(
|
32
|
+
:name => generate_random_name(),
|
33
|
+
:description => generate_random_description(),
|
34
|
+
:url => generate_random_url(),
|
35
|
+
:type => "Goods",
|
36
|
+
:category => "Electronics",
|
37
|
+
:image_url => generate_random_image_url()
|
38
|
+
)
|
39
|
+
end
|
40
|
+
|
41
|
+
###################################
|
42
|
+
# #
|
43
|
+
# Now let's play with our gem #
|
44
|
+
# #
|
45
|
+
###################################
|
46
|
+
|
47
|
+
items.to_sql_insert
|
48
|
+
# => INSERT INTO "items" ("name", "description", "url", "type", "category", "image_url") VALUES('UKlRBjdsyzLtjCL', 'GWpDhkVtkUHkazW', 'CGeCMJjTQGPFUbc', 'Goods', 'Electronics', 'kQWPeRytZAedVnF');
|
49
|
+
# => INSERT INTO "items" ("name", "description", "url", "type", "category", "image_url") VALUES('UbOwdYzzFAKckNF', 'nlrMddCWRkYznBH', 'HOdGfDQBHmxSvSW', 'Goods', 'Electronics', 'PtWCKyhxrMFZVJd');
|
50
|
+
# => INSERT INTO "items" ("name", "description", "url", "type", "category", "image_url") VALUES('NvQEUPVgKrPPaQh', 'uTPhqUvVTClimXA', 'HcTtNNoDjncnAIN', 'Goods', 'Electronics', 'LvtpaxTlLWblyar');
|
51
|
+
# => INSERT INTO "items" ("name", "description", "url", "type", "category", "image_url") VALUES('GXSujkenwzvUqcS', 'QRjnvJROfZVSVEj', 'JoGNZMrjmUFlqVM', 'Goods', 'Electronics', 'yVJxiNEWFhQJbKv');
|
52
|
+
# => INSERT INTO "items" ("name", "description", "url", "type", "category", "image_url") VALUES('gtJRWGAFOAvPzMa', 'TOFcwXlFxlLroTo', 'IlNmsRvShgbYace', 'Goods', 'Electronics', 'yLIBqYQjVIBeRcB');
|
53
|
+
# => INSERT INTO "items" ("name", "description", "url", "type", "category", "image_url") VALUES('dUMiXZOzASvMyAv', 'nNuTUCjRsxNNoUU', 'qumOEoEpwGrJcjA', 'Goods', 'Electronics', 'PwbjaGayRZdwlKv');
|
54
|
+
# => INSERT INTO "items" ("name", "description", "url", "type", "category", "image_url") VALUES('heuqrYERTtdUfgS', 'ZYckUtadljKbTBA', 'iFwqJYbqYYgEJNv', 'Goods', 'Electronics', 'BHHOXSFORpDsZBU');
|
55
|
+
# => INSERT INTO "items" ("name", "description", "url", "type", "category", "image_url") VALUES('jFjywdyxTWrWrvC', 'MaJfdgHSENuHkrW', 'hnRJJwsSKHYCnvo', 'Goods', 'Electronics', 'fkKuTpgmvCYEzOK');
|
56
|
+
# => INSERT INTO "items" ("name", "description", "url", "type", "category", "image_url") VALUES('JOIlNUFUVcMtQrP', 'PjLMkYvyFYGlRlr', 'MHucPxQxylqLQia', 'Goods', 'Electronics', 'quWbZUHSXwLvClY');
|
57
|
+
# => INSERT INTO "items" ("name", "description", "url", "type", "category", "image_url") VALUES('UxtBOSKroxWtShX', 'ORVtVgfCTonQIZH', 'SjWgwuZBxLLHKCe', 'Goods', 'Electronics', 'drOiSxLZAkFtbCW');
|
58
|
+
# => INSERT INTO "items" ("name", "description", "url", "type", "category", "image_url") VALUES('juAiBiHnFybnjlL', 'ouDFQXnSkRIMQaR', 'hgifUygkuXAWPLp', 'Goods', 'Electronics', 'dKVCzaOCJwmxIim');
|
59
|
+
|
60
|
+
items[0].to_sql_insert
|
61
|
+
# => INSERT INTO "items" ("name", "description", "url", "type", "category", "image_url") VALUES('UKlRBjdsyzLtjCL', 'GWpDhkVtkUHkazW', 'CGeCMJjTQGPFUbc', 'Goods', 'Electronics', 'kQWPeRytZAedVnF');
|
62
|
+
|
63
|
+
items.each do |item|
|
64
|
+
item.to_sql_insert
|
65
|
+
end
|
66
|
+
# => INSERT INTO "items" ("name", "description", "url", "type", "category", "image_url") VALUES('UKlRBjdsyzLtjCL', 'GWpDhkVtkUHkazW', 'CGeCMJjTQGPFUbc', 'Goods', 'Electronics', 'kQWPeRytZAedVnF');
|
67
|
+
# => INSERT INTO "items" ("name", "description", "url", "type", "category", "image_url") VALUES('UbOwdYzzFAKckNF', 'nlrMddCWRkYznBH', 'HOdGfDQBHmxSvSW', 'Goods', 'Electronics', 'PtWCKyhxrMFZVJd');
|
68
|
+
# => INSERT INTO "items" ("name", "description", "url", "type", "category", "image_url") VALUES('NvQEUPVgKrPPaQh', 'uTPhqUvVTClimXA', 'HcTtNNoDjncnAIN', 'Goods', 'Electronics', 'LvtpaxTlLWblyar');
|
69
|
+
# => INSERT INTO "items" ("name", "description", "url", "type", "category", "image_url") VALUES('GXSujkenwzvUqcS', 'QRjnvJROfZVSVEj', 'JoGNZMrjmUFlqVM', 'Goods', 'Electronics', 'yVJxiNEWFhQJbKv');
|
70
|
+
# => INSERT INTO "items" ("name", "description", "url", "type", "category", "image_url") VALUES('gtJRWGAFOAvPzMa', 'TOFcwXlFxlLroTo', 'IlNmsRvShgbYace', 'Goods', 'Electronics', 'yLIBqYQjVIBeRcB');
|
71
|
+
# => INSERT INTO "items" ("name", "description", "url", "type", "category", "image_url") VALUES('dUMiXZOzASvMyAv', 'nNuTUCjRsxNNoUU', 'qumOEoEpwGrJcjA', 'Goods', 'Electronics', 'PwbjaGayRZdwlKv');
|
72
|
+
# => INSERT INTO "items" ("name", "description", "url", "type", "category", "image_url") VALUES('heuqrYERTtdUfgS', 'ZYckUtadljKbTBA', 'iFwqJYbqYYgEJNv', 'Goods', 'Electronics', 'BHHOXSFORpDsZBU');
|
73
|
+
# => INSERT INTO "items" ("name", "description", "url", "type", "category", "image_url") VALUES('jFjywdyxTWrWrvC', 'MaJfdgHSENuHkrW', 'hnRJJwsSKHYCnvo', 'Goods', 'Electronics', 'fkKuTpgmvCYEzOK');
|
74
|
+
# => INSERT INTO "items" ("name", "description", "url", "type", "category", "image_url") VALUES('JOIlNUFUVcMtQrP', 'PjLMkYvyFYGlRlr', 'MHucPxQxylqLQia', 'Goods', 'Electronics', 'quWbZUHSXwLvClY');
|
75
|
+
# => INSERT INTO "items" ("name", "description", "url", "type", "category", "image_url") VALUES('UxtBOSKroxWtShX', 'ORVtVgfCTonQIZH', 'SjWgwuZBxLLHKCe', 'Goods', 'Electronics', 'drOiSxLZAkFtbCW');
|
76
|
+
# => INSERT INTO "items" ("name", "description", "url", "type", "category", "image_url") VALUES('juAiBiHnFybnjlL', 'ouDFQXnSkRIMQaR', 'hgifUygkuXAWPLp', 'Goods', 'Electronics', 'dKVCzaOCJwmxIim');
|
77
|
+
|
78
|
+
```
|
79
|
+
|
80
|
+
Simple? If have any issue or problem, [talk to us now](https://github.com/vivrass/models-to-sql/issues).
|
81
|
+
|
82
|
+
Original documentation
|
83
|
+
--------------
|
84
|
+
|
85
|
+
Original README from this [outdated gem](https://github.com/dsabanin/models-to-sql-rails-plugin). Have some useful informations that we don't have time to describe here.
|
86
|
+
|
87
|
+
After installation, each AR model has to_sql method that can take following options:
|
88
|
+
|
89
|
+
:ignore_associations_for - do not dump associations with specified models. (default: empty)
|
90
|
+
:ignore_models - do not dump specified models. Array of ruby Class objects is used. (default: empty)
|
91
|
+
:ignore_tables - do not dump specified tables (default: empty)
|
92
|
+
:debug - debugging mode (default: false)
|
93
|
+
|
94
|
+
|
95
|
+
Contribute
|
96
|
+
-------------
|
97
|
+
|
98
|
+
If you do like to contribute to our project, please feel free to Fork our project or talk with us by [creating a new issue](https://github.com/vivrass/models-to-sql/issues/new). Rails 3.2 port by [Martin Provencher](https://github.com/vivrass) and Rails 4.0 port + documentation by [Fernando Paladini](https://github.com/paladini).
|
99
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'rake/testtask'
|
3
|
+
require 'rake/rdoctask'
|
4
|
+
|
5
|
+
begin
|
6
|
+
require 'jeweler'
|
7
|
+
Jeweler::Tasks.new do |s|
|
8
|
+
s.name = "models_to_sql"
|
9
|
+
s.summary = %Q{Dump ActiveRecord models graphs back into SQL or Rails fixtures format}
|
10
|
+
s.homepage = "https://github.com/vivrass/canada-provinces-select"
|
11
|
+
s.description = "Dump ActiveRecord models graphs back into SQL or Rails fixtures format"
|
12
|
+
s.authors = ["PagerDuty"]
|
13
|
+
|
14
|
+
s.add_runtime_dependency "rails", '>= 1.2'
|
15
|
+
|
16
|
+
s.files.exclude 'init.rb'
|
17
|
+
s.files.exclude 'models_to_sql.gemspec'
|
18
|
+
end
|
19
|
+
rescue LoadError
|
20
|
+
puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
|
21
|
+
end
|
22
|
+
|
23
|
+
require 'rake/testtask'
|
24
|
+
Rake::TestTask.new(:test) do |t|
|
25
|
+
t.libs << 'lib' << 'test'
|
26
|
+
t.pattern = 'test/**/*_test.rb'
|
27
|
+
t.verbose = false
|
28
|
+
end
|
29
|
+
|
30
|
+
begin
|
31
|
+
require 'rcov/rcovtask'
|
32
|
+
Rcov::RcovTask.new do |t|
|
33
|
+
t.libs << 'test'
|
34
|
+
t.test_files = FileList['test/**/*_test.rb']
|
35
|
+
t.verbose = true
|
36
|
+
end
|
37
|
+
rescue LoadError
|
38
|
+
puts "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
|
39
|
+
end
|
40
|
+
|
41
|
+
task :default => :test
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
1.0.0
|
data/lib/dumper.rb
ADDED
@@ -0,0 +1,121 @@
|
|
1
|
+
class Array
|
2
|
+
|
3
|
+
def to_sql_insert(*anything)
|
4
|
+
bananas = map do |leaf|
|
5
|
+
leaf.to_sql_insert(*anything)
|
6
|
+
end
|
7
|
+
SQLMonkey.sort_out_bananas(bananas)
|
8
|
+
end
|
9
|
+
|
10
|
+
end
|
11
|
+
|
12
|
+
module ActiveRecord
|
13
|
+
class Base
|
14
|
+
|
15
|
+
def to_sql_insert(baton={})
|
16
|
+
TreeClimber.new(self, baton).climb_with(SQLMonkey)
|
17
|
+
end
|
18
|
+
|
19
|
+
def to_sql_file(filepath, options={})
|
20
|
+
File.open(filepath, "w") do |fp|
|
21
|
+
fp << to_sql_insert(options)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
module SQLMonkey
|
29
|
+
|
30
|
+
extend self
|
31
|
+
|
32
|
+
def harvest(model, baton)
|
33
|
+
bananas = []
|
34
|
+
if baton[:add_deletes]
|
35
|
+
bananas << "DELETE FROM #{model.class.quoted_table_name} WHERE #{model.connection.quote_column_name(model.class.primary_key)} = #{model.quoted_id}"
|
36
|
+
end
|
37
|
+
bananas << "INSERT INTO #{model.class.quoted_table_name} " +
|
38
|
+
"(#{model.send(:quoted_column_names).join(', ')}) " +
|
39
|
+
"VALUES(#{model.send(:attributes_with_quotes).values.join(', ')})"
|
40
|
+
bananas
|
41
|
+
end
|
42
|
+
|
43
|
+
def sort_out_bananas(bananas)
|
44
|
+
bananas.join(";\n")
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
module FixtureMonkey
|
50
|
+
|
51
|
+
extend self
|
52
|
+
|
53
|
+
def harvest(model, bacon)
|
54
|
+
{ "#{model.class.to_s.tableize}_#{model.id}" => model.attributes }.to_yaml(:separator => "")
|
55
|
+
end
|
56
|
+
|
57
|
+
def sort_out_bananas(bananas)
|
58
|
+
bananas.join("\n")
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
class TreeClimber
|
64
|
+
|
65
|
+
attr_reader :model, :baton
|
66
|
+
|
67
|
+
def initialize(model, baton={})
|
68
|
+
@model = model
|
69
|
+
@baton = baton
|
70
|
+
initialize_baton
|
71
|
+
end
|
72
|
+
|
73
|
+
def initialize_baton
|
74
|
+
baton[:ignore_associations_for] ||= []
|
75
|
+
baton[:ignore_models] ||= []
|
76
|
+
baton[:ignore_tables] ||= []
|
77
|
+
baton[:dumped_ids] ||= Hash.new { |hsh,key| hsh[key] = Array.new }
|
78
|
+
baton[:current_level] ||= baton[:level].to_i
|
79
|
+
baton[:debug] ||= false
|
80
|
+
baton[:add_deletes] ||= false
|
81
|
+
end
|
82
|
+
|
83
|
+
def climb_with(monkey)
|
84
|
+
return if baton[:ignore_models].include?(model.class)
|
85
|
+
table_name = model.class.respond_to?(:table_name) ? model.class.table_name : nil
|
86
|
+
return if baton[:ignore_tables].include?(table_name) || table_name.nil?
|
87
|
+
|
88
|
+
if baton[:dumped_ids][model.class].include?(model.id)
|
89
|
+
return
|
90
|
+
else
|
91
|
+
baton[:dumped_ids][model.class] << model.id
|
92
|
+
end
|
93
|
+
|
94
|
+
bananas = []
|
95
|
+
bananas << monkey.harvest(model, baton)
|
96
|
+
STDERR << "Getting banana #{model.class}:#{model.id}\n" if baton[:debug]
|
97
|
+
|
98
|
+
if baton[:level]
|
99
|
+
baton[:current_level] -= 1
|
100
|
+
end
|
101
|
+
|
102
|
+
if !baton[:ignore_associations_for].include?(model.class) and baton[:current_level] >= 0
|
103
|
+
model.class.reflect_on_all_associations.each do |assoc|
|
104
|
+
assoc_value = model.send(assoc.name)
|
105
|
+
if assoc_value
|
106
|
+
unless assoc_value.is_a? Array
|
107
|
+
leafs = [ assoc_value ]
|
108
|
+
else
|
109
|
+
leafs = assoc_value
|
110
|
+
end
|
111
|
+
leafs.each do |leaf|
|
112
|
+
bananas << TreeClimber.new(leaf, baton).climb_with(monkey)
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
monkey.sort_out_bananas(bananas.flatten.compact)
|
119
|
+
end
|
120
|
+
|
121
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
module ModelsToSql
|
2
|
+
class Climber
|
3
|
+
|
4
|
+
def self.climb(model, output, baton = {})
|
5
|
+
baton[:ignore_models] ||= []
|
6
|
+
baton[:ignore_tables] ||= []
|
7
|
+
baton[:dumped_ids] ||= Hash.new { |hsh,key| hsh[key] = Array.new }
|
8
|
+
baton[:debug] ||= false
|
9
|
+
baton[:level] ||= 0
|
10
|
+
|
11
|
+
return if !model.class.respond_to?(:table_name)
|
12
|
+
return if baton[:ignore_models].include?(model.class)
|
13
|
+
return if baton[:ignore_tables].include?(model.class.table_name)
|
14
|
+
return if baton[:dumped_ids][model.class].include?(model.id)
|
15
|
+
|
16
|
+
baton[:dumped_ids][model.class] << model.id
|
17
|
+
|
18
|
+
output << sql(model)
|
19
|
+
STDERR << "LEVEL: #{baton[:level]} Copying #{model.class}:#{model.id}\n" if baton[:debug]
|
20
|
+
|
21
|
+
model.class.reflect_on_all_associations.each do |assoc|
|
22
|
+
assoc_value = model.send(assoc.name)
|
23
|
+
if assoc_value
|
24
|
+
unless assoc_value.is_a? Array
|
25
|
+
leafs = [ assoc_value ]
|
26
|
+
else
|
27
|
+
leafs = assoc_value
|
28
|
+
end
|
29
|
+
|
30
|
+
leafs.each do |leaf|
|
31
|
+
baton[:level] += 1
|
32
|
+
climb(leaf, output, baton)
|
33
|
+
baton[:level] -= 1
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.sql(model)
|
40
|
+
|
41
|
+
include ActiveModel::AttributeMethods
|
42
|
+
c = model.connection
|
43
|
+
|
44
|
+
quoted_columns = []
|
45
|
+
quoted_values = []
|
46
|
+
|
47
|
+
if Rails.version.to_i >= 4
|
48
|
+
attributes_with_values = model.send(:arel_attributes_with_values_for_create, model.attribute_names)
|
49
|
+
else
|
50
|
+
attributes_with_values = model.send(:arel_attributes_values, true, true)
|
51
|
+
end
|
52
|
+
|
53
|
+
attributes_with_values.each_pair do |key,value|
|
54
|
+
quoted_columns << c.quote_column_name(key.name)
|
55
|
+
quoted_values << c.quote(value)
|
56
|
+
end
|
57
|
+
|
58
|
+
"INSERT INTO #{model.class.quoted_table_name} (#{quoted_columns.join(', ')}) VALUES(#{quoted_values.join(', ')});\n"
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
end
|
metadata
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: models-to-sql-rails
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- PagerDuty
|
8
|
+
- Fernando Paladini
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-04-18 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rails
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - '>='
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '1.2'
|
21
|
+
type: :runtime
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - '>='
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '1.2'
|
28
|
+
description: Dump ActiveRecord models graphs back into SQL or Rails fixtures format.
|
29
|
+
Easily convert a model or an array of models to SQL insertion.
|
30
|
+
email: fnpaladini@gmail.com
|
31
|
+
executables: []
|
32
|
+
extensions: []
|
33
|
+
extra_rdoc_files:
|
34
|
+
- README.md
|
35
|
+
files:
|
36
|
+
- README.md
|
37
|
+
- Rakefile
|
38
|
+
- VERSION
|
39
|
+
- lib/dumper.rb
|
40
|
+
- lib/models_to_sql.rb
|
41
|
+
- lib/models_to_sql/active_record.rb
|
42
|
+
- lib/models_to_sql/array.rb
|
43
|
+
- lib/models_to_sql/climber.rb
|
44
|
+
homepage: https://github.com/paladini/models-to-sql-rails
|
45
|
+
licenses:
|
46
|
+
- MIT
|
47
|
+
metadata: {}
|
48
|
+
post_install_message:
|
49
|
+
rdoc_options: []
|
50
|
+
require_paths:
|
51
|
+
- lib
|
52
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
54
|
+
- - '>='
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: '0'
|
57
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
requirements: []
|
63
|
+
rubyforge_project:
|
64
|
+
rubygems_version: 2.1.11
|
65
|
+
signing_key:
|
66
|
+
specification_version: 3
|
67
|
+
summary: Dump ActiveRecord models graphs back into SQL or Rails fixtures format. Rails
|
68
|
+
4 supported.
|
69
|
+
test_files: []
|