assimilate 0.0.5 → 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.
@@ -132,20 +132,23 @@ class Assimilate::Batch
132
132
  end
133
133
 
134
134
  def apply_updates
135
+ marker = @catalog.config[:update_marker]
135
136
  @changes.each do |key, diffs|
136
137
  @catalog.catalog.update(
137
138
  {
138
139
  @domainkey => domain,
139
140
  idfield => key
140
141
  },
141
- {"$set" => diffs}
142
+ {"$set" => diffs.merge(marker => datestamp)}
142
143
  )
143
144
  end
144
145
  end
145
146
 
146
147
  def decorate(records)
148
+ marker = @catalog.config[:insertion_marker]
147
149
  records.map do |r|
148
150
  r[@domainkey] = @domain
151
+ r[marker] = datestamp
149
152
  r.to_hash
150
153
  end
151
154
  end
@@ -33,10 +33,10 @@ class Assimilate::Catalog
33
33
 
34
34
  def check_config
35
35
  config.symbolize_keys!
36
- [:db, :catalog, :batch, :domain, :deletion_marker].each do |key|
36
+ [:db, :catalog, :batch, :domain, :deletion_marker, :insertion_marker, :update_marker].each do |key|
37
37
  raise Assimilate::InvalidConfiguration, "missing required parameter: #{key}" unless config[key]
38
38
  end
39
- [:domain, :deletion_marker].each do |key|
39
+ [:domain, :deletion_marker, :insertion_marker, :update_marker].each do |key|
40
40
  # enforce leading underscore on internal attributes
41
41
  config[key] = "_#{config[key]}" unless config[key] =~ /^_/
42
42
  end
@@ -51,8 +51,12 @@ class Assimilate::Catalog
51
51
  end
52
52
 
53
53
  def where(params)
54
- record = @catalog.find(params).first
55
- record && record.select {|k,v| k !~ /^_/}
54
+ records = @catalog.find(params).to_a #.map {|rec| rec.select {|k,v| k !~ /^_/}}
55
+ if records.count == 1
56
+ records.first
57
+ else
58
+ records
59
+ end
56
60
  end
57
61
 
58
62
  def active_count
@@ -1,3 +1,3 @@
1
1
  module Assimilate
2
- VERSION = "0.0.5"
2
+ VERSION = "0.1.0"
3
3
  end
data/spec/data/test.yml CHANGED
@@ -4,3 +4,5 @@ catalog: forefathers
4
4
  batch: files
5
5
  domain: resource
6
6
  deletion_marker: dt_removed
7
+ insertion_marker: first_seen
8
+ update_marker: last_updated
@@ -45,8 +45,8 @@ describe "importing file" do
45
45
 
46
46
  it "should load the records verbatim" do
47
47
  @catalog.catalog.count.should == 6
48
- @catalog.where('_resource' => 'testdata', 'ID' => '3').should ==
49
- {'ID' => '3', 'name' => 'Benjamin Franklin', 'title' => 'Sage', 'spouse' => 'Deborah'}
48
+ franklin = @catalog.where('_resource' => 'testdata', 'ID' => '3')
49
+ franklin.keys.sort.should == ['ID', 'name', 'title', 'spouse', '_id', '_resource', '_first_seen'].sort
50
50
  end
51
51
 
52
52
  it "should refuse to do a duplicate import" do
@@ -102,6 +102,7 @@ describe "importing file" do
102
102
  it "should handle deleted attributes" do
103
103
  franklin = @catalog.where('ID' => '3')
104
104
  franklin['spouse'].should be_nil
105
+ franklin['_last_updated'].should == '345'
105
106
  end
106
107
  end
107
108
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: assimilate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-05-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: mongo
16
- requirement: &2157608660 !ruby/object:Gem::Requirement
16
+ requirement: &2157622380 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 1.6.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2157608660
24
+ version_requirements: *2157622380
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: bson_ext
27
- requirement: &2157607760 !ruby/object:Gem::Requirement
27
+ requirement: &2157620560 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 1.6.0
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *2157607760
35
+ version_requirements: *2157620560
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: activesupport
38
- requirement: &2157607080 !ruby/object:Gem::Requirement
38
+ requirement: &2157620020 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 3.2.0
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *2157607080
46
+ version_requirements: *2157620020
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rspec
49
- requirement: &2157606260 !ruby/object:Gem::Requirement
49
+ requirement: &2157619060 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 2.9.0
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *2157606260
57
+ version_requirements: *2157619060
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: guard-rspec
60
- requirement: &2157605600 !ruby/object:Gem::Requirement
60
+ requirement: &2157618020 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: 0.7.0
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *2157605600
68
+ version_requirements: *2157618020
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: ruby_gntp
71
- requirement: &2157603980 !ruby/object:Gem::Requirement
71
+ requirement: &2157616740 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ~>
@@ -76,7 +76,7 @@ dependencies:
76
76
  version: 0.3.4
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *2157603980
79
+ version_requirements: *2157616740
80
80
  description: Ingest updates from CSV and apply to set of hashes
81
81
  email:
82
82
  - jmay@pobox.com