From b536e15f2083b3b18d67cdbea262680f340cd544 Mon Sep 17 00:00:00 2001 From: Yuichi HARADA <7232538+yui-har@users.noreply.github.com> Date: Wed, 27 Aug 2025 13:34:26 +0900 Subject: [PATCH 01/10] Update PS1 prompt in Dockerfile for parseconfig-rb30 --- docker/Dockerfile.dev-rb30 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/Dockerfile.dev-rb30 b/docker/Dockerfile.dev-rb30 index 10b0ba0..5066f33 100644 --- a/docker/Dockerfile.dev-rb30 +++ b/docker/Dockerfile.dev-rb30 @@ -1,6 +1,6 @@ FROM ruby:3.0-alpine LABEL MAINTAINER="BJ Dierkes " -ENV PS1="\[\e[0;33m\]|> parseconfig-rb28 <| \[\e[1;35m\]\W\[\e[0m\] \[\e[0m\]# " +ENV PS1="\[\e[0;33m\]|> parseconfig-rb30 <| \[\e[1;35m\]\W\[\e[0m\] \[\e[0m\]# " WORKDIR /src RUN apk update \ From 6bc986578c5dfc93c33d55a5d20dfd2ae8d8445a Mon Sep 17 00:00:00 2001 From: Yuichi HARADA <7232538+yui-har@users.noreply.github.com> Date: Wed, 27 Aug 2025 13:38:31 +0900 Subject: [PATCH 02/10] refactor: Remove unnecessary blank lines --- docker-compose.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 8ed86cb..21bcee7 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -19,14 +19,14 @@ services: build: context: . dockerfile: docker/Dockerfile.dev-rb30 - + parseconfig-rb27: <<: *DEFAULTS image: "parseconfig:dev-rb27" build: context: . dockerfile: docker/Dockerfile.dev-rb27 - + parseconfig-rb26: <<: *DEFAULTS image: "parseconfig:dev-rb26" From 2c12ecd8d68f431a1ff76ed682f341c639cb845d Mon Sep 17 00:00:00 2001 From: Yuichi HARADA <7232538+yui-har@users.noreply.github.com> Date: Wed, 27 Aug 2025 13:48:28 +0900 Subject: [PATCH 03/10] Remove obsolete attribute `version` --- docker-compose.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index 21bcee7..b963d6c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,4 +1,3 @@ -version: "3" services: parseconfig: &DEFAULTS image: "parseconfig:dev" From 7eb4d0b240bc9a0483802a348565b360126afb39 Mon Sep 17 00:00:00 2001 From: Yuichi HARADA <7232538+yui-har@users.noreply.github.com> Date: Wed, 27 Aug 2025 13:53:14 +0900 Subject: [PATCH 04/10] feat: Add Dockerfile for parseconfig-rb34 and update docker-compose.yml --- README.md | 3 +-- docker-compose.yml | 6 ++++++ docker/Dockerfile.dev-rb34 | 16 ++++++++++++++++ 3 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 docker/Dockerfile.dev-rb34 diff --git a/README.md b/README.md index 067ab16..d3af18f 100644 --- a/README.md +++ b/README.md @@ -116,6 +116,7 @@ $ docker-compose ps ruby-parseconfig_parseconfig-rb26_1 /bin/bash Up ruby-parseconfig_parseconfig-rb27_1 /bin/bash Up ruby-parseconfig_parseconfig-rb30_1 /bin/bash Up +ruby-parseconfig_parseconfig-rb34_1 /bin/bash Up ruby-parseconfig_parseconfig_1 /bin/bash Up @@ -135,5 +136,3 @@ $ make test The ParseConfig library is Open Source and distributed under the MIT license. Please see the LICENSE file included with this software. - - diff --git a/docker-compose.yml b/docker-compose.yml index b963d6c..2f21cba 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -12,6 +12,12 @@ services: - '.:/src' working_dir: '/src' + parseconfig-rb34: + <<: *DEFAULTS + image: "parseconfig:dev-rb34" + build: + context: . + dockerfile: docker/Dockerfile.dev-rb34 parseconfig-rb30: <<: *DEFAULTS image: "parseconfig:dev-rb30" diff --git a/docker/Dockerfile.dev-rb34 b/docker/Dockerfile.dev-rb34 new file mode 100644 index 0000000..0b72515 --- /dev/null +++ b/docker/Dockerfile.dev-rb34 @@ -0,0 +1,16 @@ +FROM ruby:3.4-alpine +LABEL MAINTAINER="BJ Dierkes " +ENV PS1="\[\e[0;33m\]|> parseconfig-rb34 <| \[\e[1;35m\]\W\[\e[0m\] \[\e[0m\]# " + +WORKDIR /src +RUN apk update \ + && apk add \ + musl-dev \ + make \ + vim \ + bash \ + && ln -sf /usr/bin/vim /usr/bin/vi \ + && gem install rspec +COPY . /src +COPY docker/vimrc /root/.vimrc +CMD ["/bin/bash"] From e3a99e187af840afb4dcef4da99c122ca278f0c8 Mon Sep 17 00:00:00 2001 From: Yuichi HARADA <7232538+yui-har@users.noreply.github.com> Date: Wed, 27 Aug 2025 13:53:46 +0900 Subject: [PATCH 05/10] feat: Update base image to ruby:3.4-alpine in Dockerfile.dev --- docker/Dockerfile.dev | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/Dockerfile.dev b/docker/Dockerfile.dev index 0194a82..c455739 100644 --- a/docker/Dockerfile.dev +++ b/docker/Dockerfile.dev @@ -1,4 +1,4 @@ -FROM ruby:3.0-alpine +FROM ruby:3.4-alpine LABEL MAINTAINER="BJ Dierkes " ENV PS1="\[\e[0;33m\]|> parseconfig <| \[\e[1;35m\]\W\[\e[0m\] \[\e[0m\]# " From fa723474508df85f8dd46223f1eddeb6bcf047e5 Mon Sep 17 00:00:00 2001 From: Yuichi HARADA <7232538+yui-har@users.noreply.github.com> Date: Wed, 27 Aug 2025 13:57:37 +0900 Subject: [PATCH 06/10] Add frozen_string_literal magic comment --- lib/parseconfig.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/parseconfig.rb b/lib/parseconfig.rb index e4047c0..1a4a3ac 100644 --- a/lib/parseconfig.rb +++ b/lib/parseconfig.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # # Author:: BJ Dierkes # Copyright:: Copyright (c) 2006,2016 Data Folk Labs, LLC From d2777ff37da458de1c8f254164a1c6104a003422 Mon Sep 17 00:00:00 2001 From: Yuichi HARADA <7232538+yui-har@users.noreply.github.com> Date: Wed, 27 Aug 2025 14:16:18 +0900 Subject: [PATCH 07/10] refactor: Improve BOM handling --- lib/parseconfig.rb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/parseconfig.rb b/lib/parseconfig.rb index 1a4a3ac..ac126f9 100644 --- a/lib/parseconfig.rb +++ b/lib/parseconfig.rb @@ -60,8 +60,9 @@ def import_config # force_encoding not available in all versions of ruby begin - if i.eql? 0 && line.include?("\xef\xbb\xbf".force_encoding('UTF-8')) - line.delete!("\xef\xbb\xbf".force_encoding('UTF-8')) + bom = "\xef\xbb\xbf".force_encoding('UTF-8') + if i.eql? 0 && line.include?(bom) + line.delete!(bom) end rescue NoMethodError end From c6ee1ca5b2e8fdace2d334e5ece06a760e719475 Mon Sep 17 00:00:00 2001 From: Yuichi HARADA <7232538+yui-har@users.noreply.github.com> Date: Wed, 27 Aug 2025 14:18:25 +0900 Subject: [PATCH 08/10] fix: Handle BOM removal more robustly --- lib/parseconfig.rb | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/parseconfig.rb b/lib/parseconfig.rb index ac126f9..91bfd3a 100644 --- a/lib/parseconfig.rb +++ b/lib/parseconfig.rb @@ -58,13 +58,13 @@ def import_config f.each_with_index do |line, i| line.strip! - # force_encoding not available in all versions of ruby - begin - bom = "\xef\xbb\xbf".force_encoding('UTF-8') - if i.eql? 0 && line.include?(bom) - line.delete!(bom) + if i.eql? 0 + # force_encoding not available in all versions of ruby + begin + bom = "\xef\xbb\xbf".force_encoding('UTF-8') + line.delete!(bom) if line.include?(bom) + rescue NoMethodError end - rescue NoMethodError end is_comment = false From 48a8116304f6b106eaead27a7b4a4443e8d302b8 Mon Sep 17 00:00:00 2001 From: Yuichi HARADA <7232538+yui-har@users.noreply.github.com> Date: Wed, 27 Aug 2025 14:28:37 +0900 Subject: [PATCH 09/10] fix: Improve BOM handling by using a safer string literal --- lib/parseconfig.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/parseconfig.rb b/lib/parseconfig.rb index 91bfd3a..5ce3dbe 100644 --- a/lib/parseconfig.rb +++ b/lib/parseconfig.rb @@ -61,7 +61,7 @@ def import_config if i.eql? 0 # force_encoding not available in all versions of ruby begin - bom = "\xef\xbb\xbf".force_encoding('UTF-8') + bom = (+"\xef\xbb\xbf").force_encoding('UTF-8') line.delete!(bom) if line.include?(bom) rescue NoMethodError end From 22e3dd57d91464836a4fd86857d290fb7e75d262 Mon Sep 17 00:00:00 2001 From: Yuichi HARADA <7232538+yui-har@users.noreply.github.com> Date: Wed, 27 Aug 2025 14:47:24 +0900 Subject: [PATCH 10/10] fix: Update regex to use Regexp.escape for a separator param --- lib/parseconfig.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/parseconfig.rb b/lib/parseconfig.rb index 5ce3dbe..271fda3 100644 --- a/lib/parseconfig.rb +++ b/lib/parseconfig.rb @@ -31,7 +31,7 @@ def initialize(config_file = nil, separator = '=', comments = ['#', ';']) @config_file = config_file @params = {} @groups = [] - @split_regex = '\s*' + separator + '\s*' + @split_regex = /\s*#{Regexp.escape(separator)}\s*/ @comments = comments return unless config_file @@ -76,8 +76,8 @@ def import_config end unless is_comment - if /#{@split_regex}/.match(line) - param, value = line.split(/#{@split_regex}/, 2) + if @split_regex.match(line) + param, value = line.split(@split_regex, 2) var_name = param.to_s.chomp.strip value = value.chomp.strip new_value = ''