Створення GitHub Activity CLI — подорож у Ruby
Посилання
- Репозиторій на GitHub -> https://github.com/sulmanweb/github-activity-cli
- Завдання на Roadmap.sh -> https://roadmap.sh/projects/github-user-activity
- Моє рішення для UpVotes -> https://roadmap.sh/projects/github-user-activity/solutions?u=67124acb791f57dd60b7e0e4
Чи хотіли ви коли-небудь швидко перевірити активність когось на GitHub прямо з вашого терміналу? Не так давно я поставив собі це завдання і створив простий, але потужний інструмент CLI на Ruby.
Дозвольте розповісти, як я створив цей GitHub Activity CLI, поділившись як технічними деталями, так і уроками, отриманими в процесі.
Огляд проєкту
GitHub Activity CLI — це інструмент командного рядка, який отримує та відображає нещодавні активності користувача на GitHub. Він створений на Ruby і слідує принципам чистого коду, забезпечуючи простоту реалізації та підтримки.
Виклик
Вимоги до проєкту були взяті з проєкту GitHub User Activity на roadmap.sh.
Основні цілі полягали в тому, щоб:
- Отримати нещодавні активності користувача на GitHub за допомогою GitHub API
- Відобразити активності в зручному для читання форматі
- Обробляти різні типи подій GitHub (push, issues, PRs тощо)
- Реалізувати належне оброблення помилок
Структура проєкту
Я організував код у чисту, модульну структуру:
├── bin
│ └── github-activity # Виконуваний скрипт CLI
└── lib
├── activity_formatter.rb # Форматує різні типи подій
├── github_activity.rb # Основна логіка програми
└── github_client.rb # Обробляє комунікацію з GitHub API
Технічна реалізація
1.
GitHub клієнт
Серце програми — це клас GitHubClient
, який обробляє всі комунікації з API:
class GitHubClient
BASE_URL = 'https://api.github.com'
def fetch_user_events(username)
uri = URI("#{BASE_URL}/users/#{username}/events")
response = make_request(uri)
case response
when Net::HTTPSuccess
JSON.parse(response.body)
when Net::HTTPNotFound
raise "Користувача '#{username}' не знайдено"
else
raise "Не вдалося отримати активність GitHub: #{response.message}"
end
end
end
Я використовував вбудовану бібліотеку Net::HTTP
в Ruby, щоб мінімізувати залежності. Клієнт обробляє базові випадки помилок і повертає розібрані дані у форматі JSON.
2. Форматування подій
Одним із цікавих завдань було форматування різних типів подій GitHub.
Я створив окремий клас ActivityFormatter
, який обробляє це, використовуючи чистий патерн:
class ActivityFormatter
def format(event)
case event['type']
when 'PushEvent'
format_push_event(event)
when 'CreateEvent'
format_create_event(event)
when 'IssuesEvent'
format_issues_event(event)
# ... інші типи подій
end
end
end
Такий підхід дозволяє легко додавати підтримку нових типів подій і тримати логіку форматування організованою.
3. Основна програма
Клас GitHubActivity
об’єднує все разом:
class GitHubActivity
def initialize(username)
@username = username
@client = GitHubClient.new
@formatter = ActivityFormatter.new
end
def run
events = @client.fetch_user_events(@username)
if events.empty?
puts "Немає нещодавньої активності для користувача '#{@username}'"
return
end
display_events(events)
end
end
Досвід користувача
Я зосередився на тому, щоб зробити CLI інтуїтивно зрозумілим та зручним для користувача.
Користувачі можуть просто виконати:
./bin/github-activity username
Виведення чисте і зручне для читання:
Нещодавня активність на GitHub для sulmanweb:
--------------------------------------------------
Зроблено 2 коміти в sulmanweb/project
Створено гілку в sulmanweb/new-repo
Закрито проблему 'Потрібне виправлення помилки' в sulmanweb/app
Результати навчання
Створення цього CLI навчило мене кількох цінних уроків:
- Інтеграція API: Робота з GitHub API показала важливість належної обробки помилок та парсингу відповідей.
- Організація коду: Розбиття функціональності на окремі класи зробило код більш підтримуваним та тестованим.
- Досвід користувача: Навіть для інструменту CLI досвід користувача має значення.
Чітке виведення та корисні повідомлення про помилки справляють велику різницю.
Підтримка проєкту
Хочете допомогти зробити GitHub Activity CLI ще кращим? Є кілька способів, як ви можете внести свій внесок:
Фінансова підтримка
- ⭐ Поставте зірочку репозиторію, щоб показати вашу підтримку
- 💝 Розгляньте можливість підняти моє рішення на сторінці GitHub Activity CLI solution
- 🎁 Поділіться проєктом з вашою мережею
Технічні внески
- 🐛 Повідомляйте про баги та пропонуйте функції через GitHub Issues
- 🔧 Вносьте запити на пул для виправлення помилок або покращень
- 📚 Допоможіть покращити документацію
- 🌐 Допоможіть з перекладами, якщо ви володієте кількома мовами
Майбутні покращення
Хоча поточна версія працює добре, завжди є місце для покращень:
- Додати автентифікацію для обробки обмежень API
- Додати більш детальну інформацію про події
- Додати параметри фільтрації для конкретних типів подій
- Реалізувати кешування для швидших повторних запитів
Як почати
Хочете спробувати? Ось як:
1.
- Клонуйте репозиторій
- Зробіть CLI виконуваним:
chmod +x bin/github-activity
- Запустіть його:
./bin/github-activity
Висновок
Створення цього GitHub Activity CLI стало чудовою вправою у створенні зосередженого, корисного інструменту, дотримуючись практик чистого коду. Це показує, як відносно проста ідея може стати практичною утилітою, яку інші можуть використовувати і розвивати.
Джерельний код доступний на GitHub, і я буду радий отримати будь-які відгуки або внески від спільноти. Щасливого кодування! 🚀
Оригінально опубліковано на https://sulmanweb.com.
Перекладено з: Building a GitHub Activity CLI — A Ruby Journey