zci 0.0.5 → 0.1.0

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
  SHA1:
3
- metadata.gz: 3e5fe3fab53f7d53c9cb4cb751d33edde6611d31
4
- data.tar.gz: 8a99ebfdc19e4d4b73bcf8a45c6fa507f43e1f7f
3
+ metadata.gz: f3f95dfd3865ea558bfcaa22e60e2285677ce24d
4
+ data.tar.gz: c01a0ee589285d9ebe4c1d0cdc891a73934c09a4
5
5
  SHA512:
6
- metadata.gz: b0bf09de212bd0613ab6584baa5a85df26052f14c6bb8f1cb7e09e9e49eedfafadd5f191352c96957ca47fe096b6e79f5337f06af2b6c04586822295c396f10b
7
- data.tar.gz: 7fb7cea81b021f92276dda5616245e237399d05d9af93909721d2ff21d05786cca5cec8506b4adb21823292a1319889fedded88422a3a80d4bd63c188537ce10
6
+ metadata.gz: 7cf98dec90c1c9d2cd63006ee18040ce7cf672fd329dbea961161c7ebf36160e410e93fd31298f911c5c86fdef51e19617c95e51ab98e4d474be8b28b38c4bff
7
+ data.tar.gz: 834020525511063185091a22c85aa8a41e7e3cdfde559dfe6bb190101b8455217faf23231ef083f81209a9c6c441cf8b4eb9f92dd577a573869687d51d49522e
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.3.1
1
+ 2.4.1
data/README.md CHANGED
@@ -102,8 +102,8 @@ categories:
102
102
 
103
103
  Tested with the following Ruby versions:
104
104
 
105
- - MRI 2.2.0
106
- - JRuby 9.0.0.0.pre2
105
+ - MRI 2.2.3
106
+ - JRuby 9.0.0.0
107
107
 
108
108
  ## Contributing
109
109
 
@@ -117,6 +117,6 @@ Tested with the following Ruby versions:
117
117
 
118
118
  Author: Anton Maminov (anton.maminov@gmail.com)
119
119
 
120
- Copyright: 2015-2016 [crowdin.com](http://crowdin.com/)
120
+ Copyright: 2015-2017 [crowdin.com](http://crowdin.com/)
121
121
 
122
122
  This project is licensed under the MIT license, a copy of which can be found in the LICENSE file.
data/bin/zci CHANGED
@@ -1,7 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
  require 'gli'
3
3
  require 'zci'
4
- # require 'byebug'
5
4
 
6
5
  include GLI::App
7
6
  include ZCI
@@ -21,7 +21,14 @@ command :'import:sources' do |c|
21
21
 
22
22
  # Check if Category exists in Zendesk
23
23
  source_category = @zendesk.hc_categories.find(id: source_category_id)
24
- raise('No such category') if source_category.nil? || source_category.id != source_category_id
24
+
25
+ if source_category.nil? || source_category.id != source_category_id
26
+ puts "[Zendesk] No category with id #{source_category_id}"
27
+ next
28
+ end
29
+
30
+ category_xml = build_category_xml(source_category)
31
+ category_hash = build_category_hash(source_category).merge({ xml: category_xml })
25
32
 
26
33
  # Get category's sections in Zendesk
27
34
  puts "[Zendesk] Get sections for Category with id #{source_category_id}"
@@ -67,6 +74,30 @@ command :'import:sources' do |c|
67
74
  @crowdin.change_directory(source_category_id.to_s, title: source_category.attributes[:name])
68
75
  end
69
76
 
77
+ # Create xml file for category and upload to Crowdin
78
+ file_name = "category_#{category_hash[:id]}.xml"
79
+
80
+ o = File.new(File.join(resources_category_dir, file_name), 'w')
81
+ o.write(category_hash[:xml].to_xml)
82
+ o.close
83
+
84
+ files = [
85
+ {
86
+ source: File.join(resources_category_dir, file_name),
87
+ dest: File.join(source_category_id.to_s, file_name),
88
+ export_pattern: '/%two_letters_code%/%original_path%/%original_file_name%',
89
+ title: category_hash[:name]
90
+ }
91
+ ]
92
+
93
+ if remote_project_tree[:files].include?("/#{source_category_id}/#{file_name}")
94
+ puts "[Crowdin] Update category file `#{file_name}`"
95
+ @crowdin.update_file(files, type: 'webxml')
96
+ else
97
+ puts "[Crowdin] Add category file `#{file_name}`"
98
+ @crowdin.add_file(files, type: 'webxml')
99
+ end
100
+
70
101
  # Creates xml files for sections and upload to Crowdin
71
102
  sections_builder.each do |section|
72
103
  file_name = "section_#{section[:id]}.xml"
@@ -79,7 +110,7 @@ command :'import:sources' do |c|
79
110
  {
80
111
  source: File.join(resources_category_dir, file_name),
81
112
  dest: File.join(source_category_id.to_s, file_name),
82
- export_pattert: '/%two_letters_code%/%original_path%/%original_file_name%',
113
+ export_pattern: '/%two_letters_code%/%original_path%/%original_file_name%',
83
114
  title: section[:name]
84
115
  }
85
116
  ]
@@ -105,7 +136,7 @@ command :'import:sources' do |c|
105
136
  {
106
137
  source: File.join(resources_category_dir, file_name),
107
138
  dest: File.join(source_category_id.to_s, file_name),
108
- export_pattert: '/%two_letters_code%/%original_path%/%original_file_name%',
139
+ export_pattern: '/%two_letters_code%/%original_path%/%original_file_name%',
109
140
  title: article[:title]
110
141
  }
111
142
  ]
