Class: Pipl::FieldsContainer

Inherits:
Object
  • Object
show all
Defined in:
lib/pipl/containers.rb

Direct Known Subclasses

Person, Relationship, Source

Constant Summary collapse

CLASS_CONTAINER =
{
    Name: 'names',
    Address: 'addresses',
    Phone: 'phones',
    Email: 'emails',
    Job: 'jobs',
    Education: 'educations',
    Image: 'images',
    Username: 'usernames',
    UserID: 'user_ids',
    Url: 'urls',
    Ethnicity: 'ethnicities',
    Language: 'languages',
    OriginCountry: 'origin_countries',
    Relationship: 'relationships',
    Tag: 'tags',
    Vehicle: 'vehicles',
}

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(params = {}) ⇒ FieldsContainer

Returns a new instance of FieldsContainer.



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/pipl/containers.rb', line 31

def initialize(params={})
  @names = []
  @addresses = []
  @phones = []
  @emails = []
  @jobs = []
  @educations = []
  @images = []
  @usernames = []
  @user_ids = []
  @urls = []
  @ethnicities = []
  @languages = []
  @origin_countries = []
  @relationships = []
  @tags = []
  @dob = nil
  @gender = nil
  @vehicles = []

  add_fields params[:fields] if params.key? :fields
end

Instance Attribute Details

#addressesObject (readonly)

Returns the value of attribute addresses.



28
29
30
# File 'lib/pipl/containers.rb', line 28

def addresses
  @addresses
end

#dobObject (readonly)

Returns the value of attribute dob.



29
30
31
# File 'lib/pipl/containers.rb', line 29

def dob
  @dob
end

#educationsObject (readonly)

Returns the value of attribute educations.



28
29
30
# File 'lib/pipl/containers.rb', line 28

def educations
  @educations
end

#emailsObject (readonly)

Returns the value of attribute emails.



28
29
30
# File 'lib/pipl/containers.rb', line 28

def emails
  @emails
end

#ethnicitiesObject (readonly)

Returns the value of attribute ethnicities.



29
30
31
# File 'lib/pipl/containers.rb', line 29

def ethnicities
  @ethnicities
end

#genderObject (readonly)

Returns the value of attribute gender.



29
30
31
# File 'lib/pipl/containers.rb', line 29

def gender
  @gender
end

#imagesObject (readonly)

Returns the value of attribute images.



28
29
30
# File 'lib/pipl/containers.rb', line 28

def images
  @images
end

#jobsObject (readonly)

Returns the value of attribute jobs.



28
29
30
# File 'lib/pipl/containers.rb', line 28

def jobs
  @jobs
end

#languagesObject (readonly)

Returns the value of attribute languages.



29
30
31
# File 'lib/pipl/containers.rb', line 29

def languages
  @languages
end

#namesObject (readonly)

Returns the value of attribute names.



28
29
30
# File 'lib/pipl/containers.rb', line 28

def names
  @names
end

#origin_countriesObject (readonly)

Returns the value of attribute origin_countries.



29
30
31
# File 'lib/pipl/containers.rb', line 29

def origin_countries
  @origin_countries
end

#phonesObject (readonly)

Returns the value of attribute phones.



28
29
30
# File 'lib/pipl/containers.rb', line 28

def phones
  @phones
end

#relationshipsObject (readonly)

Returns the value of attribute relationships.



29
30
31
# File 'lib/pipl/containers.rb', line 29

def relationships
  @relationships
end

#tagsObject (readonly)

Returns the value of attribute tags.



29
30
31
# File 'lib/pipl/containers.rb', line 29

def tags
  @tags
end

#urlsObject (readonly)

Returns the value of attribute urls.



28
29
30
# File 'lib/pipl/containers.rb', line 28

def urls
  @urls
end

#user_idsObject (readonly)

Returns the value of attribute user_ids.



28
29
30
# File 'lib/pipl/containers.rb', line 28

def user_ids
  @user_ids
end

#usernamesObject (readonly)

Returns the value of attribute usernames.



28
29
30
# File 'lib/pipl/containers.rb', line 28

def usernames
  @usernames
end

#vehiclesObject (readonly)

Returns the value of attribute vehicles.



29
30
31
# File 'lib/pipl/containers.rb', line 29

def vehicles
  @vehicles
end

Class Method Details

.fields_from_hash(h) ⇒ Object



58
59
60
61
62
63
64
65
66
67
# File 'lib/pipl/containers.rb', line 58

