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.



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

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

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

  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.



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

def type_name
  @type_name
end

#uuidObject (readonly)

Returns the value of attribute uuid.



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

def uuid
  @uuid
end

Instance Method Details

#convert_date!(date) ⇒ Object



42
43
44
45
46
47
48
# File 'lib/crunchbase/model/entity.rb', line 42

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

  Time.at(date)
rescue StandardError
  nil
end

#date_keysObject



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

def date_keys
  []
end

#fetchObject



50
51
52
53
54
55
# File 'lib/crunchbase/model/entity.rb', line 50

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



128
129
130
131
132
133
134
# File 'lib/crunchbase/model/entity.rb', line 128

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



122
123
124
125
126
# File 'lib/crunchbase/model/entity.rb', line 122

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

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

#instance_timestamps(properties) ⇒ Object



36
37
38
39
40
# File 'lib/crunchbase/model/entity.rb', line 36

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



111
112
113
114
115
116
# File 'lib/crunchbase/model/entity.rb', line 111

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



87
88
89
90
91
92
93
# File 'lib/crunchbase/model/entity.rb', line 87

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



81
82
83
84
85
# File 'lib/crunchbase/model/entity.rb', line 81

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



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

def property_keys
  []
end

#relationship_listsObject



66
67
68
# File 'lib/crunchbase/model/entity.rb', line 66

def relationship_lists
  {}
end

#set_relationships_object(kclass, key, list) ⇒ Object



70
71
72
73
74
75
76
77
78
79
# File 'lib/crunchbase/model/entity.rb', line 70

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



118
119
120
# File 'lib/crunchbase/model/entity.rb', line 118

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

#setup_relationships_data!(relationships) ⇒ Object



30
31
32
33
34
# File 'lib/crunchbase/model/entity.rb', line 30

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"



101
102
103
104
105
# File 'lib/crunchbase/model/entity.rb', line 101

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:

  • (Boolean)


107
108
109
# File 'lib/crunchbase/model/entity.rb', line 107

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