@@ -14,12 +14,21 @@ command :'export:translations' do |c|
14
14
  @cli_config['categories'].each do |category|
15
15
  @zendesk.locales.select { |locale| !locale.default? }.each do |locale|
16
16
  if lang = category['translations'].detect { |tr| tr['zendesk_locale'].casecmp(locale.locale) == 0 }
17
+ category_xml_files = Dir["#{resources_dir}/#{lang['crowdin_language_code']}/#{category['zendesk_category']}/category_*.xml"]
17
18
  section_xml_files = Dir["#{resources_dir}/#{lang['crowdin_language_code']}/#{category['zendesk_category']}/section_*.xml"]
18
19
  article_xml_files = Dir["#{resources_dir}/#{lang['crowdin_language_code']}/#{category['zendesk_category']}/article_*.xml"]
19
20
 
21
+ all_categories = []
20
22
  all_sections = []
21
23
  all_articles = []
22
24
 
25
+ # Read categories from XML files
26
+ category_xml_files.each do |file|
27
+ category_xml_file = File.read(file)
28
+ category = parse_category_xml(category_xml_file)
29
+ all_categories << category
30
+ end
31
+
23
32
  # Read sections from XML files
24
33
  section_xml_files.each do |file|
25
34
  section_xml_file = File.read(file)
@@ -34,6 +43,25 @@ command :'export:translations' do |c|
34
43
  all_articles << article
35
44
  end
36
45
 
46
+ ### Categories
47
+ #
48
+ categories = @zendesk.hc_categories
49
+ all_categories.each do |category_hash|
50
+ if category = categories.find(id: category_hash[:id])
51
+ if category_tr = category.translations.detect { |tr| tr.locale.casecmp(locale.locale) == 0 }
52
+ category_tr.update(title: category_hash[:name], body: category_hash[:description])
53
+ if category_tr.changed?
54
+ category_tr.save
55
+ puts "[Zendesk] Update `#{lang['crowdin_language_code']}` language translation for Category\##{category.id}."
56
+ end
57
+ else
58
+ category_tr = category.translations.build(locale: locale.locale, title: category_hash[:name], body: category_hash[:description])
59
+ category_tr.save
60
+ puts "[Zendesk] Create `#{lang['crowdin_language_code']}` language translation for Category\##{category.id}."
61
+ end
62
+ end
63
+ end
64
+
37
65
  ### Sections
38
66
  #
39
67
  sections = @zendesk.sections
@@ -46,7 +74,7 @@ command :'export:translations' do |c|
46
74
  puts "[Zendesk] Update `#{lang['crowdin_language_code']}` language translation for Section\##{section.id}."
47
75
  end
48
76
  else
49
- section_tr = section.translations.build(locale: locale.locale, name: section_hash[:name], description: section_hash[:description])
77
+ section_tr = section.translations.build(locale: locale.locale, title: section_hash[:name], body: section_hash[:description])
50
78
  section_tr.save
51
79
  puts "[Zendesk] Create `#{lang['crowdin_language_code']}` language translation for Section\##{section.id}."
52
80
  end
data/lib/zci/export.rb CHANGED
@@ -1,4 +1,19 @@
1
1
  module ZCI
2
+
3
+ def parse_category_xml(xml_file)
4
+ doc = Nokogiri::XML.parse(xml_file)
5
+ category_xml = doc.xpath("//category").first
6
+
7
+ category = {
8
+ id: category_xml[:id],
9
+ name: category_xml.xpath('name').text,
10
+ description: category_xml.xpath('description').text,
11
+ position: category_xml[:position],
12
+ }
13
+
14
+ return category
15
+ end
16
+
2
17
  def parse_section_xml(xml_file)
3
18
  doc = Nokogiri::XML.parse(xml_file)
4
19
  section_xml = doc.xpath("//section").first
data/lib/zci/import.rb CHANGED
@@ -1,4 +1,31 @@
1
1
  module ZCI
2
+
3
+ def build_category_xml(category)
4
+ category_xml = Nokogiri::XML::Builder.new do |xml|
5
+ xml.root {
6
+ xml.category(id: category.id, position: category.position, identifier: 'category', type: 'document') {
7
+ xml.name {
8
+ xml.cdata category.name
9
+ }
10
+ xml.description {
11
+ xml.cdata category.description
12
+ }
13
+ }
14
+ }
15
+ end
16
+
17
+ return category_xml
18
+ end
19
+
20
+ def build_category_hash(category)
21
+ return {
22
+ id: category.id,
23
+ position: category.position,
24
+ name: category.name,
25
+ description: category.description,
26
+ }
27
+ end
28
+
2
29
  def build_section_xml(section)
