superseeder 0.9.3 → 0.9.4

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