kismet-gpsxml 0.0.1 → 0.1.0

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: 78680bef3cc7620904daf46d7631c56d2cb54edf
4
- data.tar.gz: 612f54b0375cfbf43dfa19499f356f7c2b58a344
3
+ metadata.gz: 082909a1892fe7eb5624537ecf61a7a6ffbc5447
4
+ data.tar.gz: 6a49b8666fb2c6e551f449c68790321095256c2b
5
5
  SHA512:
6
- metadata.gz: 2a0d063ddaee9b21273c24b4bc42324909fa61faccc73dc6f2f751529f24841346297ead614c53251c6dab6e66330b1e5fe2a3841f33233455825d2b42f659c2
7
- data.tar.gz: db04db1be38f2d66b65923f5f4704539534d7766fe638d472985f5fd8f3fe871070e6c2f7c15d558cdc599b9ebb317dc865db9a138f41e9ce7b8f0855919ab43
6
+ metadata.gz: 8813e43976f20d93e3174a10e666763ca7f9fd76cb77421b5943ae3911e0997e925eed742dcc93035bd2ca48716212c3b7fc81f5604d591a6f3743615938f1f6
7
+ data.tar.gz: f11f2600b63db3db5bb7ca7abc78efd1384e54a330f9bca28175c05f45f31a58baef1293781d96681793a332eff82eee0dad75a5150b737aaa2a4981b7577bad
data/.travis.yml ADDED
@@ -0,0 +1,6 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.0.0
4
+ - 2.1.2
5
+ - jruby-19mode # JRuby in 1.9 mode
6
+ - rbx-2.2.10
data/Gemfile CHANGED
@@ -3,9 +3,9 @@ source "http://rubygems.org"
3
3
  gem "nokogiri", "~> 1.6.3.0"
4
4
 
5
5
  group :development do
6
- gem "shoulda", ">= 0"
7
6
  gem "rdoc", "~> 3.12"
8
7
  gem "bundler", "~> 1.0"
9
8
  gem "jeweler", "~> 2.0.1"
10
9
  gem "simplecov", ">= 0"
10
+ gem "minitest-spec-expect", "~> 2.0.0"
11
11
  end
