pikelet 1.0.0 → 1.0.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/.travis.yml +1 -1
- data/lib/pikelet/file_definition.rb +22 -8
- data/lib/pikelet/record_definition.rb +4 -0
- data/lib/pikelet/version.rb +1 -1
- data/pikelet.gemspec +2 -1
- data/spec/pikelet/record_definition_spec.rb +21 -0
- data/spec/pikelet_spec.rb +23 -0
- data/spec/spec_helper.rb +2 -0
- metadata +19 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 49ef5854cd526cdc7bd4491974e5ae7dcb013582
|
4
|
+
data.tar.gz: 52b908b3bee6e565b53b5e0b17b9c2723af24a42
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c5e64237c90b7eeea7e8c934df11f195948d1142c307951345f4454c7a9a6cee7e35a18962e518a860ef02eae128066a8f9c159f0960917f081fe5c383ccb8fc
|
7
|
+
data.tar.gz: 2c92d249c1e3fb2e12de71d91fdabf809af6e2510ac95a90a024fd0e54d96a5e25fa23752754ec97fe00e1a7feeab8dd4e06b3acced5c2f419dbaa5bf8ac9e5f
|
data/.travis.yml
CHANGED
@@ -16,15 +16,19 @@ module Pikelet
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def parse(data, &block)
|
19
|
+
parse_records(data, method: :parse, &block)
|
20
|
+
end
|
21
|
+
|
22
|
+
def parse_hashes(hashes, &block)
|
23
|
+
parse_records(hashes, method: :parse_hash, &block)
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def parse_records(data, method:, &block)
|
19
29
|
records = Enumerator.new do |y|
|
20
|
-
data.each do |
|
21
|
-
|
22
|
-
if record.respond_to?(:type_signature)
|
23
|
-
if definition = record_definitions[record.type_signature]
|
24
|
-
record = definition.parse(line)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
y.yield(record)
|
30
|
+
data.each do |data|
|
31
|
+
y.yield(parse_record(data, method: method))
|
28
32
|
end
|
29
33
|
end
|
30
34
|
if block_given?
|
@@ -33,5 +37,15 @@ module Pikelet
|
|
33
37
|
records
|
34
38
|
end
|
35
39
|
end
|
40
|
+
|
41
|
+
def parse_record(data, method:)
|
42
|
+
record = base_record_definition.send(method, data)
|
43
|
+
if record.respond_to?(:type_signature)
|
44
|
+
if definition = record_definitions[record.type_signature]
|
45
|
+
record = definition.send(method, data)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
record
|
49
|
+
end
|
36
50
|
end
|
37
51
|
end
|
@@ -23,6 +23,10 @@ module Pikelet
|
|
23
23
|
record_class.new(*field_definitions.values.map { |field| field.parse(data) })
|
24
24
|
end
|
25
25
|
|
26
|
+
def parse_hash(hash)
|
27
|
+
record_class.new(*hash.values_at(*field_definitions.keys))
|
28
|
+
end
|
29
|
+
|
26
30
|
def method_missing(method, *args, &block)
|
27
31
|
field(method, *args, &block)
|
28
32
|
end
|
data/lib/pikelet/version.rb
CHANGED
data/pikelet.gemspec
CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
-
spec.required_ruby_version = '>= 2.
|
21
|
+
spec.required_ruby_version = '>= 2.1.0'
|
22
22
|
|
23
23
|
spec.add_development_dependency "bundler", "~> 1.5"
|
24
24
|
spec.add_development_dependency "rake"
|
@@ -26,4 +26,5 @@ Gem::Specification.new do |spec|
|
|
26
26
|
spec.add_development_dependency "rspec-its"
|
27
27
|
spec.add_development_dependency "rspec-collection_matchers"
|
28
28
|
spec.add_development_dependency "coveralls"
|
29
|
+
spec.add_development_dependency "pry"
|
29
30
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "pikelet"
|
3
|
+
|
4
|
+
describe Pikelet::RecordDefinition do
|
5
|
+
let(:data) { "Hello world" }
|
6
|
+
let(:definition) do
|
7
|
+
Pikelet::RecordDefinition.new(nil) do
|
8
|
+
hello 0...5
|
9
|
+
world 6..-1
|
10
|
+
end
|
11
|
+
end
|
12
|
+
let(:record) { definition.parse(data) }
|
13
|
+
|
14
|
+
describe "#parse_hash" do
|
15
|
+
let(:record_hash) { Hash[record.to_h.to_a.reverse] }
|
16
|
+
|
17
|
+
subject { definition.parse_hash(record_hash) }
|
18
|
+
|
19
|
+
it { is_expected.to eq record }
|
20
|
+
end
|
21
|
+
end
|
data/spec/pikelet_spec.rb
CHANGED
@@ -159,4 +159,27 @@ describe Pikelet do
|
|
159
159
|
expect(collected_records).to contain_exactly(*records.map(&:to_h))
|
160
160
|
end
|
161
161
|
end
|
162
|
+
|
163
|
+
describe "#parse_hashes" do
|
164
|
+
let(:definition) do
|
165
|
+
Pikelet.define do
|
166
|
+
name 0... 4
|
167
|
+
number 4...13
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
let(:data) do
|
172
|
+
<<-FILE.gsub(/^\s*/, "").split(/[\r\n]+/)
|
173
|
+
John012345678
|
174
|
+
Sue 087654321
|
175
|
+
FILE
|
176
|
+
end
|
177
|
+
|
178
|
+
let(:records) { definition.parse(data) }
|
179
|
+
let(:hashes) { records.map(&:to_h) }
|
180
|
+
|
181
|
+
subject { definition.parse_hashes(hashes).to_a }
|
182
|
+
|
183
|
+
it { is_expected.to eq records.to_a }
|
184
|
+
end
|
162
185
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pikelet
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Carney
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-07-
|
11
|
+
date: 2014-07-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -94,6 +94,20 @@ dependencies:
|
|
94
94
|
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: pry
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
97
111
|
description: Pikelet is a type of small pancake popular in Australia and New Zealand.
|
98
112
|
Also, a flat-file database parser capable of dealing with heterogeneous records.
|
99
113
|
email:
|
@@ -118,6 +132,7 @@ files:
|
|
118
132
|
- lib/pikelet/version.rb
|
119
133
|
- pikelet.gemspec
|
120
134
|
- spec/pikelet/field_definition_spec.rb
|
135
|
+
- spec/pikelet/record_definition_spec.rb
|
121
136
|
- spec/pikelet_spec.rb
|
122
137
|
- spec/spec_helper.rb
|
123
138
|
homepage: ''
|
@@ -132,7 +147,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
132
147
|
requirements:
|
133
148
|
- - ">="
|
134
149
|
- !ruby/object:Gem::Version
|
135
|
-
version: 2.
|
150
|
+
version: 2.1.0
|
136
151
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
137
152
|
requirements:
|
138
153
|
- - ">="
|
@@ -146,5 +161,6 @@ specification_version: 4
|
|
146
161
|
summary: A simple flat-file database parser.
|
147
162
|
test_files:
|
148
163
|
- spec/pikelet/field_definition_spec.rb
|
164
|
+
- spec/pikelet/record_definition_spec.rb
|
149
165
|
- spec/pikelet_spec.rb
|
150
166
|
- spec/spec_helper.rb
|