guidepost 0.2.3 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7f49ae1e903b58b082d906af364a401237248bab317489daf80b8a431d33ea6b
4
- data.tar.gz: 9da9ee9ed5892c403f0908e34891af82e9a9666419290354e30b9642a36502eb
3
+ metadata.gz: 4f751016d58b199dc4f795e66092ef5b541a4a26e58d2620e1828013796a4e8b
4
+ data.tar.gz: d0362d142673a44382cede84737194c4ee0c68d6f89054794fee6a6ce83c4af5
5
5
  SHA512:
6
- metadata.gz: 40fa25c5cab3b25c0df32da32ed7fd6bdd1bab0b790a8c0f78d20bfaccd2830a47f11e54942d96347e06574f2cb538c94ce7cbdda84e8c768374c089547aa3d6
7
- data.tar.gz: 7f090b43f12e5927137dad0e147754ab53e2d444173cb839affcb8fffb2abc78aa45b6db2722a136a63eb147e4979f66f56153a2e8e7874a1693574651ac36f6
6
+ metadata.gz: dddd913919db07e788a0dc969df5eefa0cf2e36c91c9c163b1dece16285c9b3a81c126382852cd59db94adeb67ac0d8f700a42b21e518995fd2cda5c56172f66
7
+ data.tar.gz: 276fc86844018b06092130749d0fb7936e348b79573c7b56414130a3473b974c4e6324153042ddf730e57b75be485b8c5e724ef769c6f8b6014e0ee22bde567e
data/README.md CHANGED
@@ -60,7 +60,7 @@ Make sure to have certain environmental variables set, preferrably in your `.bas
60
60
  ENV["#{YOUR_PROJECT_NAME}_GUIDEPOST_ZENDESK_EMAIL"]
61
61
 
62
62
  # The password token associated with your Zendesk subdomain
63
- ENV["#{YOUR_PROJECT_NAME}_GUIDEPOST_PASSWORD_TOKEN"]
63
+ ENV["#{YOUR_PROJECT_NAME}_GUIDEPOST_ZENDESK_PASSWORD_TOKEN"]
64
64
  ```
65
65
 
66
66
  #### S3
@@ -37,7 +37,7 @@ class ZendeskGuideArticleAttachment < ActiveRecord::Base
37
37
  article_objects.each do |a|
38
38
  is_correct_article = (article_attachment.article_id == a.article_id)
39
39
  if is_correct_article
40
- article_attachment.zendesk_guide_article = co
40
+ article_attachment.zendesk_guide_article = a
41
41
  article_attachment.save
42
42
  break
43
43
  end
@@ -1,4 +1,4 @@
1
- require 'aws-sdk'
1
+ require 'aws-sdk-s3'
2
2
  require 'cgi'
3
3
  require 'json'
4
4
  require 'net/http'
@@ -13,4 +13,4 @@ module Guidepost
13
13
  autoload :S3, 'guidepost/storage/s3'
14
14
  end
15
15
 
16
- end
16
+ end
@@ -1,6 +1,8 @@
1
1
  module Guidepost
2
2
  module Provider
3
3
  class Zendesk
4
+ require 'uri'
5
+
4
6
  attr_reader :subdomain
5
7
  attr_reader :project_name
6
8
 
@@ -21,7 +23,8 @@ module Guidepost
21
23
  query = options.fetch(:query, "")
22
24
  return [] if query.empty?
23
25
 
24
- url = "#{self.base_api_url}/help_center/articles/search.json?query=#{query}&per_page=10"
26
+ url = "#{self.base_api_url}/help_center/articles/search.json?query=#{URI::encode(query)}&per_page=10"
27
+ url += "&locale=#{options[:locale]}" if !options[:locale].nil? && !options[:locale].empty?
25
28
  uri = URI.parse(url)
26
29
 
27
30
  http = Net::HTTP.new(uri.host, uri.port)
@@ -52,33 +55,45 @@ module Guidepost
52
55
  def backup_all_articles(options={})
53
56
  # Get all articles (with pagination)
54
57
  sideload = options[:sideload] || false
55
- articles = self.retrieve_all_articles(sideload: sideload)
58
+ all_locales = options[:all_locales] || true
59
+ articles = self.retrieve_all_articles(sideload: sideload, all_locales: all_locales)
56
60
 
57
61
  # Upload to S3
58
62
  timestamp = Time.now.strftime('%Y%m%d%H%M%S')
59
63
 
60
64
  filename = "#{timestamp}"
61
65
  filename += "_with_sideload" if sideload
62
- @storage.upload_file(path: "zendesk/article_backups/#{filename}.json", string_content: articles.to_json)
66
+ @storage.upload_file(path: "zendesk/#{@subdomain}/article_backups/#{filename}.json", string_content: articles.to_json)
63
67
 
64
68
  articles.count
65
69
  end
66
70
 
67
71
  def retrieve_all_articles(options={})
68
72
  sideload = options[:sideload] || false
73
+ all_locales = options[:all_locales] || true
74
+
69
75
  page_next = nil
