sitedog_parser 0.4.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 753510fc5e4c0a2d565f29d0e5b894f653f83c23cb3354d27a631a74852ea421
4
- data.tar.gz: 3a2ec09307309a917f4530a937b7443b061c2e671bc5e84a627e487ee7536a3c
3
+ metadata.gz: d0eb9da31315637d91c4b4b312cc6382a88f9c1daf094c3296b59a47ecb23169
4
+ data.tar.gz: ea11849351936255636f6c62786d24ee00a9d3a0dbff3dfbf2bb96b517ea4f26
5
5
  SHA512:
6
- metadata.gz: dcb05fa986c51a3a69da4bb812042777e6c878d778215af6466d58aad90f643691e64399a98e17d403e79b5eba607287ed6129323626d69c0bcd8136056893d2
7
- data.tar.gz: cf4e7360906081835272daeaa168c927d9d2a46787d4328afe22a1db03e82de9167a07280d6e41cdf81eeb26ff2de644494185a07a1a26124a523016ee821b4d
6
+ metadata.gz: a368008e5bf05584aafcc201a3b36ded643743fc14f6ac4fe32376add4fbdae61e2d475e86a918df3447162526fbeaee2c1b2c68e939ace8f4f11a82a7a119ed
7
+ data.tar.gz: f1421b7c40284499abb0008559f23eb1d3e914387a3f053c1f014a603b96e33503b4459bc9b7f31364bda6bfc4100bc61065d9d78482b04f20194005aa3109fa
data/bin/sitedog_cli CHANGED
@@ -5,7 +5,185 @@ require 'sitedog_parser'
5
5
  require 'optparse'
6
6
  require 'logger'
7
7
  require 'yaml'
