ringcentral-ruby/glip-sdk-ruby

View on GitHub
lib/glip_sdk/rest/posts.rb

Summary

Maintainability
A
55 mins
Test Coverage
require 'multi_json'

module GlipSdk
  module REST
    class Posts
      attr_accessor :groups_cache

      def initialize(rc_sdk)
        @api = rc_sdk
        @logger_prefix = " -- #{self.class.name}: "
      end

      def post(opts = {})
        unless opts.key? :text
          raise ArgumentError, "Text must be provided to post message"
        end

        unless opts.key?(:groupId) || opts.key?(:groupName)
          raise ArgumentError, "Group Id or Group Name must be provided"
        end

        group_id = opts[:groupId]

        if group_id.nil? && @groups_cache && opts.key?(:groupName)
          group_id = @groups_cache.id_by_name(opts[:groupName])
        end

        params = { groupId: group_id, text: opts[:text] }

        res = @api.http.post do |req|
          req.url 'glip/posts'
          req.headers['Content-Type'] = 'application/json'
          req.body = { groupId: group_id, text: opts[:text] }
        end

        if res.status >= 400
          @api.config.logger.warn("#{@logger_prefix}Glip API Response Status #{res.status}")
          @api.config.logger.warn("#{@logger_prefix}Response Body: #{MultiJson.encode(res.body)}")
        else
          @api.config.logger.info("#{@logger_prefix}Glip API Response Status #{res.status}")
        end

        res
      end

      def get(opts = {})
        if opts.key? :postId
          return @api.http.get "glip/posts/#{opts[:postId]}"
        end
        @api.http.get do |req|
          req.url "glip/posts"
          req.headers['Content-Type'] = 'application/json'
          req.body = opts
        end
      end

      def observe(observer)
        @subscription = @api.create_subscription()
        @subscription.subscribe(['/restapi/v1.0/account/~/extension/~/glip/posts'])
        @subscription.add_observer observer
      end
    end
  end
end