activerecord-archiver 0.0.0 → 0.1.0
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/lib/activerecord-archiver/archiver.rb +21 -0
- data/lib/activerecord-archiver/export.rb +25 -4
- metadata +44 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d643cb8c889c10a98f78294e99e0a3efa6e8e08b
|
4
|
+
data.tar.gz: 994f7221f37d80e5469c56d8882d1a2a75544530
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8e3c4233857329b4fbccbc38672ef088692592588121e164e871b4b6e74ca3767169cd1ef605c9e3c6c6861f5b98379c0fc9ebaa7a6611ca195ae29a4f7d31bd
|
7
|
+
data.tar.gz: 2b47faa160584694371ad67167d1e1639ea1e6cf609f28255ca412a5506cb494756df96662cc95474d98f827b91650be2752a1c90774ef3b7d3bbda57bcf8621
|
@@ -76,4 +76,25 @@ class ActiveRecordArchiver
|
|
76
76
|
raise "#{model} is not an activerecord model"
|
77
77
|
end
|
78
78
|
end
|
79
|
+
|
80
|
+
def self.relation_from_key model, attribute
|
81
|
+
model.reflections.values.detect{|ref| ref.foreign_key == attribute}
|
82
|
+
end
|
83
|
+
|
84
|
+
def self.cols_for_model model, all_models
|
85
|
+
model.columns.map do |col|
|
86
|
+
if col.primary
|
87
|
+
# omit primary keys
|
88
|
+
nil
|
89
|
+
elsif (relation = relation_from_key(model, col.name))
|
90
|
+
# include belongs_to relations to included models
|
91
|
+
if all_models.include? relation.klass
|
92
|
+
relation.name
|
93
|
+
else nil end
|
94
|
+
else
|
95
|
+
warn "Warning: #{model}##{col.name} included in export" if col.name =~ /_id$/
|
96
|
+
col.name
|
97
|
+
end
|
98
|
+
end.compact
|
99
|
+
end
|
79
100
|
end
|
@@ -36,9 +36,9 @@ Example:
|
|
36
36
|
=end
|
37
37
|
|
38
38
|
class ActiveRecordArchiver
|
39
|
-
def self.export
|
39
|
+
def self.export *args
|
40
40
|
|
41
|
-
@models_hash =
|
41
|
+
@models_hash = models_hash_from_args(args)
|
42
42
|
|
43
43
|
result = {}
|
44
44
|
|
@@ -69,8 +69,6 @@ class ActiveRecordArchiver
|
|
69
69
|
if placeholder
|
70
70
|
rec[relation_foreign_key(model, attribute)] = placeholder
|
71
71
|
end
|
72
|
-
else
|
73
|
-
raise "#{record} belongs_to #{attribute} which is not included in the export"
|
74
72
|
end
|
75
73
|
else
|
76
74
|
raise "#{attribute} is not an attribute or belongs_to relation of #{model}"
|
@@ -83,4 +81,27 @@ class ActiveRecordArchiver
|
|
83
81
|
# encode
|
84
82
|
JSON.dump result
|
85
83
|
end
|
84
|
+
|
85
|
+
def self.models_hash_from_args args
|
86
|
+
options = args.extract_options!
|
87
|
+
args.each do |arg|
|
88
|
+
options[arg] = :all
|
89
|
+
end
|
90
|
+
|
91
|
+
models = options.each_pair.map do |collection, _|
|
92
|
+
collection.first.class
|
93
|
+
end
|
94
|
+
|
95
|
+
models_hash = {}
|
96
|
+
|
97
|
+
options.each_pair do |collection, cols|
|
98
|
+
models_hash[collection.first.class] =
|
99
|
+
[collection,
|
100
|
+
if cols == :all
|
101
|
+
cols_for_model(collection.first.class, models)
|
102
|
+
else cols end]
|
103
|
+
end
|
104
|
+
|
105
|
+
models_hash
|
106
|
+
end
|
86
107
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord-archiver
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sam Auciello
|
@@ -9,7 +9,49 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
date: 2014-02-05 00:00:00.000000000 Z
|
12
|
-
dependencies:
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activerecord
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3.2'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '3.2'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: activesupport
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '3.2'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '3.2'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: sqlite3
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
13
55
|
description: |
|
14
56
|
ActiveRecord-Archiver is a simple tool for taking a subset of the records in one environment
|
15
57
|
and exporting them for use in another environment.
|