8
+ require 'json'
9
+ require 'net/http'
10
+ require 'uri'
11
+ require 'fileutils'
12
+
13
+ # Класс клиента для взаимодействия с SiteDog Cloud API
14
+ class SiteDogClient
15
+ API_URL = 'http://localhost:3005/api/v1'
16
+ CONFIG_DIR = File.join(Dir.home, '.sitedog')
17
+ CONFIG_FILE = File.join(CONFIG_DIR, 'config.json')
18
+
19
+ attr_accessor :test_mode
20
+
21
+ def initialize(test_mode = false)
22
+ @config = load_config
23
+ @test_mode = test_mode
24
+ end
25
+
26
+ def login(email, password)
27
+ uri = URI.parse("#{API_URL}/login")
28
+ params = { email: email, password: password }
29
+
30
+ response = Net::HTTP.post(uri, params.to_json, 'Content-Type' => 'application/json')
31
+
32
+ if response.code == '200'
33
+ result = JSON.parse(response.body)
34
+ if result['status'] == 'success'
35
+ @config['api_key'] = result['api_key']
36
+ save_config
37
+ puts "Авторизация успешна! API-ключ сохранен."
38
+ return true
39
+ else
40
+ puts "Ошибка: #{result['message']}"
41
+ end
42
+ else
43
+ puts "Ошибка: #{response.code} - #{response.message}"
44
+ end
45
+
46
+ false
47
+ end
48
+
49
+ def push_card(file_path, title = nil)
50
+ unless authenticated?
51
+ puts "Ошибка: Сначала выполните вход (sitedog_cli login <email> <password>)"
52
+ return false
53
+ end
54
+
55
+ # Используем имя файла как заголовок, если заголовок не указан
56
+ title = File.basename(file_path) if title.nil? || title.empty?
57
+
58
+ unless File.exist?(file_path)
59
+ puts "Ошибка: Файл не найден: #{file_path}"
60
+ return false
61
+ end
62
+
63
+ content = File.read(file_path)
64
+
65
+ # Проверяем, что содержимое является валидным YAML
66
+ begin
67
+ yaml_content = YAML.load(content)
68
+ rescue => e
69
+ puts "Ошибка: Недопустимый YAML-файл: #{e.message}"
70
+ return false
71
+ end
72
+
73
+ # В тестовом режиме просто показываем информацию
74
+ if @test_mode
75
+ puts "=== ТЕСТОВЫЙ РЕЖИМ ==="
76
+ puts "Отправка данных на API..."
77
+ puts "Заголовок: #{title}"
78
+ puts "Файл: #{file_path}"
79
+ puts "Содержимое (сокращено):"
80
+ puts " #{yaml_content.keys.join(", ")}"
81
+ puts "=== УСПЕШНО ==="
82
+ return true
83
+ end
84
+
85
+ uri = URI.parse("#{API_URL}/cards")
86
+ params = { card: { title: title, content: content } }
87
+
88
+ http = Net::HTTP.new(uri.host, uri.port)
89
+ request = Net::HTTP::Post.new(uri.request_uri)
90
+ request['Content-Type'] = 'application/json'
91
+ request['Authorization'] = "Bearer #{@config['api_key']}"
92
+ request.body = params.to_json
93
+
94
+ response = http.request(request)
95
+
96
+ if response.code == '201'
97
+ result = JSON.parse(response.body)
98
+ puts "Карточка успешно отправлена!"
99
+ puts "ID: #{result['data']['id']}"
100
+ puts "Заголовок: #{result['data']['title']}"
101
+ return true
102
+ else
103
+ puts "Ошибка: #{response.code} - #{response.message}"
104
+ puts response.body if response.body
105
+ return false
106
+ end
107
+ end
108
+
109
+ private
110
+
111
+ def authenticated?
112
+ # В тестовом режиме всегда считаем, что аутентификация пройдена
113
+ return true if @test_mode
114
+
115
+ # Проверяем наличие API-ключа
116
+ @config && @config['api_key']
117
+ end
118
+
119
+ def load_config
120
+ return {} unless File.exist?(CONFIG_FILE)
121
+
122
+ begin
123
+ JSON.parse(File.read(CONFIG_FILE))
124
+ rescue
125
+ {}
126
+ end
127
+ end
128
+
129
+ def save_config
130
+ FileUtils.mkdir_p(CONFIG_DIR) unless Dir.exist?(CONFIG_DIR)
131
+ File.write(CONFIG_FILE, @config.to_json)
132
+ end
133
+ end
134
+
135
+ # Проверка, если первый аргумент - команда для API
136
+ if ARGV.size > 0 && ['login', 'push'].include?(ARGV[0])
137
+ command = ARGV.shift
138
+
139
+ # Создаем клиент только для login, для push будет создан позже с test_mode
140
+ if command == 'login'
141
+ client = SiteDogClient.new
142
+
143
+ if ARGV.size < 2
144
+ puts "Ошибка: Требуется email и пароль"
145
+ puts "Использование: sitedog_cli login <email> <password>"
146
+ exit 1
147
+ end
148
+
149
+ email = ARGV[0]
150
+ password = ARGV[1]
151
+ exit(client.login(email, password) ? 0 : 1)
152
+ elsif command == 'push'
153
+ # По умолчанию ищем .sitedog в текущей директории
154
+ default_file = '.sitedog'
155
+
156
+ # Проверяем опции для тестового режима
157
+ test_mode = false
158
+ if ARGV.include?('--test')
159
+ test_mode = true
160
+ ARGV.delete('--test')
161
+ end
162
+
163
+ if ARGV.empty?
164
+ # Если аргументы отсутствуют, используем файл по умолчанию
165
+ if File.exist?(default_file)
166
+ file_path = default_file
167
+ title = File.basename(Dir.pwd) # Используем имя текущей директории как заголовок
168
+ else
169
+ puts "Ошибка: Файл #{default_file} не найден в текущей директории."
170
+ puts "Использование: sitedog_cli push [file_path] [--test]"
171
+ exit 1
172
+ end
173
+ else
174
+ # Первый аргумент - путь к файлу
175
+ file_path = ARGV[0]
176
+ title = File.basename(file_path) # Используем имя файла как заголовок по умолчанию
177
+ end
178
+
179
+ client = SiteDogClient.new(test_mode)
180
+ exit(client.push_card(file_path, title) ? 0 : 1)
181
+ end
182
+
183
+ exit 0
184
+ end
8
185
 
186
+ # Для стандартной функциональности парсинга YAML -> JSON
9
187
  # Set default options
10
188
  options = {
11
189
  debug: false,
@@ -24,6 +202,13 @@ end
24
202
  # Command line options parser
25
203
  option_parser = OptionParser.new do |opts|
26
204
  opts.banner = "Usage: sitedog_cli [options] <path_to_yaml_file> [output_file]"
205
+ opts.separator ""
206
+ opts.separator "Commands:"
207
+ opts.separator " login <email> <password> - войти в систему и получить API-ключ"
208
+ opts.separator " push [file_path] - отправить YAML-файл как карточку (по умолчанию использует .sitedog)"
209
+ opts.separator " --test - запустить в тестовом режиме без отправки данных на сервер"
210
+ opts.separator ""
211
+ opts.separator "Options:"
27
212
 
28
213
  opts.on("-d", "--debug", "Enable debug output") do
29
214
  options[:debug] = true
@@ -1,3 +1,3 @@
1
1
  module SitedogParser
2
- VERSION = "0.4.0"
2
+ VERSION = "0.4.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sitedog_parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ivan Nemytchenko
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-05-08 00:00:00.000000000 Z
11
+ date: 2025-05-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler