Class: Threescale::API
- Inherits:
-
Object
- Object
- Threescale::API
- Defined in:
- lib/3scale_api/3scale/api.rb
Instance Attribute Summary collapse
-
#conn ⇒ Object
Returns the value of attribute conn.
-
#path ⇒ Object
Returns the value of attribute path.
-
#provider_key ⇒ Object
Returns the value of attribute provider_key.
-
#url ⇒ Object
Returns the value of attribute url.
Instance Method Summary collapse
- #activate_user(account_id, user_id) ⇒ Object
-
#approve_account(account_id) ⇒ Object
Account API methods.
- #change_role_to_admin(account_id, user_id) ⇒ Object
- #change_role_to_member(account_id, user_id) ⇒ Object
- #create_application(account_id, plan_id, name, description = nil) ⇒ Object
- #create_user(account_id, email, password, username) ⇒ Object
- #delete_application_key(account_id, application_id, key) ⇒ Object
- #generate_application_key(account_id, application_id) ⇒ Object
- #get_account_plans ⇒ Object
- #get_application_keys(account_id, application_id) ⇒ Object
- #get_application_list(account_id) ⇒ Object
- #get_service_plans ⇒ Object
- #get_service_plans_by_ ⇒ Object
- #get_services ⇒ Object
-
#initialize(provider_key = nil) ⇒ API
constructor
A new instance of API.
- #load_application_data(account_id, application_id) ⇒ Object
- #signup_express(email, org_name, password, username, additional_fields = nil) ⇒ Object
Constructor Details
#initialize(provider_key = nil) ⇒ API
Returns a new instance of API.
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/3scale_api/3scale/api.rb', line 8 def initialize(provider_key = nil) if ENV['THREESCALE_URL'] @url = ENV['THREESCALE_URL'] else raise ("Please set your 3 Scale URL as an environmental variable THREESCALE_URL") end if not provider_key if ENV['THREESCALE_PROVIDER_KEY'] provider_key = ENV['THREESCALE_PROVIDER_KEY'] end raise Error, "You must provide a 3 Scale provider key" if not provider_key end @provider_key = provider_key @conn = Faraday.new(url = @url) do | faraday| faraday.request :url_encoded faraday.response :logger faraday.adapter Faraday.default_adapter end end |
Instance Attribute Details
#conn ⇒ Object
Returns the value of attribute conn.
7 8 9 |
# File 'lib/3scale_api/3scale/api.rb', line 7 def conn @conn end |
#path ⇒ Object
Returns the value of attribute path.
7 8 9 |
# File 'lib/3scale_api/3scale/api.rb', line 7 def path @path end |
#provider_key ⇒ Object
Returns the value of attribute provider_key.
7 8 9 |
# File 'lib/3scale_api/3scale/api.rb', line 7 def provider_key @provider_key end |
#url ⇒ Object
Returns the value of attribute url.
7 8 9 |
# File 'lib/3scale_api/3scale/api.rb', line 7 def url @url end |
Instance Method Details
#activate_user(account_id, user_id) ⇒ Object
191 192 193 194 195 |
# File 'lib/3scale_api/3scale/api.rb', line 191 def activate_user(account_id, user_id) response = @conn.put "/admin/api/accounts/#{account_id}/users/#{user_id}/activate.xml", { :provider_key => @provider_key} response.status == 201 end |
#approve_account(account_id) ⇒ Object
Account API methods
131 132 133 134 135 |
# File 'lib/3scale_api/3scale/api.rb', line 131 def approve_account(account_id) response = @conn.put "/admin/api/accounts/#{account_id}/approve.xml", { :provider_key => @provider_key} response.status == 201 end |
#change_role_to_admin(account_id, user_id) ⇒ Object
197 198 199 200 201 |
# File 'lib/3scale_api/3scale/api.rb', line 197 def change_role_to_admin(account_id, user_id) response = @conn.put "/admin/api/accounts/#{account_id}/users/#{user_id}/admin.xml", { :provider_key => @provider_key} response.status == 201 end |
#change_role_to_member(account_id, user_id) ⇒ Object
203 204 205 206 207 |
# File 'lib/3scale_api/3scale/api.rb', line 203 def change_role_to_member(account_id, user_id) response = @conn.put "/admin/api/accounts/#{account_id}/users/#{user_id}/member.xml", { :provider_key => @provider_key} response.status == 201 end |
#create_application(account_id, plan_id, name, description = nil) ⇒ Object
28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/3scale_api/3scale/api.rb', line 28 def create_application(account_id, plan_id, name, description = nil) response = conn.post "/admin/api/accounts/#{account_id}/applications.xml", { :provider_key => @provider_key , :name => name, :description => description, :plan_id => plan_id} return false if response.status != 201 xml = Nokogiri::XML(response.body) result = { :app_id => xml.css("application application_id").text , :application_id => xml.css("application id").text, :keys => [xml.css("application keys key").text] } end |
#create_user(account_id, email, password, username) ⇒ Object
185 186 187 188 189 |
# File 'lib/3scale_api/3scale/api.rb', line 185 def create_user(account_id, email, password, username) response = @conn.post "/admin/api/accounts/#{account_id}/users.xml", {:provider_key => @provider_key, :username => username, :password => password, :email => email} response.status == 201 end |
#delete_application_key(account_id, application_id, key) ⇒ Object
43 44 45 46 47 |
# File 'lib/3scale_api/3scale/api.rb', line 43 def delete_application_key(account_id, application_id, key) response = @conn.delete "/admin/api/accounts/#{account_id}/applications/#{application_id}/keys/#{key}.xml", { :provider_key => @provider_key } response.status == 200 end |
#generate_application_key(account_id, application_id) ⇒ Object
49 50 51 52 53 54 55 |
# File 'lib/3scale_api/3scale/api.rb', line 49 def generate_application_key(account_id, application_id) new_key = SecureRandom.hex(16) response = conn.post "/admin/api/accounts/#{account_id}/applications/#{application_id}/keys.xml", { :provider_key => @provider_key , :key => new_key } response.status == 201 end |
#get_account_plans ⇒ Object
169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 |
# File 'lib/3scale_api/3scale/api.rb', line 169 def get_account_plans response = @conn.get "/admin/api/account_plans.xml", {:provider_key => @provider_key} return false if response.status != 200 xml = Nokogiri::XML(response.body) account_plans = Array.new xml.xpath("//plans/plan").map do |account_plan| if account_plan.css("state").text == "published" account_plans.push({ :name => account_plan.css("name").text, :account_plan_id => account_plan.css("id").text }) end end account_plans end |
#get_application_keys(account_id, application_id) ⇒ Object
57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/3scale_api/3scale/api.rb', line 57 def get_application_keys(account_id, application_id) response = @conn.get "/admin/api/accounts/#{account_id}/applications/#{application_id}/keys.xml", { :provider_key => @provider_key, } p response.status return [] if response.status != 200 xml = Nokogiri::XML(response.body) nodes = xml.xpath('keys/key') nodes.css('value').map do |key| key.text end end |
#get_application_list(account_id) ⇒ Object
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/3scale_api/3scale/api.rb', line 69 def get_application_list(account_id) results = Array.new response = @conn.get "/admin/api/accounts/#{account_id}/applications.xml", {:provider_key => @provider_key, } return [] if response.status != 200 xml = Nokogiri::XML(response.body) applications = xml.xpath('applications/application') applications.each do |application| keys = application.xpath("//keys/key").map do |key| key.text end results.push( {:keys => keys, :id => application.css('id').first.text, :name => application.css('name').text, :application_id => application.css('application_id').text, :plan_type => application.css('plan name').text, :service_id => application.css('service_id').first.text }) end results end |
#get_service_plans ⇒ Object
91 92 93 94 95 96 97 98 99 100 101 102 |
# File 'lib/3scale_api/3scale/api.rb', line 91 def get_service_plans results = Array.new response = @conn.get "/admin/api/application_plans.xml", {:provider_key => @provider_key } xml = Nokogiri::XML(response.body) plans = xml.xpath("//plans/plan") plans = plans.map do |plan| { :name => plan.css("name").text, :service_plan_id => plan.css("service_id").text } end end |
#get_service_plans_by_ ⇒ Object
104 105 106 107 108 109 110 111 112 113 114 115 |
# File 'lib/3scale_api/3scale/api.rb', line 104 def get_service_plans_by_ results = Array.new response = @conn.get "/admin/api/application_plans.xml", {:provider_key => @provider_key } xml = Nokogiri::XML(response.body) plans = xml.xpath("//plans/plan") plans = plans.map do |plan| { :name => plan.css("name").text, :service_plan_id => plan.css("service_id").text } end end |
#get_services ⇒ Object
117 118 119 120 121 122 123 124 125 126 127 128 |
# File 'lib/3scale_api/3scale/api.rb', line 117 def get_services results = Array.new response = @conn.get "/admin/api/services.xml", {:provider_key => @provider_key } xml = Nokogiri::XML(response.body) services = xml.xpath("//services/service") services.map do |service| { :name => service.css("name").first.text, :service_id => service.css("id").first.text } end end |
#load_application_data(account_id, application_id) ⇒ Object
209 210 211 212 213 214 215 216 217 218 219 220 221 222 |
# File 'lib/3scale_api/3scale/api.rb', line 209 def load_application_data(account_id, application_id) response = @conn.get "/admin/api/accounts/#{account_id}/applications/#{application_id}.xml",{ :provider_key => @provider_key} return false if response.status != 200 xml = Nokogiri::XML(response.body) application_data = {:keys => Array.new} xml.xpath("//keys/key").map do |key| application_data[:keys].push key.text end application_data[:app_id] = xml.css("application application_id").text application_data[:name] = xml.css("application name").text application_data[:description] = xml.css("application description").text application_data end |
#signup_express(email, org_name, password, username, additional_fields = nil) ⇒ Object
137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 |
# File 'lib/3scale_api/3scale/api.rb', line 137 def signup_express( email, org_name, password, username, additional_fields = nil) params = {:provider_key => @provider_key, :username => username, :password => password, :email => email, :org_name => org_name} if (additional_fields) additional_fields.each do |key, value| params[key] = value end end response = @conn.post "/admin/api/signup.xml", params xml = Nokogiri::XML(response.body) result = { :success => false } if response.status == 422 errors = xml.xpath("//errors/error").map do |error| error.text end result[:errors] = errors end return result if response.status != 201 result[:success] = true account_id = xml.xpath('//account/id').first.text user_id = xml.xpath('//account/users/user/id').text self.approve_account account_id results = self.get_application_list account_id results[0][:user_id] = user_id.to_s result[:account_info] = results result[:account_id] = account_id result end |