pikelet 1.0.0 → 1.0.1

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: 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