km-export-processor 0.1.0 → 0.2.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.
- checksums.yaml +4 -4
- data/bin/km-export-processor +1 -2
- data/lib/alias_parser.rb +2 -0
- data/lib/converters/json_to_json.rb +1 -0
- data/lib/km-export-processor.rb +1 -0
- data/lib/reimporter.rb +33 -8
- data/spec/features/alias_parser_spec.rb +38 -0
- data/spec/features/json_to_csv_spec.rb +36 -0
- data/spec/features/json_to_json_spec.rb +40 -0
- data/spec/features/reimporter_spec.rb +41 -0
- data/spec/spec_helper.rb +3 -0
- metadata +27 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0d3ac999d514d6a7934b57f20d9b0348cbf53511
|
4
|
+
data.tar.gz: ef204f4103e100e7be136c9ab076432e5c8652d2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 480ffa22ca733b1fc31fdb447a729d3bb3c6431e171c66f8c9d680153d81b849a4cea05a58a4e4e7b119861b72a381f8f65724f8c1ff03dafba472bdcd4b132c
|
7
|
+
data.tar.gz: 5c2d7b3705625808e4a70fbc9f254494beb6e750814548aa1eb371005d6c1f2e348c3d4b51b18bbe4cabee179733ee7f2363a1f70be0678c4689f854bd3417df
|
data/bin/km-export-processor
CHANGED
@@ -26,8 +26,7 @@ class CLI < Thor
|
|
26
26
|
def reimport(jsonfile, apikey)
|
27
27
|
puts "Sending data from #{jsonfile} to KISSmetrics product with key: #{apikey}"
|
28
28
|
reimporter = KMExport::Reimporter.new
|
29
|
-
|
30
|
-
reimporter.send_to_KM(file.read, apikey)
|
29
|
+
reimporter.send_to_KM(jsonfile, apikey)
|
31
30
|
end
|
32
31
|
end
|
33
32
|
|
data/lib/alias_parser.rb
CHANGED
data/lib/km-export-processor.rb
CHANGED
data/lib/reimporter.rb
CHANGED
@@ -1,16 +1,41 @@
|
|
1
|
+
class JSONQueue < Queue
|
2
|
+
def initialize(opts)
|
3
|
+
super()
|
4
|
+
@file = opts[:file]
|
5
|
+
@counter = opts[:counter]
|
6
|
+
end
|
7
|
+
|
8
|
+
def add_to_queue
|
9
|
+
json = JSON.parse(File.read(@file))
|
10
|
+
json.each do |line|
|
11
|
+
self << line
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
1
16
|
module KMExport
|
2
17
|
class Reimporter
|
3
18
|
def send_to_KM(json, key)
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
19
|
+
pool = 10
|
20
|
+
threads = []
|
21
|
+
queue = JSONQueue.new({file: json, counter: 0})
|
22
|
+
|
23
|
+
queue.add_to_queue
|
24
|
+
|
25
|
+
pool.times do
|
26
|
+
threads << Thread.new do
|
27
|
+
KMTS.init(key,
|
28
|
+
:use_cron => false,
|
29
|
+
:to_stderr => true)
|
30
|
+
until queue.empty?
|
31
|
+
work_unit = queue.pop(true) rescue nil
|
32
|
+
send_line_to_KM(work_unit)
|
33
|
+
end
|
34
|
+
end
|
12
35
|
end
|
13
36
|
|
37
|
+
threads.each { |t| t.join }
|
38
|
+
|
14
39
|
STDOUT.print('Reimportation process completed.')
|
15
40
|
end
|
16
41
|
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "alias_parser" do
|
4
|
+
before :all do
|
5
|
+
@aliasfilename = Time.now.to_i.to_s + "_test_alias.json"
|
6
|
+
testfile = File.open(@aliasfilename, "w+")
|
7
|
+
json = JSON.pretty_generate(
|
8
|
+
[
|
9
|
+
{_p2: "test", _p: "test1"},
|
10
|
+
{test2: "test2"},
|
11
|
+
{_p2: "test", _p: "test2"},
|
12
|
+
{test: "test"},
|
13
|
+
{_p2: "test", _p: "test3"},
|
14
|
+
{test3: "test3", test: "test3"}
|
15
|
+
]
|
16
|
+
)
|
17
|
+
testfile.write(json)
|
18
|
+
testfile.close
|
19
|
+
KMExport.alias_parser(@aliasfilename)
|
20
|
+
end
|
21
|
+
|
22
|
+
it "removes aliases from JSON file" do
|
23
|
+
file = File.open(@aliasfilename)
|
24
|
+
json = JSON.parse(file.read)
|
25
|
+
json.select { |row| row["_p2"] }.length.should eq 0
|
26
|
+
end
|
27
|
+
|
28
|
+
it "creates new JSON file with aliases" do
|
29
|
+
file = File.open(Dir["*aliases.json"].first)
|
30
|
+
json = JSON.parse(file.read)
|
31
|
+
json.length.should eq 3
|
32
|
+
end
|
33
|
+
|
34
|
+
after :all do
|
35
|
+
File.delete(@aliasfilename)
|
36
|
+
File.delete(Dir["*aliases.json"].first)
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "json_to_csv" do
|
4
|
+
before :all do
|
5
|
+
@testfilename = Time.now.to_i.to_s + "_test.json"
|
6
|
+
testfile = File.open(@testfilename, "w+")
|
7
|
+
json = JSON.pretty_generate(
|
8
|
+
[
|
9
|
+
{test: "test"},
|
10
|
+
{test2: "test2"},
|
11
|
+
{test3: "test3", test: "test3"},
|
12
|
+
{test: "test"},
|
13
|
+
{test2: "test2"},
|
14
|
+
{test3: "test3", test: "test3"}
|
15
|
+
]
|
16
|
+
)
|
17
|
+
testfile.write(json)
|
18
|
+
testfile.close
|
19
|
+
KMExport.json_to_csv(@testfilename)
|
20
|
+
@csv_files = Dir["*converter_result.csv"]
|
21
|
+
end
|
22
|
+
|
23
|
+
it "correctly converts JSON file to a CSV file" do
|
24
|
+
@csv_files.length == 1
|
25
|
+
end
|
26
|
+
|
27
|
+
it "uses the correct CSV format" do
|
28
|
+
csv = CSV.table(@csv_files.first)
|
29
|
+
csv.headers.length.should eq 3
|
30
|
+
end
|
31
|
+
|
32
|
+
after :all do
|
33
|
+
File.delete(@testfilename)
|
34
|
+
File.delete(@csv_files.first)
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "json_to_json" do
|
4
|
+
before :all do
|
5
|
+
@testfilename1 = Time.now.to_i.to_s + "_test.json"
|
6
|
+
@testfilename2 = Time.now.to_i.to_s + "_test2.json"
|
7
|
+
@testfilename3 = Time.now.to_i.to_s + "_test3.json"
|
8
|
+
testfile = File.open(@testfilename1, "w+")
|
9
|
+
testfile2 = File.open(@testfilename2, "w+")
|
10
|
+
testfile3 = File.open(@testfilename3, "w+")
|
11
|
+
json = JSON.generate({test: "test"})
|
12
|
+
json2 = JSON.generate({test2: "test"})
|
13
|
+
json3 = JSON.generate({test3: "test"})
|
14
|
+
testfile.write(json)
|
15
|
+
testfile2.write(json2)
|
16
|
+
testfile3.write(json3)
|
17
|
+
testfile.close
|
18
|
+
testfile2.close
|
19
|
+
testfile3.close
|
20
|
+
KMExport.json_to_json
|
21
|
+
@json_files = Dir["*result.json"]
|
22
|
+
end
|
23
|
+
|
24
|
+
it "creates one JSON file from many" do
|
25
|
+
@json_files.length.should eq 1
|
26
|
+
end
|
27
|
+
|
28
|
+
it "creates a JSON file that contains the combined data" do
|
29
|
+
file = File.open(@json_files.first)
|
30
|
+
json = JSON.parse(file.read)
|
31
|
+
json.include?({"test" => "test"}) && json.include?({"test3" => "test"})
|
32
|
+
end
|
33
|
+
|
34
|
+
after :all do
|
35
|
+
File.delete(@testfilename1)
|
36
|
+
File.delete(@testfilename2)
|
37
|
+
File.delete(@testfilename3)
|
38
|
+
File.delete(@json_files.first)
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "reimporter" do
|
4
|
+
before do
|
5
|
+
@reimporter = KMExport::Reimporter.new
|
6
|
+
@json = JSON.pretty_generate(
|
7
|
+
[
|
8
|
+
{returning: "1", _p: "testuser", _t: 1384294380 },
|
9
|
+
{referrer: "Direct", _p: "testuser", _t: 1384275438, _n: "visited site" },
|
10
|
+
{_p2: "testuser2", _p: "testuser", _t: 1387799043 },
|
11
|
+
{returning: "1", _p: "testuser1", _t: 1384294380 },
|
12
|
+
{referrer: "Direct", _p: "testuser1", _t: 1384275438, _n: "visited site" },
|
13
|
+
{_p2: "testuser2", _p: "testuser1", _t: 1387799043 }
|
14
|
+
]
|
15
|
+
)
|
16
|
+
|
17
|
+
@property_url = "http://trk.kissmetrics.com/s"
|
18
|
+
@event_url = "http://trk.kissmetrics.com/e"
|
19
|
+
@alias_url = "http://trk.kissmetrics.com/a"
|
20
|
+
|
21
|
+
WebMock.disable_net_connect!
|
22
|
+
|
23
|
+
stub_request(:get, @property_url).with(:query => hash_including({"returning" => "1"}))
|
24
|
+
stub_request(:get, @event_url).with(:query => hash_including({"_n" => "visited site"}))
|
25
|
+
stub_request(:get, @alias_url).with(:query => hash_including({"_n" => "testuser2"}))
|
26
|
+
|
27
|
+
@reimporter.send_to_KM(@json, "1234")
|
28
|
+
end
|
29
|
+
|
30
|
+
it "succesfully sends a request for an event" do
|
31
|
+
a_request(:get, @event_url).with(:query => hash_including({"_n" => "visited site"})).should have_been_made.times(2)
|
32
|
+
end
|
33
|
+
|
34
|
+
it "succesfully sends a request for a property" do
|
35
|
+
a_request(:get, @property_url).with(:query => hash_including({"returning" => "1"})).should have_been_made.times(2)
|
36
|
+
end
|
37
|
+
|
38
|
+
it "succesfully sends a request for an alias" do
|
39
|
+
a_request(:get, @alias_url).with(:query => hash_including({"_n" => "testuser2"})).should have_been_made.times(2)
|
40
|
+
end
|
41
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: km-export-processor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Clay Whitley
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-03-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: kmts
|
@@ -80,6 +80,20 @@ dependencies:
|
|
80
80
|
- - ~>
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '10.1'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: webmock
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ~>
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '1.16'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ~>
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '1.16'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
98
|
name: yard
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -121,6 +135,11 @@ files:
|
|
121
135
|
- lib/converters/json_to_json.rb
|
122
136
|
- lib/km-export-processor.rb
|
123
137
|
- lib/reimporter.rb
|
138
|
+
- spec/features/alias_parser_spec.rb
|
139
|
+
- spec/features/json_to_csv_spec.rb
|
140
|
+
- spec/features/json_to_json_spec.rb
|
141
|
+
- spec/features/reimporter_spec.rb
|
142
|
+
- spec/spec_helper.rb
|
124
143
|
- bin/km-export-processor
|
125
144
|
homepage: https://github.com/kissmetrics/km-export-processor
|
126
145
|
licenses: []
|
@@ -145,5 +164,10 @@ rubygems_version: 2.0.3
|
|
145
164
|
signing_key:
|
146
165
|
specification_version: 4
|
147
166
|
summary: A gem for processing KM exports
|
148
|
-
test_files:
|
167
|
+
test_files:
|
168
|
+
- spec/features/alias_parser_spec.rb
|
169
|
+
- spec/features/json_to_csv_spec.rb
|
170
|
+
- spec/features/json_to_json_spec.rb
|
171
|
+
- spec/features/reimporter_spec.rb
|
172
|
+
- spec/spec_helper.rb
|
149
173
|
has_rdoc:
|