activerecord-archiver 0.0.0 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0bea1df0fa0ebd3cdf2f49f5c2773357810a8dc6
4
- data.tar.gz: d2153f6d8ff024cce3bdbcc71df74db5acb99d2f
3
+ metadata.gz: d643cb8c889c10a98f78294e99e0a3efa6e8e08b
4
+ data.tar.gz: 994f7221f37d80e5469c56d8882d1a2a75544530
5
5
  SHA512:
6
- metadata.gz: f9aec4a4adccee5eba5488e7947323a51ac97e7c18395ff02d2a1cd0ac8bd7b7ae6d1fee25e8fe2f37fbd1af892494d20b4aad62037a5ec8fea5530ad65d37cf
7
- data.tar.gz: 2f3fb76e833265d4a63e194fb710811f7f334748e50026916f23c71cff36a015cdea4b153542883d0bc2e47e0ee7a79c26c21143cc2354f778d5df0b9f714670
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 models_hash
39
+ def self.export *args
40
40
 
41
- @models_hash = 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.0.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.