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',
}

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(params = {}) ⇒ FieldsContainer

Returns a new instance of FieldsContainer.



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

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

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

Instance Attribute Details

#addressesObject (readonly)

Returns the value of attribute addresses.



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

def addresses
  @addresses
end

#dobObject (readonly)

Returns the value of attribute dob.



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

def dob
  @dob
end

#educationsObject (readonly)

Returns the value of attribute educations.



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

def educations
  @educations
end

#emailsObject (readonly)

Returns the value of attribute emails.



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

def emails
  @emails
end

#ethnicitiesObject (readonly)

Returns the value of attribute ethnicities.



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

def ethnicities
  @ethnicities
end

#genderObject (readonly)

Returns the value of attribute gender.



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

def gender
  @gender
end

#imagesObject (readonly)

Returns the value of attribute images.



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

def images
  @images
end

#jobsObject (readonly)

Returns the value of attribute jobs.



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

def jobs
  @jobs
end

#languagesObject (readonly)

Returns the value of attribute languages.



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

def languages
  @languages
end

#namesObject (readonly)

Returns the value of attribute names.



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

def names
  @names
end

#origin_countriesObject (readonly)

Returns the value of attribute origin_countries.



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

def origin_countries
  @origin_countries
end

#phonesObject (readonly)

Returns the value of attribute phones.



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

def phones
  @phones
end

#relationshipsObject (readonly)

Returns the value of attribute relationships.



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

def relationships
  @relationships
end

#tagsObject (readonly)

Returns the value of attribute tags.



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

def tags
  @tags
end

#urlsObject (readonly)

Returns the value of attribute urls.



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

def urls
  @urls
end

#user_idsObject (readonly)

Returns the value of attribute user_ids.



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

def user_ids
  @user_ids
end

#usernamesObject (readonly)

Returns the value of attribute usernames.



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

def usernames
  @usernames
end

Class Method Details

.fields_from_hash(h) ⇒ Object



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

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



52
53
54
# File 'lib/pipl/containers.rb', line 52

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

Instance Method Details

#add_field(field) ⇒ Object



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

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



78
79
80
# File 'lib/pipl/containers.rb', line 78

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

#addressObject



108
109
110
# File 'lib/pipl/containers.rb', line 108

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

#all_fieldsObject



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

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



112
113
114
# File 'lib/pipl/containers.rb', line 112

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

#emailObject



132
133
134
# File 'lib/pipl/containers.rb', line 132

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

#ethnicityObject



120
121
122
# File 'lib/pipl/containers.rb', line 120

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

#fields_to_hashObject



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

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? or (value.kind_of?(Array) and value.empty?) }
end

#imageObject



140
141
142
# File 'lib/pipl/containers.rb', line 140

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

#jobObject



104
105
106
# File 'lib/pipl/containers.rb', line 104

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

#languageObject



116
117
118
# File 'lib/pipl/containers.rb', line 116

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

#nameObject



136
137
138
# File 'lib/pipl/containers.rb', line 136

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

#origin_countryObject



124
125
126
# File 'lib/pipl/containers.rb', line 124

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

#phoneObject



128
129
130
# File 'lib/pipl/containers.rb', line 128

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

#relationshipObject



156
157
158
# File 'lib/pipl/containers.rb', line 156

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

#urlObject



144
145
146
# File 'lib/pipl/containers.rb', line 144

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

#user_idObject



152
153
154
# File 'lib/pipl/containers.rb', line 152

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

#usernameObject



148
149
150
# File 'lib/pipl/containers.rb', line 148

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