superseeder 0.9.3 → 0.9.4

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: 5ac1535106365fed57579024bed2fffd848749ce
4
- data.tar.gz: ce9deb018e56f473cc7ddfbb1c84194064cb05c6
3
+ metadata.gz: 03b335cbdc74fa78d545de5ebda3234d44be8bbc
4
+ data.tar.gz: 65b97195ec9093ea27e516f22c44eafc6d19f90b
5
5
  SHA512:
6
- metadata.gz: 2474335519980b1a92432b879876e62b34f29b58670758943e12535bbf2e0863c2fbdbc485170fff26e6e5989f11471d07ffbcc2fc2ef627eaee529027de6101
7
- data.tar.gz: 941980a27de9ee42dd0d6e0c4a36f9a3a6eaab69b447e25334c66314180d6e1fa18e1867593f403b5e61612ba391554714fcfef8104b8397baf34ef2bd7fb396
6
+ metadata.gz: 0eb50168fe34841393e7b04bd7f42663d41a75c191ce66e7e0b16febb55709f047d2263e4b54d65f1927dca5ad781e1ef44d3f332002ff421aaa69a3d601b55f
7
+ data.tar.gz: e2031f83186272ccac6261c5ba93a57ac715d0d061d3bf2cc8773c2ee2607b5ccec5f8e53fddd6e7719a403dc216684f963d18777e8434b203aa0ae129078929
@@ -17,6 +17,7 @@ module Superseeder
17
17
 
18
18
  opts = args.extract_options!
19
19
  many_sep = opts.delete(opts[:many_sep]) || ','
20
+ update = opts.delete :update_by
20
21
 
21
22
  s = EXTENSIONS[File.extname(path)].constantize.new path.to_s, opts
22
23
  header = s.row s.first_row
@@ -27,15 +28,18 @@ module Superseeder
27
28
  if block_given?
28
29
  yield row
29
30
  else
30
- instance = if row['_type'].blank?
31
- self
31
+ instance = row['_type'].blank? ? self : row['_type'].constantize
32
+ instance = if update
33
+ i = instance.find_by(update => row[update])
34
+ i || instance.new
32
35
  else
33
- row['_type'].constantize
34
- end.new
36
+ instance.new
37
+ end
35
38
 
36
39
  require 'superseeder/adapter'
37
40
  adapter = ::Superseeder::Adapter.new instance
38
41
 
42
+ save_relations = []
39
43
  # Set relations
40
44
  adapter.each_relation do |name, is_array, class_name|
41
45
  attrs = row.select{ |k, _| k =~ /\A#{name}_/ }
@@ -47,7 +51,9 @@ module Superseeder
47
51
  end
48
52
  vals.flatten!
49
53
  vals.compact!
54
+ vals = vals | instance.send(name)
50
55
  instance.send "#{name}=", vals
56
+ save_relations.concat vals if defined? Mongoid::Document && instance.kind_of?(Mongoid::Document) # Not really nice, TODO FIX through adapter
51
57
  else
52
58
  instance.send "#{name}=", class_name.find_by(attrs)
53
59
  end
@@ -64,7 +70,9 @@ module Superseeder
64
70
  end
65
71
 
66
72
  if instance.valid?
67
- instance.save
73
+ instance.save if instance.changed?
74
+ save_relations.uniq!
75
+ save_relations.each(&:save)
68
76
  else
69
77
  Rails.logger.debug "Skipped #{row} : #{instance.errors.full_messages}"
70
78
  end
@@ -1,3 +1,3 @@
1
1
  module Superseeder
2
- VERSION = '0.9.3'
2
+ VERSION = '0.9.4'
3
3
  end
@@ -17,6 +17,8 @@ class Parking
17
17
  include Mongoid::Document
18
18
 
19
19
  field :name, :type => String
20
+ field :size, :type => Integer
21
+
20
22
  has_many :cars
21
23
 
22
24
  validates :name, :presence => true, :uniqueness => true
@@ -1,7 +1,8 @@
1
1
  ActiveRecord::Schema.define do
2
2
 
3
3
  create_table :parkings do |t|
4
- t.string :name
4
+ t.string :name
5
+ t.integer :size
5
6
  end
6
7
 
7
8
  create_table :cars do |t|
@@ -1,5 +1,5 @@
1
- name,cars_name
2
- North,Mustang
3
- East,
4
- South,"Corvette,BMW"
5
- West,
1
+ name,cars_name,size
2
+ North,Mustang,50
3
+ East,,40
4
+ South,"Corvette,BMW",30
5
+ West,,20
@@ -1,5 +1,5 @@
1
- name
2
- North
3
- East
4
- South
5
- West
1
+ name,size
2
+ North,50
3
+ East,40
4
+ South,30
5
+ West,20