0.0
The project is in a healthy, maintained state
IMMOSQUARE-YAML is a specialized Ruby gem tailored primarily for parsing and dumping YML translation files, addressing challenges faced with other parsers like interpreting translation keys as booleans, multi-line strings, and more.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Runtime

~> 0, >= 0.1.18
 Project Readme

ImmosquareYaml

ImmosquareYaml is a dedicated Ruby gem crafted to parse, dump and manage YML translation files with finesse.

In the past, there have been significant challenges in using existing YAML parsers like Psych and YAML (which internally utilizes Psych). Issues arose, such as interpreting translation keys like yes:, no:, and others as booleans. Additionally, they showed shortcomings in effectively handling multiline texts, often faltering with notations like key: |, key: |-, key: >, key: |5+, key: |3-, and more.

Why Choose ImmosquareYaml?

Here are some standout features and advantages of this gem:

  • Reserved Key Management: Handles keys with "reserved" words seamlessly.

  • Complete Multiline Handling: Efficiently processes multiline texts using various notations.

  • Value Uniformization: Retains double quotes only when essential, ensuring a clean and readable output.

  • Emoji Handling: Comprehensive management of emojis in YAML files.

  • Sorting Capability: Offers sorting (enabled by default) during the cleaning or parsing phase for a structured representation.

  • Automatic Translations: Features an automatic translation of YML files, leveraging the artificial intelligence of OpenAI.

  • Optimized for Translations: Precisely tailored for handling translation files, addressing challenges faced with other parsers.

Whether you're managing translations, real estate data, or any other form of YML data, ImmosquareYaml offers a refined, efficient, and user-friendly experience. Dive in and simplify your YAML operations!


Quick Example

Let's assume you have a YML file with some reserved keys, multiline texts, and emojis:

en:
  demo: "demo"
  yes: "This is not a boolean"
  no: "Neither is this"
  emoji: "Here's an emoji1: \U0001F600"
  emoji2: "Here's an emoji2 \U0001F600"
  demo2:
    demo2-1:
      demo2-1-1: "hello"
      demo2-1-2:
      demo2-1-3: "John Doe"
  demo3:
    1: "task #1"
    2: "task #2"
    3: "task #2"
  demo4:
    "1": "task #1"
    "2": "task #2"
    "3": "task #2"
  some_special_characters:
    special1: "-hyphen"
    special2: "*asterisk"
    special3: "%percent"
    special4: ",comma"
    special5: "!exclamation"
    special6: "?question_mark"
    special7: "&ampersand"
    special8: "#hash"
    special9: "@at"
  some_special_characters:
    special1: """-tiret"""
    special2: """*astérisque"""
    special3: """%pourcent"""
    special4: """,virgule"""
    special5: """!point_d'exclamation"""
    special6: """?point_d'interrogation"""
    special7: """&esperluette"""
    special8: """#croisillon"""
    special9: """@arobase"""
  description1: "This is the first line of test #1 \U0001F600.\nThis is the second line of test#1.\nThis is the third line of test.#1"
  description2: |
    This is the first line of test #2 \U0001F600.
    This is the second line of test #2.
    This is the third line of test #2.
  description3: |4-
      This is the first line of test #3 \U0001F600.
      This is the second line of test #3.
      This is the third line of test #3.
  description4: >
    This is the first line of test #4 \U0001F600.
    This is the second line of test #4.
    This is the third line of test #4.

After processing this YML file, reserved keys such as yes and no are preserved, emojis are correctly interpreted, unnecessary quotes are removed, and multiline texts are formatted consistently.

ImmosquareYaml.clean(path_to_file)
en:
  demo: demo
  demo2:
    demo2-1:
      demo2-1-1: hello
      demo2-1-2: null
      demo2-1-3: John Doe
  demo3:
    "1": "task #1"
    "2": "task #2"
    "3": "task #2"
  demo4:
    "1": "task #1"
    "2": "task #2"
    "3": "task #2"
  description1: |-
    This is the first line of test #1 😀.
    This is the second line of test#1.
    This is the third line of test.#1
  description2: |
    This is the first line of test #2 😀.
    This is the second line of test #2.
    This is the third line of test #2.
  description3: |4-
      This is the first line of test #3 😀.
      This is the second line of test #3.
      This is the third line of test #3.
  description4: |
    This is the first line of test #4 😀. This is the second line of test #4. This is the third line of test #4.
  emoji: "Here's an emoji1: 😀"
  emoji2: Here's an emoji2 😀
  "no": Neither is this
  some_special_characters:
    special1: "-tiret"
    special2: "*astérisque"
    special3: "%pourcent"
    special4: ",virgule"
    special5: "!point_d'exclamation"
    special6: "?point_d'interrogation"
    special7: "&esperluette"
    special8: "#croisillon"
    special9: "@arobase"
  "yes": This is not a boolean


---

## Installation

Add this line to your Gemfile:

```ruby
gem 'immosquare-yaml'

And then execute:

bundle install

Or install it yourself as:

gem install immosquare-yaml

Usage

Parsing YAML Files

To convert a YAML file into a Ruby hash:

hash = ImmosquareYaml.parse('path/to/your/file.yml')

By default, the resultant hash will be sorted. If you wish to prevent sorting:

hash = ImmosquareYaml.parse('path/to/your/file.yml', :sort => false)

Cleaning YAML Files

To sanitize a YAML file:

ImmosquareYaml.clean('path/to/your/file.yml')

If you wish to prevent sorting after cleaning:

ImmosquareYaml.clean('path/to/your/file.yml', :sort => false)

Creating YAML Files

To create a YAML file from a Ruby hash:

hash  = { 'a' => 1, 'b' => 2 }
lines = ImmosquareYaml.dump(hash)
File.write('path/to/your/file.yml', lines)

Rake Tasks

For Rails users, there are two rake tasks provided to make YML file management simpler:

  1. Cleaning: Cleans all translation files within your Rails application:
rake immosquare_yaml:clean

Contributing

Contributions are welcome! Please open an issue or submit a pull request on our GitHub repository.

License

This gem is available under the terms of the MIT License.