承接 daniillgolovin/difrences-files 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

daniillgolovin/difrences-files

最新稳定版本:1.0.1

Composer 安装命令:

composer create-project daniillgolovin/difrences-files

包简介

Generate diff

README 文档

README

Maintainability Test Coverage linter and tests

Описание

«Вычислитель отличий» — программа, определяющая разницу между двумя структурами данных. Это популярная задача, для решения которой существует множество онлайн сервисов, например JSON Diff. Подобный механизм используется при выводе тестов или при автоматическом отслеживании изменений в конфигурационных файлах.

В рамках данного проекта реализовано создание AST (англ. Abstract Syntax Tree) - абстрактного синтаксического дерева, на основании которого имеющиеся форматеры (stylish, plain, json) выводят различия как плоских, так и вложенных файлов (используется рекурсия).

Особенности

  • Доступны следующие форматы для чтения: JSON, YAML.
  • Реализованы следующие форматеры: stylish (по умолчанию), plain, json.
  • Возможность использовать как библиотеку, так и как CLI команду. `

Установка

⚠️ Перед установкой проекта проверьте наличие установленных php, composer!

Для работы с проектом необходимо выполнить следующие действия по его установке:

  1. Склонируйте репозиторий, используя одну из следующих консольных команд:
# HTTPS
>> git clone https://github.com/DaniillGolovin/Difference-Generator.git
# SSH
>> git clone git@github.com:DaniillGolovin/Difference-Generator.git
  1. Осуществите установку проекта:
>> make install
  1. Запустите команду на примере тех, которые указаны ниже.

Для глобальной установки выполните команду:

$ composer global require daniillgolovin/difrences-files

Использование

CLI команда

Данный проект можно использовать как утилиту командной строки. Подробности использования описания в helper:

>> gendiff -h
gendiff -h

Generate diff

Usage:
  gendiff (-h|--help)
  gendiff (-v|--version)
  gendiff [--format <fmt>] <firstFilePath> <secondFilePath>

Options:
  -h --help                    Show this screen
  -v --version                 Show version
  --format <fmt>               Report format [default: stylish] Examples: stylish, plain, json

Формат stylish

Данный форматер выводит разницу между двумя файлами, учитывая следующие особенности:

  • Если свойство было добавлено и удалено либо изменило свое значение, то указываются знаки + и - соответственно.
  • В остальных случаях свойство либо не изменилось, либо в обоих файлах имеет в качестве значения объект (является вложенным).
Пример
>> gendiff file1.json file2.json
{
  - follow: false
    host: hexlet.io
  - proxy: 123.234.53.22
  - timeout: 50
  + timeout: 20
  + verbose: true
}
Различия между плоскими файлами (JSON) формат (STYLISH)

asciicast

Различия между плоскими файлами (YAML) формат (STYLISH)

asciicast

Различия между вложенными файлами (JSON) формат (STYLISH)

asciicast

Различия между вложенными файлами (YAML) формат (STYLISH)

asciicast

Формат plain

Данный форматер выводит разницу между двумя файлами, учитывая следующие особенности:

  • Если свойство имеет "сложное значение" (объект, массив), то выводится [complex value].
  • Если свойство является вложенным, то оно не учитывается: сохраняется лишь путь до него, который используется при выводе остальных "плоских" свойств, находящийся внутри оного.
  • Если свойство не было изменено, то оно не выводится.
Пример
>> gendiff file5.json file6.json --format plain
Property 'common.follow' was added with value: false
Property 'common.setting2' was removed
Property 'common.setting3' was updated. From true to null
Property 'common.setting4' was added with value: 'blah blah'
Property 'common.setting5' was added with value: [complex value]
Property 'common.setting6.doge.wow' was updated. From '' to 'so much'
Property 'common.setting6.ops' was added with value: 'vops'
Property 'group1.baz' was updated. From 'bas' to 'bars'
Property 'group1.nest' was updated. From [complex value] to 'str'
Property 'group2' was removed
Property 'group3' was added with value: [complex value]
Различия между плоскими файлами (JSON) формат (PLAIN)

asciicast

Различия между плоскими файлами (YAML) формат (PLAIN)

asciicast

Различия между вложенными файлами (JSON) формат (PLAIN)

asciicast

Различия между вложенными файлами (YAML) формат (PLAIN)

asciicast

Формат json

Данный форматер выводит разницу между двумя файлами, учитывая следующие особенности:

  • Если свойство не является вложенным или "сложным" то указывается его имя, дескриптор, старое значение, новое значение, дети в формате: { state: 'СОСТОЯНИЕ', type: 'ТИП', oldValue: 'ЗНАЧЕНИЕ в file1' oldValue: 'ЗНАЧЕНИЕ в file2' children: 'ДЕТИ' }.
Пример
>> gendiff file1.yaml file2.yaml --format json
{
  {
    "key":"follow",
    "type":"removed",
    "oldValue":null,
    "newValue":false
    },
  }
  {
    "key":"host",
    "type":"not updated",
    "oldValue":"hexlet.io",
    "newValue":"hexlet.io"
  },
  {
    "key":"proxy","type":"removed",
    "oldValue":null,
    "newValue":"123.234.53.22"
  },
  {
      "key":"timeout",
      "type":"updated",
      "oldValue":50,
      "newValue":20
  },
  {
      "key":"verbose",
      "type":"added",
      "oldValue":null,
      "newValue":true
  }
}
Различия между плоскими файлами (JSON) формат (JSON)

asciicast

Различия между плоскими файлами (YAML) формат (JSON)

asciicast

Различия между вложенными файлами (JSON) формат (JSON)

asciicast

Различия между вложенными файлами (YAML) формат (JSON)

asciicast

Структура проекта

..
├── Makefile
├── README.md
├── bin
│   └── gendiff
├── composer.json
├── composer.lock
├── coverage.txt
├── file.txt
├── phpunit.xml
├── src
│   ├── Differ.php
│   ├── Formatters
│   │   ├── Json.php
│   │   ├── Plain.php
│   │   └── Stylish.php
│   ├── Formatters.php
│   └── Parsers.php
└── tests
    ├── GenDiffTest.php
    └── fixtures
        ├── diff.txt
        ├── diffJson.txt
        ├── diffPlain.txt
        ├── diffStylish.txt
        ├── file1.json
        ├── file1.yml
        ├── file2.json
        ├── file2.yml
        ├── fileNest1.json
        ├── fileNest1.yml
        ├── fileNest2.json
        └── fileNest2.yml

5 directories, 27 files

统计信息

  • 总下载量: 23
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 0
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2024-07-08

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固