puttext 0.1.1 → 0.2.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
  SHA1:
3
- metadata.gz: fac5102026ae80e025df57123e788c59bb86dcde
4
- data.tar.gz: 9f69eb609c8a20219fdafd1a5c8a82e538ba932f
3
+ metadata.gz: 17a3eeac3b04d7960efb45c4bb8612d6d27e7dd0
4
+ data.tar.gz: c7f567b35813bbda434db72d9d78d808c0cdcc92
5
5
  SHA512:
6
- metadata.gz: 75cee545d0d2425d1928b7b0a0238b969d27742cc2561095e2a92d8165ee835c329e52c359f289eeb53119344e085b08029cae39c9135f808119340d875daf60
7
- data.tar.gz: 181bc262c9a808c8ab7efaa6e9468dea8def9d188f9a3f194c42122095b98fdde0ffb75d969617302500e058a52ba759d324750c6c30a801550dca9260b212af
6
+ metadata.gz: c3aee3dda5612c226367c922913b1250f6693f62a372d2c7c9a9e7b5d362888c3d647a578fd5b72858831d7b57373b8d8437323eed0f3da374713b60cd185f82
7
+ data.tar.gz: baf6b7a5508f58c0adac8ecb8fb64d55c80eba49879bbd224192e1a885bf7e58599259e127b1ff24cbd9d2f053ebad709e7fd3f809f13d0a518d34c5853e80e0
File without changes
File without changes
data/.gitignore CHANGED
File without changes
data/.rspec CHANGED
File without changes
File without changes
File without changes
File without changes
data/Gemfile CHANGED
File without changes
@@ -1,8 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- puttext (0.1.1)
4
+ puttext (0.2.0)
5
5
  parser (>= 2.4.0.0, < 3.0)
6
+ unindent
6
7
 
7
8
  GEM
8
9
  remote: https://rubygems.org/
@@ -48,6 +49,7 @@ GEM
48
49
  tilt (>= 1.3.3, < 2.1)
49
50
  temple (0.7.7)
50
51
  tilt (2.0.7)
52
+ timecop (0.8.1)
51
53
  unicode-display_width (1.2.1)
52
54
  unindent (1.0)
53
55
 
@@ -62,7 +64,7 @@ DEPENDENCIES
62
64
  rubocop (~> 0.46.0)
63
65
  simplecov
64
66
  slim (~> 3.0)
65
- unindent
67
+ timecop
66
68
 
67
69
  BUNDLED WITH
68
70
  1.14.6
data/LICENSE CHANGED
File without changes
data/README.md CHANGED
File without changes
data/Rakefile CHANGED
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -15,6 +15,8 @@ module PutText
15
15
  attr_reader :msgid
16
16
  attr_reader :msgid_plural
17
17
  attr_reader :msgctxt
18
+ attr_reader :msgstr
19
+ attr_reader :flags
18
20
  attr_reader :references
19
21
 
20
22
  # Create a new POEntry
@@ -26,8 +28,10 @@ module PutText
26
28
  # @option attrs [String] :msgid_plural the pluralized id of the string (the
27
29
  # pluralized string that needs to be translated).
28
30
  # @option attrs [String] :msgctxt the context of the string.
31
+ # @option attrs [Array<String>] :msgstr the translated strings.
29
32
  # @option attrs [Array<String>] :references a list of files with line
30
33
  # numbers, pointing to where the string was found.
34
+ # @option attrs [Array<String>] :flags a list of flags for this entry.
31
35
  # @option attrs [String] :separator the separator of context from id in
32
36
  # :msgid.
33
37
  def initialize(attrs)
@@ -38,7 +42,9 @@ module PutText
38
42
  @msgid = id
39
43
  @msgctxt = attrs[:msgctxt] || ctx
40
44
  @msgid_plural = attrs[:msgid_plural]
45
+ @msgstr = Array(attrs[:msgstr] || '')
41
46
  @references = attrs[:references] || []
47
+ @flags = attrs[:flags] || []
42
48
  end
43
49
 
44
50
  # Convert the entry to a string representation, to be written to a .po file
@@ -48,6 +54,7 @@ module PutText
48
54
 
49
55
  # Add comments
50
56
  str = add_comment(str, ':', @references.join(' ')) if references?
57
+ str = add_comment(str, ',', @flags.join("\n")) if flags?
51
58
 
52
59
  # Add id and context
53
60
  str = add_string(str, 'msgctxt', @msgctxt) if @msgctxt
@@ -64,6 +71,12 @@ module PutText
64
71
  !@references.empty?
65
72
  end
66
73
 
74
+ # Check if the entry has any flags.
75
+ # @return [Boolean] whether the entry has any flags.
76
+ def flags?
77
+ !@flags.empty?
78
+ end
79
+
67
80
  # Check if the entry has a plural form.
68
81
  # @return [Boolean] whether the entry has a plural form.
69
82
  def plural?
@@ -123,10 +136,11 @@ module PutText
123
136
 
124
137
  def add_translations(str)
125
138
  if plural?
126
- add_string(str, 'msgstr[0]', '')
127
- add_string(str, 'msgstr[1]', '')
139
+ @msgstr.each_with_index do |msgstr, index|
140
+ add_string(str, "msgstr[#{index}]", msgstr)
141
+ end
128
142
  else
129
- add_string(str, 'msgstr', '')
143
+ add_string(str, 'msgstr', @msgstr.first)
130
144
  end
131
145
 
132
146
  str
@@ -1,5 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'unindent'
4
+ require_relative 'po_entry'
5
+
3
6
  module PutText
4
7
  class POFile
5
8
  attr_accessor :entries
@@ -9,6 +12,18 @@ module PutText
9
12
  # be placed in this file.
10
13
  def initialize(entries)
11
14
  @entries = entries
15
+
16
+ now = Time.now.strftime('%Y-%m-%d %H:%M%z')
17
+
18
+ @header_entry = POEntry.new(
19
+ flags: ['fuzzy'],
20
+ msgid: '',
21
+ msgstr: <<-STRING.unindent
22
+ POT-Creation-Date: #{now}
23
+ MIME-Version: 1.0
24
+ Content-Type: text/plain; charset=UTF-8
25
+ STRING
26
+ )
12
27
  end
13
28
 
14
29
  def to_s
@@ -22,8 +37,10 @@ module PutText
22
37
  def write_to(io)
23
38
  deduplicate
24
39
 
25
- @entries.each_with_index do |entry, index|
26
- io.write("\n") unless index == 0
40
+ io.write(@header_entry.to_s)
41
+
42
+ @entries.each do |entry|
43
+ io.write("\n")
27
44
  io.write(entry.to_s)
28
45
  end
29
46
  end
@@ -4,7 +4,7 @@ require 'date'
4
4
 
5
5
  Gem::Specification.new do |s|
6
6
  s.name = 'puttext'
7
- s.version = '0.1.1'
7
+ s.version = '0.2.0'
8
8
  s.date = Date.today.to_s
9
9
  s.summary = 'Extract gettext strings from Ruby source'
10
10
  s.authors = ['Mantas Norvaiša']
@@ -19,6 +19,7 @@ Gem::Specification.new do |s|
19
19
  s.required_ruby_version = '>= 2.0.0'
20
20
 
21
21
  s.add_runtime_dependency('parser', '>= 2.4.0.0', '< 3.0')
22
+ s.add_runtime_dependency('unindent')
22
23
 
23
24
  # Optional dependencies at runtime, required for development
24
25
  s.add_development_dependency('slim', '~> 3.0')
@@ -28,7 +29,7 @@ Gem::Specification.new do |s|
28
29
 
29
30
  # Testing
30
31
  s.add_development_dependency('rspec', '~> 3.5')
31
- s.add_development_dependency('unindent')
32
+ s.add_development_dependency('timecop')
32
33
 
33
34
  # Linters and code policies
34
35
  s.add_development_dependency('rubocop', '~> 0.46.0')
File without changes
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'simplecov'
4
+ require 'timecop'
4
5
 
5
6
  SimpleCov.start do
6
7
  add_filter '/spec/'
File without changes
File without changes
File without changes
@@ -135,6 +135,29 @@ describe PutText::POEntry do
135
135
  end
136
136
  end
137
137
 
138
+ describe '#flags?' do
139
+ context 'entry has flags' do
140
+ let(:entry) do
141
+ described_class.new(
142
+ msgid: 'An error occurred!',
143
+ flags: ['fuzzy']
144
+ )
145
+ end
146
+
147
+ it 'returns true' do
148
+ expect(entry.flags?).to be true
149
+ end
150
+ end
151
+
152
+ context 'entry does not have flags' do
153
+ let(:entry) { described_class.new(msgid: 'An error occurred!') }
154
+
155
+ it 'returns false' do
156
+ expect(entry.flags?).to be false
157
+ end
158
+ end
159
+ end
160
+
138
161
  describe '#plural?' do
139
162
  context 'entry is a pluralized entry' do
140
163
  let(:entry) do
@@ -257,7 +280,6 @@ describe PutText::POEntry do
257
280
  msgid "An error occurred!"
258
281
  msgid_plural "%d errors occurred!"
259
282
  msgstr[0] ""
260
- msgstr[1] ""
261
283
  PO
262
284
  end
263
285
  end
@@ -36,10 +36,25 @@ describe PutText::POFile do
36
36
  )
37
37
  end
38
38
 
39
+ before do
40
+ Timecop.freeze(Time.utc(2017))
41
+ end
42
+
43
+ after do
44
+ Timecop.return
45
+ end
46
+
39
47
  let(:file) { described_class.new([entry_1, entry_2, entry_3]) }
40
48
 
41
49
  it 'generates correct string' do
42
50
  expect(file.to_s).to eq(<<-PO.unindent)
51
+ #, fuzzy
52
+ msgid ""
53
+ msgstr ""
54
+ "POT-Creation-Date: 2017-01-01 00:00+0000\\n"
55
+ "MIME-Version: 1.0\\n"
56
+ "Content-Type: text/plain; charset=UTF-8\\n"
57
+
43
58
  #: error1.rb:1
44
59
  msgid "Error #1 occurred"
45
60
  msgstr ""
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: puttext
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mantas Norvaiša
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-04-20 00:00:00.000000000 Z
11
+ date: 2017-05-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parser
@@ -30,6 +30,20 @@ dependencies:
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
32
  version: '3.0'
33
+ - !ruby/object:Gem::Dependency
34
+ name: unindent
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
33
47
  - !ruby/object:Gem::Dependency
34
48
  name: slim
35
49
  requirement: !ruby/object:Gem::Requirement
@@ -73,7 +87,7 @@ dependencies:
73
87
  - !ruby/object:Gem::Version
74
88
  version: '3.5'
75
89
  - !ruby/object:Gem::Dependency
76
- name: unindent
90
+ name: timecop
77
91
  requirement: !ruby/object:Gem::Requirement
78
92
  requirements:
79
93
  - - ">="
@@ -192,7 +206,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
192
206
  version: '0'
193
207
  requirements: []
194
208
  rubyforge_project:
195
- rubygems_version: 2.6.11
209
+ rubygems_version: 2.6.8
196
210
  signing_key:
197
211
  specification_version: 4
198
212
  summary: Extract gettext strings from Ruby source