def self.fields_from_hash(h)
  fields = self::CLASS_CONTAINER.map do |cls_name, container|
    cls = Pipl.const_get cls_name
    h[container.to_sym].map { |x| cls.from_hash(x) } if h.key? container.to_sym
  end
               .flatten.compact
  fields << DOB.from_hash(h[:dob]) if h.key? :dob
  fields << Gender.from_hash(h[:gender]) if h.key? :gender
  fields
end

.from_hash(h) ⇒ Object



54
55
56
# File 'lib/pipl/containers.rb', line 54

def self.from_hash(h)
  raise AbstractMethodInvoked.new
end

Instance Method Details

#add_field(field) ⇒ Object



84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/pipl/containers.rb', line 84

def add_field(field)
  cls_sym = field.class.name.split('::').last.to_sym
  container = self.class::CLASS_CONTAINER[cls_sym]
  if container
    instance_variable_get("@#{container}") << field
  elsif cls_sym == :DOB
    @dob = field
  elsif cls_sym == :Gender
    @gender = field
  else
    raise ArgumentError.new("Object of type #{field.class} is an invalid field")
  end
end

#add_fields(fields) ⇒ Object



80
81
82
# File 'lib/pipl/containers.rb', line 80

def add_fields(fields)
  fields.each { |f| add_field f }
end

#addressObject



110
111
112
# File 'lib/pipl/containers.rb', line 110

def address
  @addresses.first unless @addresses.empty?
end

#all_fieldsObject



98
99
100
101
102
103
104
# File 'lib/pipl/containers.rb', line 98

def all_fields
  fields = self.class::CLASS_CONTAINER.values.map { |container| instance_variable_get("@#{container}") }
               .flatten.compact
  fields << @dob if @dob
  fields << @gender if @gender
  fields
end

#educationObject



114
115
116
# File 'lib/pipl/containers.rb', line 114

def education
  @educations.first unless @educations.empty?
end

#emailObject



134
135
136
# File 'lib/pipl/containers.rb', line 134

def email
  @emails.first unless @emails.empty?
end

#ethnicityObject



122
123
124
# File 'lib/pipl/containers.rb', line 122

def ethnicity
  @ethnicities.first unless @ethnicities.empty?
end

#fields_to_hashObject



69
70
71
72
73
74
75
76
77
78
# File 'lib/pipl/containers.rb', line 69

def fields_to_hash
  h = {}
  h[:dob] = @dob.to_hash if @dob
  h[:gender] = @gender.to_hash if @gender
  self.class::CLASS_CONTAINER.values.each do |container|
    fields = instance_variable_get("@#{container}")
    h[container.to_sym] = fields.map { |field| field.to_hash }.compact unless fields.empty?
  end
  h.reject { |_, value| value.nil? || (value.kind_of?(Array) && value.empty?) }
end

#imageObject



142
143
144
# File 'lib/pipl/containers.rb', line 142

def image
  @images.first unless @images.empty?
end

#jobObject



106
107
108
# File 'lib/pipl/containers.rb', line 106

def job
  @jobs.first unless @jobs.empty?
end

#languageObject



118
119
120
# File 'lib/pipl/containers.rb', line 118

def language
  @languages.first unless @languages.empty?
end

#nameObject



138
139
140
# File 'lib/pipl/containers.rb', line 138

def name
  @names.first unless @names.empty?
end

#origin_countryObject



126
127
128
# File 'lib/pipl/containers.rb', line 126

def origin_country
  @origin_countries.first unless @origin_countries.empty?
end

#phoneObject



130
131
132
# File 'lib/pipl/containers.rb', line 130

def phone
  @phones.first unless @phones.empty?
end

#relationshipObject



158
159
160
# File 'lib/pipl/containers.rb', line 158

def relationship
  @relationships.first unless @relationships.empty?
end

#urlObject



146
147
148
# File 'lib/pipl/containers.rb', line 146

def url
  @urls.first unless @urls.empty?
end

#user_idObject



154
155
156
# File 'lib/pipl/containers.rb', line 154

def user_id
  @user_ids.first unless @user_ids.empty?
end

#usernameObject



150
151
152
# File 'lib/pipl/containers.rb', line 150

def username
  @usernames.first unless @usernames.empty?
end

#vehicleObject



162
163
164
# File 'lib/pipl/containers.rb', line 162

def vehicle
  @vehicles.first unless @vehicles.empty?
end