class BoardEffect::Client

Constants

API_PATH
API_VERSION

Public Class Methods

new(options = {}) click to toggle source
# File lib/boardeffect/client.rb, line 14
def initialize(options = {})
  setup_client(options)
  if !options.key?(:test)
    auth = auth("#{API_PATH}/auth/api_key.json", { api_key: options[:access_token]})
    if auth[:success] == true
      @auth_header, @auth_value = 'Authorization', "Bearer #{auth[:data][:token]}"
    else
      raise Error, auth[:error][:message]
    end
  else
     @auth_header, @auth_value = 'Authorization', "Bearer #{options[:access_token]}"
  end
end

Public Instance Methods

add_invitee(rsvp_id, attributes, params = nil) click to toggle source
# File lib/boardeffect.rb, line 69
def add_invitee(rsvp_id, attributes, params = nil)
  raise Error, "Event ID is required" unless params[:event_id].is_a? Numeric
  raise Error, "RSVP ID is required" unless rsvp_id.is_a? Numeric
  post("/#{workroom_check(params)}events/#{params[:event_id]}/rsvps/#{rsvp_id}/add_invitee.json", attributes)
end
auth(path, attributes) click to toggle source
# File lib/boardeffect/client.rb, line 28
def auth(path, attributes)
  http_request = Net::HTTP::Post.new(path)
  http_request['Content-Type'] = 'application/json'
  http_request.body = JSON.generate(attributes)
  parse(@http.request(http_request))
end
create_announcement(attributes, params = nil) click to toggle source
# File lib/boardeffect.rb, line 12
def create_announcement(attributes, params = nil)
  post("/#{workroom_check(params)}announcements.json", attributes)
end
create_event(attributes, params = nil) click to toggle source
# File lib/boardeffect.rb, line 33
def create_event(attributes, params = nil)
  post("/#{workroom_check(params)}events.json", attributes)
end
create_event_category(attributes, params = nil) click to toggle source
# File lib/boardeffect.rb, line 123
def create_event_category(attributes, params = nil)
  post("/eventcolors.json", attributes)
end
create_rsvp(attributes, params = nil) click to toggle source
# File lib/boardeffect.rb, line 58
def create_rsvp(attributes, params = nil)
  raise Error, "Event ID is required" unless params[:event_id].is_a? Numeric
  post("/#{workroom_check(params)}events/#{params[:event_id]}/rsvps.json", attributes)
end
create_userclass(attributes, params = nil) click to toggle source
# File lib/boardeffect.rb, line 152
def create_userclass(attributes, params = nil)
  post("/userclasses.json", attributes)
end
create_workroom(attributes, params = nil) click to toggle source
# File lib/boardeffect.rb, line 196
def create_workroom(attributes, params = nil)
  post("/workrooms.json", attributes)
end
delete_announcement(announcement_id, params = nil) click to toggle source
# File lib/boardeffect.rb, line 24
def delete_announcement(announcement_id, params = nil)
  delete("/#{workroom_check(params)}announcements/#{announcement_id}.json")
end
delete_event(id, params = nil) click to toggle source
# File lib/boardeffect.rb, line 47
def delete_event(id, params = nil)
  raise Error, "Event ID is required" unless id.is_a? Numeric
  delete("/#{workroom_check(params)}events/#{id}.json")
end
delete_event_category(id, params = nil) click to toggle source
# File lib/boardeffect.rb, line 137
def delete_event_category(id, params = nil)
  raise Error, "Eventcolor ID is required" unless id.is_a? Numeric
  delete("/eventcolors/#{id}.json")
end
delete_userclass(userclass_id, params = nil) click to toggle source
# File lib/boardeffect.rb, line 166
def delete_userclass(userclass_id, params = nil)
  raise Error, "Userclass ID is required" unless userclass_id.is_a? Numeric
  delete("/userclasses/#{userclass_id}.json")