@@ -1,4 +1,7 @@
1
- = kismet-gpsxml
1
+ kismet-gpsxml
2
+ =============
3
+
4
+ [![Travis-CI status](http://img.shields.io/travis/pittmesh/kismet-gpsxml.svg)](https://travis-ci.org/pittmesh/kismet-gpsxml/)
2
5
 
3
6
  This gem enables users to model Kismet's gpsxml log format in Ruby.
4
7
 
@@ -6,7 +9,22 @@ It provides a series of helper executables for doing things such as extracting
6
9
  the bssid and points, and counting the number of bssids within a certain
7
10
  vicinity.
8
11
 
9
- == Contributing to kismet-gpsxml2csv
12
+ Installing
13
+ ----------
14
+
15
+ Simply do:
16
+
17
+ gem install kismet-gpsxml
18
+
19
+ or throw this into your `Gemfile`:
20
+
21
+ gem "kismet-gpsxml", "~> 0.0.1"
22
+
23
+ Note that kismet-gpsxml is not yet a 1.0.0 release and may change wildly between
24
+ releases. It is wise to lock to a version.
25
+
26
+ Contributing to kismet-gpsxml
27
+ -----------------------------
10
28
 
11
29
  * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.
12
30
  * Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it.
@@ -16,7 +34,8 @@ vicinity.
16
34
  * Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
17
35
  * Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
18
36
 
19
- == Copyright
37
+ Copyright
38
+ ---------
20
39
 
21
40
  Copyright (c) 2014 Meta Mesh, LLC. See LICENSE.txt for further details.
22
41
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.1
1
+ 0.1.0
data/bin/gpsxml2csv CHANGED
@@ -1,26 +1,21 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require 'nokogiri'
4
- require 'set'
5
- ELEM = Nokogiri::XML::Reader::TYPE_ELEMENT
3
+ require './lib/kismet-gpsxml'
6
4
 
7
- $stderr.puts "Usage: #{__FILE__} logfile.gpsxml [rounding-level]\nDefault rounding-level is 6 decimal places.";exit 1 unless ARGV[0]
5
+ DEFAULT_ROUNDING = 4
8
6
 
9
- file = ARGV[0]
10
- rounding = ARGV[1] ? ARGV[1].to_i : 6
7
+ unless ARGV[0]
8
+ $stderr.puts "Usage: #{__FILE__} logfile.gpsxml [rounding-level]\nDefault rounding-level is #{DEFAULT_ROUNDING} decimal places."
9
+ exit 1
10
+ end
11
11
 
12
- reader = Nokogiri::XML::Reader.from_io File.open(file)
12
+ file = ARGV[0]
13
+ rounding = ARGV[1] ? ARGV[1].to_i : DEFAULT_ROUNDING
13
14
 
14
- points = {}
15
+ reader = Kismet::GPSXML::Reader.from_io File.open(file)
16
+ reader.rounding = rounding
15
17
 
16
- reader.each do |node|
17
- next unless node.name == "gps-point" && node.node_type == ELEM
18
- lat = node.attribute("lat").to_f.round(rounding)
19
- long = node.attribute("lon").to_f.round(rounding)
20
- key = [lat,long].join(",")
21
- points[key] = Set.new if points[key].nil?
22
- points[key].add node.attribute("bssid")
23
- end
18
+ points = reader.points
24
19
 
25
20
  points.each do |point,set|
26
21
  puts [point, set.size].join(",")
@@ -2,36 +2,37 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: kismet-gpsxml 0.0.1 ruby lib
5
+ # stub: kismet-gpsxml 0.1.0 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "kismet-gpsxml"
9
- s.version = "0.0.1"
9
+ s.version = "0.1.0"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib"]
13
13
  s.authors = ["Colin Dean"]
14
- s.date = "2014-08-05"
14
+ s.date = "2014-08-17"
15
15
  s.description = "A quick solution to model Kismet-generated gpsxml log files and output to CSV"
16
16
  s.email = "colin.dean@metamesh.org"
17
17
  s.executables = ["gpsxml2csv"]
18
18
  s.extra_rdoc_files = [
19
19
  "LICENSE.txt",
20
- "README.rdoc"
20
+ "README.md"
21
21
  ]
22
22
  s.files = [
23
23
  ".document",
24
+ ".travis.yml",
24
25
  "Gemfile",
25
- "Gemfile.lock",
26
26
  "LICENSE.txt",
27
- "README.rdoc",
27
+ "README.md",
28
28
  "Rakefile",
29
29
  "VERSION",
30
30
  "bin/gpsxml2csv",
31
31
  "kismet-gpsxml.gemspec",
32
- "lib/kismet-gpsxml2csv.rb",
32
+ "lib/kismet-gpsxml.rb",
33
33
  "test/helper.rb",
34
- "test/test_kismet-gpsxml2csv.rb"
34
+ "test/test.xml",
35
+ "test/test_kismet-gpsxml.rb"
35
36
  ]
36
37
  s.homepage = "http://github.com/pittmesh/kismet-gpsxml"
37
38
  s.licenses = ["MIT"]
@@ -43,26 +44,26 @@ Gem::Specification.new do |s|
43
44
 
44
45
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
45
46
  s.add_runtime_dependency(%q<nokogiri>, ["~> 1.6.3.0"])
46
- s.add_development_dependency(%q<shoulda>, [">= 0"])
47
47
  s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
48
48
  s.add_development_dependency(%q<bundler>, ["~> 1.0"])
49
49
  s.add_development_dependency(%q<jeweler>, ["~> 2.0.1"])
50
50
  s.add_development_dependency(%q<simplecov>, [">= 0"])
51
+ s.add_development_dependency(%q<minitest-spec-expect>, ["~> 2.0.0"])
51
52
  else
52
53
  s.add_dependency(%q<nokogiri>, ["~> 1.6.3.0"])
53
- s.add_dependency(%q<shoulda>, [">= 0"])
54
54
  s.add_dependency(%q<rdoc>, ["~> 3.12"])
55
55
  s.add_dependency(%q<bundler>, ["~> 1.0"])
56
56
  s.add_dependency(%q<jeweler>, ["~> 2.0.1"])
57
57
  s.add_dependency(%q<simplecov>, [">= 0"])
58
+ s.add_dependency(%q<minitest-spec-expect>, ["~> 2.0.0"])
58
59
  end
59
60
  else
60
61
  s.add_dependency(%q<nokogiri>, ["~> 1.6.3.0"])
61
- s.add_dependency(%q<shoulda>, [">= 0"])
62
62
  s.add_dependency(%q<rdoc>, ["~> 3.12"])
63
63
  s.add_dependency(%q<bundler>, ["~> 1.0"])
64
64
  s.add_dependency(%q<jeweler>, ["~> 2.0.1"])
65
65
  s.add_dependency(%q<simplecov>, [">= 0"])
66
+ s.add_dependency(%q<minitest-spec-expect>, ["~> 2.0.0"])
66
67
  end
67
68
  end
68
69
 
@@ -0,0 +1,51 @@
1
+ require 'nokogiri'
2
+ require 'set'
3
+
4
+ module Kismet
5
+ module GPSXML
6
+ end
7
+ end
8
+
9
+ class Kismet::GPSXML::Reader
10
+
11
+ private_class_method :new
12
+
13
+ attr_reader :reader
14
+ attr_accessor :rounding
15
+
16
+ def self.from_io io
17
+ new Nokogiri::XML::Reader.from_io(io)
18
+ end
19
+
20
+ def initialize xml_reader
21
+ @reader = xml_reader
22
+ @rounding = 4
23
+ end
24
+
25
+ def points
26
+ points = {}
27
+ reader.each do |node|
28
+ next unless interesting_node? node
29
+ point = point_info node
30
+ lat, lon, bssid = point.values
31
+ key = [lat,lon].join(",")
32
+ points[key] = Set.new if points[key].nil?
33
+ points[key].add bssid
34
+ end
35
+ points
36
+ end
37
+
38
+ private
39
+
40
+ def interesting_node? node
41
+ node.name == "gps-point" &&
42
+ node.node_type == Nokogiri::XML::Reader::TYPE_ELEMENT &&
43
+ node.attribute("bssid") != "00:00:00:00:00:00"
44
+ end
45
+
46
+ def point_info node
47
+ {lat: node.attribute("lat").to_f.round(rounding),
48
+ lon: node.attribute("lon").to_f.round(rounding),
49
+ bssid: node.attribute("bssid")}
50
+ end
51
+ end
data/test/helper.rb CHANGED
@@ -8,7 +8,7 @@ end
8
8
 
9
9
  SimpleCov.configure do
10
10
  clean_filters
11
- load_adapter 'test_frameworks'
11
+ load_profile 'test_frameworks'
12
12
  end
13
13
 
14
14
  ENV["COVERAGE"] && SimpleCov.start do
@@ -23,12 +23,14 @@ rescue Bundler::BundlerError => e
23
23
  $stderr.puts "Run `bundle install` to install missing gems"
24
24
  exit e.status_code
25
25
  end
26
- require 'test/unit'
27
- require 'shoulda'
26
+ require 'minitest/spec'
27
+ require 'minitest/spec/expect'
28
+ require 'minitest/autorun'
28
29
 
29
30
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
30
31
  $LOAD_PATH.unshift(File.dirname(__FILE__))
31
- require 'kismet-gpsxml2csv'
32
+ require 'kismet-gpsxml'
32
33
 
33
- class Test::Unit::TestCase
34
+ def test_xml_location
35
+ File.join [File.dirname(__FILE__), "test.xml"]
34
36
  end
data/test/test.xml ADDED
@@ -0,0 +1,13 @@
1
+ <?xml version="1.0" encoding="ISO-8859-1"?>
2
+ <!DOCTYPE gps-run SYSTEM "http://kismetwireless.net/kismet-gps-2.9.1.dtd">
3
+
4
+ <gps-run gps-version="5" start-time="Sun Jun 29 16:27:04 2014">
5
+
6
+ <network-file>Kismet-20140629-16-27-04-1.netxml</network-file>
7
+
8
+ <gps-point bssid="54:BE:F7:99:89:78" source="54:BE:F7:99:89:78" time-sec="1404073624" time-usec="698754" lat="40.429444" lon="-79.970444" spd="0.185000" heading="309.760010" fix="3" alt="223.399994" signal_dbm="-79" noise_dbm="0"/>
9
+ <gps-point bssid="A0:21:B7:74:EF:0B" source="A0:21:B7:74:EF:0B" time-sec="1404073624" time-usec="705437" lat="40.429555" lon="-79.970555" spd="0.185000" heading="309.760010" fix="3" alt="223.399994" signal_dbm="-72" noise_dbm="0"/>
10
+ <gps-point bssid="74:BF:33:11:BB:AA" source="74:BF:33:11:BB:AA" time-sec="1404073624" time-usec="698754" lat="40.429499" lon="-79.970999" spd="0.185000" heading="309.760010" fix="3" alt="223.399994" signal_dbm="-79" noise_dbm="0"/>
11
+ <gps-point bssid="00:06:B1:22:51:F9" source="00:06:B1:22:51:F9" time-sec="1404073624" time-usec="734943" lat="40.430000" lon="-79.980000" spd="0.185000" heading="309.760010" fix="3" alt="223.399994" signal_dbm="-83" noise_dbm="0"/>
12
+ <gps-point bssid="00:00:00:00:00:00" source="00:00:00:00:00:00" time-sec="1404073624" time-usec="734943" lat="40.430000" lon="-79.980000" spd="0.185000" heading="309.760010" fix="3" alt="223.399994" signal_dbm="-83" noise_dbm="0"/>
13
+ </gps-run>
@@ -0,0 +1,43 @@
1
+ require 'helper'
2
+
3
+ describe Kismet::GPSXML::Reader do
4
+ subject { Kismet::GPSXML::Reader }
5
+
6
+ describe "Expected methods" do
7
+ it "responds to from_io" do
8
+ subject.must_respond_to :from_io
9
+ end
10
+
11
+ it "responds to points" do
12
+ subject.public_instance_methods.must_include :points
13
+ # subject.must_respond_to :points # this doesn't work on classes, just instances
14
+ end
15
+
16
+ it "cannot be initialized directly" do
17
+ expect{ subject.new StringIO.new }.to_raise NoMethodError
18
+ end
19
+ end
20
+
21
+ describe "IO operations" do
22
+ let(:text_xml_io) { File.open test_xml_location }
23
+
24
+ before do
25
+ text_xml_io.rewind
26
+ @reader = subject.from_io text_xml_io
27
+ end
28
+
29
+ it "retrieves points" do
30
+ @reader.points.wont_be_empty
31
+ end
32
+
33
+ it "retrieves the expected number of points" do
34
+ @reader.points.size.must_equal 4 # one should be filtered out
35
+ end
36
+
37
+ it "filters bssid = 00:00:00:00:00:00" do
38
+ points_with_bad_bssid = @reader.points.select{|position,bssid| bssid == '00:00:00:00:00:00'}
39
+ points_with_bad_bssid.must_be_empty
40
+ end
41
+
42
+ end
43
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kismet-gpsxml
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Colin Dean
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-05 00:00:00.000000000 Z
11
+ date: 2014-08-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -24,20 +24,6 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: 1.6.3.0
27
- - !ruby/object:Gem::Dependency
28
- name: shoulda
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: rdoc
43
29
  requirement: !ruby/object:Gem::Requirement
@@ -94,6 +80,20 @@ dependencies:
94
80
  - - ">="
95
81
  - !ruby/object:Gem::Version
96
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: minitest-spec-expect
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 2.0.0
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 2.0.0
97
97
  description: A quick solution to model Kismet-generated gpsxml log files and output
98
98
  to CSV
99
99
  email: colin.dean@metamesh.org
@@ -102,20 +102,21 @@ executables:
102
102
  extensions: []
103
103
  extra_rdoc_files:
104
104
  - LICENSE.txt
105
- - README.rdoc
105
+ - README.md
106
106
  files:
107
107
  - ".document"
108
+ - ".travis.yml"
108
109
  - Gemfile
109
- - Gemfile.lock
110
110
  - LICENSE.txt
111
- - README.rdoc
111
+ - README.md
112
112
  - Rakefile
113
113
  - VERSION
114
114
  - bin/gpsxml2csv
115
115
  - kismet-gpsxml.gemspec
116
- - lib/kismet-gpsxml2csv.rb
116
+ - lib/kismet-gpsxml.rb
117
117
  - test/helper.rb
118
- - test/test_kismet-gpsxml2csv.rb
118
+ - test/test.xml
119
+ - test/test_kismet-gpsxml.rb
119
120
  homepage: http://github.com/pittmesh/kismet-gpsxml
120
121
  licenses:
121
122
  - MIT
data/Gemfile.lock DELETED
@@ -1,81 +0,0 @@
1
- GEM
2
- remote: http://rubygems.org/
3
- specs:
4
- activesupport (4.1.4)
5
- i18n (~> 0.6, >= 0.6.9)
6
- json (~> 1.7, >= 1.7.7)
7
- minitest (~> 5.1)
8
- thread_safe (~> 0.1)
9
- tzinfo (~> 1.1)
10
- addressable (2.3.6)
11
- builder (3.2.2)
12
- descendants_tracker (0.0.4)
13
- thread_safe (~> 0.3, >= 0.3.1)
14
- docile (1.1.5)
15
- faraday (0.9.0)
16
- multipart-post (>= 1.2, < 3)
17
- git (1.2.8)
18
- github_api (0.12.0)
19
- addressable (~> 2.3)
20
- descendants_tracker (~> 0.0.4)
21
- faraday (~> 0.8, < 0.10)
22
- hashie (>= 3.2)
23
- multi_json (>= 1.7.5, < 2.0)
24
- nokogiri (~> 1.6.3)
25
- oauth2
26
- hashie (3.2.0)
27
- highline (1.6.21)
28
- i18n (0.6.11)
29
- jeweler (2.0.1)
30
- builder
31
- bundler (>= 1.0)
32
- git (>= 1.2.5)
33
- github_api
34
- highline (>= 1.6.15)
35
- nokogiri (>= 1.5.10)
36
- rake
37
- rdoc
38
- json (1.8.1)
39
- jwt (1.0.0)
40
- mini_portile (0.6.0)
41
- minitest (5.4.0)
42
- multi_json (1.10.1)
43
- multi_xml (0.5.5)
44
- multipart-post (2.0.0)
45
- nokogiri (1.6.3.1)
46
- mini_portile (= 0.6.0)
47
- oauth2 (1.0.0)
48
- faraday (>= 0.8, < 0.10)
49
- jwt (~> 1.0)
50
- multi_json (~> 1.3)
51
- multi_xml (~> 0.5)
52
- rack (~> 1.2)
53
- rack (1.5.2)
54
- rake (10.3.2)
55
- rdoc (3.12.2)
56
- json (~> 1.4)
57
- shoulda (3.5.0)
58
- shoulda-context (~> 1.0, >= 1.0.1)
59
- shoulda-matchers (>= 1.4.1, < 3.0)
60
- shoulda-context (1.2.1)
61
- shoulda-matchers (2.6.2)
62
- activesupport (>= 3.0.0)
63
- simplecov (0.9.0)
64
- docile (~> 1.1.0)
65
- multi_json
66
- simplecov-html (~> 0.8.0)
67
- simplecov-html (0.8.0)
68
- thread_safe (0.3.4)
69
- tzinfo (1.2.1)
70
- thread_safe (~> 0.1)
71
-
72
- PLATFORMS
73
- ruby
74
-
75
- DEPENDENCIES
76
- bundler (~> 1.0)
77
- jeweler (~> 2.0.1)
78
- nokogiri (~> 1.6.3.0)
79
- rdoc (~> 3.12)
80
- shoulda
81
- simplecov
File without changes
@@ -1,7 +0,0 @@
1
- require 'helper'
2
-
3
- class TestKismetGpsxml2csv < Test::Unit::TestCase
4
- should "probably rename this file and start testing for real" do
5
- flunk "hey buddy, you should probably rename this file and start testing for real"
6
- end
7
- end