Что это за структура данных? - PullRequest
2 голосов
/ 20 июля 2010

Я извлекаю последние коммиты из github и пытаюсь разобрать его с помощью ruby.Я знаю, что могу разобрать его вручную, но я хотел посмотреть, есть ли какой-нибудь пакет, который может превратить это в хеш или другую структуру данных.

commits: 
- parents: 
  - id: 202fb79e8686ee127fe49497c979cfc9c9d985d5
  author:
    name: This guy
    login: tguy
    email: tguy@tguy.com
  url: a url
  id: e466354edb31f243899051e2119f4ce72bafd5f3
  committed_date: "2010-07-19T13:44:43-07:00"
  authored_date: "2010-07-19T13:33:26-07:00"
  message: |-
    message
- parents: 
  - id: c3c349ec3e9a3990cac4d256c308b18fd35d9606
  author: 
    name: Other Guy
    login: oguy
    email: oguy@gmail.com
  url: another url
  id: 202fb79e8686ee127fe49497c979cfc9c9d985d5
  committed_date: "2010-07-19T13:44:11-07:00"
  authored_date: "2010-07-19T13:44:11-07:00"
  message: this is another message

Ответы [ 4 ]

5 голосов
/ 20 июля 2010

Это YAML http://ruby -doc.org / core / classes / YAML.html .Вы можете сделать что-то вроде obj = YAML::load yaml_stringrequire 'yaml' вверху вашего файла, в стандартных библиотеках), а затем обращаться к нему как к вложенному хешу.

YAML в основном используется в rubyмир, как люди используют XML в мирах java / c #.

4 голосов
/ 20 июля 2010

Похоже, YAML для меня.Есть парсеры для многих языков.Например, с библиотекой YAML, включенной в Ruby:

data = <<HERE
commits: 
- parents: 
  - id: 202fb79e8686ee127fe49497c979cfc9c9d985d5
  author:
    name: This guy
    login: tguy
    email: tguy@tguy.com
  url: a url
  id: e466354edb31f243899051e2119f4ce72bafd5f3
  committed_date: "2010-07-19T13:44:43-07:00"
  authored_date: "2010-07-19T13:33:26-07:00"
  message: |-
    message
- parents: 
  - id: c3c349ec3e9a3990cac4d256c308b18fd35d9606
  author: 
    name: Other Guy
    login: oguy
    email: oguy@gmail.com
  url: another url
  id: 202fb79e8686ee127fe49497c979cfc9c9d985d5
  committed_date: "2010-07-19T13:44:11-07:00"
  authored_date: "2010-07-19T13:44:11-07:00"
  message: this is another message
HERE

pp YAML.load data

Она печатает:

{"commits"=>
  [{"author"=>{"name"=>"This guy", "login"=>"tguy", "email"=>"tguy@tguy.com"},
    "parents"=>[{"id"=>"202fb79e8686ee127fe49497c979cfc9c9d985d5"}],
    "url"=>"a url",
    "id"=>"e466354edb31f243899051e2119f4ce72bafd5f3",
    "committed_date"=>"2010-07-19T13:44:43-07:00",
    "authored_date"=>"2010-07-19T13:33:26-07:00",
    "message"=>"message"},
   {"author"=>
     {"name"=>"Other Guy", "login"=>"oguy", "email"=>"oguy@gmail.com"},
    "parents"=>[{"id"=>"c3c349ec3e9a3990cac4d256c308b18fd35d9606"}],
    "url"=>"another url",
    "id"=>"202fb79e8686ee127fe49497c979cfc9c9d985d5",
    "committed_date"=>"2010-07-19T13:44:11-07:00",
    "authored_date"=>"2010-07-19T13:44:11-07:00",
    "message"=>"this is another message"}]}
2 голосов
/ 20 июля 2010

Этот формат YAML , но вы можете получить ту же информацию в XML или JSON, см. Общая информация API .Я уверен, что есть библиотеки для разбора этих форматов в Ruby.

0 голосов
/ 20 июля 2010

Хотя это не совсем то, что вы ищете, вот еще немного информации о получении коммитов.http://develop.github.com/p/commits.html. В противном случае, я думаю, что вам, возможно, придется просто разобрать его вручную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...