Skip to content

Commit

Permalink
Extracted serialize method and renamed constants to Constants.
Browse files Browse the repository at this point in the history
  • Loading branch information
evangelion1204 committed Jul 12, 2015
1 parent 92fa813 commit bcc5089
Show file tree
Hide file tree
Showing 6 changed files with 38 additions and 38 deletions.
19 changes: 4 additions & 15 deletions lib/multi-ini-class.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
var MultiIni, Parser, Serializer, constants, fs, _;
var Constants, MultiIni, Parser, Serializer, fs, _;

fs = require('fs');

Expand All @@ -8,7 +8,7 @@ Parser = require('./parser');

Serializer = require('./serializer');

constants = require('./constants');
Constants = require('./constants');

MultiIni = (function() {
MultiIni.prototype["default"] = {
Expand Down Expand Up @@ -43,25 +43,14 @@ MultiIni = (function() {
MultiIni.prototype.fetchLines = function(filename) {
var content;
content = fs.readFileSync(filename, this.options);
return content.split(constants.line_breaks[this.options.line_breaks]);
return content.split(Constants.line_breaks[this.options.line_breaks]);
};

MultiIni.prototype.write = function(filename, content) {
if (content == null) {
content = {};
}
return fs.writeFileSync(filename, this.serialize(content), this.options);
};

MultiIni.prototype.serialize = function(data) {
var out, section, sectionContent;
out = "";
for (section in data) {
sectionContent = data[section];
out += "[" + section + "]" + constants.line_breaks[this.options.line_breaks];
out += this.serializer.serializeContent(sectionContent, '');
}
return out;
fs.writeFileSync(filename, this.serializer.serialize(content), this.options);
};

return MultiIni;
Expand Down
20 changes: 16 additions & 4 deletions lib/serializer.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
var Serializer, constants, _;
var Constants, Serializer, _;

_ = require('lodash');

constants = require('./constants');
Constants = require('./constants');

Serializer = (function() {
Serializer.prototype.line_breaks = {
Expand Down Expand Up @@ -33,6 +33,18 @@ Serializer = (function() {
return true;
};

Serializer.prototype.serialize = function(content) {
var out, section, sectionContent, _results;
out = "";
_results = [];
for (section in content) {
sectionContent = content[section];
out += "[" + section + "]" + Constants.line_breaks[this.options.line_breaks];
_results.push(out += this.serializeContent(sectionContent, ''));
}
return _results;
};

Serializer.prototype.serializeContent = function(content, path) {
var key, serialized, subContent, value, _i, _len;
serialized = '';
Expand All @@ -44,15 +56,15 @@ Serializer = (function() {
if (this.needToBeQuoted(value)) {
value = "\"" + value + "\"";
}
serialized += path + (path.length > 0 ? '.' : '') + key + "[]=" + value + constants.line_breaks[this.options.line_breaks];
serialized += path + (path.length > 0 ? '.' : '') + key + "[]=" + value + Constants.line_breaks[this.options.line_breaks];
}
} else if (_.isObject(subContent)) {
serialized += this.serializeContent(subContent, path + (path.length > 0 ? '.' : '') + key);
} else {
if (this.needToBeQuoted(subContent)) {
subContent = "\"" + subContent + "\"";
}
serialized += path + (path.length > 0 ? '.' : '') + key + "=" + subContent + constants.line_breaks[this.options.line_breaks];
serialized += path + (path.length > 0 ? '.' : '') + key + "=" + subContent + Constants.line_breaks[this.options.line_breaks];
}
}
return serialized;
Expand Down
15 changes: 4 additions & 11 deletions src/multi-ini-class.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ _ = require 'lodash'

Parser = require './parser'
Serializer = require './serializer'
constants = require './constants'
Constants = require './constants'

class MultiIni
default:
Expand Down Expand Up @@ -31,18 +31,11 @@ class MultiIni

fetchLines: (filename) ->
content = fs.readFileSync(filename, @options)
return content.split constants.line_breaks[@options.line_breaks]
return content.split Constants.line_breaks[@options.line_breaks]

write: (filename, content = {}) ->
fs.writeFileSync(filename, @serialize(content), @options)

serialize: (data) ->
out = ""
for section, sectionContent of data
out += "[" + section + "]" + constants.line_breaks[@options.line_breaks]
out += @serializer.serializeContent(sectionContent, '')

return out
fs.writeFileSync(filename, @serializer.serialize(content), @options)
return

module.exports =
Class: MultiIni
Expand Down
2 changes: 0 additions & 2 deletions src/parser.coffee
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
class Parser
# handlers: []

regExpSection: /^\s*\[(.*?)\]\s*$/
regExpComment: /^;.*/
regExpSingleLine: /^\s*(.*?)\s*?=\s*?(\S.*?)$/
Expand Down
12 changes: 9 additions & 3 deletions src/serializer.coffee
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
_ = require 'lodash'
constants = require './constants'
Constants = require './constants'

class Serializer
line_breaks:
Expand All @@ -17,19 +17,25 @@ class Serializer

return true

serialize: (content) ->
out = ""
for section, sectionContent of content
out += "[" + section + "]" + Constants.line_breaks[@options.line_breaks]
out += @serializeContent(sectionContent, '')

serializeContent: (content, path) ->
serialized = ''
for key, subContent of content
if _.isArray(subContent)
for value in subContent
value = "\"" + value + "\"" if @needToBeQuoted(value)

serialized += path + (if path.length > 0 then '.' else '') + key + "[]=" + value + constants.line_breaks[@options.line_breaks]
serialized += path + (if path.length > 0 then '.' else '') + key + "[]=" + value + Constants.line_breaks[@options.line_breaks]
else if _.isObject(subContent)
serialized += @serializeContent(subContent, path + (if path.length > 0 then '.' else '') + key)
else
subContent = "\"" + subContent + "\"" if @needToBeQuoted(subContent)
serialized += path + (if path.length>0 then '.' else '') + key + "=" + subContent + constants.line_breaks[@options.line_breaks]
serialized += path + (if path.length>0 then '.' else '') + key + "=" + subContent + Constants.line_breaks[@options.line_breaks]

return serialized

Expand Down
8 changes: 5 additions & 3 deletions test/basic_spec.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
describe("Basic testing includes reading of different files", function () {
var fs = require('fs');
var MultiIni = require('../lib/multi-ini-class.js');
var MultiIni = require('../lib/multi-ini-class');
var Serializer = require('../lib/serializer');

it("Availability of the class ", function () {
expect(MultiIni).not.toBeUndefined();
Expand Down Expand Up @@ -228,15 +229,16 @@ describe("Basic testing includes reading of different files", function () {

it("Write a ascii ini file and write it manuel", function () {
var ini = new MultiIni.Class({encoding: 'ascii'});
var serializer = new Serializer({encoding: 'ascii', line_breaks: 'unix'});

var data = {
section: {
key: "Straße mit Häusern"
}
};

ini.write('test/out/ascii.ini', data);
fs.writeFileSync('test/out/ascii_serialized.ini', ini.serialize(data), {encoding: 'ascii'});

fs.writeFileSync('test/out/ascii_serialized.ini', serializer.serialize(data), {encoding: 'ascii'});

var content = fs.readFileSync('test/out/ascii.ini', {encoding: 'ascii'});
var expectedContent = fs.readFileSync('test/out/ascii_serialized.ini', {encoding: 'ascii'});
Expand Down

0 comments on commit bcc5089

Please sign in to comment.