end
delete_workroom(id, params = nil) click to toggle source
# File lib/boardeffect.rb, line 210
def delete_workroom(id, params = nil)
  raise Error, "Workroom ID is required" unless id.is_a? Numeric
  delete("/workrooms/#{id}.json")
end
get(path, params = nil) click to toggle source
# File lib/boardeffect/client.rb, line 35
def get(path, params = nil)
  request(Net::HTTP::Get.new(request_uri(path, params)))
end
get_announcement(announcement_id, params = nil) click to toggle source
# File lib/boardeffect.rb, line 20
def get_announcement(announcement_id, params = nil)
  get("/#{workroom_check(params)}announcements/#{announcement_id}.json")
end
get_announcements(params = nil) click to toggle source

Announcements

# File lib/boardeffect.rb, line 8
def get_announcements(params = nil)
  get("/#{workroom_check(params)}announcements.json", params)
end
get_book(book_id, params = nil) click to toggle source
# File lib/boardeffect.rb, line 86
def get_book(book_id, params = nil)
  raise Error, "Book ID is required" unless book_id.is_a? Numeric
  get("/#{workroom_check(params)}books/#{book_id}.json")
end
get_books(params = nil) click to toggle source

Books

# File lib/boardeffect.rb, line 82
def get_books(params = nil)
  get("/#{workroom_check(params)}books.json", params)
end
get_client(client_id) click to toggle source

Clients

# File lib/boardeffect.rb, line 92
def get_client(client_id)
  raise Error, "Client ID is required" unless client_id.is_a? Numeric
  get("/clients/#{client_id}.json")
end
get_custom_fields(params = nil) click to toggle source

Custom Fields

# File lib/boardeffect.rb, line 98
def get_custom_fields(params = nil)
  get("/custom_fields.json")
end
get_discussion(discussion_id, params = nil) click to toggle source
# File lib/boardeffect.rb, line 107
def get_discussion(discussion_id, params = nil)
  get("/#{workroom_check(params)}discussions/#{discussion_id}.json")
end
get_discussion_post(discussion_id, post_id, params = nil) click to toggle source

Discussion Posts

# File lib/boardeffect.rb, line 112
def get_discussion_post(discussion_id, post_id, params = nil)
  raise Error, "Discussion ID is required" unless discussion_id.is_a? Numeric
  raise Error, "Discussion Post ID is required" unless post_id.is_a? Numeric
  get("/#{workroom_check(params)}discussions/#{discussion_id}/discussion_posts/#{post_id}.json")
end
get_discussions(params = nil) click to toggle source

Discussions

# File lib/boardeffect.rb, line 103
def get_discussions(params = nil)
  get("/#{workroom_check(params)}discussions.json")
end
get_event(id, params = nil) click to toggle source
# File lib/boardeffect.rb, line 42
def get_event(id, params = nil)
  raise Error, "Event ID is required" unless id.is_a? Numeric
  get("/#{workroom_check(params)}events/#{id}.json")
end
get_event_categories(params = nil) click to toggle source

Event Categories

# File lib/boardeffect.rb, line 119
def get_event_categories(params = nil)
  get("/eventcolors.json", params)
end
get_event_category(id, params = nil) click to toggle source
# File lib/boardeffect.rb, line 132
def get_event_category(id, params = nil)
  raise Error, "Eventcolor ID is required" unless id.is_a? Numeric
  get("/eventcolors/#{id}.json")
end
get_events(params = nil) click to toggle source

Events

# File lib/boardeffect.rb, line 29
def get_events(params = nil)
  get("/#{workroom_check(params)}events.json", params)
end
get_rsvp(rsvp_id, params = nil) click to toggle source
# File lib/boardeffect.rb, line 63
def get_rsvp(rsvp_id, params = nil)
  raise Error, "Event ID is required" unless params[:event_id].is_a? Numeric
  raise Error, "RSVP ID is required" unless rsvp_id.is_a? Numeric
  get("/#{workroom_check(params)}events/#{params[:event_id]}/rsvps/#{rsvp_id}.json")
