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_services ⇒ Object
-
#initialize(provider_key = nil) ⇒ API
constructor
A new instance of API.
- #signup_express(account_plan_id, application_plan_id, email, org_name, password, service_plan_id, 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
177 178 179 180 181 |
# File 'lib/3scale_api/3scale/api.rb', line 177 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
116 117 118 119 120 |
# File 'lib/3scale_api/3scale/api.rb', line 116 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
183 184 185 186 187 |
# File 'lib/3scale_api/3scale/api.rb', line 183 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
189 190 191 192 193 |
# File 'lib/3scale_api/3scale/api.rb', line 189 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
171 172 173 174 175 |
# File 'lib/3scale_api/3scale/api.rb', line 171 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
155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 |
# File 'lib/3scale_api/3scale/api.rb', line 155 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 |
# 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').text, :name => application.css('name').text, :application_id => application.css('application_id').text, :plan_type => application.css('plan name').text}) end results end |
#get_service_plans ⇒ Object
89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/3scale_api/3scale/api.rb', line 89 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_services ⇒ Object
102 103 104 105 106 107 108 109 110 111 112 113 |
# File 'lib/3scale_api/3scale/api.rb', line 102 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 |
#signup_express(account_plan_id, application_plan_id, email, org_name, password, service_plan_id, username, additional_fields = nil) ⇒ Object
122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 |
# File 'lib/3scale_api/3scale/api.rb', line 122 def signup_express(account_plan_id, application_plan_id, email, org_name, password, service_plan_id, username, additional_fields = nil) params = {:provider_key => @provider_key, :username => username, :password => password, :email => email, :org_name => org_name, :account_plan_id => account_plan_id, :service_plan_id => service_plan_id, :application_plan_id => application_plan_id} 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 end |