class Smartdict::Models::Translation

Public Class Methods

create_from_struct(struct) click to toggle source

Create {Smartdict::Models::Translation} from {Smartdict::Translation}.

# File lib/smartdict/models/translation.rb, line 26
def self.create_from_struct(struct)
  from_lang = Language[struct.from_lang]
  to_lang   = Language[struct.to_lang]
  driver    = Driver[struct.driver]

  word = Word.first_or_create(:name => struct.word, :language_id => from_lang.id)
  word.save!

  translation = self.create(
    :word          => word,
    :driver        => driver,
    :from_lang_id  => from_lang.id,
    :to_lang_id    => to_lang.id,
    :transcription => struct.transcription
  )

  struct.translated.each do |word_class_name, meanings|
    meanings.each do |meaning|
      w = Word.first_or_create(:name => meaning, :language_id => to_lang.id)
      word_class = WordClass[word_class_name]
      TranslatedWord.create(:word => w, :word_class => word_class, :translation => translation)
    end
  end

  translation
end
find(word, from_lang_code, to_lang_code, driver_name) click to toggle source
# File lib/smartdict/models/translation.rb, line 53
def self.find(word, from_lang_code, to_lang_code, driver_name)
  from_lang = Language[from_lang_code]
  to_lang   = Language[to_lang_code]
  driver    = Driver[driver_name]

  word = Word.first(:name => word, :language_id => from_lang.id)
  self.first(:from_lang => from_lang, :to_lang => to_lang, :word => word, :driver => driver)
end
new(*args) click to toggle source

TODO: it’s a hack which necessary because of weird DM bugs.

Calls superclass method
# File lib/smartdict/models/translation.rb, line 64
def initialize(*args)
  self.class.finalize
  self.word_class_id = 1
  super(*args)
end

Public Instance Methods

to_struct() click to toggle source
# File lib/smartdict/models/translation.rb, line 70
def to_struct
  struct = Smartdict::Translation.new(
    :word          => word.name,
    :transcription => self.transcription,
    :from_lang     => from_lang.code,
    :to_lang       => to_lang.code,
    :driver        => driver.name
  )
  translated_words.each do |tw|
    struct[tw.word_class.name] << tw.word.name
  end
  struct
end