googlevoice47 0.1.9 → 0.1.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- googlevoice47 (0.1.8)
4
+ googlevoice47 (0.1.9)
5
5
  htmlentities
6
6
  mechanize
7
7
 
@@ -9,15 +9,20 @@ GEM
9
9
  remote: http://rubygems.org/
10
10
  specs:
11
11
  diff-lcs (1.1.3)
12
- htmlentities (4.3.0)
13
- mechanize (2.0.1)
14
- net-http-digest_auth (>= 1.1.1, ~> 1.1)
15
- net-http-persistent (~> 1.8)
12
+ domain_name (0.5.2)
13
+ unf (~> 0.0.3)
14
+ htmlentities (4.3.1)
15
+ mechanize (2.1.1)
16
+ domain_name (~> 0.5, >= 0.5.1)
17
+ net-http-digest_auth (~> 1.1, >= 1.1.1)
18
+ net-http-persistent (~> 2.4, >= 2.4.1)
16
19
  nokogiri (~> 1.4)
17
- webrobots (>= 0.0.9, ~> 0.0)
18
- net-http-digest_auth (1.1.1)
19
- net-http-persistent (1.9)
20
+ ntlm-http (~> 0.1, >= 0.1.1)
21
+ webrobots (~> 0.0, >= 0.0.9)
22
+ net-http-digest_auth (1.2)
23
+ net-http-persistent (2.4.1)
20
24
  nokogiri (1.5.0)
25
+ ntlm-http (0.1.1)
21
26
  rake (0.9.2)
22
27
  rspec (2.6.0)
23
28
  rspec-core (~> 2.6.0)
@@ -27,8 +32,10 @@ GEM
27
32
  rspec-expectations (2.6.0)
28
33
  diff-lcs (~> 1.1.2)
29
34
  rspec-mocks (2.6.0)
30
- webrobots (0.0.11)
31
- nokogiri (>= 1.4.4)
35
+ unf (0.0.4)
36
+ unf_ext
37
+ unf_ext (0.0.4)
38
+ webrobots (0.0.13)
32
39
 
33
40
  PLATFORMS
34
41
  ruby
@@ -1,3 +1,3 @@
1
1
  module GoogleVoice
2
- VERSION = "0.1.9"
2
+ VERSION = "0.1.10"
3
3
  end
data/lib/googlevoice47.rb CHANGED
@@ -17,23 +17,16 @@ module GoogleVoice
17
17
 
18
18
  class InvalidLoginException < Exception; end
19
19
  class InvalidPhoneNumberException < Exception; end
20
-
21
- # Create a basic Mechanize agent, initial our objects, and
22
- # create our dynamic <function>_xml methods
20
+
23
21
  def initialize(email, password)
24
22
  @agent = Mechanize.new
25
23
  @coder = HTMLEntities.new
26
24
  @email = email if !email.nil?
27
25
  @password = password if !password.nil?
28
-
29
- # The methods created with this are used to fetch various
30
- # XML data from Google for call-related history data.
26
+
31
27
  init_xml_methods()
32
28
  end
33
-
34
- # Login to a Google Account to use the Google Voice services
35
- # Most of the calls require a special authentication token called
36
- # _rnr_se that can be scraped from the page once logged in.
29
+
37
30
  def login()
38
31
  login_page = @agent.get("https://www.google.com/accounts/ServiceLogin?service=grandcentral")
39
32
  login_page.forms.first.field_with(:name=>"Email").value = @email
@@ -44,49 +37,35 @@ module GoogleVoice
44
37
  raise InvalidLoginException, "Cannot login to Google Voice with #{@email}" unless dialing_form
45
38
  @rnr_se = dialing_form.field_with(:name => '_rnr_se').value
46
39
  end
47
-
48
- # Make sure we have a valid Mechanize agent and we obtained the _rnr_se
49
- # authentication token after logging in. Those are the two keys to
50
- # determining if we are successfully logged in or not.
40
+
51
41
  def logged_in?
52
42
  (@agent !=nil) && (@rnr_se != nil)
53
43
  end
54
44
 
55
- # Send a text message to remote_number
56
45
  def sms(remote_number, text_message)
57
46
  login unless logged_in?
58
- #remote_number = validate_number(remote_number)
47
+ remote_number = validate_number(remote_number)
59
48
  text_message = @coder.encode(text_message)
