googlevoice47 0.1.9 → 0.1.10

Sign up to get free protection for your applications and to get access to all the features.
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: