seedable 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +10 -0
- data/.rspec +1 -0
- data/.rvmrc +1 -0
- data/.travis.yml +7 -0
- data/Appraisals +9 -0
- data/Gemfile +4 -0
- data/Guardfile +9 -0
- data/LICENSE +21 -0
- data/README.rdoc +95 -0
- data/Rakefile +28 -0
- data/db/schema.rb +34 -0
- data/gemfiles/rails-3.1.0.gemfile +7 -0
- data/gemfiles/rails-3.1.0.gemfile.lock +149 -0
- data/gemfiles/rails-master.gemfile +7 -0
- data/gemfiles/rails-master.gemfile.lock +153 -0
- data/lib/seedable.rb +19 -0
- data/lib/seedable/core_ext.rb +66 -0
- data/lib/seedable/exporter.rb +163 -0
- data/lib/seedable/helpers.rb +144 -0
- data/lib/seedable/importer.rb +55 -0
- data/lib/seedable/object_tracker.rb +45 -0
- data/lib/seedable/version.rb +5 -0
- data/seedable.gemspec +44 -0
- data/spec/database.yml +7 -0
- data/spec/models/filtered_garage_spec.rb +22 -0
- data/spec/models/garage_spec.rb +197 -0
- data/spec/spec_helper.rb +41 -0
- data/spec/support/factories.rb +23 -0
- data/spec/support/models.rb +43 -0
- metadata +271 -0
@@ -0,0 +1,45 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module Seedable # :nodoc:
|
4
|
+
class ObjectTracker # :nodoc:
|
5
|
+
|
6
|
+
attr_accessor :graph
|
7
|
+
|
8
|
+
# Create a new instance of the object tracker.
|
9
|
+
#
|
10
|
+
def initialize
|
11
|
+
@graph = {}
|
12
|
+
end
|
13
|
+
|
14
|
+
# Determine if the object tracker has already picked this object up.
|
15
|
+
#
|
16
|
+
def contains?(object)
|
17
|
+
key, id = to_key_and_id(object)
|
18
|
+
|
19
|
+
@graph[key].is_a?(Enumerable) ? @graph[key].include?(id) : @graph[key]
|
20
|
+
end
|
21
|
+
|
22
|
+
# Add this object to the object tracker.
|
23
|
+
#
|
24
|
+
def add(object)
|
25
|
+
key, id = to_key_and_id(object)
|
26
|
+
|
27
|
+
@graph[key] ? @graph[key] << id : @graph[key] = [id]
|
28
|
+
end
|
29
|
+
|
30
|
+
# Display the object tracker in yaml for easy viewing.
|
31
|
+
#
|
32
|
+
def to_s
|
33
|
+
@graph.to_yaml
|
34
|
+
end
|
35
|
+
|
36
|
+
# Convert a particular object to a hash key and id, based from the
|
37
|
+
# object's class and primary key.
|
38
|
+
#
|
39
|
+
def to_key_and_id(object)
|
40
|
+
[object.class.to_s.underscore.to_sym, object.id]
|
41
|
+
end
|
42
|
+
private :to_key_and_id
|
43
|
+
|
44
|
+
end
|
45
|
+
end
|
data/seedable.gemspec
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
$:.push File.expand_path("../lib", __FILE__)
|
4
|
+
require "seedable/version"
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = "seedable"
|
8
|
+
s.version = Seedable::VERSION
|
9
|
+
s.platform = Gem::Platform::RUBY
|
10
|
+
s.authors = ["Christopher Meiklejohn"]
|
11
|
+
s.email = ["christopher.meiklejohn@gmail.com"]
|
12
|
+
s.homepage = "http://github.com/cmeiklejohn/seedable"
|
13
|
+
s.summary = %q{Allows for quick serialization/deserialization of objects for moving between environments.}
|
14
|
+
s.description = %q{Allows for quick serialization/deserialization of objects for moving between environments.}
|
15
|
+
|
16
|
+
s.rubyforge_project = "seedable"
|
17
|
+
|
18
|
+
s.files = `git ls-files`.split("\n")
|
19
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
20
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
21
|
+
s.require_paths = ["lib"]
|
22
|
+
|
23
|
+
s.add_dependency('rails', '>= 3.1.0')
|
24
|
+
|
25
|
+
s.add_development_dependency('bundler', '~> 1.0.0')
|
26
|
+
s.add_development_dependency('rspec')
|
27
|
+
s.add_development_dependency('rspec-rails')
|
28
|
+
s.add_development_dependency('sqlite3')
|
29
|
+
s.add_development_dependency('factory_girl')
|
30
|
+
s.add_development_dependency('factory_girl_rails')
|
31
|
+
s.add_development_dependency('mocha')
|
32
|
+
s.add_development_dependency('appraisal', '~> 0.3.5')
|
33
|
+
s.add_development_dependency('timecop')
|
34
|
+
s.add_development_dependency('horo')
|
35
|
+
s.add_development_dependency('simplecov')
|
36
|
+
s.add_development_dependency('diesel')
|
37
|
+
s.add_development_dependency('guard')
|
38
|
+
s.add_development_dependency('guard-rspec')
|
39
|
+
|
40
|
+
if RUBY_PLATFORM =~ /linux/i
|
41
|
+
s.add_development_dependency('rb-inotify')
|
42
|
+
s.add_development_dependency('libnotify')
|
43
|
+
end
|
44
|
+
end
|
data/spec/database.yml
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe FilteredGarage do
|
6
|
+
|
7
|
+
before(:each) do
|
8
|
+
Timecop.freeze(2010, 01, 01)
|
9
|
+
@garage = Factory.create(:filtered_garage)
|
10
|
+
end
|
11
|
+
|
12
|
+
after(:each) do
|
13
|
+
Timecop.return
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "with filtered attributes" do
|
17
|
+
it "should return properly formatted json when to_seedable is called" do
|
18
|
+
@garage.as_seedable.should == {"filtered_garage"=>{"id"=>1, "updated_at"=>"Fri Jan 01 00:00:00 -0500 2010", "created_at"=>"Fri Jan 01 00:00:00 -0500 2010"}}
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
@@ -0,0 +1,197 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Garage do
|
6
|
+
|
7
|
+
before(:each) do
|
8
|
+
Timecop.freeze(2010, 01, 01)
|
9
|
+
@garage = Factory.create(:garage)
|
10
|
+
end
|
11
|
+
|
12
|
+
after(:each) do
|
13
|
+
Timecop.return
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "with no associations" do
|
17
|
+
it "should return a proper hash of attributes and associations" do
|
18
|
+
@garage.as_seedable.should == {"garage"=>{"id"=>1, "updated_at"=>"Fri Jan 01 00:00:00 -0500 2010", "name"=>"Chris", "created_at"=>"Fri Jan 01 00:00:00 -0500 2010"}}
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should export and import correctly" do
|
22
|
+
@hash = @garage.as_seedable
|
23
|
+
@json = @garage.to_seedable
|
24
|
+
|
25
|
+
@hash.should == {"garage"=>{"id"=>1, "updated_at"=>"Fri Jan 01 00:00:00 -0500 2010", "name"=>"Chris", "created_at"=>"Fri Jan 01 00:00:00 -0500 2010"}}
|
26
|
+
|
27
|
+
@garage.delete
|
28
|
+
Garage.all.count.should == 0
|
29
|
+
|
30
|
+
@garage = Garage.from_seedable(@json)
|
31
|
+
@garage.as_seedable.should == @hash
|
32
|
+
@garage.to_seedable.should == @json
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe "with a bike" do
|
37
|
+
before(:each) do
|
38
|
+
@bike = Factory.create(:bike)
|
39
|
+
@garage.bikes << @bike
|
40
|
+
|
41
|
+
Garage.include_associations([:bikes])
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should not traverse to bike when exporting since it is not seedable" do
|
45
|
+
@garage.as_seedable.should == {"garage"=>{"id"=>1, "updated_at"=>"Fri Jan 01 00:00:00 -0500 2010", "name"=>"Chris", "created_at"=>"Fri Jan 01 00:00:00 -0500 2010"}}
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe "with one car" do
|
50
|
+
before(:each) do
|
51
|
+
@car = Factory.create(:car)
|
52
|
+
@garage.cars << @car
|
53
|
+
Garage.include_associations([:cars])
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should return a proper hash of attributes and associations" do
|
57
|
+
Car.filter_attributes([])
|
58
|
+
Garage.filter_attributes([])
|
59
|
+
|
60
|
+
@garage.as_seedable.should == {"garage"=>{"id"=>1, "updated_at"=>"Fri Jan 01 00:00:00 -0500 2010", "name"=>"Chris", :cars=>[{"id"=>1, "updated_at"=>"Fri Jan 01 00:00:00 -0500 2010", "model"=>"Impreza", "created_at"=>"Fri Jan 01 00:00:00 -0500 2010", "garage_id"=>1, "make"=>"Subaru"}], "created_at"=>"Fri Jan 01 00:00:00 -0500 2010"}}
|
61
|
+
end
|
62
|
+
|
63
|
+
it "should omit filtered attributes and return properly formatted json when to_seedable is called" do
|
64
|
+
Garage.filter_attributes([:id])
|
65
|
+
Car.filter_attributes([:id, :garage_id])
|
66
|
+
|
67
|
+
@garage.as_seedable.should == {"garage"=>{"updated_at"=>"Fri Jan 01 00:00:00 -0500 2010", "name"=>"Chris", :cars=>[{"updated_at"=>"Fri Jan 01 00:00:00 -0500 2010", "model"=>"Impreza", "created_at"=>"Fri Jan 01 00:00:00 -0500 2010", "make"=>"Subaru"}], "created_at"=>"Fri Jan 01 00:00:00 -0500 2010"}}
|
68
|
+
end
|
69
|
+
|
70
|
+
it "should export and import the records correctly without ids" do
|
71
|
+
Garage.filter_attributes([:id])
|
72
|
+
Car.filter_attributes([:id, :garage_id])
|
73
|
+
|
74
|
+
@hash = @garage.as_seedable
|
75
|
+
@json = @garage.to_seedable
|
76
|
+
|
77
|
+
@car.delete
|
78
|
+
@garage.delete
|
79
|
+
|
80
|
+
Car.all.count.should == 0
|
81
|
+
Garage.all.count.should == 0
|
82
|
+
|
83
|
+
@hash.should == {"garage"=>{"updated_at"=>"Fri Jan 01 00:00:00 -0500 2010", "name"=>"Chris", :cars=>[{"updated_at"=>"Fri Jan 01 00:00:00 -0500 2010", "model"=>"Impreza", "created_at"=>"Fri Jan 01 00:00:00 -0500 2010", "make"=>"Subaru"}], "created_at"=>"Fri Jan 01 00:00:00 -0500 2010"}}
|
84
|
+
|
85
|
+
@garage = Garage.from_seedable(@json)
|
86
|
+
@garage.as_seedable.should == @hash
|
87
|
+
@garage.to_seedable.should == @json
|
88
|
+
end
|
89
|
+
|
90
|
+
# TODO: Marked pending since this behavior fails in rails 3.0, but
|
91
|
+
# works in rails 3.2.
|
92
|
+
#
|
93
|
+
# For this to work, mass assignment protection
|
94
|
+
# changes from rails-3.2 are necessary since they'll alow you to
|
95
|
+
# bypass protection on all associated objects and set primary key
|
96
|
+
# values on the associated objects.
|
97
|
+
#
|
98
|
+
pending "should export and import the records correctly with ids"
|
99
|
+
end
|
100
|
+
|
101
|
+
describe "with one car and two drivers" do
|
102
|
+
before(:each) do
|
103
|
+
@car = Factory.create(:car)
|
104
|
+
@garage.cars << @car
|
105
|
+
2.times do
|
106
|
+
@car.drivers << Factory.create(:driver)
|
107
|
+
end
|
108
|
+
|
109
|
+
Car.filter_attributes([:id, :garage_id])
|
110
|
+
Garage.filter_attributes([:id])
|
111
|
+
Driver.filter_attributes([:id, :car_id])
|
112
|
+
|
113
|
+
Car.include_associations([:drivers])
|
114
|
+
Garage.include_associations([:cars])
|
115
|
+
end
|
116
|
+
|
117
|
+
it "serialize and deserialize into objects correctly" do
|
118
|
+
@hash = @garage.as_seedable
|
119
|
+
@json = @garage.to_seedable
|
120
|
+
|
121
|
+
@hash.should == {"garage"=>{"updated_at"=>"Fri Jan 01 00:00:00 -0500 2010", "name"=>"Chris", :cars=>[{"updated_at"=>"Fri Jan 01 00:00:00 -0500 2010", "model"=>"Impreza", "created_at"=>"Fri Jan 01 00:00:00 -0500 2010", :drivers=>[{"updated_at"=>"Fri Jan 01 00:00:00 -0500 2010", "name"=>"Chris", "created_at"=>"Fri Jan 01 00:00:00 -0500 2010"}, {"updated_at"=>"Fri Jan 01 00:00:00 -0500 2010", "name"=>"Chris", "created_at"=>"Fri Jan 01 00:00:00 -0500 2010"}], "make"=>"Subaru"}], "created_at"=>"Fri Jan 01 00:00:00 -0500 2010"}}
|
122
|
+
|
123
|
+
@garage = Garage.from_seedable(@json)
|
124
|
+
@garage.as_seedable.should == @hash
|
125
|
+
@garage.to_seedable.should == @json
|
126
|
+
end
|
127
|
+
|
128
|
+
describe "with a dependency back to garage" do
|
129
|
+
it "should be able to export correctly by not traversing direct ancestors" do
|
130
|
+
Car.filter_attributes([:id, :garage_id])
|
131
|
+
Garage.filter_attributes([:id])
|
132
|
+
Driver.filter_attributes([:id, :car_id])
|
133
|
+
|
134
|
+
Car.include_associations([:drivers, :garage])
|
135
|
+
Garage.include_associations([:cars])
|
136
|
+
|
137
|
+
@hash = @garage.as_seedable
|
138
|
+
@json = @garage.to_seedable
|
139
|
+
|
140
|
+
@hash.should == {"garage"=>{"updated_at"=>"Fri Jan 01 00:00:00 -0500 2010", "name"=>"Chris", :cars=>[{"updated_at"=>"Fri Jan 01 00:00:00 -0500 2010", "model"=>"Impreza", "created_at"=>"Fri Jan 01 00:00:00 -0500 2010", :drivers=>[{"updated_at"=>"Fri Jan 01 00:00:00 -0500 2010", "name"=>"Chris", "created_at"=>"Fri Jan 01 00:00:00 -0500 2010"}, {"updated_at"=>"Fri Jan 01 00:00:00 -0500 2010", "name"=>"Chris", "created_at"=>"Fri Jan 01 00:00:00 -0500 2010"}], "make"=>"Subaru"}], "created_at"=>"Fri Jan 01 00:00:00 -0500 2010"}}
|
141
|
+
|
142
|
+
@garage = Garage.from_seedable(@json)
|
143
|
+
@garage.as_seedable.should == @hash
|
144
|
+
@garage.to_seedable.should == @json
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
describe "with two cars with the same driver" do
|
150
|
+
before(:each) do
|
151
|
+
@driver = Factory.create(:driver)
|
152
|
+
2.times do
|
153
|
+
@car = Factory.create(:car)
|
154
|
+
@car.drivers << @driver
|
155
|
+
@garage.cars << @car
|
156
|
+
end
|
157
|
+
|
158
|
+
Car.filter_attributes([])
|
159
|
+
Garage.filter_attributes([])
|
160
|
+
Driver.filter_attributes([])
|
161
|
+
|
162
|
+
Car.include_associations([:drivers])
|
163
|
+
Garage.include_associations([:cars])
|
164
|
+
end
|
165
|
+
|
166
|
+
it "should import and export only one driver correctly" do
|
167
|
+
@garage.as_seedable.should == {"garage"=>{"id"=>1, "updated_at"=>"Fri Jan 01 00:00:00 -0500 2010", "name"=>"Chris", :cars=>[{"id"=>1, "updated_at"=>"Fri Jan 01 00:00:00 -0500 2010", "model"=>"Impreza", "created_at"=>"Fri Jan 01 00:00:00 -0500 2010", "garage_id"=>1, :drivers=>[{"id"=>1, "updated_at"=>"Fri Jan 01 00:00:00 -0500 2010", "car_id"=>2, "name"=>"Chris", "created_at"=>"Fri Jan 01 00:00:00 -0500 2010"}], "make"=>"Subaru"}, {"id"=>2, "updated_at"=>"Fri Jan 01 00:00:00 -0500 2010", "model"=>"Impreza", "created_at"=>"Fri Jan 01 00:00:00 -0500 2010", "garage_id"=>1, :drivers=>[{}], "make"=>"Subaru"}], "created_at"=>"Fri Jan 01 00:00:00 -0500 2010"}}
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
describe "in an array of garages" do
|
172
|
+
before(:each) do
|
173
|
+
@garages = []
|
174
|
+
2.times do
|
175
|
+
@garages << @garage
|
176
|
+
end
|
177
|
+
|
178
|
+
Car.filter_attributes([:id, :garage_id])
|
179
|
+
Garage.filter_attributes([:id])
|
180
|
+
Driver.filter_attributes([:id, :car_id])
|
181
|
+
|
182
|
+
@hash = @garages.as_seedable
|
183
|
+
@json = @garages.to_seedable
|
184
|
+
end
|
185
|
+
|
186
|
+
it "should export correctly" do
|
187
|
+
@hash.should == [{"garage"=>{"updated_at"=>"Fri Jan 01 00:00:00 -0500 2010", "name"=>"Chris", :cars=>[], "created_at"=>"Fri Jan 01 00:00:00 -0500 2010"}}, {"garage"=>{"updated_at"=>"Fri Jan 01 00:00:00 -0500 2010", "name"=>"Chris", :cars=>[], "created_at"=>"Fri Jan 01 00:00:00 -0500 2010"}}]
|
188
|
+
end
|
189
|
+
|
190
|
+
it "should reload correctly" do
|
191
|
+
@garages = Seedable.from_seedable(@json)
|
192
|
+
@garages.as_seedable.should == @hash
|
193
|
+
@garages.to_seedable.should == @json
|
194
|
+
end
|
195
|
+
end
|
196
|
+
|
197
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
ENV["RAILS_ENV"] ||= "test"
|
4
|
+
|
5
|
+
PROJECT_ROOT = File.expand_path("../..", __FILE__)
|
6
|
+
$LOAD_PATH << File.join(PROJECT_ROOT, "lib")
|
7
|
+
|
8
|
+
require 'rails/all'
|
9
|
+
require 'rails/test_help'
|
10
|
+
Bundler.require
|
11
|
+
|
12
|
+
require 'diesel/testing'
|
13
|
+
require 'rspec/rails'
|
14
|
+
|
15
|
+
require 'factory_girl_rails'
|
16
|
+
require 'timecop'
|
17
|
+
|
18
|
+
require 'seedable'
|
19
|
+
|
20
|
+
if RUBY_VERSION > "1.9"
|
21
|
+
require 'simplecov'
|
22
|
+
SimpleCov.start
|
23
|
+
end
|
24
|
+
|
25
|
+
Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }
|
26
|
+
|
27
|
+
ActiveRecord::Base.establish_connection(
|
28
|
+
:adapter => "sqlite3",
|
29
|
+
:database => ":memory:"
|
30
|
+
)
|
31
|
+
|
32
|
+
ActiveRecord::Base.silence do
|
33
|
+
ActiveRecord::Migration.verbose = false
|
34
|
+
|
35
|
+
load(File.dirname(__FILE__) + '/../db/schema.rb')
|
36
|
+
end
|
37
|
+
|
38
|
+
RSpec.configure do |config|
|
39
|
+
config.use_transactional_fixtures = true
|
40
|
+
config.backtrace_clean_patterns << %r{gems/}
|
41
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
Factory.define :garage do |garage|
|
6
|
+
garage.name "Chris"
|
7
|
+
end
|
8
|
+
|
9
|
+
Factory.define :filtered_garage do |garage|
|
10
|
+
garage.name "Chris"
|
11
|
+
end
|
12
|
+
|
13
|
+
Factory.define :bike do |bike|
|
14
|
+
end
|
15
|
+
|
16
|
+
Factory.define :car do |car|
|
17
|
+
car.make "Subaru"
|
18
|
+
car.model "Impreza"
|
19
|
+
end
|
20
|
+
|
21
|
+
Factory.define :driver do |driver|
|
22
|
+
driver.name "Chris"
|
23
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
class Garage < ActiveRecord::Base
|
4
|
+
include Seedable
|
5
|
+
|
6
|
+
has_many :cars
|
7
|
+
has_many :bikes
|
8
|
+
|
9
|
+
seedable :include_associations => []
|
10
|
+
end
|
11
|
+
|
12
|
+
class FilteredGarage < ActiveRecord::Base
|
13
|
+
include Seedable
|
14
|
+
|
15
|
+
has_many :cars
|
16
|
+
has_many :bikes
|
17
|
+
|
18
|
+
seedable :include_associations => [], :filter_attributes => [:name]
|
19
|
+
end
|
20
|
+
|
21
|
+
class Car < ActiveRecord::Base
|
22
|
+
include Seedable
|
23
|
+
|
24
|
+
belongs_to :garage
|
25
|
+
|
26
|
+
has_many :drivers
|
27
|
+
|
28
|
+
seedable :include_associations => []
|
29
|
+
end
|
30
|
+
|
31
|
+
class Bike < ActiveRecord::Base
|
32
|
+
include Seedable
|
33
|
+
|
34
|
+
belongs_to :garage
|
35
|
+
end
|
36
|
+
|
37
|
+
class Driver < ActiveRecord::Base
|
38
|
+
include Seedable
|
39
|
+
|
40
|
+
belongs_to :car
|
41
|
+
|
42
|
+
seedable :include_associations => []
|
43
|
+
end
|
metadata
ADDED
@@ -0,0 +1,271 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: seedable
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Christopher Meiklejohn
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2011-09-02 00:00:00.000000000 -04:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: rails
|
17
|
+
requirement: &16523360 !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
19
|
+
requirements:
|
20
|
+
- - ! '>='
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 3.1.0
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: *16523360
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: bundler
|
28
|
+
requirement: &16521980 !ruby/object:Gem::Requirement
|
29
|
+
none: false
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.0.0
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: *16521980
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: rspec
|
39
|
+
requirement: &16521500 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ! '>='
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: '0'
|
45
|
+
type: :development
|
46
|
+
prerelease: false
|
47
|
+
version_requirements: *16521500
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: rspec-rails
|
50
|
+
requirement: &16520300 !ruby/object:Gem::Requirement
|
51
|
+
none: false
|
52
|
+
requirements:
|
53
|
+
- - ! '>='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
56
|
+
type: :development
|
57
|
+
prerelease: false
|
58
|
+
version_requirements: *16520300
|
59
|
+
- !ruby/object:Gem::Dependency
|
60
|
+
name: sqlite3
|
61
|
+
requirement: &16504720 !ruby/object:Gem::Requirement
|
62
|
+
none: false
|
63
|
+
requirements:
|
64
|
+
- - ! '>='
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: '0'
|
67
|
+
type: :development
|
68
|
+
prerelease: false
|
69
|
+
version_requirements: *16504720
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: factory_girl
|
72
|
+
requirement: &16503480 !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
type: :development
|
79
|
+
prerelease: false
|
80
|
+
version_requirements: *16503480
|
81
|
+
- !ruby/object:Gem::Dependency
|
82
|
+
name: factory_girl_rails
|
83
|
+
requirement: &16502040 !ruby/object:Gem::Requirement
|
84
|
+
none: false
|
85
|
+
requirements:
|
86
|
+
- - ! '>='
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
89
|
+
type: :development
|
90
|
+
prerelease: false
|
91
|
+
version_requirements: *16502040
|
92
|
+
- !ruby/object:Gem::Dependency
|
93
|
+
name: mocha
|
94
|
+
requirement: &16500080 !ruby/object:Gem::Requirement
|
95
|
+
none: false
|
96
|
+
requirements:
|
97
|
+
- - ! '>='
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: '0'
|
100
|
+
type: :development
|
101
|
+
prerelease: false
|
102
|
+
version_requirements: *16500080
|
103
|
+
- !ruby/object:Gem::Dependency
|
104
|
+
name: appraisal
|
105
|
+
requirement: &16486220 !ruby/object:Gem::Requirement
|
106
|
+
none: false
|
107
|
+
requirements:
|
108
|
+
- - ~>
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 0.3.5
|
111
|
+
type: :development
|
112
|
+
prerelease: false
|
113
|
+
version_requirements: *16486220
|
114
|
+
- !ruby/object:Gem::Dependency
|
115
|
+
name: timecop
|
116
|
+
requirement: &16485320 !ruby/object:Gem::Requirement
|
117
|
+
none: false
|
118
|
+
requirements:
|
119
|
+
- - ! '>='
|
120
|
+
- !ruby/object:Gem::Version
|
121
|
+
version: '0'
|
122
|
+
type: :development
|
123
|
+
prerelease: false
|
124
|
+
version_requirements: *16485320
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: horo
|
127
|
+
requirement: &16484380 !ruby/object:Gem::Requirement
|
128
|
+
none: false
|
129
|
+
requirements:
|
130
|
+
- - ! '>='
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: '0'
|
133
|
+
type: :development
|
134
|
+
prerelease: false
|
135
|
+
version_requirements: *16484380
|
136
|
+
- !ruby/object:Gem::Dependency
|
137
|
+
name: simplecov
|
138
|
+
requirement: &16482980 !ruby/object:Gem::Requirement
|
139
|
+
none: false
|
140
|
+
requirements:
|
141
|
+
- - ! '>='
|
142
|
+
- !ruby/object:Gem::Version
|
143
|
+
version: '0'
|
144
|
+
type: :development
|
145
|
+
prerelease: false
|
146
|
+
version_requirements: *16482980
|
147
|
+
- !ruby/object:Gem::Dependency
|
148
|
+
name: diesel
|
149
|
+
requirement: &16444480 !ruby/object:Gem::Requirement
|
150
|
+
none: false
|
151
|
+
requirements:
|
152
|
+
- - ! '>='
|
153
|
+
- !ruby/object:Gem::Version
|
154
|
+
version: '0'
|
155
|
+
type: :development
|
156
|
+
prerelease: false
|
157
|
+
version_requirements: *16444480
|
158
|
+
- !ruby/object:Gem::Dependency
|
159
|
+
name: guard
|
160
|
+
requirement: &16443620 !ruby/object:Gem::Requirement
|
161
|
+
none: false
|
162
|
+
requirements:
|
163
|
+
- - ! '>='
|
164
|
+
- !ruby/object:Gem::Version
|
165
|
+
version: '0'
|
166
|
+
type: :development
|
167
|
+
prerelease: false
|
168
|
+
version_requirements: *16443620
|
169
|
+
- !ruby/object:Gem::Dependency
|
170
|
+
name: guard-rspec
|
171
|
+
requirement: &16442800 !ruby/object:Gem::Requirement
|
172
|
+
none: false
|
173
|
+
requirements:
|
174
|
+
- - ! '>='
|
175
|
+
- !ruby/object:Gem::Version
|
176
|
+
version: '0'
|
177
|
+
type: :development
|
178
|
+
prerelease: false
|
179
|
+
version_requirements: *16442800
|
180
|
+
- !ruby/object:Gem::Dependency
|
181
|
+
name: rb-inotify
|
182
|
+
requirement: &16440580 !ruby/object:Gem::Requirement
|
183
|
+
none: false
|
184
|
+
requirements:
|
185
|
+
- - ! '>='
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '0'
|
188
|
+
type: :development
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: *16440580
|
191
|
+
- !ruby/object:Gem::Dependency
|
192
|
+
name: libnotify
|
193
|
+
requirement: &16438380 !ruby/object:Gem::Requirement
|
194
|
+
none: false
|
195
|
+
requirements:
|
196
|
+
- - ! '>='
|
197
|
+
- !ruby/object:Gem::Version
|
198
|
+
version: '0'
|
199
|
+
type: :development
|
200
|
+
prerelease: false
|
201
|
+
version_requirements: *16438380
|
202
|
+
description: Allows for quick serialization/deserialization of objects for moving
|
203
|
+
between environments.
|
204
|
+
email:
|
205
|
+
- christopher.meiklejohn@gmail.com
|
206
|
+
executables: []
|
207
|
+
extensions: []
|
208
|
+
extra_rdoc_files: []
|
209
|
+
files:
|
210
|
+
- .gitignore
|
211
|
+
- .rspec
|
212
|
+
- .rvmrc
|
213
|
+
- .travis.yml
|
214
|
+
- Appraisals
|
215
|
+
- Gemfile
|
216
|
+
- Guardfile
|
217
|
+
- LICENSE
|
218
|
+
- README.rdoc
|
219
|
+
- Rakefile
|
220
|
+
- db/schema.rb
|
221
|
+
- gemfiles/rails-3.1.0.gemfile
|
222
|
+
- gemfiles/rails-3.1.0.gemfile.lock
|
223
|
+
- gemfiles/rails-master.gemfile
|
224
|
+
- gemfiles/rails-master.gemfile.lock
|
225
|
+
- lib/seedable.rb
|
226
|
+
- lib/seedable/core_ext.rb
|
227
|
+
- lib/seedable/exporter.rb
|
228
|
+
- lib/seedable/helpers.rb
|
229
|
+
- lib/seedable/importer.rb
|
230
|
+
- lib/seedable/object_tracker.rb
|
231
|
+
- lib/seedable/version.rb
|
232
|
+
- seedable.gemspec
|
233
|
+
- spec/database.yml
|
234
|
+
- spec/models/filtered_garage_spec.rb
|
235
|
+
- spec/models/garage_spec.rb
|
236
|
+
- spec/spec_helper.rb
|
237
|
+
- spec/support/factories.rb
|
238
|
+
- spec/support/models.rb
|
239
|
+
has_rdoc: true
|
240
|
+
homepage: http://github.com/cmeiklejohn/seedable
|
241
|
+
licenses: []
|
242
|
+
post_install_message:
|
243
|
+
rdoc_options: []
|
244
|
+
require_paths:
|
245
|
+
- lib
|
246
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
247
|
+
none: false
|
248
|
+
requirements:
|
249
|
+
- - ! '>='
|
250
|
+
- !ruby/object:Gem::Version
|
251
|
+
version: '0'
|
252
|
+
segments:
|
253
|
+
- 0
|
254
|
+
hash: -3243611342215626697
|
255
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
256
|
+
none: false
|
257
|
+
requirements:
|
258
|
+
- - ! '>='
|
259
|
+
- !ruby/object:Gem::Version
|
260
|
+
version: '0'
|
261
|
+
segments:
|
262
|
+
- 0
|
263
|
+
hash: -3243611342215626697
|
264
|
+
requirements: []
|
265
|
+
rubyforge_project: seedable
|
266
|
+
rubygems_version: 1.6.2
|
267
|
+
signing_key:
|
268
|
+
specification_version: 3
|
269
|
+
summary: Allows for quick serialization/deserialization of objects for moving between
|
270
|
+
environments.
|
271
|
+
test_files: []
|