Class: Freeb::Converter

Inherits:
Object
  • Object
show all
Defined in:
lib/freeb/converter.rb

Class Method Summary collapse

Class Method Details

.freebase_id_to_topic(freebase_id, model) ⇒ Object



3
4
5
6
7
8
9
10
11
12
# File 'lib/freeb/converter.rb', line 3

def self.freebase_id_to_topic(freebase_id, model)
  config = ModelConfig.get(model)
  query_properties = ModelConfig.get_query_properties(model)
  mql = {
    :id => freebase_id,
    :type => config[:type],
    :name => nil
  }.merge(query_properties)
  API.topic(mql)
end

.name_to_topic(name, model) ⇒ Object



14
15
16
17
18
19
20
21
22
23
# File 'lib/freeb/converter.rb', line 14

def self.name_to_topic(name, model)
  config = ModelConfig.get(model)
  query_properties = ModelConfig.get_query_properties(model)
  mql = {
    :id => nil,
    :type => config[:type],
    :name => name
  }.merge(query_properties)
  API.topic(mql)
end

.topic_hash_to_freebase_topic_record(topic_hash) ⇒ Object



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

def self.topic_hash_to_freebase_topic_record(topic_hash)
  hash = {
    :freebase_id => topic_hash["id"],
    :name => topic_hash["name"]
  }
  record = FreebaseTopic.find_or_create_by_freebase_id(hash)
end

.topic_to_record_attributes(topic, model) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/freeb/converter.rb', line 25

def self.topic_to_record_attributes(topic, model)
  config = ModelConfig.get(model)
  attributes = {
    :freebase_id => topic.id,
    :name => topic.name
  }
  config[:properties].each do |key, property_config|
    if property_config[:method].blank?
      attributes[key] = topic[property_config[:id]]
    else
      attributes[key] = model.send(property_config[:method], topic)
    end
  end
  config[:topics].each do |key, topic_config|
    attributes[key] = topic[topic_config[:id]].collect { |hash| topic_hash_to_freebase_topic_record(hash) }
  end
  config[:has_many].each do |key, association_config|
    records = topic[association_config[:id]]
    model = association_config[:class_name].constantize
    attributes[key] = records.collect { |hash|
      topic = Topic.new(hash)
      hash = topic_to_record_attributes(topic, model)
      model.ffind_or_create(hash) }
  end
  attributes
end