fixy 0.0.6 → 0.0.9

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
- SHA1:
3
- metadata.gz: d897c37235240b3fc2a84c136fcd3cc0bcb77040
4
- data.tar.gz: f71f5072d0b9eadc315ee23d06326d97c39ec987
2
+ SHA256:
3
+ metadata.gz: f33b913ca5e515fc32e84463bbb0bca7b04d4fb0349ae673f3906fe8530355c5
4
+ data.tar.gz: 693fbf4d139be73d471c6665fbeed04e26ea5b3f55007672fa6ddeb38d17fec9
5
5
  SHA512:
6
- metadata.gz: 0b5c8b72616560961fe6bcfcadce4f5422a1801731190c74c4f94b97df8399665051005159132c4cb5371ae0c839177814c5339984dcb0a2e2d54f839c425e40
7
- data.tar.gz: 4068c6f9b3d9fd9aabfc0120de7d818a3a49f4099f26acfeda0bf9d799fcf424ca3f6111f8c254a2a7ad8f5303f7a82331ff43c277587b25237f520569608bbd
6
+ metadata.gz: e8cd433833fa4598b166f4ba4bdfab5879579288b4f977810f50e97ad2391dae9318cf036593d44af8cf871f3a5228ad4c45e75abb6437559cc3a429731045bb
7
+ data.tar.gz: 4b4802efeeb1b0aee6c988428fd15f17e7d9692733199fb6c67fe9053c9a4da488ec6fa3a58f88b5927c7abc8b25ce3853ff19df4cdac8f1c9df2022d43a7342
data/CHANGELOG.md CHANGED
@@ -1,3 +1,15 @@
1
+ ## v0.0.9
2
+
3
+ * Fix Proc.new deprecation for block capture.
4
+
5
+ ## v0.0.8
6
+
7
+ * Strip line endings from fields in record.
8
+
9
+ ## v0.0.7
10
+
11
+ * Added support for custom line ending.
12
+
1
13
  ## v0.0.6
2
14
 
3
15
  * Support for multi-byte record parsing
data/README.md CHANGED
@@ -36,6 +36,7 @@ A fixed-width document (`Fixy::Document`) is composed of multiple single-line re
36
36
  Every record is defined through a specific format, which defines the following aspects:
37
37
 
38
38
  * Record length (how many characters in the line)
39
+ * Line ending (optional, defaults to "\n")
39
40
  * Required formatters (e.g. Alphanumeric, Rate, Amount)
40
41
  * Field declaration:
41
42
  * Field human readable name
@@ -93,6 +94,11 @@ You can also specify the field definition and field value together by passing a
93
94
 
94
95
  field(:first_name, 10, '1-10', :alphanumeric) { @first_name }
95
96
  ```
97
+ If a record requires a specific line ending, you can specify it as part of the Record definition.
98
+
99
+ ```ruby
100
+ set_line_ending Fixy::Record::LINE_ENDING_CRLF
101
+ ```
96
102
 
97
103
  Given a record definition, you can generate a single line (e.g. for testing purposes):
98
104
 
@@ -147,10 +153,10 @@ Occasionally, it is useful to generate a document using existing records. This i
147
153
  ```ruby
148
154
  class ParsedPeopleDocument < Fixy::Document
149
155
  def build
150
- parse_record IdentityRecord, 'Arcturus Mengsk '
151
- parse_record IdentityRecord, 'Sarah Kerrigan '
152
- parse_record IdentityRecord, 'Jim Raynor '
153
- end
156
+ parse_record IdentityRecord, 'Arcturus Mengsk '
157
+ parse_record IdentityRecord, 'Sarah Kerrigan '
158
+ parse_record IdentityRecord, 'Jim Raynor '
159
+ end
154
160
  end
