seedable 0.0.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/.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: []
|