70
76
  articles = []
71
77
  article_attachments = nil
72
78
 
79
+ locales = (self.retrieve_all_locales || []).map{|locale_json| locale_json['locale'] } if all_locales
80
+ locales = [''] if locales.nil? || locales.empty?
81
+
73
82
  if !sideload
74
- while true
75
- page_articles, page_next = self.retrieve_articles(url: page_next)
76
- break if page_articles.nil? || page_articles.empty?
77
- articles += page_articles
78
- break if page_next.nil?
79
- end
83
+ article_attachments = []
84
+ locales.each do |locale|
85
+ page_next = nil
86
+ locale_articles = []
87
+ while true
88
+ page_articles, page_next = self.retrieve_articles(url: page_next, locale: locale)
89
+ break if page_articles.nil? || page_articles.empty?
90
+ locale_articles += page_articles
91
+ break if page_next.nil?
92
+ end
93
+ articles += locale_articles
80
94
 
81
- article_attachments = self.retrieve_all_article_attachments(articles: articles)
95
+ article_attachments += self.retrieve_all_article_attachments(articles: locale_articles, locale: locale)
96
+ end
82
97
 
83
98
  return {
84
99
  articles: articles,
@@ -89,50 +104,57 @@ module Guidepost
89
104
  else
90
105
  sections = []
91
106
  categories = []
107
+ article_attachments = []
92
108
 
93
109
  section_urls = Hash.new
94
110
  category_urls = Hash.new
95
111
 
96
- while true
97
- page, page_next = self.retrieve_articles(url: page_next, sideload: true)
112
+ locales.each do |locale|
113
+ page_next = nil
114
+ locales_articles = []
115
+
116
+ while true
117
+ page, page_next = self.retrieve_articles(url: page_next, sideload: true, locale: locale)
98
118
 
99
- articles_from_page = page["articles"]
100
- sections_from_page = page["sections"]
101
- categories_from_page = page["categories"]
119
+ articles_from_page = page["articles"]
120
+ sections_from_page = page["sections"]
121
+ categories_from_page = page["categories"]
102
122
 
103
- no_more_articles = articles_from_page.nil? || articles_from_page.empty?
104
- no_more_sections = sections_from_page.nil? || sections_from_page.empty?
105
- no_more_categories = categories_from_page.nil? || categories_from_page.empty?
123
+ no_more_articles = articles_from_page.nil? || articles_from_page.empty?
124
+ no_more_sections = sections_from_page.nil? || sections_from_page.empty?
125
+ no_more_categories = categories_from_page.nil? || categories_from_page.empty?
106
126
 
107
- break if no_more_articles && no_more_sections && no_more_categories
127
+ break if no_more_articles && no_more_sections && no_more_categories
108
128
 
109
- articles += articles_from_page
129
+ locales_articles += articles_from_page
110
130
 
111
- sections_from_page.each do |s|
112
- url = s["url"]
113
- if !section_urls.has_key?(url)
114
- section_urls[url] = 1
115
- else
116
- section_urls[url] += 1
131
+ sections_from_page.each do |s|
132
+ url = s["url"]
133
+ if !section_urls.has_key?(url)
134
+ section_urls[url] = 1
135
+ else
136
+ section_urls[url] += 1
137
+ end
138
+ sections << s if section_urls[url] == 1
117
139
  end
118
- sections << s if section_urls[url] == 1
119
- end
120
140
 
121
- categories_from_page.each do |c|
122
- url = c["url"]
123
- if !category_urls.has_key?(url)
124
- category_urls[url] = 1
125
- else
126
- category_urls[url] += 1
141
+ categories_from_page.each do |c|
142
+ url = c["url"]
143
+ if !category_urls.has_key?(url)
144
+ category_urls[url] = 1
145
+ else
146
+ category_urls[url] += 1
147
+ end
148
+ categories << c if category_urls[url] == 1
127
149
  end
128
- categories << c if category_urls[url] == 1
129
- end
130
150
 
131
- break if page_next.nil?
151
+ break if page_next.nil?
152
+ end
153
+ articles += locales_articles
154
+
155
+ article_attachments += self.retrieve_all_article_attachments(articles: locales_articles, locale: locale)
132
156
  end
133
157
 
134
- article_attachments = self.retrieve_all_article_attachments(articles: articles)
135
-
136
158
  return {
137
159
  categories: categories,
138
160
  category_count: categories.count,
@@ -148,12 +170,13 @@ module Guidepost
148
170
 
149
171
  def retrieve_articles(options={})
150
172
  url = options[:url]
173
+ locale = (options[:locale] || "").downcase
151
174
  sideload = options[:sideload] || false
152
175
 
153
176
  if !sideload
154
- url = "#{self.base_api_url}/help_center/articles.json?per_page=25&page=1" if url.nil?
177
+ url = "#{self.base_api_url}/help_center/#{locale}/articles.json?per_page=25&page=1" if url.nil?
155
178
  else
156
- url = "#{self.base_api_url}/help_center/articles.json?include=sections,categories&per_page=25&page=1" if url.nil?
179
+ url = "#{self.base_api_url}/help_center/#{locale}/articles.json?include=sections,categories&per_page=25&page=1" if url.nil?
157
180
  end
158
181
 
159
182
  uri = URI.parse(url)
@@ -252,7 +275,7 @@ module Guidepost
252
275
  articles = options[:articles]
253
276
  articles.each do |article|
254
277
  while true
255
- attachments, next_page = self.retrieve_article_attachments(for_article: article)
278
+ attachments, next_page = self.retrieve_article_attachments(for_article: article, url: next_page, locale: options[:locale])
256
279
  break if attachments.nil? || attachments.empty?
257
280
  article_attachments += attachments
258
281
  break if next_page.nil?
@@ -263,9 +286,11 @@ module Guidepost
263
286
  end
264
287
 
265
288
  def retrieve_article_attachments(options={})
289
+ url = options[:url]
266
290
  article = options[:for_article]
291
+ locale = (options[:locale] || "").downcase
267
292
 
268
- url = "#{self.base_api_url}/help_center/articles/#{article["id"]}/attachments.json?per_page=25&page=1" if url.nil?
293
+ url = "#{self.base_api_url}/help_center/#{locale}/articles/#{article["id"]}/attachments.json?per_page=25&page=1" if url.nil?
269
294
  uri = URI.parse(url)
270
295
 
271
296
  http = Net::HTTP.new(uri.host, uri.port)
@@ -283,9 +308,81 @@ module Guidepost
283
308
  return j_body["article_attachments"], j_body["next_page"]
284
309
  end
285
310
 
311
+ def retrieve_all_locales(options={})
312
+ locales = []
313
+ next_page = nil
314
+
315
+ while true
316
+ tmp_locales, next_page = self.retrieve_locales(url: next_page)
317
+ break if tmp_locales.nil? || tmp_locales.empty?
318
+ locales += tmp_locales
319
+ break if next_page.nil?
320
+ end
321
+
322
+ locales
323
+ end
324
+
325
+ def retrieve_locales(options={})
326
+ url = options[:url]
327
+
328
+ url = "#{self.base_api_url}/locales.json" if url.nil?
329
+ uri = URI.parse(url)
330
+
331
+ http = Net::HTTP.new(uri.host, uri.port)
332
+ http.use_ssl = true
333
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
334
+
335
+ request = Net::HTTP::Get.new(uri.request_uri)
336
+ request.basic_auth(@email, @password)
337
+ response = http.request(request)
338
+
339
+ body = response.body.force_encoding("UTF-8")
340
+
341
+ j_body = JSON.parse(body)
342
+
343
+ return j_body["locales"], j_body["next_page"]
344
+ end
345
+
346
+ def retrieve_all_translations(options={})
347
+ translations = []
348
+ next_page = nil
349
+ article = options[:for_article]
350
+
351
+ while true
352
+ tmp_translations, next_page = self.retrieve_translations(url: next_page, for_article: article)
353
+ break if tmp_translations.nil? || tmp_translations.empty?
354
+ translations += tmp_translations
355
+ break if next_page.nil?
356
+ end
357
+
358
+ translations
359
+ end
360
+
361
+ def retrieve_translations(options={})
362
+ url = options[:url]
363
+ article = options[:for_article]
364
+
365
+ url = "#{self.base_api_url}/help_center/articles/#{article['id']}/translations.json" if url.nil?
366
+ uri = URI.parse(url)
367
+
368
+ http = Net::HTTP.new(uri.host, uri.port)
369
+ http.use_ssl = true
370
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
371
+
372
+ request = Net::HTTP::Get.new(uri.request_uri)
373
+ request.basic_auth(@email, @password)
374
+ response = http.request(request)
375
+
376
+ body = response.body.force_encoding("UTF-8")
377
+
378
+ j_body = JSON.parse(body)
379
+
380
+ return j_body["translations"], j_body["next_page"]
381
+ end
382
+
286
383
  def base_api_url
287
384
  "https://#{self.subdomain}.zendesk.com/api/v2"
288
385
  end
289
386
  end
290
387
  end
291
- end
388
+ end
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: guidepost
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kiren Srinivasan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-05-18 00:00:00.000000000 Z
11
+ date: 2020-10-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: aws-sdk
14
+ name: aws-sdk-s3
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '2.0'
19
+ version: '1'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '2.0'
26
+ version: '1'
27
27
  description: Harness your knowledge base in your Rails applications
28
28
  email: srinitude@gmail.com
29
29
  executables: []
@@ -64,8 +64,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
64
64
  - !ruby/object:Gem::Version
65
65
  version: '0'
66
66
  requirements: []
67
- rubyforge_project:
68
- rubygems_version: 2.7.6
67
+ rubygems_version: 3.1.2
69
68
  signing_key:
70
69
  specification_version: 4
71
70
  summary: Harness your knowledge base in your Rails applications