calendly 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.github/workflows/gem-push.yml +37 -0
- data/.github/workflows/test.yml +21 -0
- data/.gitignore +10 -0
- data/.rubocom.yml +69 -0
- data/CHANGELOG.md +50 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +6 -0
- data/LICENSE.txt +21 -0
- data/README.md +137 -0
- data/Rakefile +10 -0
- data/bin/console +7 -0
- data/bin/setup +6 -0
- data/calendly.gemspec +40 -0
- data/lib/calendly/api_error.rb +42 -0
- data/lib/calendly/client.rb +442 -0
- data/lib/calendly/configuration.rb +26 -0
- data/lib/calendly/error.rb +23 -0
- data/lib/calendly/models/event.rb +99 -0
- data/lib/calendly/models/event_type.rb +88 -0
- data/lib/calendly/models/invitee.rb +77 -0
- data/lib/calendly/models/invitee_question_and_answer.rb +19 -0
- data/lib/calendly/models/invitee_tracking.rb +28 -0
- data/lib/calendly/models/location.rb +53 -0
- data/lib/calendly/models/model_utils.rb +105 -0
- data/lib/calendly/models/organization.rb +63 -0
- data/lib/calendly/models/organization_invitation.rb +67 -0
- data/lib/calendly/models/organization_membership.rb +56 -0
- data/lib/calendly/models/user.rb +100 -0
- data/lib/calendly/version.rb +5 -0
- data/lib/calendly.rb +19 -0
- metadata +189 -0
@@ -0,0 +1,77 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Calendly
|
4
|
+
# Calendly's Invitee model.
|
5
|
+
# An individual who has been invited to meet with a Calendly member.
|
6
|
+
class Invitee
|
7
|
+
include ModelUtils
|
8
|
+
UUID_RE = %r{\A#{Client::API_HOST}/scheduled_events/\w+/invitees/(\w+)\z}.freeze
|
9
|
+
TIME_FIELDS = %i[created_at updated_at].freeze
|
10
|
+
ASSOCIATION = { event: Event }.freeze
|
11
|
+
|
12
|
+
# @return [String]
|
13
|
+
# unique id of the Invitee object.
|
14
|
+
attr_accessor :uuid
|
15
|
+
# @return [String]
|
16
|
+
# Canonical resource reference.
|
17
|
+
attr_accessor :uri
|
18
|
+
# @return [String]
|
19
|
+
# The invitee's email address.
|
20
|
+
attr_accessor :email
|
21
|
+
# @return [String]
|
22
|
+
# The invitee's human-readable name.
|
23
|
+
attr_accessor :name
|
24
|
+
# @return [String]
|
25
|
+
# Whether the invitee has canceled or is still active.
|
26
|
+
attr_accessor :status
|
27
|
+
# @return [String]
|
28
|
+
# Timezone offest to use when presenting time information to invitee.
|
29
|
+
attr_accessor :timezone
|
30
|
+
# @return [String]
|
31
|
+
# Text (SMS) reminder phone number.
|
32
|
+
attr_accessor :text_reminder_number
|
33
|
+
# @return [Time]
|
34
|
+
# Moment when user record was first created.
|
35
|
+
attr_accessor :created_at
|
36
|
+
# @return [Time]
|
37
|
+
# Moment when user record was last updated.
|
38
|
+
attr_accessor :updated_at
|
39
|
+
|
40
|
+
# @return [Event]
|
41
|
+
# Reference to Event associated with this invitee.
|
42
|
+
attr_accessor :event
|
43
|
+
|
44
|
+
# @return [Array<Calendly::InviteeQuestionAndAnswer>]
|
45
|
+
# A collection of form responses from the invitee.
|
46
|
+
attr_accessor :questions_and_answers
|
47
|
+
|
48
|
+
# @return [Calendly::InviteeTracking]
|
49
|
+
attr_accessor :tracking
|
50
|
+
|
51
|
+
#
|
52
|
+
# Get Event Invitee associated with self.
|
53
|
+
#
|
54
|
+
# @return [Calendly::Invitee]
|
55
|
+
# @raise [Calendly::Error] if the event.uuid is empty.
|
56
|
+
# @raise [Calendly::Error] if the uuid is empty.
|
57
|
+
# @raise [Calendly::ApiError] if the api returns error code.
|
58
|
+
# @since 0.1.0
|
59
|
+
def fetch
|
60
|
+
ev_uuid = event.uuid if event
|
61
|
+
client.event_invitee ev_uuid, uuid
|
62
|
+
end
|
63
|
+
|
64
|
+
private
|
65
|
+
|
66
|
+
def after_set_attributes(attrs)
|
67
|
+
super attrs
|
68
|
+
answers = attrs[:questions_and_answers]
|
69
|
+
if answers&.is_a? Array
|
70
|
+
@questions_and_answers = answers.map { |ans| InviteeQuestionAndAnswer.new ans }
|
71
|
+
end
|
72
|
+
|
73
|
+
trac_attrs = attrs[:tracking]
|
74
|
+
@tracking = InviteeTracking.new trac_attrs if trac_attrs&.is_a? Hash
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Calendly
|
4
|
+
# Calendly's InviteeQuestionAndAnswer model.
|
5
|
+
# An individual form question and response.
|
6
|
+
class InviteeQuestionAndAnswer
|
7
|
+
include ModelUtils
|
8
|
+
|
9
|
+
# @return [String]
|
10
|
+
# The question from the event booking confirmation form.
|
11
|
+
attr_accessor :question
|
12
|
+
# @return [String]
|
13
|
+
# The answer supplied by the invitee to this question.
|
14
|
+
attr_accessor :answer
|
15
|
+
# @return [Integer]
|
16
|
+
# The position of this question in the event booking confirmation form.
|
17
|
+
attr_accessor :position
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Calendly
|
4
|
+
# Calendly's InviteeTracking model.
|
5
|
+
# Object that represents UTM and Salesforce tracking parameters associated with the invitee.
|
6
|
+
class InviteeTracking
|
7
|
+
include ModelUtils
|
8
|
+
|
9
|
+
# @return [String]
|
10
|
+
# UTM campaign tracking parameter.
|
11
|
+
attr_accessor :utm_campaign
|
12
|
+
# @return [String]
|
13
|
+
# UTM source tracking parameter.
|
14
|
+
attr_accessor :utm_source
|
15
|
+
# @return [String]
|
16
|
+
# UTM medium tracking parameter.
|
17
|
+
attr_accessor :utm_medium
|
18
|
+
# @return [String]
|
19
|
+
# UTM content tracking parameter.
|
20
|
+
attr_accessor :utm_content
|
21
|
+
# @return [String]
|
22
|
+
# UTM term tracking parameter.
|
23
|
+
attr_accessor :utm_term
|
24
|
+
# @return [String]
|
25
|
+
# Salesforce Record ID.
|
26
|
+
attr_accessor :salesforce_uuid
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Calendly
|
4
|
+
# Calendly's location model.
|
5
|
+
# Polymorphic base type for the various supported meeting locations.
|
6
|
+
class Location
|
7
|
+
include ModelUtils
|
8
|
+
|
9
|
+
# data patterns is below:
|
10
|
+
# - 1. A meeting at a pre-specified physical location
|
11
|
+
# - [String] :kind
|
12
|
+
# - [String] :location A physical location specified by the meeting publisher.
|
13
|
+
# - 2. Meeting publisher will call the invitee
|
14
|
+
# - [String] :kind
|
15
|
+
# - 3. Invitee will call meeting publisher at the specified phone number.
|
16
|
+
# - [String] :kind
|
17
|
+
# - [String] :phone_number Phone number invitee should use to reach meeting publisher.
|
18
|
+
# - 4. Meeting will take place in a Google Meet / Hangout conference.
|
19
|
+
# - [String] :kind
|
20
|
+
# - 5. Meeting will take place in a Zoom conference.
|
21
|
+
# - [String] :kind
|
22
|
+
# - 6. Meeting will take place in a GotoMeeting conference.
|
23
|
+
# - [String] :kind
|
24
|
+
# - [String] :external_id Zoom-supplied conference id.
|
25
|
+
# - [String] :state Current state of the conference in Zoom.
|
26
|
+
# - [Hash] :data Arbitrary conference metadata supplied by Zoom.
|
27
|
+
# - 7. Arbitrary conference metadata supplied by GotoMeeting.
|
28
|
+
# - [String] :kind
|
29
|
+
# - [String] :external_id GotoMeeting-supplied conference id.
|
30
|
+
# - [String] :state Current state of the conference in GotoMeeting.
|
31
|
+
# - [String] :data Arbitrary conference metadata supplied by GotoMeeting.
|
32
|
+
# - 8. Meeting location does not fall in a standard category, and is as described by the meeting publisher.
|
33
|
+
# - [String] :kind
|
34
|
+
# - [String] :location Location description provided by meeting publisher.
|
35
|
+
# - 9. Meeting location was specified by invitee.
|
36
|
+
# - [String] :kind
|
37
|
+
# - [String] :location Meeting location was specified by invitee.
|
38
|
+
#
|
39
|
+
|
40
|
+
# @return [String]
|
41
|
+
attr_accessor :kind
|
42
|
+
# @return [String]
|
43
|
+
attr_accessor :location
|
44
|
+
# @return [String]
|
45
|
+
attr_accessor :phone_number
|
46
|
+
# @return [String]
|
47
|
+
attr_accessor :external_id
|
48
|
+
# @return [String]
|
49
|
+
attr_accessor :state
|
50
|
+
# @return [Hash]
|
51
|
+
attr_accessor :data
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,105 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'time'
|
4
|
+
|
5
|
+
module Calendly
|
6
|
+
# Calendly model utility.
|
7
|
+
module ModelUtils
|
8
|
+
# @param [Hash] attrs the attributes of the model.
|
9
|
+
# @param [Calendly::Client] the api client.
|
10
|
+
def initialize(attrs = nil, client = nil)
|
11
|
+
@client = client
|
12
|
+
set_attributes attrs
|
13
|
+
end
|
14
|
+
|
15
|
+
#
|
16
|
+
# Returns api client.
|
17
|
+
#
|
18
|
+
# @return [Calendly::Client]
|
19
|
+
# @raise [Calendly::Error] if the client is nil.
|
20
|
+
# @since 0.1.0
|
21
|
+
def client
|
22
|
+
raise Error, '@client is not ready.' if !@client || !@client.is_a?(Client)
|
23
|
+
|
24
|
+
@client
|
25
|
+
end
|
26
|
+
|
27
|
+
#
|
28
|
+
# alias of uuid.
|
29
|
+
#
|
30
|
+
# @return [String]
|
31
|
+
# @raise [Calendly::Error] if uuid is not defined.
|
32
|
+
# @since 0.1.0
|
33
|
+
def id
|
34
|
+
raise Error, 'uuid is not defined.' unless defined? uuid
|
35
|
+
|
36
|
+
uuid
|
37
|
+
end
|
38
|
+
|
39
|
+
def inspect
|
40
|
+
description = "uuid:#{uuid}" if respond_to? :uuid
|
41
|
+
"\#<#{self.class}:#{object_id} #{description}>"
|
42
|
+
end
|
43
|
+
|
44
|
+
module ClassMethods
|
45
|
+
def extract_uuid(str)
|
46
|
+
return unless defined? self::UUID_RE
|
47
|
+
return unless str
|
48
|
+
return if str.empty?
|
49
|
+
|
50
|
+
m = self::UUID_RE.match str
|
51
|
+
return if m.nil?
|
52
|
+
|
53
|
+
m[1]
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def self.included(base)
|
58
|
+
base.extend ClassMethods
|
59
|
+
end
|
60
|
+
|
61
|
+
private
|
62
|
+
|
63
|
+
def set_attributes(attrs)
|
64
|
+
return if attrs.nil?
|
65
|
+
return unless attrs.is_a? Hash
|
66
|
+
return if attrs.empty?
|
67
|
+
|
68
|
+
attrs.each do |key, value|
|
69
|
+
next unless respond_to? "#{key}=".to_sym
|
70
|
+
|
71
|
+
if defined?(self.class::ASSOCIATION) && self.class::ASSOCIATION.key?(key)
|
72
|
+
associated_attrs = value.is_a?(Hash) ? value : { uri: value }
|
73
|
+
value = self.class::ASSOCIATION[key].new associated_attrs, @client
|
74
|
+
elsif defined?(self.class::TIME_FIELDS) && self.class::TIME_FIELDS.include?(key)
|
75
|
+
value = Time.parse value
|
76
|
+
end
|
77
|
+
instance_variable_set "@#{key}", value
|
78
|
+
end
|
79
|
+
after_set_attributes(attrs)
|
80
|
+
end
|
81
|
+
|
82
|
+
def after_set_attributes(attrs)
|
83
|
+
@uuid = self.class.extract_uuid(attrs[:uri]) if respond_to? :uuid=
|
84
|
+
end
|
85
|
+
|
86
|
+
#
|
87
|
+
# Get all collection from single page or plurality of pages.
|
88
|
+
#
|
89
|
+
# @param [Proc] request_proc the procedure of request portion of collection.
|
90
|
+
# @param [Hash] opts the optional request parameters for the procedure.
|
91
|
+
# @return [Array<Calendly::Model>]
|
92
|
+
# @since 0.1.0
|
93
|
+
def auto_pagination(request_proc, opts)
|
94
|
+
items = []
|
95
|
+
loop do
|
96
|
+
new_items, next_opts = request_proc.call opts
|
97
|
+
items = [*items, *new_items]
|
98
|
+
break unless next_opts
|
99
|
+
|
100
|
+
opts = next_opts
|
101
|
+
end
|
102
|
+
items
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Calendly
|
4
|
+
# Calendly's organization model.
|
5
|
+
class Organization
|
6
|
+
include ModelUtils
|
7
|
+
UUID_RE = %r{\A#{Client::API_HOST}/organizations/(\w+)\z}.freeze
|
8
|
+
|
9
|
+
# @return [String]
|
10
|
+
# unique id of the Organization object.
|
11
|
+
attr_accessor :uuid
|
12
|
+
# @return [String]
|
13
|
+
# Canonical resource reference.
|
14
|
+
attr_accessor :uri
|
15
|
+
|
16
|
+
#
|
17
|
+
# Get List memberships of all users belonging to self.
|
18
|
+
#
|
19
|
+
# @param [Hash] opts the optional request parameters.
|
20
|
+
# @option opts [Integer] :count Number of rows to return.
|
21
|
+
# @option opts [String] :email Filter by email.
|
22
|
+
# @option opts [String] :page_token Pass this to get the next portion of collection.
|
23
|
+
# @return [Array<Calendly::OrganizationMembership>]
|
24
|
+
# @raise [Calendly::Error] if the uri is empty.
|
25
|
+
# @raise [Calendly::ApiError] if the api returns error code.
|
26
|
+
# @since 0.1.0
|
27
|
+
def memberships(opts = {})
|
28
|
+
request_proc = proc { |options| client.memberships uri, options }
|
29
|
+
auto_pagination request_proc, opts
|
30
|
+
end
|
31
|
+
|
32
|
+
#
|
33
|
+
# Get Organization Invitations.
|
34
|
+
#
|
35
|
+
# @param [Hash] opts the optional request parameters.
|
36
|
+
# @option opts [Integer] :count Number of rows to return.
|
37
|
+
# @option opts [String] :email Filter by email.
|
38
|
+
# @option opts [String] :page_token Pass this to get the next portion of collection.
|
39
|
+
# @option opts [String] :sort Order results by the specified field and directin. Accepts comma-separated list of {field}:{direction} values.
|
40
|
+
# @option opts [String] :status Filter by status.
|
41
|
+
# @return [Array<Calendly::OrganizationInvitation>]
|
42
|
+
# @raise [Calendly::Error] if the uuid is empty.
|
43
|
+
# @raise [Calendly::ApiError] if the api returns error code.
|
44
|
+
# @since 0.1.0
|
45
|
+
def invitations(opts = {})
|
46
|
+
request_proc = proc { |options| client.invitations uuid, options }
|
47
|
+
auto_pagination request_proc, opts
|
48
|
+
end
|
49
|
+
|
50
|
+
#
|
51
|
+
# Invite a person to an Organization.
|
52
|
+
#
|
53
|
+
# @param [String] email Email of the person being invited.
|
54
|
+
# @return [Calendly::OrganizationInvitation]
|
55
|
+
# @raise [Calendly::Error] if the uuid is empty.
|
56
|
+
# @raise [Calendly::Error] if the email is empty.
|
57
|
+
# @raise [Calendly::ApiError] if the api returns error code.
|
58
|
+
# @since 0.1.0
|
59
|
+
def create_invitation(email)
|
60
|
+
client.create_invitation uuid, email
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Calendly
|
4
|
+
# Calendly's organization invitation model.
|
5
|
+
class OrganizationInvitation
|
6
|
+
include ModelUtils
|
7
|
+
UUID_RE = %r{\A#{Client::API_HOST}/organizations/\w+/invitations/(\w+)\z}.freeze
|
8
|
+
TIME_FIELDS = %i[created_at updated_at last_sent_at].freeze
|
9
|
+
ASSOCIATION = { user: User, organization: Organization }.freeze
|
10
|
+
|
11
|
+
# @return [String]
|
12
|
+
# unique id of the OrganizationInvitation object.
|
13
|
+
attr_accessor :uuid
|
14
|
+
# @return [String]
|
15
|
+
# Canonical resource reference.
|
16
|
+
attr_accessor :uri
|
17
|
+
# @return [String]
|
18
|
+
# Invited person's email.
|
19
|
+
attr_accessor :email
|
20
|
+
# @return [String]
|
21
|
+
# Invitation status.
|
22
|
+
attr_accessor :status
|
23
|
+
# @return [Time]
|
24
|
+
# Moment when user record was first created.
|
25
|
+
attr_accessor :created_at
|
26
|
+
# @return [Time]
|
27
|
+
# Moment when user record was last updated.
|
28
|
+
attr_accessor :updated_at
|
29
|
+
# @return [Time]
|
30
|
+
# Moment when the last invitation was sent.
|
31
|
+
attr_accessor :last_sent_at
|
32
|
+
|
33
|
+
# @return [Organization]
|
34
|
+
# Reference to Organization associated with this invitation.
|
35
|
+
attr_accessor :organization
|
36
|
+
|
37
|
+
# @return [User]
|
38
|
+
# If a person accepted the invitation, a reference to their User.
|
39
|
+
attr_accessor :user
|
40
|
+
|
41
|
+
#
|
42
|
+
# Get Organization Invitation associated with self.
|
43
|
+
#
|
44
|
+
# @return [Calendly::OrganizationInvitation]
|
45
|
+
# @raise [Calendly::Error] if the organization.uuid is empty.
|
46
|
+
# @raise [Calendly::Error] if the uuid is empty.
|
47
|
+
# @raise [Calendly::ApiError] if the api returns error code.
|
48
|
+
# @since 0.1.0
|
49
|
+
def fetch
|
50
|
+
org_uuid = organization.uuid if organization
|
51
|
+
client.invitation org_uuid, uuid
|
52
|
+
end
|
53
|
+
|
54
|
+
#
|
55
|
+
# Revoke self Invitation.
|
56
|
+
#
|
57
|
+
# @return [true]
|
58
|
+
# @raise [Calendly::Error] if the organization.uuid is empty.
|
59
|
+
# @raise [Calendly::Error] if the uuid is empty.
|
60
|
+
# @raise [Calendly::ApiError] if the api returns error code.
|
61
|
+
# @since 0.1.0
|
62
|
+
def delete
|
63
|
+
org_uuid = organization.uuid if organization
|
64
|
+
client.delete_invitation org_uuid, uuid
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Calendly
|
4
|
+
# Calendly's organization membership model.
|
5
|
+
class OrganizationMembership
|
6
|
+
include ModelUtils
|
7
|
+
UUID_RE = %r{\A#{Client::API_HOST}/organization_memberships/(\w+)\z}.freeze
|
8
|
+
TIME_FIELDS = %i[created_at updated_at].freeze
|
9
|
+
ASSOCIATION = { user: User, organization: Organization }.freeze
|
10
|
+
|
11
|
+
# @return [String]
|
12
|
+
# unique id of the OrganizationMembership object.
|
13
|
+
attr_accessor :uuid
|
14
|
+
# @return [String]
|
15
|
+
# Canonical resource reference.
|
16
|
+
attr_accessor :uri
|
17
|
+
# @return [String]
|
18
|
+
# User's role within the organization
|
19
|
+
attr_accessor :role
|
20
|
+
# @return [Time]
|
21
|
+
# Moment when user record was first created.
|
22
|
+
attr_accessor :created_at
|
23
|
+
# @return [Time]
|
24
|
+
# Moment when user record was last updated.
|
25
|
+
attr_accessor :updated_at
|
26
|
+
|
27
|
+
# @return [Calendly::User]
|
28
|
+
# Primary account details of a specific user.
|
29
|
+
attr_accessor :user
|
30
|
+
|
31
|
+
# @return [Organization]
|
32
|
+
# Reference to Organization associated with this membership.
|
33
|
+
attr_accessor :organization
|
34
|
+
|
35
|
+
#
|
36
|
+
# Get Organization Membership associated with self.
|
37
|
+
#
|
38
|
+
# @return [Calendly::OrganizationMembership]
|
39
|
+
# @raise [Calendly::Error] if the uuid is empty.
|
40
|
+
# @raise [Calendly::ApiError] if the api returns error code.
|
41
|
+
# @since 0.1.0
|
42
|
+
def fetch
|
43
|
+
client.membership uuid
|
44
|
+
end
|
45
|
+
|
46
|
+
#
|
47
|
+
# Remove self from associated Organization.
|
48
|
+
#
|
49
|
+
# @raise [Calendly::Error] if the uuid is empty.
|
50
|
+
# @raise [Calendly::ApiError] if the api returns error code.
|
51
|
+
# @since 0.1.0
|
52
|
+
def delete
|
53
|
+
client.delete_membership uuid
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Calendly
|
4
|
+
# Calendly's user model.
|
5
|
+
# Primary account details of a specific user.
|
6
|
+
class User
|
7
|
+
include ModelUtils
|
8
|
+
UUID_RE = %r{\A#{Client::API_HOST}/users/(\w+)\z}.freeze
|
9
|
+
TIME_FIELDS = %i[created_at updated_at].freeze
|
10
|
+
|
11
|
+
# @return [String]
|
12
|
+
# unique id of the User object.
|
13
|
+
attr_accessor :uuid
|
14
|
+
# @return [String]
|
15
|
+
# Canonical resource reference.
|
16
|
+
attr_accessor :uri
|
17
|
+
# @return [String]
|
18
|
+
# User's human-readable name.
|
19
|
+
attr_accessor :name
|
20
|
+
# @return [String]
|
21
|
+
# Unique readable value used in page URL.
|
22
|
+
attr_accessor :slug
|
23
|
+
# @return [String]
|
24
|
+
# User's email address.
|
25
|
+
attr_accessor :email
|
26
|
+
# @return [String]
|
27
|
+
# URL of user's avatar image.
|
28
|
+
attr_accessor :avatar_url
|
29
|
+
# @return [String]
|
30
|
+
# URL of user's event page.
|
31
|
+
attr_accessor :scheduling_url
|
32
|
+
# @return [String]
|
33
|
+
# Timezone offest to use when presenting time information to user.
|
34
|
+
attr_accessor :timezone
|
35
|
+
# @return [Time]
|
36
|
+
# Moment when user record was first created.
|
37
|
+
attr_accessor :created_at
|
38
|
+
# @return [Time]
|
39
|
+
# Moment when user record was last updated.
|
40
|
+
attr_accessor :updated_at
|
41
|
+
|
42
|
+
#
|
43
|
+
# Get basic information associated with self.
|
44
|
+
#
|
45
|
+
# @return [Calendly::User]
|
46
|
+
# @raise [Calendly::Error] if the uuid is empty.
|
47
|
+
# @raise [Calendly::ApiError] if the api returns error code.
|
48
|
+
# @since 0.1.0
|
49
|
+
def fetch
|
50
|
+
client.user uuid
|
51
|
+
end
|
52
|
+
|
53
|
+
#
|
54
|
+
# Get an organization membership information associated with self.
|
55
|
+
#
|
56
|
+
# @return [Calendly::OrganizationMembership]
|
57
|
+
# @raise [Calendly::Error] if the uri is empty.
|
58
|
+
# @since 0.1.0
|
59
|
+
def organization_membership
|
60
|
+
mems, = client.memberships_by_user uri
|
61
|
+
mems.first
|
62
|
+
end
|
63
|
+
|
64
|
+
#
|
65
|
+
# Returns all Event Types associated with self.
|
66
|
+
#
|
67
|
+
# @param [Hash] opts the optional request parameters.
|
68
|
+
# @option opts [Integer] :count Number of rows to return.
|
69
|
+
# @option opts [String] :page_token Pass this to get the next portion of collection.
|
70
|
+
# @option opts [String] :sort Order results by the specified field and direction. Accepts comma-separated list of {field}:{direction} values.
|
71
|
+
# @return [Array<Calendly::EventType>]
|
72
|
+
# @raise [Calendly::Error] if the uri is empty.
|
73
|
+
# @raise [Calendly::ApiError] if the api returns error code.
|
74
|
+
# @since 0.1.0
|
75
|
+
def event_types(opts = {})
|
76
|
+
request_proc = proc { |options| client.event_types uri, options }
|
77
|
+
auto_pagination request_proc, opts
|
78
|
+
end
|
79
|
+
|
80
|
+
#
|
81
|
+
# Returns all Scheduled Events associated with self.
|
82
|
+
#
|
83
|
+
# @param [Hash] opts the optional request parameters.
|
84
|
+
# @option opts [Integer] :count Number of rows to return.
|
85
|
+
# @option opts [String] :invitee_email Return events scheduled with the specified invitee email
|
86
|
+
# @option opts [String] :max_start_time Upper bound (inclusive) for an event's start time to filter by.
|
87
|
+
# @option opts [String] :min_start_time Lower bound (inclusive) for an event's start time to filter by.
|
88
|
+
# @option opts [String] :page_token Pass this to get the next portion of collection.
|
89
|
+
# @option opts [String] :sort Order results by the specified field and directin. Accepts comma-separated list of {field}:{direction} values.
|
90
|
+
# @option opts [String] :status Whether the scheduled event is active or canceled
|
91
|
+
# @return [Array<Calendly::Event>]
|
92
|
+
# @raise [Calendly::Error] if the uri is empty.
|
93
|
+
# @raise [Calendly::ApiError] if the api returns error code.
|
94
|
+
# @since 0.1.0
|
95
|
+
def scheduled_events(opts = {})
|
96
|
+
request_proc = proc { |options| client.scheduled_events uri, options }
|
97
|
+
auto_pagination request_proc, opts
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
data/lib/calendly.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'zeitwerk'
|
4
|
+
loader = Zeitwerk::Loader.for_gem
|
5
|
+
loader.collapse('**/models')
|
6
|
+
loader.setup
|
7
|
+
|
8
|
+
# module for Calendly apis client
|
9
|
+
module Calendly
|
10
|
+
class << self
|
11
|
+
def configure
|
12
|
+
yield configuration
|
13
|
+
end
|
14
|
+
|
15
|
+
def configuration
|
16
|
+
@configuration ||= Configuration.new
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|