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 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.