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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: dacccea06922299a0d633783508e02e9ecdffb5c
4
- data.tar.gz: 60844ae6f649d78df19fc3a3104a1e8270869ccb
3
+ metadata.gz: 49ef5854cd526cdc7bd4491974e5ae7dcb013582
4
+ data.tar.gz: 52b908b3bee6e565b53b5e0b17b9c2723af24a42
5
5
  SHA512:
6
- metadata.gz: 15e82690246aeb038429e4aca2a160c1b5cc3329266b0a99cfaa3e4525e26ae0d56f42d2a292e6e3733d7f58a75fc2eeba95b7b161c3fb6d6f294d4cf15a5eb7
7
- data.tar.gz: d50efdf234ef8828b69c536de57f59ba569cffcb824eb724abefcca72d7b84cee99cdebad0ce276ff1939b0659a0ce6358c2b4e27a697da5c2ec4686e257f310
6
+ metadata.gz: c5e64237c90b7eeea7e8c934df11f195948d1142c307951345f4454c7a9a6cee7e35a18962e518a860ef02eae128066a8f9c159f0960917f081fe5c383ccb8fc
7
+ data.tar.gz: 2c92d249c1e3fb2e12de71d91fdabf809af6e2510ac95a90a024fd0e54d96a5e25fa23752754ec97fe00e1a7feeab8dd4e06b3acced5c2f419dbaa5bf8ac9e5f
data/.travis.yml CHANGED
@@ -2,7 +2,7 @@ language: ruby
2
2
  cache: bundler
3
3
 
4
4
  rvm:
5
- - 2.0.0
5
+ - 2.1.0
6
6
 
7
7
  script: 'bundle exec rake'
8
8
 
@@ -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 |line|
21
- record = base_record_definition.parse(line)
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
@@ -1,3 +1,3 @@
1
1
  module Pikelet
2
- VERSION = "1.0.0"
2
+ VERSION = "1.0.1"
3
3
  end
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.0.0'
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
@@ -14,6 +14,8 @@
14
14
  # users commonly want.
15
15
  #
16
16
  # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
17
+ require "pry"
18
+
17
19
  RSpec.configure do |config|
18
20
  require "rspec/its"
19
21
  require "rspec/collection_matchers"
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.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-25 00:00:00.000000000 Z
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.0.0
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