end
get_rsvps(params = nil) click to toggle source

RSVPS

# File lib/boardeffect.rb, line 53
def get_rsvps(params = nil)
  raise Error, "Event ID is required" unless params[:event_id].is_a? Numeric
  get("/#{workroom_check(params)}events/#{params[:event_id]}/rsvps.json")
end
get_surveys(params = nil) click to toggle source

Surveys

# File lib/boardeffect.rb, line 143
def get_surveys(params = nil)
  get("/#{workroom_check(params)}surveys.json")
end
get_user(id) click to toggle source
# File lib/boardeffect.rb, line 176
def get_user(id)
  raise Error, "User ID is required" unless id.is_a? Numeric
  get("/users/#{id}.json")
end
get_userclass(userclass_id, params = nil) click to toggle source
# File lib/boardeffect.rb, line 161
def get_userclass(userclass_id, params = nil)
  raise Error, "Userclass ID is required" unless userclass_id.is_a? Numeric
  get("/userclasses/#{userclass_id}.json")
end
get_userclasses(params = nil) click to toggle source

Userclasses

# File lib/boardeffect.rb, line 148
def get_userclasses(params = nil)
  get("/userclasses.json", params)
end
get_users() click to toggle source

Users

# File lib/boardeffect.rb, line 172
def get_users
  get("/users.json")
end
get_workgroup(id) click to toggle source
# File lib/boardeffect.rb, line 186
def get_workgroup(id)
  raise Error, "Workgroup ID is required" unless id.is_a? Numeric
  get("/committeegroups/#{id}.json")
end
get_workgroups() click to toggle source

Workgroups

# File lib/boardeffect.rb, line 182
def get_workgroups
  get("/committeegroups.json")
end
get_workroom(id, params = nil) click to toggle source
# File lib/boardeffect.rb, line 205
def get_workroom(id, params = nil)
  raise Error, "Workroom ID is required" unless id.is_a? Numeric
  get("/workrooms/#{id}.json")
end
get_workrooms(params = nil) click to toggle source

Workrooms

# File lib/boardeffect.rb, line 192
def get_workrooms(params = nil)
  get("/workrooms.json")
end
remove_invitee(rsvp_id, attributes, params = nil) click to toggle source
# File lib/boardeffect.rb, line 75
def remove_invitee(rsvp_id, attributes, params = nil)
  raise Error, "Event ID is required" unless params[:event_id].is_a? Numeric
  raise Error, "RSVP ID is required" unless rsvp_id.is_a? Numeric
  post("/#{workroom_check(params)}events/#{params[:event_id]}/rsvps/#{rsvp_id}/remove_invitee.json", attributes)
end
update_announcement(announcement_id, attributes, params = nil) click to toggle source
# File lib/boardeffect.rb, line 16
def update_announcement(announcement_id, attributes, params = nil)
  put("/#{workroom_check(params)}announcements/#{announcement_id}.json", attributes)
end
update_event(id, attributes, params = nil) click to toggle source
# File lib/boardeffect.rb, line 37
def update_event(id, attributes, params = nil)
  raise Error, "Event ID is required" unless id.is_a? Numeric
  put("/#{workroom_check(params)}events/#{id}.json", attributes)
end
update_event_category(id, attributes, params = nil) click to toggle source
# File lib/boardeffect.rb, line 127
def update_event_category(id, attributes, params = nil)
  raise Error, "Eventcolor ID is required" unless id.is_a? Numeric
  put("/eventcolors/#{id}.json", attributes)
end
update_userclass(userclass_id, attributes, params = nil) click to toggle source
# File lib/boardeffect.rb, line 156
def update_userclass(userclass_id, attributes, params = nil)
  raise Error, "Userclass ID is required" unless userclass_id.is_a? Numeric
  put("/userclasses/#{userclass_id}.json", attributes)
