Class: Crunchbase::Model::Entity

Inherits:
Object
  • Object
show all
Extended by:
Request::Client
Defined in:
lib/crunchbase/model/entity.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Request::Client

api, array_from_list, funding_rounds_lists, get, kclass_name, list, organization_lists, parsing_from_list, person_lists, total_items_from_list

Constructor Details

#initialize(json) ⇒ Entity

Returns a new instance of Entity.



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/crunchbase/model/entity.rb', line 11

def initialize(json)
  instance_variable_set('@type_name', json['type'] || nil)
  instance_variable_set('@uuid',  json['uuid'] || nil)

  properties = json['properties'] || {}
  property_keys.each { |v| instance_variable_set("@#{v}", properties[v]) }
  date_keys.each { |v| instance_variable_set("@#{v}", properties[v].nil? ? nil : Date.parse(properties[v])) }

  instance_timestamps(properties)

  relationships = json['relationships']
  return if relationships.nil? || relationship_lists.empty?

  setup_relationships_data!(relationships)
end

Instance Attribute Details

#type_nameObject (readonly)

Returns the value of attribute type_name.



9
10
11
# File 'lib/crunchbase/model/entity.rb', line 9

def type_name
  @type_name
end

#uuidObject (readonly)

Returns the value of attribute uuid.



9
10
11
# File 'lib/crunchbase/model/entity.rb', line 9

def uuid
  @uuid
end

Instance Method Details

#convert_date!(date) ⇒ Object



39
40
41
42
43
44
45
# File 'lib/crunchbase/model/entity.rb', line 39

def convert_date!(date)
  return Time.parse(date) if date.is_a?(String)

  Time.at(date)
rescue
  nil
end

#date_keysObject



59
60
61
# File 'lib/crunchbase/model/entity.rb', line 59

def date_keys
  []
end

#fetchObject



47
48
49
50
51
52
# File 'lib/crunchbase/model/entity.rb', line 47

def fetch
  fetch_object = get_fetch_object
  return [] if fetch_object.empty?

  fetch_object[0].new Crunchbase::API.fetch(permalink, fetch_object[1])
end

#instance_multi_relationship_objects(kclass, key, items) ⇒ Object



125
126
127
128
129
130
131
# File 'lib/crunchbase/model/entity.rb', line 125

def instance_multi_relationship_objects(kclass, key, items)
  multi_items = []

  items.map { |item| multi_items << kclass.new(item || nil) }
  instance_variable_set "@#{key}", multi_items
  instance_variable_set "@#{key}_total_items", multi_items.size
end

#instance_relationships_object(kclass, key, item) ⇒ Object



119
120
121
122
123
# File 'lib/crunchbase/model/entity.rb', line 119

def instance_relationships_object(kclass, key, item)
  return unless item

  instance_variable_set "@#{key}", (kclass.new(item) || nil)
end

#instance_timestamps(properties) ⇒ Object



33
34
35
36
37
# File 'lib/crunchbase/model/entity.rb', line 33

def instance_timestamps(properties)
  %w(created_at updated_at).each do |v|
    instance_variable_set("@#{v}", convert_date!(properties[v]))
  end
end

#one_to_many(kclass, key, list) ⇒ Object



108
109
110
111
112
113
# File 'lib/crunchbase/model/entity.rb', line 108

def one_to_many(kclass, key, list)
  return unless list['items'].respond_to?(:each)

  set_variables(kclass, key, list['items'])
  instance_variable_set "@#{key}_total_items", list['paging']['total_items']
end

#one_to_one(kclass, key, item) ⇒ Object



84
85
86
87
88
89
90
# File 'lib/crunchbase/model/entity.rb', line 84

def one_to_one(kclass, key, item)
  return unless item

  result = special_relationship(kclass, item)
  instance_variable_set "@#{key}", result[:item]
  instance_variable_set "@#{key}_total_items", result[:count]
end

#parse_hash_items(kclass, key, list) ⇒ Object



78
79
80
81
82
# File 'lib/crunchbase/model/entity.rb', line 78

def parse_hash_items(kclass, key, list)
  one_to_one(kclass, key, list)
  one_to_one(kclass, key, list['item']) if list['item']
  one_to_many(kclass, key, list) if list['items']
end

#property_keysObject

TODO: need to be implement



55
56
57
# File 'lib/crunchbase/model/entity.rb', line 55

def property_keys
  []
end

#relationship_listsObject



63
64
65
# File 'lib/crunchbase/model/entity.rb', line 63

def relationship_lists
  { }
end

#set_relationships_object(kclass, key, list) ⇒ Object



67
68
69
70
71
72
73
74
75
76
# File 'lib/crunchbase/model/entity.rb', line 67

def set_relationships_object(kclass, key, list)
  return if list.nil? || list.empty?
  return unless list

  if list.is_a?(Array)
    set_variables(kclass, key, list)
  elsif list.is_a?(Hash)
    parse_hash_items(kclass, key, list)
  end
end

#set_variables(kclass, key, items) ⇒ Object



115
116
117
# File 'lib/crunchbase/model/entity.rb', line 115

def set_variables(kclass, key, items)
  instance_variable_set "@#{key}", items.inject([]) { |v, i| v << kclass.new(i) }
end

#setup_relationships_data!(relationships) ⇒ Object



27
28
29
30
31
# File 'lib/crunchbase/model/entity.rb', line 27

def setup_relationships_data!(relationships)
  relationship_lists.each do |key, kclass|
    set_relationships_object(kclass, key, relationships[key])
  end
end

#special_relationship(kclass, item) ⇒ Object

"cardinality"=>"OneToOne",
"paging"=>{"total_items"=>0,
"first_page_url"=>"https://api.crunchbase.com/v3.1/organizations/facebook/acquired_by",
"sort_order"=>"not_ordered"



98
99
100
101
102
# File 'lib/crunchbase/model/entity.rb', line 98

def special_relationship(kclass, item)
  return { item: nil, count: 0 } if verify_item?(item)

  { item: (kclass.new(item) || nil), count: (item ? 1 : 0) }
end

#verify_item?(item) ⇒ Boolean

Returns:



104
105
106
# File 'lib/crunchbase/model/entity.rb', line 104

def verify_item?(item)
  item['cardinality'] == 'OneToOne' && (item['paging']['total_items']).zero?
end