mbdb 0.0.0 → 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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 42d66acac960d883c6e68f4e52b032801e10e182
4
- data.tar.gz: e9d8cd356bfde9185c58fcaf8fafb9ab8538f64b
3
+ metadata.gz: e1bc023d2d8a8de7af08a09b6982df4ca0b79937
4
+ data.tar.gz: 5da7771fbb0629838e4e40fad06c03b5049ff818
5
5
  SHA512:
6
- metadata.gz: bbbce8f198d7d3af4473aabd263e4f1ebe7b34173aeb13fbb4a768dd99b30f432213675b4472b4ae027917a6c28cecf6fc73d3c614d4c2388fc5c793950fcc4b
7
- data.tar.gz: ac60ddeafa1c8ffa64eee7708255857f0555cd7febfba226a9704d1e05be1fff2312716280b00b99b9121dd16612a46b80fec75b657471d660bcf52c5891961a
6
+ metadata.gz: 22b329e15a52c15820faee5126f362ebe0f472eaf3b34a1983de80f5a54066cfa3898b3f011b7ee13113777e6dca8dc370a321546f9ed3b655d9357efaec1647
7
+ data.tar.gz: aa67eef48ae8e5840f486700e5d9e6c2fce21272c2ff30878b9af58758f97c6b41e45f39272374b25bc14c00efe32e4db45023eee1cd3cbb79e5fe355b0e4723
data/Gemfile CHANGED
@@ -1,3 +1,11 @@
1
1
 
2
2
  source 'https://rubygems.org'
3
+
4
+ group(:development) do
5
+ if ENV['SIMPLECOV_PHPUNIT_LOAD_PATH']
6
+ # Load SimpleCov PHPUnit Formatter from a local path.
7
+ gem 'simplecov-phpunit', :path => ENV['SIMPLECOV_PHPUNIT_LOAD_PATH']
8
+ end
9
+ end
10
+
3
11
  gemspec
data/README.md CHANGED
@@ -13,7 +13,7 @@ The preferred method of installation is via RubyGems.org:
13
13
 
14
14
  or via `Gemfile`:
15
15
 
16
- gem 'mbdb', '~>0.0'
16
+ gem 'mbdb', '~>0.1'
17
17
 
18
18
  Use it in your sources:
19
19
 
data/bin/dev CHANGED
File without changes
@@ -1,2 +1,4 @@
1
1
 
2
2
  require 'mbdb/version'