3
30
  section_xml = Nokogiri::XML::Builder.new do |xml|
4
31
  xml.root {
data/lib/zci/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module ZCI
2
- VERSION = '0.0.5'
2
+ VERSION = '0.1.0'
3
3
  end
data/zci.gemspec CHANGED
@@ -6,6 +6,7 @@ spec = Gem::Specification.new do |s|
6
6
  s.author = 'Anton Maminov'
7
7
  s.email = 'anton.maminov@gmail.com'
8
8
  s.homepage = 'https://github.com/mamantoha/zci'
9
+ s.license = 'MIT'
9
10
  s.platform = Gem::Platform::RUBY
10
11
  s.summary = 'Zendesk and Crowdin integration Command Line Interface (CLI)'
11
12
  s.files = `git ls-files`.split("\n")
@@ -15,14 +16,13 @@ spec = Gem::Specification.new do |s|
15
16
  # s.rdoc_options << '--title' << 'zci' << '--main' << 'README.rdoc' << '-ri'
16
17
  s.bindir = 'bin'
17
18
  s.executables << 'zci'
18
- s.add_runtime_dependency('nokogiri')
19
- s.add_runtime_dependency('rubyzip')
20
- s.add_runtime_dependency('crowdin-api')
21
- s.add_runtime_dependency('zendesk_api')
22
- s.add_runtime_dependency('zendesk_help_center_api')
23
- s.add_runtime_dependency('gli','2.13.0')
24
- s.add_development_dependency('rake')
25
- s.add_development_dependency('rdoc')
26
- s.add_development_dependency('aruba')
27
- s.add_development_dependency('byebug')
19
+ s.add_runtime_dependency 'nokogiri', '~> 0'
20
+ s.add_runtime_dependency 'rubyzip', '~> 0'
21
+ s.add_runtime_dependency 'crowdin-api','~> 0'
22
+ s.add_runtime_dependency 'zendesk_api','~> 0'
23
+ s.add_runtime_dependency 'zendesk_help_center_api', '~> 0.1.0'
24
+ s.add_runtime_dependency 'gli', '~> 0'
25
+ s.add_development_dependency 'rake','~> 0'
26
+ s.add_development_dependency 'rdoc', '~> 0'
27
+ s.add_development_dependency 'aruba', '~> 0'
28
28
  end
metadata CHANGED
@@ -1,153 +1,139 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zci
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Anton Maminov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-09-13 00:00:00.000000000 Z
11
+ date: 2017-03-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
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
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rubyzip
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: crowdin-api
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: zendesk_api
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ">="
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: zendesk_help_center_api
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ">="
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '0'
75
+ version: 0.1.0
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ">="
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '0'
82
+ version: 0.1.0
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: gli
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - '='
87
+ - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: 2.13.0
89
+ version: '0'
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - '='
94
+ - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: 2.13.0
96
+ version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: rake
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - ">="
101
+ - - "~>"
102
102
  - !ruby/object:Gem::Version
103
103
  version: '0'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - ">="
108
+ - - "~>"
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: rdoc
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - ">="
115
+ - - "~>"
116
116
  - !ruby/object:Gem::Version
117
117
  version: '0'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - ">="
122
+ - - "~>"
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: aruba
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - ">="
130
- - !ruby/object:Gem::Version
131
- version: '0'
132
- type: :development
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - ">="
137
- - !ruby/object:Gem::Version
138
- version: '0'
139
- - !ruby/object:Gem::Dependency
140
- name: byebug
141
- requirement: !ruby/object:Gem::Requirement
142
- requirements:
143
- - - ">="
129
+ - - "~>"
144
130
  - !ruby/object:Gem::Version
145
131
  version: '0'
146
132
  type: :development
147
133
  prerelease: false
148
134
  version_requirements: !ruby/object:Gem::Requirement
149
135
  requirements:
150
- - - ">="
136
+ - - "~>"
151
137
  - !ruby/object:Gem::Version
152
138
  version: '0'
153
139
  description:
@@ -183,7 +169,8 @@ files:
183
169
  - zci.gemspec
184
170
  - zci.yml.example
185
171
  homepage: https://github.com/mamantoha/zci
186
- licenses: []
172
+ licenses:
173
+ - MIT
187
174
  metadata: {}
188
175
  post_install_message:
189
176
  rdoc_options: []
@@ -202,7 +189,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
202
189
  version: '0'
203
190
  requirements: []
204
191
  rubyforge_project:
205
- rubygems_version: 2.5.1
192
+ rubygems_version: 2.6.11
206
193
  signing_key:
207
194
  specification_version: 4
208
195
  summary: Zendesk and Crowdin integration Command Line Interface (CLI)