fixy 0.0.6 → 0.0.7

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: d897c37235240b3fc2a84c136fcd3cc0bcb77040
4
- data.tar.gz: f71f5072d0b9eadc315ee23d06326d97c39ec987
3
+ metadata.gz: 3af7502122c5bc3bcc6284ad25a631310925775a
4
+ data.tar.gz: 2caed3c7e83e9f70bcbb6bde57069021891e21cb
5
5
  SHA512:
6
- metadata.gz: 0b5c8b72616560961fe6bcfcadce4f5422a1801731190c74c4f94b97df8399665051005159132c4cb5371ae0c839177814c5339984dcb0a2e2d54f839c425e40
7
- data.tar.gz: 4068c6f9b3d9fd9aabfc0120de7d818a3a49f4099f26acfeda0bf9d799fcf424ca3f6111f8c254a2a7ad8f5303f7a82331ff43c277587b25237f520569608bbd
6
+ metadata.gz: c160c295dfb163a34260470a11e1c54fc39c9f9796ca1deef9d19f54637a13c534fa5ebe1155f16363104b36850b579bb6a40ed778f4e245a7d6a40b31d1a35a
7
+ data.tar.gz: 1348d95b39d809752cbfe47729ec4e6631fdb9bfda256ec6eea955589ab739c157324bfd023504fc1814c334083f4f39c99b1321eb11db2e636a8f58244fb0cf
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## v0.0.7
2
+
3
+ * Added support for custom line ending.
4
+
1
5
  ## v0.0.6
2
6
 
3
7
  * 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
 
data/lib/fixy/record.rb CHANGED
@@ -1,10 +1,19 @@
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
 
13
+ def set_line_ending(character)
14
+ @line_ending = character
15
+ end
16
+
8
17
  def field(name, size, range, type)
9
18
  @record_fields ||= default_record_fields
10
19
  range_matches = range.match /^(\d+)(?:-(\d+))?$/
@@ -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.7'
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
@@ -185,6 +187,19 @@ describe 'Generating a Record' do
185
187
  PersonRecordJ.new.generate.should eq('Use My Value'.ljust(20) << "\n")
186
188
  end
187
189
  end
190
+
191
+ context 'when setting a line ending' do
192
+ class PersonRecordWithLineEnding < Fixy::Record
193
+ include Fixy::Formatter::Alphanumeric
194
+ set_record_length 20
195
+ set_line_ending Fixy::Record::LINE_ENDING_CRLF
196
+ field(:description , 20, '1-20', :alphanumeric) { 'Use My Value' }
197
+ end
198
+
199
+ it 'uses the given line ending' do
200
+ PersonRecordWithLineEnding.new.generate.should eq('Use My Value'.ljust(20) << "\r\n")
201
+ end
202
+ end
188
203
  end
189
204
 
190
205
  describe 'Parsing a record' do
@@ -207,6 +222,18 @@ describe 'Parsing a record' do
207
222
  end
208
223
  end
209
224
 
225
+ context 'with custom line endings' do
226
+ let(:record) { "Use My Value " }
227
+ it 'should generate fixed width record' do
228
+ PersonRecordWithLineEnding.parse(record).should eq({
229
+ record: (record + Fixy::Record::LINE_ENDING_CRLF),
230
+ fields: [
231
+ { name: :description, value: 'Use My Value '}
232
+ ]
233
+ })
234
+ end
235
+ end
236
+
210
237
  context 'when properly defined' do
211
238
  let(:record) { "Sarah Kerrigan " }
212
239
  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.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Omar Skalli
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-20 00:00:00.000000000 Z
11
+ date: 2015-05-20 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
@@ -90,17 +90,17 @@ 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
102
  rubyforge_project:
103
- rubygems_version: 2.4.4
103
+ rubygems_version: 2.4.2
104
104
  signing_key:
105
105
  specification_version: 4
106
106
  summary: Provides a DSL for defining, generating, and debugging fixed width documents.