3
+ require 'mbdb/mbdb'
4
+ require 'mbdb/record'
@@ -0,0 +1,145 @@
1
+
2
+ require 'pathname'
3
+
4
+ module TheFox
5
+ module MBDB
6
+
7
+ class MBDB
8
+
9
+ LOOP_MAX = 10000
10
+
11
+ attr_reader :file_path
12
+ attr_reader :records
13
+
14
+ def initialize(file_path = nil)
15
+ @file_path = file_path
16
+ @file_h = nil
17
+ @offset = 0
18
+ @buffer = ''
19
+ @records = Array.new
20
+
21
+ unless file_path.nil?
22
+ readx(file_path)
23
+ end
24
+ end
25
+
26
+ def readx(file_path = nil)
27
+ if file_path.nil?
28
+ file_path = @file_path
29
+ end
30
+
31
+ return false unless file_path.exist?
32
+
33
+ @file_h = File.open(file_path, 'rb')
34
+ @file_h.read(6) # header
35
+ @offset += 6
36
+
37
+ loops = 0
38
+ while read_buffer && loops < LOOP_MAX
39
+ loops += 1
40
+
41
+ domain = parse_string
42
+ path = parse_string
43
+
44
+ parse_string
45
+ parse_string
46
+ parse_string
47
+ parse_int16
48
+ parse_int32
49
+ parse_int32
50
+ parse_int32
51
+ parse_int32
52
+ parse_int32
53
+ parse_int32
54
+ parse_int32
55
+
56
+ file_size = parse_int64
57
+
58
+ parse_int8
59
+
60
+ property_count = parse_int8
61
+ property_count.times do |n|
62
+ read_buffer || break
63
+ parse_string
64
+
65
+ read_buffer || break
66
+ parse_string
67
+ end
68
+
69
+ record = Record.new
70
+ record.domain = domain
71
+ record.path = Pathname.new(path)
72
+ record.file_size = file_size
73
+
74
+ records << record
75
+ end
76
+ @file_h.close
77
+
78
+ if loops == LOOP_MAX
79
+ raise "Main loop has reached #{loops}"
80
+ end
81
+ end
82
+
83
+ private
84
+
85
+ def read_buffer
86
+ b_len = @buffer.length
87
+ if @file_h.eof?
88
+ b_len > 0
89
+ else
90
+ if b_len < 0xffff
91
+ @buffer << @file_h.read(0xffff)
92
+ end
93
+
94
+ true
95
+ end
96
+ end
97
+
98
+ def parse_int8
99
+ i = @buffer[0].unpack('C')
100
+ @buffer.slice!(0)
101
+ @offset += 1
102
+ i.shift.to_i
103
+ end
104
+
105
+ def parse_int16
106
+ i = @buffer[0, 2].unpack('n')
107
+ @buffer.slice!(0..1)
108
+ @offset += 2
109
+ i.shift.to_i
110
+ end
111
+
112
+ def parse_int32
113
+ i = @buffer[0, 4].unpack('N')
114
+ @buffer.slice!(0..3)
115
+ @offset += 4
116
+ i.shift.to_i
117
+ end
118
+
119
+ def parse_int64
120
+ higher, lower = @buffer[0, 8].unpack('N2').map{ |n| n.to_i }
121
+ i = (higher << 32) | lower
122
+
123
+ @buffer.slice!(0..7)
124
+ @offset += 8
125
+
126
+ i
127
+ end
128
+
129
+ def parse_string
130
+ len = parse_int16
131
+
132
+ if len == 0 || len == 0xffff
133
+ return ''
134
+ end
135
+
136
+ str = @buffer[0, len]
137
+ @buffer.slice!(0..(len - 1))
138
+
139
+ str
140
+ end
141
+
142
+ end
143
+
144
+ end
145
+ end
@@ -0,0 +1,43 @@
1
+
2
+ require 'pathname'
3
+ require 'digest/sha1'
4
+
5
+ module TheFox
6
+ module MBDB
7
+
8
+ class Record
9
+
10
+ attr_reader :domain
11
+ attr_accessor :path
12
+ attr_accessor :file_size
13
+
14
+ def initialize
15
+ @domain_name = ''
16
+ @domain = nil
17
+ @path = ''
18
+ @file_size = 0
19
+ end
20
+
21
+ def domain=(domain)
22
+ @domain_name = domain
23
+ domains = domain.split('-')
24
+ root_domain = domains.shift
25
+ @domain = Pathname.new(root_domain).join(*domains)
26
+ end
27
+
28
+ def src_file_name
29
+ Pathname.new(Digest::SHA1.hexdigest("#{@domain_name}-#{@path}"))
30
+ end
31
+
32
+ def is_file?
33
+ @file_size > 0
34
+ end
35
+
36
+ def to_s
37
+ "#{@domain}@#{@path}"
38
+ end
39
+
40
+ end
41
+
42
+ end
43
+ end
@@ -1,8 +1,8 @@
1
1
 
2
2
  module TheFox
3
3
  module MBDB
4
- VERSION = '0.0.0'
5
- DATE = '2016-11-08'
4
+ VERSION = '0.1.0'
5
+ DATE = '2016-11-12'
6
6
  HOMEPAGE = 'https://github.com/TheFox/mbdb.rb'
7
7
  end
8
8
  end
@@ -21,6 +21,8 @@ Gem::Specification.new do |spec|
21
21
  spec.require_paths = ['lib']
22
22
  spec.required_ruby_version = '>=2.1.0'
23
23
 
24
+ spec.add_development_dependency 'pry', '~>0.10'
25
+
24
26
  spec.add_development_dependency 'minitest', '~>5.9'
25
27
  spec.add_development_dependency 'simplecov', '~>0.12'
26
28
  spec.add_development_dependency 'simplecov-phpunit', '~>1.0'
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mbdb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christian Mayer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-11-08 00:00:00.000000000 Z
11
+ date: 2016-11-12 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: pry
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.10'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.10'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: minitest
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -69,9 +83,11 @@ files:
69
83
  - README.md
70
84
  - bin/dev
71
85
  - lib/mbdb.rb
86
+ - lib/mbdb/mbdb.rb
87
+ - lib/mbdb/record.rb
72
88
  - lib/mbdb/version.rb
73
89
  - mbdb.gemspec
74
- - mbdb.sublime-project
90
+ - mbdbrb.sublime-project
75
91
  homepage: https://github.com/TheFox/mbdb.rb
76
92
  licenses:
77
93
  - GPL-3.0