class HipTail::Authority
Attributes
Returns group_id
for authority. @return [String]
@return [String] Returns OAuth ID.
Returns room_id
for room authority. Nil for global authority. @return [String] @return [nil]
Public Class Methods
A new instance of HipTail::Authority
. @param [Hash] params @option params [String] :oauth_id @option params [String] :oauth_secret @option params [String] :authorization_url @option params [String] :token_url @option params [String] :room_id @option params [String] :group_id @option params [String] :api_base @return [HipTail::Authority]
# File lib/hiptail/authority.rb, line 42 def initialize(params) @oauth_id = params[:oauth_id] @oauth_secret = params[:oauth_secret] @authorization_url = params[:authorization_url] @token_url = params[:token_url] @room_id = params[:room_id] @group_id = params[:group_id] @room_id = @room_id.to_i if ! @room_id.nil? @group_id = @group_id.to_i if ! @group_id.nil? api_base_uri = params[:api_base].to_s unless api_base_uri.end_with?('/') api_base_uri += '/'; end @api_base = URI.parse(api_base_uri) end
Public Instance Methods
Issues add member API. @param [Hash] params Parameters for add member API with :room_id. @option params [String] :room_id Room
ID. Optional but mandatory for global authority. @option params [String] :user_id One of :user_id, :user_mention, :user_email is required. @option params [String] :user_mention @option params [String] :user_email @return [Hash] Resulting response of API.
# File lib/hiptail/authority.rb, line 144 def add_member(params) room_id = self.room_id || params.delete(:room_id) raise ArgumentError.new("room_id required") unless room_id user_name = user_name_from_params(params) raise ArgumentError.new("user_id or user_mention or user_email required") unless user_name call_api(:method => :put, :uri => @api_base.merge("room/#{room_id}/member/#{user_name}"), :body_params => params) end
@return [Hash] Hash representation. Convenient for persistency.
# File lib/hiptail/authority.rb, line 62 def as_hash { :oauth_id => @oauth_id, :oauth_secret => @oauth_secret, :authorization_url => @authorization_url, :token_url => @token_url, :room_id => @room_id, :group_id => @group_id, :api_base => @api_base, } end
@return [Boolean] Represents whether the authority is for global or not.
# File lib/hiptail/authority.rb, line 21 def for_global? ! @room_id end
@return [Boolean] Represents whether the authority is for a room or not.
# File lib/hiptail/authority.rb, line 27 def for_room? ! for_global? end
Issues get all members API. @param [Hash] params Parameters for get all members API. @return [HipTail::Users]
# File lib/hiptail/authority.rb, line 118 def get_all_members(params = {}) room_id = self.room_id || params.delete(:room_id) raise ArgumentError.new("room_id required") unless room_id res = call_api(:method => :get, :uri => @api_base.merge("room/#{room_id}/member"), :query_params => params) return unless res.successful? Users.new(res.data) end
Issues get all participants API. @param [Hash] params Parameters for get all participants API. @return [HipTail::Users]
# File lib/hiptail/authority.rb, line 129 def get_all_participants(params = {}) room_id = self.room_id || params.delete(:room_id) raise ArgumentError.new("room_id required") unless room_id res = call_api(:method => :get, :uri => @api_base.merge("room/#{room_id}/participant"), :query_params => params) return unless res.successful? Users.new(res.data) end
Issues get all rooms API. @param [Hash] params Parameters for get all rooms API. @return [HipTail::Rooms]
# File lib/hiptail/authority.rb, line 97 def get_all_rooms(params = {}) res = call_api(:method => :get, :uri => @api_base.merge("room"), :query_params => params) return unless res.successful? Rooms.new(res.data) end
Issues get all users API. @param [Hash] params Parameters for get all users API. @return [HipTail::Users]
# File lib/hiptail/authority.rb, line 186 def get_all_users(params = {}) res = call_api(:method => :get, :uri => @api_base.merge("user"), :query_params => params) return unless res.successful? Users.new(res.data) end
Issues get room API. @param [Hash] params Parameters for get all room API. @option params [String] :room_id Room
ID. Optional but mandatory for global authority. @return [HipTail::Room::Detail]
# File lib/hiptail/authority.rb, line 107 def get_room(params) room_id = self.room_id || params.delete(:room_id) raise ArgumentError.new("room_id required") unless room_id res = call_api(:method => :get, :uri => @api_base.merge("room/#{room_id}"), :query_params => params) return unless res.successful? Room::Detail.new(res.data) end
Issues remove member API. @param [Hash] params Parameters for remove member API with :room_id. @option params [String] :room_id Room
ID. Optional but mandatory for global authority. @option params [String] :user_id One of :user_id, :user_mention, :user_email is required. @option params [String] :user_mention @option params [String] :user_email @return [Hash] Resulting response of API.
# File lib/hiptail/authority.rb, line 161 def remove_member(params) room_id = self.room_id || params.delete(:room_id) raise ArgumentError.new("room_id required") unless room_id user_name = user_name_from_params(params) raise ArgumentError.new("user_id or user_mention or user_email required") unless user_name call_api(:method => :delete, :uri => @api_base.merge("room/#{room_id}/member/#{user_name}"), :body_params => params) end
Issues reply message API. @param [Hash] params Parameters for reply message API with :room_id. @option params [String] :room_id Room
ID. Optional but mandatory for global authority. @return [Hash] Resulting response of API.
# File lib/hiptail/authority.rb, line 88 def reply_message(params) room_id = self.room_id || params.delete(:room_id) raise ArgumentError.new("room_id required") unless room_id call_api(:method => :post, :uri => @api_base.merge("room/#{room_id}/reply"), :body_params => params) end
Issues send notification API. @param [Hash] params Parameters for notification API with :room_id. @option params [String] :room_id Room
ID. Optional but mandatory for global authority. @return [Hash] Resulting response of API.
# File lib/hiptail/authority.rb, line 78 def send_notification(params) room_id = self.room_id || params.delete(:room_id) raise ArgumentError.new("room_id required") unless room_id call_api(:method => :post, :uri => @api_base.merge("room/#{room_id}/notification"), :body_params => params) end
Issues view user API. @param [Hash] params Parameters for view user API with :user_id. @option params [String] :user_id User
ID or email or mention name (beginning with an '@'). @return [HipTail::User]
# File lib/hiptail/authority.rb, line 175 def view_user(params) user_id = params.delete(:user_id) raise ArgumentError.new("user_id required") unless user_id res = call_api(:method => :get, :uri => @api_base.merge("user/#{user_id}"), :query_params => params) return unless res.successful? User::Person.new(res.data) end
Private Instance Methods
# File lib/hiptail/authority.rb, line 205 def call_api(args) uri = URI.parse(args[:uri].to_s) queries = URI.decode_www_form(uri.query || '').map { |pair| [ pair[0].to_sym, pair[1] ] } # XXX Array or Hash, which is better? query = Hash[*queries.flatten(1)].merge(args[:query_params] || {}) query[:auth_token] = token uri.query = query.size > 0 ? URI.encode_www_form(query) : nil headers = { 'Content-Type' => 'application/json; charset=UTF-8', } if args[:body_params] body = JSON.generate(args[:body_params] || {}, :ascii_only => true) headers['Content-Length'] = body.bytesize.to_s else body = nil end case args[:method].to_s.downcase when 'get' req = Net::HTTP::Get.new(uri.request_uri, headers) when 'post' req = Net::HTTP::Post.new(uri.request_uri, headers) when 'put' req = Net::HTTP::Put.new(uri.request_uri, headers) when 'delete' req = Net::HTTP::Delete.new(uri.request_uri, headers) else raise end req.body = body if body res = http.start do |http| http.request(req) end def res.successful? self.is_a?(Net::HTTPSuccess) end if res.content_type =~ %r{\A application/json}x body_data = JSON.parse(res.body) else body_data = {} end res_class = class << res; self; end res_class.class_eval do define_method(:data) do body_data end end res end
# File lib/hiptail/authority.rb, line 284 def http unless @http @http = Net::HTTP.new(@api_base.host, @api_base.port) @http.use_ssl = true if @api_base.scheme == 'https' @http.verify_mode = OpenSSL::SSL::VERIFY_NONE if ENV["DEBUG_HTTP"] @http.set_debug_output($stderr) end end @http.clone end
# File lib/hiptail/authority.rb, line 271 def oauth2_client unless @client @client = OAuth2::Client.new( @oauth_id, @oauth_secret, :authorize_url => @authorization_url, :token_url => @token_url, :auth_scheme => :basic_auth, ) end @client end
# File lib/hiptail/authority.rb, line 263 def token if !@token || @token.expired? @token = oauth2_client.client_credentials.get_token( :scope => "send_notification send_message admin_room view_group" ) end @token.token end
# File lib/hiptail/authority.rb, line 194 def user_name_from_params(params) user_id = params.delete(:user_id) user_mention = params.delete(:user_mention) user_email = params.delete(:user_email) return user_id if user_id return "@" + user_mention if user_mention return user_email if user_email return end