60
49
  @agent.post('https://www.google.com/voice/sms/send/', :id => '', :phoneNumber => remote_number, :text => text_message, "_rnr_se" => @rnr_se)
61
50
  end
62
-
63
- # Place a call to remote_number, and ring back forwarding_number which
64
- # should be set up on the currently logged in Google Voice account
51
+
65
52
  def call(remote_number, forwarding_number)
66
53
  login unless logged_in?
67
- #remote_number = validate_number(remote_number)
54
+ remote_number = validate_number(remote_number)
68
55
  forwarding_number = validate_number(forwarding_number)
69
56
  @agent.post('https://www.google.com/voice/call/connect/', :outgoingNumber => remote_number, :forwardingNumber => forwarding_number, :phoneType => 2, :subscriberNumber => 'undefined', :remember => '0', "_rnr_se" => @rnr_se)
70
57
  end
71
58
 
72
- # Cancel the call in progress for this account. It does NOT hang up
73
- # a call that has been answered, only one that has been placed but
74
- # not completed yet.
75
59
  def cancel()
76
60
  login unless logged_in?
77
61
  @agent.post('https://www.google.com/voice/call/cancel/', :outgoingNumber => 'undefined', :forwardingNumber => 'undefined', :cancelType => 'C2C', "_rnr_se" => @rnr_se)
78
62
  end
79
63
 
80
-
81
- # International numbers can vary in length as opposed to the standard US 10 digit number
82
- # So we can't effectively validate based on length. Instead, let's make sure we have at
83
- # least 4 digits and at most 15 since E.164 recommends at most 15 digits minus country code
84
- # for the phone number (http://en.wikipedia.org/wiki/E.164)
85
- #def validate_number(phone_number)
86
- # phone_number = phone_number.gsub(/\D/,'')
87
- # raise InvalidPhoneNumberException, "Invalid Phone Number #{phone_number}" if phone_number.length < 4 || phone_number.length > 15
88
- # return phone_number
89
- #end
64
+ def validate_number(phone_number)
65
+ phone_number = phone_number.gsub(/\D/,'')
66
+ raise InvalidPhoneNumberException, "Invalid Phone Number #{phone_number}" if phone_number.length < 4 || phone_number.length > 15
67
+ return phone_number
68
+ end
90
69
 
91
70
  private
92
71
 
@@ -95,12 +74,7 @@ module GoogleVoice
95
74
  login unless logged_in?
96
75
  return @agent.get(url).body
97
76
  end
98
-
99
- # Google provides XML data for various call histories all with the same
100
- # URL pattern in a getful manner. So here we're just dynamically creating
101
- # methods to fetch that data in a DRY-manner. Yes, define_method is slow,
102
- # but we're already making web calls which drags performance down anyway
103
- # so it shouldn't matter in the long run.
77
+
104
78
  def init_xml_methods()
105
79
  (class << self; self; end).class_eval do
106
80
  %w{ unread inbox starred all spam trash voicemail sms trash recorded placed received missed }.each do |method|
@@ -108,7 +82,4 @@ module GoogleVoice
108
82
  get_xml_document("https://www.google.com/voice/inbox/recent/#{method}")
109
83
  end
110
84
  end
111
- end
112
- end
113
- end
114
- end
85
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: googlevoice47
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.9
4
+ version: 0.1.10
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-02-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
16
- requirement: &78387520 !ruby/object:Gem::Requirement
16
+ requirement: &73845350 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *78387520
24
+ version_requirements: *73845350
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rspec
27
- requirement: &78386310 !ruby/object:Gem::Requirement
27
+ requirement: &73844930 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *78386310
35
+ version_requirements: *73844930
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: mechanize
38
- requirement: &78385310 !ruby/object:Gem::Requirement
38
+ requirement: &73844470 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *78385310
46
+ version_requirements: *73844470
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: htmlentities
49
- requirement: &78383010 !ruby/object:Gem::Requirement
49
+ requirement: &73844150 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,7 +54,7 @@ dependencies:
54
54
  version: '0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *78383010
57
+ version_requirements: *73844150
58
58
  description: Uses Mechanize to screen-scrape Google Voice since there is no public
59
59
  API
60
60
  email: