teliaxr 0.0.1 → 0.0.2
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/README.rdoc +20 -13
- data/lib/teliaxr.rb +154 -14
- metadata +5 -5
data/README.rdoc
CHANGED
@@ -4,35 +4,42 @@
|
|
4
4
|
|
5
5
|
== DESCRIPTION:
|
6
6
|
|
7
|
-
Unofficial ruby api to Teliax Dashboard
|
7
|
+
Unofficial ruby api to the Teliax Dashboard
|
8
8
|
|
9
9
|
|
10
10
|
== FEATURES/PROBLEMS:
|
11
|
-
|
11
|
+
*current features*
|
12
|
+
|
13
|
+
# logs in to your teliax account using supplied credentials
|
14
|
+
# checks your account balance,
|
15
|
+
# list your current numbers
|
16
|
+
# list your destinations,
|
17
|
+
# change proxy settings for existing numbers
|
18
|
+
# change destination settings for existing numbers
|
19
|
+
# search availability for new numbers (not implemented)
|
12
20
|
|
13
|
-
Can login to your teliax account and list your numbers
|
14
21
|
|
15
22
|
Since it is unofficial and it relies on scrapping Teliax web sites it may broke if they change their website. YMMV
|
16
23
|
|
17
24
|
|
18
25
|
== SYNOPSIS:
|
19
26
|
|
20
|
-
teliax = Teliaxr::API.new(username, password)
|
21
|
-
teliax.
|
22
|
-
|
23
|
-
teliax.
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
+
+teliax = Teliaxr::API.new(username, password)+
|
28
|
+
teliax.account_balance
|
29
|
+
|
30
|
+
teliax.destinations
|
31
|
+
teliax.proxies
|
32
|
+
number teliax.numbers.first
|
33
|
+
|
34
|
+
teliax.set_proxy_for_number(number, "atlanta")
|
27
35
|
|
28
36
|
== REQUIREMENTS:
|
29
37
|
|
30
|
-
mechanize
|
31
|
-
nokogiri
|
38
|
+
mechanize-0.9.3
|
32
39
|
|
33
40
|
== INSTALL:
|
34
41
|
|
35
|
-
sudo gem install teliaxr
|
42
|
+
sudo gem install teliaxr --source=http://gemcutter.org
|
36
43
|
|
37
44
|
== LICENSE:
|
38
45
|
|
data/lib/teliaxr.rb
CHANGED
@@ -2,48 +2,187 @@ $:.unshift(File.dirname(__FILE__)) unless
|
|
2
2
|
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
3
3
|
|
4
4
|
module Teliaxr
|
5
|
-
VERSION = '0.0.
|
5
|
+
VERSION = '0.0.2'
|
6
6
|
require 'rubygems'
|
7
7
|
I_KNOW_I_AM_USING_AN_OLD_AND_BUGGY_VERSION_OF_LIBXML2=1
|
8
8
|
require 'mechanize'
|
9
9
|
require 'nokogiri'
|
10
10
|
|
11
11
|
class API
|
12
|
-
attr_reader :page
|
12
|
+
attr_reader :page, :account_number
|
13
|
+
|
14
|
+
# ====
|
15
|
+
# takes a username and password to log in to the teliax dashboard
|
13
16
|
def initialize(username, password, url=nil)
|
14
17
|
@username = username
|
15
18
|
@password = password
|
16
|
-
@
|
17
|
-
@
|
19
|
+
@teliax_url = url
|
20
|
+
@teliax_url ||= "https://www.teliax.com"
|
18
21
|
@agent = WWW::Mechanize.new
|
19
|
-
|
22
|
+
@numbers_list = {}
|
23
|
+
@destinations_list = {}
|
24
|
+
@proxies = {
|
25
|
+
"denver" => {:proxy_url => "den.teliax.net", :proxy_id => "1"},
|
26
|
+
"new york" => {:proxy_url => "nyc.teliax.net", :proxy_id => "2"},
|
27
|
+
"los angeles" => {:proxy_url => "lax.teliax.net", :proxy_id => "3"},
|
28
|
+
"atlanta" => {:proxy_url => "atl.teliax.net", :proxy_id => "4"},
|
29
|
+
"fax" => {:proxy_url => "fax.teliax.net", :proxy_id => "7"}
|
30
|
+
}
|
31
|
+
@balance = nil
|
32
|
+
@account = nil
|
33
|
+
|
34
|
+
get_page(@teliax_url)
|
35
|
+
login
|
36
|
+
account_balance
|
37
|
+
account_number
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
def click_link_by_name(name)
|
42
|
+
#clicks link by name
|
43
|
+
@page = @agent.click( @page.links.select {|l| l.text =~/#{name}/}.first )
|
44
|
+
end
|
45
|
+
|
46
|
+
def get_link_by_name(name)
|
47
|
+
@page.links.select {|l| l.text =~/#{name}/}.first
|
20
48
|
end
|
21
49
|
|
22
|
-
def
|
23
|
-
@page = @agent.get
|
50
|
+
def get_page(url)
|
51
|
+
@page = @agent.get url
|
24
52
|
end
|
25
53
|
|
54
|
+
|
26
55
|
def login
|
56
|
+
#i should check that i am on the login page first
|
27
57
|
form = @page.forms.first
|
28
58
|
form['login'] = @username
|
29
59
|
form['password'] = @password
|
30
|
-
form.submit
|
31
60
|
@page = form.submit
|
32
|
-
|
33
61
|
end
|
62
|
+
|
63
|
+
def url_for_number(nr)
|
64
|
+
"#{@teliax_url}/customers/#{@account}/numbers/#{numbers[nr][:number_id]}"
|
65
|
+
end
|
66
|
+
|
67
|
+
public
|
68
|
+
|
69
|
+
# ====
|
70
|
+
# returns account balance as float
|
71
|
+
def account_balance(force_update=false)
|
72
|
+
#should check if force update has been requested
|
73
|
+
return @balance unless @balance.nil?
|
74
|
+
@balance = @page.search("div#site_left_nav_headerBlack a").first.content.gsub(/Balance \$/,'').to_f
|
75
|
+
end
|
34
76
|
|
35
|
-
|
36
|
-
|
77
|
+
|
78
|
+
# ====
|
79
|
+
# returns account number
|
80
|
+
def account_number(force_update=false)
|
81
|
+
return @account unless @account.nil?
|
82
|
+
@account = @page.search("div#site_left_nav_headerBlack").text.to_a.last.gsub(/\D/,'')
|
37
83
|
end
|
38
84
|
|
39
|
-
|
85
|
+
|
86
|
+
# ====
|
87
|
+
# returns numbers list as an array, pass parameter force_reload to update list
|
88
|
+
def numbers(force_reload=false)
|
89
|
+
unless @numbers_list.empty?
|
90
|
+
if force_reload == false
|
91
|
+
return @numbers_list
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
#puts "RELOADING: force: #{force_reload} list.empty?: #{@numbers_list.empty?}"
|
96
|
+
|
97
|
+
click_link_by_name "Numbers" #goes to the numbers website
|
98
|
+
@numbers_list={}
|
40
99
|
@page.search('div#site_content_container_center table tbody tr').each do |tr|
|
41
|
-
|
42
|
-
|
100
|
+
|
101
|
+
@numbers_list[tr.search('td:nth-child(1)').first.content.gsub(/\D/,'')] = {
|
102
|
+
:number_id => tr.search('td:nth-child(3) @id').text.split("_").last.strip,
|
103
|
+
:gateway_id => tr.search('td:nth-child(3) option[selected] @value'),
|
104
|
+
:gateway_name => tr.search('td:nth-child(3) option[selected]').text,
|
105
|
+
:destination_id => tr.search('td:nth-child(4) option[selected] @value'),
|
106
|
+
:destination_name => tr.search('td:nth-child(4) option[selected]').text.split(":").last.strip
|
107
|
+
}
|
43
108
|
end
|
109
|
+
@numbers_list
|
110
|
+
end
|
111
|
+
|
112
|
+
|
113
|
+
# ====
|
114
|
+
# returns current destination for this number
|
115
|
+
def destination_for_number(nr,force_reload=false)
|
116
|
+
numbers(force_reload)[nr][:destination_name]
|
117
|
+
end
|
118
|
+
|
119
|
+
|
120
|
+
# ====
|
121
|
+
# sets rings to destination for this number, weather is a device or another ring number
|
122
|
+
def set_destination_for_number(nr,destination_name)
|
123
|
+
|
124
|
+
@page = @agent.post(url_for_number(nr), {"number[destination]" => destinations[destination_name][:destination_id], "_method" => "put"})
|
125
|
+
end
|
126
|
+
|
127
|
+
# ====
|
128
|
+
# returns proxy that is setup to originate calls to this number
|
129
|
+
def proxy_for_number(nr,force_reload=false)
|
130
|
+
numbers(force_reload)[nr][:gateway_name]
|
131
|
+
end
|
132
|
+
|
133
|
+
# ====
|
134
|
+
# set the proxy this number will be get originated from
|
135
|
+
def set_proxy_for_number(nr,proxy_name)
|
136
|
+
@page = @agent.post(url_for_number(nr), {"number[proxy_id]" => proxies[proxy_name][:proxy_id], "_method" => "put"})
|
137
|
+
end
|
138
|
+
|
139
|
+
# ====
|
140
|
+
# returns list of teliax proxies
|
141
|
+
def proxies
|
142
|
+
@proxies
|
143
|
+
end
|
144
|
+
|
145
|
+
# ====
|
146
|
+
# returns list of teliax destinations
|
147
|
+
def destinations #
|
148
|
+
unless @destinations_list.empty?
|
149
|
+
return @destinations_list
|
150
|
+
end
|
151
|
+
|
152
|
+
click_link_by_name "Numbers" #goes to the numbers website
|
153
|
+
@destinations_list={}
|
154
|
+
@page.search('div#site_content_container_center table tbody tr:first-of-type td:nth-child(4) option').each do |opt|
|
155
|
+
destination_id = opt.search('@value').text
|
156
|
+
|
157
|
+
if destination_id == "_"
|
158
|
+
destination_type = "nowhere"
|
159
|
+
destination_name = opt.text
|
160
|
+
else
|
161
|
+
destination_type = destination_id.split("_").first.downcase.strip
|
162
|
+
|
163
|
+
if destination_type == "number"
|
164
|
+
destination_name = opt.text.gsub(/\D/,'')
|
165
|
+
else
|
166
|
+
destination_name = opt.text.split(":").last.strip
|
167
|
+
end
|
168
|
+
end
|
169
|
+
#puts destination_type
|
170
|
+
#puts destination_name
|
171
|
+
#puts destination_id
|
172
|
+
|
173
|
+
@destinations_list[destination_name] = {:destination_id => destination_id, :destination_type => destination_type }
|
174
|
+
|
44
175
|
end
|
176
|
+
@destinations_list
|
45
177
|
end
|
46
178
|
|
179
|
+
# ====
|
180
|
+
# returns list of new numbers based on area code
|
181
|
+
def search_for_new_numbers(area_code)
|
182
|
+
end
|
183
|
+
|
184
|
+
# ===
|
185
|
+
# returns list of links this is test code
|
47
186
|
def get_menu_links
|
48
187
|
@page.search('div#site_left_nav_content div').each do |nav|
|
49
188
|
nav.search('ul li a').each do |link|
|
@@ -53,4 +192,5 @@ module Teliaxr
|
|
53
192
|
end
|
54
193
|
|
55
194
|
end
|
195
|
+
|
56
196
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: teliaxr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rene Mendoza
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-10-
|
12
|
+
date: 2009-10-25 01:00:00 -05:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -32,7 +32,7 @@ dependencies:
|
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: 2.3.3
|
34
34
|
version:
|
35
|
-
description: Unofficial ruby api to Teliax Dashboard
|
35
|
+
description: Unofficial ruby api to the Teliax Dashboard
|
36
36
|
email:
|
37
37
|
- latiendamac@gmail.com
|
38
38
|
executables: []
|
@@ -80,10 +80,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
80
80
|
requirements: []
|
81
81
|
|
82
82
|
rubyforge_project: teliaxr
|
83
|
-
rubygems_version: 1.3.
|
83
|
+
rubygems_version: 1.3.5
|
84
84
|
signing_key:
|
85
85
|
specification_version: 3
|
86
|
-
summary: Unofficial ruby api to Teliax Dashboard
|
86
|
+
summary: Unofficial ruby api to the Teliax Dashboard
|
87
87
|
test_files:
|
88
88
|
- test/test_helper.rb
|
89
89
|
- test/test_teliaxr.rb
|