Class: Babelyoda::Keyset

Inherits:
Object
  • Object
show all
Defined in:
lib/babelyoda/keyset.rb,
lib/babelyoda/tanker.rb,
lib/babelyoda/strings.rb

Direct Known Subclasses

Strings

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name) ⇒ Keyset

Returns a new instance of Keyset.



15
16
17
18
# File 'lib/babelyoda/keyset.rb', line 15

def initialize(name)
  @name = name
  @keys = {}
end

Instance Attribute Details

#keysObject

Returns the value of attribute keys.



6
7
8
# File 'lib/babelyoda/keyset.rb', line 6

def keys
  @keys
end

#nameObject

Returns the value of attribute name.



5
6
7
# File 'lib/babelyoda/keyset.rb', line 5

def name
  @name
end

Class Method Details

.keyset_name(filename) ⇒ Object

Raises:

  • (ArgumentError)


8
9
10
11
12
13
# File 'lib/babelyoda/keyset.rb', line 8

def self.keyset_name(filename)
  raise ArgumentError.new("Invlaid filename for a .strings file: #{filename}") unless filename.match(/\.strings$/)
  parts = File.join(File.dirname(filename), File.basename(filename, '.strings')).split('/')
  parts.delete_if { |part| part.match(/\.lproj$/) }
  File.join(parts)
end

.parse_xml(node) ⇒ Object



21
22
23
24
25
26
27
# File 'lib/babelyoda/tanker.rb', line 21

def self.parse_xml(node)
  result = self.new(node[:id])
  node.css('key').each do |key_node|
    result.merge_key!(Babelyoda::LocalizationKey.parse_xml(key_node))
  end
  result
end

Instance Method Details

#debug_counts(languages = []) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/babelyoda/keyset.rb', line 22

def debug_counts(languages = [])
  counts = languages.map do |language|
    count = 0
    keys.each_value do |key|
      count += 1 if key.values.has_key?(language)
    end
    count
  end
  $logger.debug "=== DEBUG COUNTS FOR: #{name} ==="
  languages.each_with_index do |language, index|
    $logger.debug "#{language}: #{counts[index]}"
  end
  $logger.debug "=== // DEBUG COUNTS FOR: #{name} ==="
end

#drop_empty!Object



66
67
68
69
70
71
# File 'lib/babelyoda/keyset.rb', line 66

def drop_empty!
  @keys.delete_if do |id, key|
    key.drop_empty!
    key.empty?
  end
end

#empty?Boolean

Returns:

  • (Boolean)


37
# File 'lib/babelyoda/keyset.rb', line 37

def empty? ; keys.size == 0 ; end

#ensure_languages!(languages = []) ⇒ Object



60
61
62
63
64
# File 'lib/babelyoda/keyset.rb', line 60

def ensure_languages!(languages = [])
  @keys.each_value do |key|
    key.ensure_languages!(languages)
  end
end

#merge!(keyset, options = {}) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/babelyoda/keyset.rb', line 39

def merge!(keyset, options = {})
  result = { :new => 0, :updated => 0 }
  keyset.keys.each_pair do |id, key|
    if @keys.has_key?(id)
      result[:updated] += 1 if @keys[id].merge!(key, options)
    else
      @keys[id] = key.dup
      result[:new] += 1
    end
  end
  return result
end

#merge_key!(localization_key) ⇒ Object



52
53
54
55
56
57
58
# File 'lib/babelyoda/keyset.rb', line 52

def merge_key!(localization_key)
  if @keys.has_key?(localization_key.id)
    @keys[localization_key.id].merge!(localization_key)
  else
    @keys[localization_key.id] = localization_key
  end
end

#to_sObject



20
# File 'lib/babelyoda/keyset.rb', line 20

def to_s ; "<#{self.class}: name = #{name}, keys.size = #{keys.size}>" ; end

#to_strings(io, language) ⇒ Object



11
12
13
14
15
16
17
# File 'lib/babelyoda/strings.rb', line 11

def to_strings(io, language)
  keys.keys.sort.each do |key|
    localization_key = keys[key]
    localization_key.to_strings(io, language)
  end
  io << "/* No strings yet. */\n" if io.size == 0
end

#to_xml(xml, language = nil) ⇒ Object



13
14
15
16
17
18
19
# File 'lib/babelyoda/tanker.rb', line 13

def to_xml(xml, language = nil)
  xml.keyset(:id => name) do
    keys.each_value do |key|
      key.to_xml(xml, language)
    end
  end
end