ingestor 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|