ingestor 0.1.1
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.
- data/.gitignore +21 -0
- data/Gemfile +18 -0
- data/Guardfile +11 -0
- data/LICENSE.txt +22 -0
- data/README.md +211 -0
- data/Rakefile +7 -0
- data/bin/ingest +73 -0
- data/examples/text_parsing.rb +56 -0
- data/examples/xml_parsing.rb +52 -0
- data/ingestor.gemspec +23 -0
- data/lib/ingestor.rb +37 -0
- data/lib/ingestor/dsl.rb +110 -0
- data/lib/ingestor/parser/base.rb +28 -0
- data/lib/ingestor/parser/csv.rb +8 -0
- data/lib/ingestor/parser/json.rb +8 -0
- data/lib/ingestor/parser/plain_text.rb +44 -0
- data/lib/ingestor/parser/xml.rb +37 -0
- data/lib/ingestor/proxy.rb +113 -0
- data/lib/ingestor/tasks.rb +15 -0
- data/lib/ingestor/version.rb +3 -0
- data/samples/animals.csv +7 -0
- data/samples/books.xml +32 -0
- data/samples/colors.json +30 -0
- data/samples/flags.txt +12 -0
- data/samples/people.json +26 -0
- data/spec/cassettes/remote-zipped-files.yml +186 -0
- data/spec/lib/ingestor/dsl_spec.rb +114 -0
- data/spec/lib/ingestor/parser/csv_spec.rb +5 -0
- data/spec/lib/ingestor/parser/json_spec.rb +5 -0
- data/spec/lib/ingestor/parser/plain_text_spec.rb +24 -0
- data/spec/lib/ingestor/parser/xml_spec.rb +25 -0
- data/spec/lib/ingestor/proxy_spec.rb +129 -0
- data/spec/lib/ingestor_spec.rb +19 -0
- data/spec/orm/active_record.rb +33 -0
- data/spec/orm/database.example.yml +15 -0
- data/spec/spec_helper.rb +21 -0
- metadata +139 -0
data/samples/books.xml
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<catalog>
|
3
|
+
<book id="bk101">
|
4
|
+
<author>Gambardella, Matthew</author>
|
5
|
+
<title>XML Developer's Guide</title>
|
6
|
+
<genre>Computer</genre>
|
7
|
+
<price>44.95</price>
|
8
|
+
<publish_date>2000-10-01</publish_date>
|
9
|
+
<description>An in-depth look at creating applications
|
10
|
+
with XML.</description>
|
11
|
+
</book>
|
12
|
+
<book id="bk102">
|
13
|
+
<author>Ralls, Kim</author>
|
14
|
+
<title>Midnight Rain</title>
|
15
|
+
<genre>Fantasy</genre>
|
16
|
+
<price>5.95</price>
|
17
|
+
<publish_date>2000-12-16</publish_date>
|
18
|
+
<description>A former architect battles corporate zombies,
|
19
|
+
an evil sorceress, and her own childhood to become queen
|
20
|
+
of the world.</description>
|
21
|
+
</book>
|
22
|
+
<book id="bk103">
|
23
|
+
<author>Corets, Eva</author>
|
24
|
+
<title>Maeve Ascendant</title>
|
25
|
+
<genre>Fantasy</genre>
|
26
|
+
<price>5.95</price>
|
27
|
+
<publish_date>2000-11-17</publish_date>
|
28
|
+
<description>After the collapse of a nanotechnology
|
29
|
+
society in England, the young survivors lay the
|
30
|
+
foundation for a new society.</description>
|
31
|
+
</book>
|
32
|
+
</catalog>
|
data/samples/colors.json
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
[
|
2
|
+
{
|
3
|
+
"color": "red",
|
4
|
+
"value": "#f00"
|
5
|
+
},
|
6
|
+
{
|
7
|
+
"color": "green",
|
8
|
+
"value": "#0f0"
|
9
|
+
},
|
10
|
+
{
|
11
|
+
"color": "blue",
|
12
|
+
"value": "#00f"
|
13
|
+
},
|
14
|
+
{
|
15
|
+
"color": "cyan",
|
16
|
+
"value": "#0ff"
|
17
|
+
},
|
18
|
+
{
|
19
|
+
"color": "magenta",
|
20
|
+
"value": "#f0f"
|
21
|
+
},
|
22
|
+
{
|
23
|
+
"color": "yellow",
|
24
|
+
"value": "#ff0"
|
25
|
+
},
|
26
|
+
{
|
27
|
+
"color": "black",
|
28
|
+
"value": "#000"
|
29
|
+
}
|
30
|
+
]
|
data/samples/flags.txt
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
Country|Colors|Count|Secrets
|
2
|
+
El Salvador|blue,white|2|great at hand stands
|
3
|
+
Finland|blue,white|2|secret inventors of the macarena
|
4
|
+
Ukraine|blue,yellow|2|break dancing masters
|
5
|
+
United States|red,white,blue|3|cheese burgers
|
6
|
+
Australia|red,white,blue|3|sunburn magic powers
|
7
|
+
Fiji|red,white,blue|3|scrumptius water
|
8
|
+
Norway|red,white,blue|3|dah its cold
|
9
|
+
Canada|red,white|2|eh its cold
|
10
|
+
Japan|red,white|2|gukkon
|
11
|
+
China|red,yellow|2|only first world when you're looking
|
12
|
+
Germany|red,yellow,black|3|fat steamy wieners
|
data/samples/people.json
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
{"people":
|
2
|
+
[
|
3
|
+
{
|
4
|
+
"firstName": "John",
|
5
|
+
"lastName": "Smith",
|
6
|
+
"age": 25,
|
7
|
+
"address": {
|
8
|
+
"streetAddress": "21 2nd Street",
|
9
|
+
"city": "New York",
|
10
|
+
"state": "NY",
|
11
|
+
"postalCode": 10021
|
12
|
+
}
|
13
|
+
},
|
14
|
+
{
|
15
|
+
"firstName": "John",
|
16
|
+
"lastName": "Smith",
|
17
|
+
"age": 25,
|
18
|
+
"address": {
|
19
|
+
"streetAddress": "21 2nd Street",
|
20
|
+
"city": "New York",
|
21
|
+
"state": "NY",
|
22
|
+
"postalCode": 10021
|
23
|
+
}
|
24
|
+
}
|
25
|
+
]
|
26
|
+
}
|
@@ -0,0 +1,186 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://www.ian.com/affiliatecenter/include/V2/ChainList.zip
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
accept:
|
11
|
+
- ! '*/*'
|
12
|
+
user-agent:
|
13
|
+
- Ruby
|
14
|
+
response:
|
15
|
+
status:
|
16
|
+
code: 200
|
17
|
+
message: OK
|
18
|
+
headers:
|
19
|
+
date:
|
20
|
+
- Fri, 04 Jan 2013 02:04:05 GMT
|
21
|
+
server:
|
22
|
+
- Apache/2.2.3 (CentOS)
|
23
|
+
set-cookie:
|
24
|
+
- TLTSID=043E0BF65613105671A98F190BA94A70; Path=/; Domain=.ian.com
|
25
|
+
- TLTUID=043E0BF65613105671A98F190BA94A70; Path=/; Domain=.ian.com; Expires=Fri,
|
26
|
+
04-01-2023 02:04:05 GMT
|
27
|
+
hostname:
|
28
|
+
- TWEB01
|
29
|
+
last-modified:
|
30
|
+
- Thu, 03 Jan 2013 04:15:09 GMT
|
31
|
+
accept-ranges:
|
32
|
+
- bytes
|
33
|
+
content-length:
|
34
|
+
- '6444'
|
35
|
+
content-type:
|
36
|
+
- application/zip
|
37
|
+
body:
|
38
|
+
encoding: ASCII-8BIT
|
39
|
+
string: !binary |-
|
40
|
+
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
|
183
|
+
AAAA2xgAAAAA
|
184
|
+
http_version: '1.1'
|
185
|
+
recorded_at: Fri, 04 Jan 2013 02:04:05 GMT
|
186
|
+
recorded_with: VCR 2.3.0
|
@@ -0,0 +1,114 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
describe Ingestor::Dsl do
|
3
|
+
before :each do
|
4
|
+
@dsl = Ingestor::Dsl.new
|
5
|
+
end
|
6
|
+
it 'should be able to set the file path' do
|
7
|
+
@dsl.file = "file.txt"
|
8
|
+
@dsl.instance_variable_get("@file").should == "file.txt"
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'should not expect a header by default' do
|
12
|
+
@dsl.options[:includes_header].should be(false)
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'should have a default working directory' do
|
16
|
+
@dsl.options[:working_directory].should eq('/tmp/ingestor')
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'should be able to specify a working directory' do
|
20
|
+
@dsl.working_directory '/tmp/other'
|
21
|
+
@dsl.options[:working_directory].should eq('/tmp/other')
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'should be able to set if a header line is included' do
|
25
|
+
@dsl.includes_header(true)
|
26
|
+
@dsl.options[:includes_header].should be(true)
|
27
|
+
@dsl.includes_header(false)
|
28
|
+
@dsl.options[:includes_header].should be(false)
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'should be able to mark a file as compressed' do
|
32
|
+
@dsl.compressed(true)
|
33
|
+
@dsl.options[:compressed].should be(true)
|
34
|
+
|
35
|
+
@dsl.compressed(false)
|
36
|
+
@dsl.options[:compressed].should be(false)
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'should be able to specify the parser' do
|
40
|
+
@dsl.parser( :plain_text )
|
41
|
+
@dsl.options[:parser].should == :plain_text
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'should be able to pass a block that finds or initializes the AR object' do
|
45
|
+
@dsl.finder {|values| }
|
46
|
+
@dsl.options[:finder].should be_kind_of(Proc)
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'should be able to override the record processor' do
|
50
|
+
@dsl.processor {|values,record| }
|
51
|
+
@dsl.options[:processor].should be_kind_of(Proc)
|
52
|
+
end
|
53
|
+
it 'should be able to set a before record processor block' do
|
54
|
+
@dsl.before {|values| }
|
55
|
+
@dsl.options[:before].should be_kind_of(Proc)
|
56
|
+
end
|
57
|
+
it 'should be able to set an after record processor block' do
|
58
|
+
@dsl.after {|record| }
|
59
|
+
@dsl.options[:after].should be_kind_of(Proc)
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'should raise an exception if the arity is incorrect for finder' do
|
63
|
+
lambda{
|
64
|
+
@dsl.finder{}
|
65
|
+
}.should raise_exception(Ingestor::Dsl::InvalidBlockSpecification)
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'should raise an exception if the arity is incorrect for processor' do
|
69
|
+
lambda{
|
70
|
+
@dsl.processor{}
|
71
|
+
}.should raise_exception(Ingestor::Dsl::InvalidBlockSpecification)
|
72
|
+
end
|
73
|
+
|
74
|
+
it 'should raise an exception if the arity is incorrect for before' do
|
75
|
+
lambda{
|
76
|
+
@dsl.before{}
|
77
|
+
}.should raise_exception(Ingestor::Dsl::InvalidBlockSpecification)
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'should raise an exception if the arity is incorrect for after' do
|
81
|
+
lambda{
|
82
|
+
@dsl.after{}
|
83
|
+
}.should raise_exception(Ingestor::Dsl::InvalidBlockSpecification)
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'should raise an exception if the arity is incorrect for map_attributes' do
|
87
|
+
lambda{
|
88
|
+
@dsl.map_attributes{}
|
89
|
+
}.should raise_exception(Ingestor::Dsl::InvalidBlockSpecification)
|
90
|
+
end
|
91
|
+
|
92
|
+
it 'should be able to map out columns' do
|
93
|
+
@dsl.map_attributes do |values|
|
94
|
+
{
|
95
|
+
:id => values[0],
|
96
|
+
:name => values[1],
|
97
|
+
:color => values[2]
|
98
|
+
}
|
99
|
+
end
|
100
|
+
@dsl.options[:map_attributes].call([1,'Hat','Blue'])[:name].should eq('Hat')
|
101
|
+
end
|
102
|
+
|
103
|
+
it 'should be able to construct an Ingestor::Proxy' do
|
104
|
+
@dsl.finder{|values| Country.new}
|
105
|
+
@dsl.map_attributes do |values|
|
106
|
+
{
|
107
|
+
:name => values[0],
|
108
|
+
:colors => values[1],
|
109
|
+
:count => values[2]
|
110
|
+
}
|
111
|
+
end
|
112
|
+
@dsl.build.should be_kind_of(Ingestor::Proxy)
|
113
|
+
end
|
114
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
describe Ingestor::Parser::PlainText do
|
3
|
+
describe '#delimiter' do
|
4
|
+
before do
|
5
|
+
@parser = Ingestor::Parser::PlainText.new(nil,nil)
|
6
|
+
end
|
7
|
+
|
8
|
+
it 'should allow the delimiter to be changed' do
|
9
|
+
@parser.options({
|
10
|
+
delimiter: ','
|
11
|
+
})
|
12
|
+
@parser.send(:process_line,"Chicken,Cats,Dogs").should eq ['Chicken', 'Cats', 'Dogs']
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'should be able to change the line processor' do
|
16
|
+
@parser.options({
|
17
|
+
line_processor: lambda{|line|
|
18
|
+
['Something','Else']
|
19
|
+
}
|
20
|
+
})
|
21
|
+
@parser.send(:process_line,"Blue,3&4").should eq ['Something','Else']
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|