155
161
  ```
156
162
 
@@ -10,7 +10,7 @@ module Fixy
10
10
  #
11
11
 
12
12
  def format_alphanumeric(input, byte_width)
13
- input_string = String.new(input.to_s)
13
+ input_string = String.new(input.to_s).tr "#{self.class::LINE_ENDING_CRLF}#{line_ending}", ''
14
14
  result = ''
15
15
 
16
16
  if input_string.bytesize <= byte_width
data/lib/fixy/record.rb CHANGED
@@ -1,11 +1,20 @@
1
1
  module Fixy
2
2
  class Record
3
+ LINE_ENDING_LF = "\n".freeze
4
+ LINE_ENDING_CR = "\r".freeze
5
+ LINE_ENDING_CRLF = "#{LINE_ENDING_CR}#{LINE_ENDING_LF}".freeze
6
+ DEFAULT_LINE_ENDING = LINE_ENDING_LF
7
+
3
8
  class << self
4
9
  def set_record_length(count)
5
10
  define_singleton_method('record_length') { count }
6
11
  end
7
12
 
8
- def field(name, size, range, type)
13
+ def set_line_ending(character)
14
+ @line_ending = character
15
+ end
16
+
17
+ def field(name, size, range, type, &block)
9
18
  @record_fields ||= default_record_fields
10
19
  range_matches = range.match /^(\d+)(?:-(\d+))?$/
11
20
 
@@ -33,7 +42,7 @@ module Fixy
33
42
  # We're good to go :)
34
43
  @record_fields[range_from] = { name: name, from: range_from, to: range_to, size: size, type: type}
35
44
 
36
- field_value(name, Proc.new) if block_given?
45
+ field_value(name, block) if block_given?
37
46
  end
38
47
 
39
48
  # Convenience method for creating field methods
@@ -55,6 +64,11 @@ module Fixy
55
64
  @record_fields
56
65
  end
57
66
 
67
+ def line_ending
68
+ # Use the default line ending unless otherwise specified
69
+ @line_ending || DEFAULT_LINE_ENDING
70
+ end
71
+
58
72
  def default_record_fields
59
73
  if superclass.respond_to?(:record_fields, true) && superclass.record_fields
60
74
  superclass.record_fields.dup
@@ -98,7 +112,7 @@ module Fixy
98
112
  end
99
113
 
100
114
  # Documentation mandates that every record ends with new line.
101
- output << "\n"
115
+ output << line_ending
102
116
 
103
117
  { fields: fields, record: decorator.record(output) }
104
118
  end
@@ -128,7 +142,7 @@ module Fixy
128
142
  end
129
143
 
130
144
  # Documentation mandates that every record ends with new line.
131
- output << "\n"
145
+ output << line_ending
132
146
 
133
147
  # All ready. In the words of Mr. Peters: "Take it and go!"
134
148
  decorator.record(output)
@@ -145,5 +159,10 @@ module Fixy
145
159
  def record_fields
146
160
  self.class.record_fields
147
161
  end
162
+
163
+ # Retrieves the line ending for this record type
164
+ def line_ending
165
+ self.class.line_ending
166
+ end
148
167
  end
149
168
  end
data/lib/fixy/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Fixy
2
- VERSION = '0.0.6'
2
+ VERSION = '0.0.9'
3
3
  end
@@ -10,6 +10,8 @@ describe 'Defining a Record' do
10
10
 
11
11
  set_record_length 20
12
12
 
13
+ set_line_ending Fixy::Record::LINE_ENDING_CRLF
14
+
13
15
  field :first_name, 10, '1-10' , :alphanumeric
14
16
  field :last_name , 10, '11-20', :alphanumeric
15
17
  end
@@ -118,6 +120,23 @@ describe 'Generating a Record' do
118
120
  end
119
121
  end
120
122
 
123
+ context 'when a field value contains the record separator' do
124
+ it 'should strip that separator' do
125
+ class PersonRecordNewLine < Fixy::Record
126
+ include Fixy::Formatter::Alphanumeric
127
+
128
+ set_record_length 9
129
+
130
+ field :name, 9, '1-9' , :alphanumeric
131
+
132
+ field_value :name, -> { "Two\nLine" }
133
+ end
134
+
135
+ value = PersonRecordNewLine.new.generate
136
+ value.should == "TwoLine \n"
137
+ end
138
+ end
139
+
121
140
  context 'when definition is incomplete (e.g. undefined columns)' do
122
141
  it 'should raise an error' do
123
142
  class PersonRecordF < Fixy::Record
@@ -185,6 +204,19 @@ describe 'Generating a Record' do
185
204
  PersonRecordJ.new.generate.should eq('Use My Value'.ljust(20) << "\n")
186
205
  end
187
206
  end
207
+
208
+ context 'when setting a line ending' do
209
+ class PersonRecordWithLineEnding < Fixy::Record
210
+ include Fixy::Formatter::Alphanumeric
211
+ set_record_length 20
212
+ set_line_ending Fixy::Record::LINE_ENDING_CRLF
213
+ field(:description , 20, '1-20', :alphanumeric) { 'Use My Value' }
214
+ end
215
+
216
+ it 'uses the given line ending' do
217
+ PersonRecordWithLineEnding.new.generate.should eq('Use My Value'.ljust(20) << "\r\n")
218
+ end
219
+ end
188
220
  end
189
221
 
190
222
  describe 'Parsing a record' do
@@ -207,6 +239,18 @@ describe 'Parsing a record' do
207
239
  end
208
240
  end
209
241
 
242
+ context 'with custom line endings' do
243
+ let(:record) { "Use My Value " }
244
+ it 'should generate fixed width record' do
245
+ PersonRecordWithLineEnding.parse(record).should eq({
246
+ record: (record + Fixy::Record::LINE_ENDING_CRLF),
247
+ fields: [
248
+ { name: :description, value: 'Use My Value '}
249
+ ]
250
+ })
251
+ end
252
+ end
253
+
210
254
  context 'when properly defined' do
211
255
  let(:record) { "Sarah Kerrigan " }
212
256
  class PersonRecordK < Fixy::Record
metadata CHANGED
@@ -1,55 +1,55 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fixy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Omar Skalli
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-20 00:00:00.000000000 Z
11
+ date: 2022-05-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rspec
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  description: Library for generating fixed width flat files.
@@ -59,7 +59,7 @@ executables: []
59
59
  extensions: []
60
60
  extra_rdoc_files: []
61
61
  files:
62
- - .gitignore
62
+ - ".gitignore"
63
63
  - CHANGELOG.md
64
64
  - Gemfile
65
65
  - LICENSE.txt
@@ -84,24 +84,23 @@ homepage: https://github.com/chetane/fixy
84
84
  licenses:
85
85
  - MIT
86
86
  metadata: {}
87
- post_install_message:
87
+ post_install_message:
88
88
  rdoc_options: []
89
89
  require_paths:
90
90
  - lib
91
91
  required_ruby_version: !ruby/object:Gem::Requirement
92
92
  requirements:
93
- - - '>='
93
+ - - ">="
94
94
  - !ruby/object:Gem::Version
95
95
  version: '0'
96
96
  required_rubygems_version: !ruby/object:Gem::Requirement
97
97
  requirements:
98
- - - '>='
98
+ - - ">="
99
99
  - !ruby/object:Gem::Version
100
100
  version: '0'
101
101
  requirements: []
102
- rubyforge_project:
103
- rubygems_version: 2.4.4
104
- signing_key:
102
+ rubygems_version: 3.0.6
103
+ signing_key:
105
104
  specification_version: 4
106
105
  summary: Provides a DSL for defining, generating, and debugging fixed width documents.
107
106
  test_files: