get-your-rep 0.0.3.0 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a3c54b6059d0012b8fb8e18bdcfb2d272a68596f
4
- data.tar.gz: 39ca06d24c3e34fc86238310334129cf9b88faa1
3
+ metadata.gz: 400808cc3fb333208695e812d8f422d0d7e2c124
4
+ data.tar.gz: 40a5530e00c1b791b98f07cf0ed1cadd929c6da8
5
5
  SHA512:
6
- metadata.gz: 3b28d04afa4b1c057fa2de4eeeb07f183124de1c07d888b76605e439caec23a16e3a5f104ed257a41423080ab48c23970907c53e88c62d458ecc1ee9a2683d1f
7
- data.tar.gz: a9ac4209497c2b211f740c7561b40d9dc2d9261919d961ffb322cfdd862068ed6246ecc7f37d766d5abb4d4f57e6c8f0a69fc4c1812afd39ea9ea7642bc2b09e
6
+ metadata.gz: bca14b9f2f1044a41f887a941dfba903d921100c05b8434bf2b2230103dc5a66fceeb6f81560e713f65343e908efe1793d4a2d1f6d689bc94f3c9865ec24478c
7
+ data.tar.gz: 40500826b049505345ad1f70483158367766a31aa8e67dd423e71762f2ea020eb43689168d5fca93aebbacc7ba15ac184c615f0c55adcc4a8eddb23d967365e7
data/lib/get-your-rep.rb CHANGED
@@ -1,29 +1,40 @@
1
+ # require 'pry'
1
2
  require 'httparty'
3
+ require_relative 'getyourrep/rep.rb'
4
+
5
+ # The GetYourRep class has a collection of class methods that retrieve a representative
6
+ # from the Google Civic Information API, parse it from JSON, and assemble it into a usable
7
+ # Ruby hash-like object called a Rep.
2
8
  class GetYourRep
3
- attr_accessor :rep, :rep_info, :address, :api_key, :level, :role
4
9
 
10
+ # Call GetYourRep#now to initiate a chain of method calls on self that will instantiate a Rep
11
+ # object and return it.
5
12
  def self.now(address, level = 'national', role = 'representative')
6
13
  @address = voter_address(address)
7
14
  @api_key = ENV['GOOGLE_API_KEY']
8
15
  @level = level
9
16
  @role = role
10
- @rep = get_rep
11
- if @rep.empty?
12
- puts 'Could not find your rep.'
17
+ @response = get_rep
18
+ if @response.empty?
19
+ puts 'Could not find your rep. Your location search might be too broad, try refining it.'
13
20
  return nil
14
- elsif @rep['error']
15
- puts 'Error message received. Confirm and re-enter your address'
16
- return @rep
21
+ elsif @response['error']
22
+ puts 'Error message received. Confirm and re-enter your address and check your parameters.'
23
+ return @response
17
24
  end
18
25
  parse_rep
19
- parse_channels
20
- @rep_info
26
+ parse_channels if @official['channels']
27
+ @rep
21
28
  end
22
29
 
30
+ # Parses a String address and prepares for an HTTP request.
23
31
  def self.voter_address(address)
32
+ # TODO try to convert FixNum submissions to String
33
+ raise "Entry must be of type String" if !address.is_a?(String)
24
34
  address.tr(',', '').split.join('%20')
25
35
  end
26
36
 
37
+ # Sets parameters for and executes Google API request.
27
38
  def self.get_rep
28
39
  level = case @level
29
40
  when 'national'
@@ -42,26 +53,31 @@ class GetYourRep
42
53
  HTTParty.get(url).parsed_response
43
54
  end
44
55
 
56
+ # Parses the JSON response and assembles it into a Rep object, except for social media attributes,
57
+ # which are handles by ::parse_channels.
45
58
  def self.parse_rep
46
- @rep_info = {
47
- 'office' => @rep['offices'].first['name'],
48
- 'name' => @rep['officials'].first['name'],
49
- 'party' => @rep['officials'].first['party'],
50
- 'phone' => @rep['officials'].first['phones'].first,
51
- 'address_1' => @rep['officials'].first['address'].first['line1'],
52
- 'address_2' => @rep['officials'].first['address'].first['line2'],
53
- 'address_3' => @rep['officials'].first['address'].first['line3'],
54
- 'address_city' => @rep['officials'].first['address'].first['city'].capitalize,
55
- 'address_state' => @rep['officials'].first['address'].first['state'],
56
- 'address_zip' => @rep['officials'].first['address'].first['zip'],
57
- 'url' => @rep['officials'].first['urls'].first,
58
- 'photo' => @rep['officials'].first['photoUrl'],
59
- }
59
+ @rep = Rep.new
60
+ @official = @response['officials'].first
61
+
62
+ @rep['name'] = @official['name']
63
+ @rep['office'] = @response['offices'].first['name']
64
+ @rep['party'] = @official['party']
65
+ @rep['phone'] = @official['phones'].first
66
+ @rep['address_1'] = @official['address'].first['line1']
67
+ @rep['address_2'] = @official['address'].first['line2']
68
+ @rep['address_3'] = @official['address'].first['line3']
69
+ @rep['address_city'] = @official['address'].first['city'].capitalize
70
+ @rep['address_state'] = @official['address'].first['state']
71
+ @rep['address_zip'] = @official['address'].first['zip']
72
+ @rep['email'] = @official['emails'] if @official['emails']
73
+ @rep['url'] = @official['urls'].first
74
+ @rep['photo'] = @official['photoUrl']
60
75
  end
61
76
 
77
+ # Parses social media handles and adds them to the Rep object.
62
78
  def self.parse_channels
63
- @rep['officials'].first['channels'].each do |channel|
64
- @rep_info[channel['type'].downcase] = channel['id']
79
+ @official['channels'].each do |channel|
80
+ @rep[channel['type'].downcase] = channel['id']
65
81
  end
66
82
  end
67
83
  end
@@ -0,0 +1,22 @@
1
+ # The Rep class inherits from Hash and describes methods that can be called on a Rep
2
+ class Rep < Hash
3
+
4
+ # business_card can be called on an instance of Rep to map it's attributes to an array for easy printing, iteration, and display. It uses #each so it can skip over nil values without mapping them.
5
+ def business_card
6
+ card = []
7
+ self.each do |key, value|
8
+ next if value.nil?
9
+ case key
10
+ when 'facebook'
11
+ card << "#{key.capitalize}: #{value}"
12
+ when 'twitter'
13
+ card << "#{key.capitalize}: #{value}"
14
+ when 'youtube'
15
+ card << "#{key.capitalize}: #{value}"
16
+ else
17
+ card << "#{value}"
18
+ end
19
+ end
20
+ card
21
+ end
22
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: get-your-rep
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3.0
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - msimonborg
@@ -39,13 +39,14 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  description: Get your rep with Google's Civic Information API using your address and
42
- API key. Work in progress!!
42
+ API key. Work in progress, check back for updates!
43
43
  email: msimonborg@gmail.com
44
44
  executables: []
45
45
  extensions: []
46
46
  extra_rdoc_files: []
47
47
  files:
48
48
  - lib/get-your-rep.rb
49
+ - lib/getyourrep/rep.rb
49
50
  homepage: https://github.com/msimonborg/get-your-rep
50
51
  licenses:
51
52
  - MIT
@@ -58,7 +59,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
58
59
  requirements:
59
60
  - - ">="
60
61
  - !ruby/object:Gem::Version
61
- version: '0'
62
+ version: 1.9.3
62
63
  required_rubygems_version: !ruby/object:Gem::Requirement
63
64
  requirements:
64
65
  - - ">="