end
update_workroom(id, attributes, params = nil) click to toggle source
# File lib/boardeffect.rb, line 200
def update_workroom(id, attributes, params = nil)
  raise Error, "Workroom ID is required" unless id.is_a? Numeric
  put("/workrooms/#{id}.json", attributes)
end

Private Instance Methods

array_escape(object) click to toggle source
# File lib/boardeffect/client.rb, line 107
def array_escape(object)
  Array(object).map { |value| escape(value) }.join(',')
end
delete(path) click to toggle source
# File lib/boardeffect/client.rb, line 58
def delete(path)
  request(Net::HTTP::Delete.new(request_uri(path)))
end
escape(component) click to toggle source
# File lib/boardeffect/client.rb, line 111
def escape(component)
  CGI.escape(component.to_s)
end
parse(http_response) click to toggle source
# File lib/boardeffect/client.rb, line 74
def parse(http_response)
  case http_response
  when Net::HTTPNoContent
    :no_content
  when Net::HTTPSuccess
    if http_response['Content-Type'] && http_response['Content-Type'].split(';').first == 'application/json'
      JSON.parse(http_response.body, symbolize_names: true, object_class: Record).tap do |object|
        if http_response['Link'] && next_page = http_response['Link'][/<([^>]+)>; rel="next"/, 1]
          object.singleton_class.module_eval { attr_accessor :next_page }
          object.next_page = URI.parse(next_page).request_uri
        end
      end
    else
      http_response.body
    end
  when Net::HTTPBadRequest
    object = JSON.parse(http_response.body, symbolize_names: true)

    raise Error, "boardeffect api error: #{object[:error][:message]}"
  when Net::HTTPUnauthorized
    raise AuthenticationError, "boardeffect api error: unexpected #{http_response.code} response from #{@host}"
  else
    raise Error, "boardeffect api error: unexpected #{http_response.code} response from #{@host}"
  end
end
post(path, attributes) click to toggle source
# File lib/boardeffect/client.rb, line 50
def post(path, attributes)
  request(Net::HTTP::Post.new(request_uri(path)), attributes)
end
put(path, attributes = nil) click to toggle source
# File lib/boardeffect/client.rb, line 54
def put(path, attributes = nil)
  request(Net::HTTP::Put.new(request_uri(path)), attributes)
end
request(http_request, body_object = nil) click to toggle source
# File lib/boardeffect/client.rb, line 62
def request(http_request, body_object = nil)
  http_request['User-Agent'] = @user_agent
  http_request[@auth_header] = @auth_value

  if body_object
    http_request['Content-Type'] = 'application/json'
    http_request.body = JSON.generate(body_object)
  end

  parse(@http.request(http_request))
end
request_uri(path, params = nil) click to toggle source
# File lib/boardeffect/client.rb, line 100
def request_uri(path, params = nil)
  path = API_PATH + path unless path.include? API_PATH
  return path if params.nil? || params.empty?

  path + '?' + params.map { |k, v| "#{escape(k)}=#{array_escape(v)}" }.join('&')
end
setup_client(options = {}) click to toggle source
# File lib/boardeffect/client.rb, line 41
def setup_client(options = {})
  @user_agent = options.fetch(:user_agent, 'Ruby BoardEffect::Client')

  @host = (options.key?(:host)) ? options[:host] : 'boardeffect.local'

  @http = Net::HTTP.new(URI.parse(@host).host, Net::HTTP.https_default_port())
  @http.use_ssl = true
end
workroom_check(params = nil) click to toggle source
# File lib/boardeffect.rb, line 217
def workroom_check(params = nil)
  if !params.nil? && (params.key?('workroom_id') or params.key?(:workroom_id))
    raise Error, "Workroom ID is required" unless params[:workroom_id].is_a? Numeric
    raise Error, "Workroom ID Can not be 0" if params[:workroom_id].to_i == 0
    "workrooms/#{params[:workroom_id].to_i}/"
  end
end