Class: Babelyoda::Keyset

Inherits:
Object
  • Object
show all
Defined in:
lib/babelyoda/keyset.rb,
lib/babelyoda/tanker.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.



13
14
15
16
# File 'lib/babelyoda/keyset.rb', line 13

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

Instance Attribute Details

#keysObject

Returns the value of attribute keys.



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

def keys
  @keys
end

#nameObject

Returns the value of attribute name.



3
4
5
# File 'lib/babelyoda/keyset.rb', line 3

def name
  @name
end

Class Method Details

.keyset_name(filename) ⇒ Object

Raises:

  • (ArgumentError)


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

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



25
26
27
28
29
30
31
# File 'lib/babelyoda/tanker.rb', line 25

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

#drop_empty!Object



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

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

#empty?Boolean

Returns:

  • (Boolean)


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

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

#ensure_languages!(languages = []) ⇒ Object



43
44
45
46
47
48
49
# File 'lib/babelyoda/keyset.rb', line 43

def ensure_languages!(languages = [])
  @keys.each_value do |key|
    languages.each do |language| 
      key.values[language] ||= Babelyoda::LocalizationValue.new(language, '')
    end
  end
end

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



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

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



35
36
37
38
39
40
41
# File 'lib/babelyoda/keyset.rb', line 35

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



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

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

#to_xml(xml, language = nil) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/babelyoda/tanker.rb', line 11

def to_xml(xml, language = nil)
  xml.keyset(:id => name) do
    keys.each_value do |key|
      xml.key(:id => key.id, :is_plural => 'False') do
        xml.context(key.context)
        key.values.each_value do |value|
          next if language && (value.language.to_s != language.to_s)
          xml.value(value.text, :language => value.language, :status => value.status)
        end
      end
    end
  end
end