calendly 0.5.0 → 0.8.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.
@@ -3,60 +3,99 @@
3
3
  require 'calendly/client'
4
4
  require 'calendly/models/model_utils'
5
5
  require 'calendly/models/event'
6
+ require 'calendly/models/invitee_cancellation'
7
+ require 'calendly/models/invitee_payment'
8
+ require 'calendly/models/invitee_question_and_answer'
9
+ require 'calendly/models/invitee_tracking'
6
10
 
7
11
  module Calendly
8
- # Calendly's Invitee model.
12
+ # Calendly's invitee model.
9
13
  # An individual who has been invited to meet with a Calendly member.
10
14
  class Invitee
11
15
  include ModelUtils
12
16
  UUID_RE = %r{\A#{Client::API_HOST}/scheduled_events/\w+/invitees/(\w+)\z}.freeze
13
17
  TIME_FIELDS = %i[created_at updated_at].freeze
14
- ASSOCIATION = {event: Event}.freeze
18
+ ASSOCIATION = {
19
+ event: Event,
20
+ cancellation: InviteeCancellation,
21
+ payment: InviteePayment,
22
+ questions_and_answers: InviteeQuestionAndAnswer,
23
+ tracking: InviteeTracking
24
+ }.freeze
15
25
 
16
26
  # @return [String]
17
27
  # unique id of the Invitee object.
18
28
  attr_accessor :uuid
29
+
19
30
  # @return [String]
20
31
  # Canonical resource reference.
21
32
  attr_accessor :uri
33
+
22
34
  # @return [String]
23
35
  # The invitee's email address.
24
36
  attr_accessor :email
37
+
25
38
  # @return [String]
26
39
  # The invitee's human-readable name.
27
40
  attr_accessor :name
41
+
42
+ # @return [String]
43
+ # The first name of the invitee who booked the event when the event type is configured to use separate fields for
44
+ # first name and last name. Null when event type is configured to use a single field for name.
45
+ attr_accessor :first_name
46
+
47
+ # @return [String]
48
+ # The last name of the invitee who booked the event when the event type is configured to use separate fields
49
+ # for first name and last name. Null when event type is configured to use a single field for name.
50
+ attr_accessor :last_name
51
+
28
52
  # @return [String]
29
53
  # Whether the invitee has canceled or is still active.
30
54
  attr_accessor :status
55
+
31
56
  # @return [String]
32
57
  # Timezone offest to use when presenting time information to invitee.
33
58
  attr_accessor :timezone
59
+
34
60
  # @return [String]
35
61
  # Text (SMS) reminder phone number.
36
62
  attr_accessor :text_reminder_number
63
+
37
64
  # @return [Boolean]
38
65
  # Indicates if this invitee has rescheduled.
39
66
  # If true, a reference to the new Invitee instance is provided in the new_invitee field.
40
67
  attr_accessor :rescheduled
68
+
41
69
  # @return [String, nil]
42
70
  # Reference to old Invitee instance that got rescheduled.
43
71
  attr_accessor :old_invitee
72
+
44
73
  # @return [String, nil]
45
74
  # Link to new invitee, after reschedule.
46
75
  attr_accessor :new_invitee
76
+
47
77
  # @return [String]
48
78
  # Link to cancelling the event for the invitee.
49
79
  attr_accessor :cancel_url
80
+
50
81
  # @return [String]
51
82
  # Link to rescheduling the event for the invitee.
52
83
  attr_accessor :reschedule_url
84
+
53
85
  # @return [Time]
54
86
  # Moment when user record was first created.
55
87
  attr_accessor :created_at
88
+
56
89
  # @return [Time]
57
90
  # Moment when user record was last updated.
58
91
  attr_accessor :updated_at
59
92
 
93
+ # @return [InviteeCancellation] Provides data pertaining to the cancellation of the Invitee.
94
+ attr_accessor :cancellation
95
+
96
+ # @return [InviteePayment] Invitee payment.
97
+ attr_accessor :payment
98
+
60
99
  # @return [Event]
61
100
  # Reference to Event associated with this invitee.
62
101
  attr_accessor :event
@@ -80,16 +119,5 @@ module Calendly
80
119
  ev_uuid = event.uuid if event
81
120
  client.event_invitee ev_uuid, uuid
82
121
  end
83
-
84
- private
85
-
86
- def after_set_attributes(attrs)
87
- super attrs
88
- answers = attrs[:questions_and_answers]
89
- @questions_and_answers = answers.map { |ans| InviteeQuestionAndAnswer.new ans } if answers&.is_a? Array
90
-
91
- trac_attrs = attrs[:tracking]
92
- @tracking = InviteeTracking.new trac_attrs if trac_attrs&.is_a? Hash
93
- end
94
122
  end
95
123
  end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'calendly/models/model_utils'
4
+
5
+ module Calendly
6
+ # Calendly's invitee cancellation model.
7
+ # Provides data pertaining to the cancellation of the Invitee.
8
+ class InviteeCancellation
9
+ include ModelUtils
10
+
11
+ # @return [String] Name of the person whom canceled.
12
+ attr_accessor :canceled_by
13
+
14
+ # @return [String] Reason that the cancellation occurred.
15
+ attr_accessor :reason
16
+ end
17
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'calendly/models/model_utils'
4
+
5
+ module Calendly
6
+ # Calendly's invitee payment model.
7
+ class InviteePayment
8
+ include ModelUtils
9
+
10
+ # @return [String] Unique identifier for the payment.
11
+ attr_accessor :external_id
12
+
13
+ # @return [String] Payment provider.
14
+ attr_accessor :provider
15
+
16
+ # @return[Float] The amount of the payment.
17
+ attr_accessor :amount
18
+
19
+ # @return [String] The currency format that the payment is in.
20
+ attr_accessor :currency
21
+
22
+ # @return [String] Terms of the payment.
23
+ attr_accessor :terms
24
+
25
+ # @return [Boolean] Indicates whether the payment was successfully processed.
26
+ attr_accessor :successful
27
+ end
28
+ end
@@ -3,7 +3,7 @@
3
3
  require 'calendly/models/model_utils'
4
4
 
5
5
  module Calendly
6
- # Calendly's InviteeQuestionAndAnswer model.
6
+ # Calendly's question and answer model.
7
7
  # An individual form question and response.
8
8
  class InviteeQuestionAndAnswer
9
9
  include ModelUtils
@@ -11,11 +11,19 @@ module Calendly
11
11
  # @return [String]
12
12
  # The question from the event booking confirmation form.
13
13
  attr_accessor :question
14
+
14
15
  # @return [String]
15
16
  # The answer supplied by the invitee to this question.
16
17
  attr_accessor :answer
18
+
17
19
  # @return [Integer]
18
20
  # The position of this question in the event booking confirmation form.
19
21
  attr_accessor :position
22
+
23
+ private
24
+
25
+ def inspect_attributes
26
+ super + %i[position question]
27
+ end
20
28
  end
21
29
  end
@@ -3,7 +3,7 @@
3
3
  require 'calendly/models/model_utils'
4
4
 
5
5
  module Calendly
6
- # Calendly's InviteeTracking model.
6
+ # Calendly's invitee tracking model.
7
7
  # Object that represents UTM and Salesforce tracking parameters associated with the invitee.
8
8
  class InviteeTracking
9
9
  include ModelUtils
@@ -11,20 +11,31 @@ module Calendly
11
11
  # @return [String]
12
12
  # UTM campaign tracking parameter.
13
13
  attr_accessor :utm_campaign
14
+
14
15
  # @return [String]
15
16
  # UTM source tracking parameter.
16
17
  attr_accessor :utm_source
18
+
17
19
  # @return [String]
18
20
  # UTM medium tracking parameter.
19
21
  attr_accessor :utm_medium
22
+
20
23
  # @return [String]
21
24
  # UTM content tracking parameter.
22
25
  attr_accessor :utm_content
26
+
23
27
  # @return [String]
24
28
  # UTM term tracking parameter.
25
29
  attr_accessor :utm_term
30
+
26
31
  # @return [String]
27
32
  # Salesforce Record ID.
28
33
  attr_accessor :salesforce_uuid
34
+
35
+ private
36
+
37
+ def inspect_attributes
38
+ super + %i[utm_source utm_medium utm_campaign]
39
+ end
29
40
  end
30
41
  end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'calendly/models/model_utils'
4
+
5
+ module Calendly
6
+ # Calendly's invitees counter model.
7
+ class InviteesCounter
8
+ include ModelUtils
9
+
10
+ # @return [Integer] number of total invitees in this event.
11
+ attr_accessor :total
12
+
13
+ # @return [Integer] number of active invitees in this event.
14
+ attr_accessor :active
15
+
16
+ # @return [Integer] max invitees in this event.
17
+ attr_accessor :limit
18
+ end
19
+ end
@@ -59,13 +59,23 @@ module Calendly
59
59
 
60
60
  # @return [String]
61
61
  attr_accessor :type
62
+
62
63
  # @return [String]
63
64
  attr_accessor :location
65
+
64
66
  # @return [String]
65
67
  attr_accessor :status
68
+
66
69
  # @return [String]
67
70
  attr_accessor :join_url
71
+
68
72
  # @return [Hash]
69
73
  attr_accessor :data
74
+
75
+ private
76
+
77
+ def inspect_attributes
78
+ super + %i[location]
79
+ end
70
80
  end
71
81
  end
@@ -26,7 +26,7 @@ module Calendly
26
26
  end
27
27
 
28
28
  #
29
- # alias of uuid.
29
+ # Alias of uuid.
30
30
  #
31
31
  # @return [String]
32
32
  # @raise [Calendly::Error] if uuid is not defined.
@@ -37,9 +37,20 @@ module Calendly
37
37
  uuid
38
38
  end
39
39
 
40
+ #
41
+ # Self object description human readable in CLI.
42
+ #
43
+ # @return [String]
44
+ # @since 0.0.1
40
45
  def inspect
41
- description = "uuid:#{uuid}" if respond_to? :uuid
42
- "\#<#{self.class}:#{object_id} #{description}>"
46
+ att_info = []
47
+ inspect_attributes.each do |att|
48
+ next unless respond_to? att
49
+
50
+ att_info << "#{att}=#{send(att).inspect}"
51
+ end
52
+ att_info << '..'
53
+ "\#<#{self.class}:#{object_id} #{att_info.join(', ')}>"
43
54
  end
44
55
 
45
56
  module ClassMethods
@@ -61,7 +72,7 @@ module Calendly
61
72
 
62
73
  private
63
74
 
64
- def set_attributes(attrs) # rubocop:disable all
75
+ def set_attributes(attrs) # rubocop:disable Naming/AccessorMethodName, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
65
76
  return if attrs.nil?
66
77
  return unless attrs.is_a? Hash
67
78
  return if attrs.empty?
@@ -70,8 +81,14 @@ module Calendly
70
81
  next unless respond_to? "#{key}=".to_sym
71
82
 
72
83
  if value && defined?(self.class::ASSOCIATION) && self.class::ASSOCIATION.key?(key)
73
- associated_attrs = value.is_a?(Hash) ? value : {uri: value}
74
- value = self.class::ASSOCIATION[key].new associated_attrs, @client
84
+ klass = self.class::ASSOCIATION[key]
85
+ if value.is_a? String # rubocop:disable Style/CaseLikeIf
86
+ value = klass.new({uri: value}, @client)
87
+ elsif value.is_a? Hash
88
+ value = klass.new(value, @client)
89
+ elsif value.is_a? Array
90
+ value = value.map { |v| klass.new(v, @client) }
91
+ end
75
92
  elsif value && defined?(self.class::TIME_FIELDS) && self.class::TIME_FIELDS.include?(key)
76
93
  value = Time.parse value
77
94
  end
@@ -102,5 +119,14 @@ module Calendly
102
119
  end
103
120
  items
104
121
  end
122
+
123
+ #
124
+ # Basic attributes used by inspect method.
125
+ #
126
+ # @return [Array<Symbol>]
127
+ # @since 0.6.0
128
+ def inspect_attributes
129
+ %i[uuid name type slug status email]
130
+ end
105
131
  end
106
132
  end
@@ -12,6 +12,7 @@ module Calendly
12
12
  # @return [String]
13
13
  # unique id of the Organization object.
14
14
  attr_accessor :uuid
15
+
15
16
  # @return [String]
16
17
  # Canonical resource reference.
17
18
  attr_accessor :uri
@@ -19,52 +20,52 @@ module Calendly
19
20
  #
20
21
  # Get List memberships of all users belonging to self.
21
22
  #
22
- # @param [Hash] opts the optional request parameters.
23
- # @option opts [Integer] :count Number of rows to return.
24
- # @option opts [String] :email Filter by email.
25
- # @option opts [String] :page_token Pass this to get the next portion of collection.
23
+ # @param [Hash] options the optional request parameters. Optional.
24
+ # @option options [Integer] :count Number of rows to return.
25
+ # @option options [String] :email Filter by email.
26
+ # @option options [String] :page_token Pass this to get the next portion of collection.
26
27
  # @return [Array<Calendly::OrganizationMembership>]
27
28
  # @raise [Calendly::Error] if the uri is empty.
28
29
  # @raise [Calendly::ApiError] if the api returns error code.
29
30
  # @since 0.1.0
30
- def memberships(opts = {})
31
- return @cached_memberships if @cached_memberships
31
+ def memberships(options: nil)
32
+ return @cached_memberships if defined?(@cached_memberships) && @cached_memberships
32
33
 
33
- request_proc = proc { |options| client.memberships uri, options }
34
- @cached_memberships = auto_pagination request_proc, opts
34
+ request_proc = proc { |opts| client.memberships uri, options: opts }
35
+ @cached_memberships = auto_pagination request_proc, options
35
36
  end
36
37
 
37
38
  # @since 0.2.0
38
- def memberships!(opts = {})
39
+ def memberships!(options: nil)
39
40
  @cached_memberships = nil
40
- memberships opts
41
+ memberships options: options
41
42
  end
42
43
 
43
44
  #
44
45
  # Get Organization Invitations.
45
46
  #
46
- # @param [Hash] opts the optional request parameters.
47
- # @option opts [Integer] :count Number of rows to return.
48
- # @option opts [String] :email Filter by email.
49
- # @option opts [String] :page_token Pass this to get the next portion of collection.
50
- # @option opts [String] :sort Order results by the specified field and directin.
47
+ # @param [Hash] options the optional request parameters. Optional.
48
+ # @option options [Integer] :count Number of rows to return.
49
+ # @option options [String] :email Filter by email.
50
+ # @option options [String] :page_token Pass this to get the next portion of collection.
51
+ # @option options [String] :sort Order results by the specified field and directin.
51
52
  # Accepts comma-separated list of {field}:{direction} values.
52
- # @option opts [String] :status Filter by status.
53
+ # @option options [String] :status Filter by status.
53
54
  # @return [Array<Calendly::OrganizationInvitation>]
54
55
  # @raise [Calendly::Error] if the uuid is empty.
55
56
  # @raise [Calendly::ApiError] if the api returns error code.
56
57
  # @since 0.1.0
57
- def invitations(opts = {})
58
- return @cached_invitations if @cached_invitations
58
+ def invitations(options: nil)
59
+ return @cached_invitations if defined?(@cached_invitations) && @cached_invitations
59
60
 
60
- request_proc = proc { |options| client.invitations uuid, options }
61
- @cached_invitations = auto_pagination request_proc, opts
61
+ request_proc = proc { |opts| client.invitations uuid, options: opts }
62
+ @cached_invitations = auto_pagination request_proc, options
62
63
  end
63
64
 
64
65
  # @since 0.2.0
65
- def invitations!(opts = {})
66
+ def invitations!(options: nil)
66
67
  @cached_invitations = nil
67
- invitations opts
68
+ invitations options: options
68
69
  end
69
70
 
70
71
  #
@@ -80,58 +81,83 @@ module Calendly
80
81
  client.create_invitation uuid, email
81
82
  end
82
83
 
84
+ #
85
+ # Returns all Event Types associated with self.
86
+ #
87
+ # @param [Hash] options the optional request parameters. Optional.
88
+ # @option options [Integer] :count Number of rows to return.
89
+ # @option options [String] :page_token Pass this to get the next portion of collection.
90
+ # @option options [String] :sort Order results by the specified field and direction.
91
+ # Accepts comma-separated list of {field}:{direction} values.
92
+ # @return [Array<Calendly::EventType>]
93
+ # @raise [Calendly::Error] if the uri is empty.
94
+ # @raise [Calendly::ApiError] if the api returns error code.
95
+ # @since 0.6.0
96
+ def event_types(options: nil)
97
+ return @cached_event_types if defined?(@cached_event_types) && @cached_event_types
98
+
99
+ request_proc = proc { |opts| client.event_types uri, options: opts }
100
+ @cached_event_types = auto_pagination request_proc, options
101
+ end
102
+
103
+ # @since 0.6.0
104
+ def event_types!(options: nil)
105
+ @cached_event_types = nil
106
+ event_types options: options
107
+ end
108
+
83
109
  #
84
110
  # Returns all Scheduled Events associated with self.
85
111
  #
86
- # @param [Hash] opts the optional request parameters.
87
- # @option opts [Integer] :count Number of rows to return.
88
- # @option opts [String] :invitee_email Return events scheduled with the specified invitee email
89
- # @option opts [String] :max_start_timeUpper bound (inclusive) for an event's start time to filter by.
90
- # @option opts [String] :min_start_time Lower bound (inclusive) for an event's start time to filter by.
91
- # @option opts [String] :page_token Pass this to get the next portion of collection.
92
- # @option opts [String] :sort Order results by the specified field and directin.
112
+ # @param [Hash] options the optional request parameters. Optional.
113
+ # @option options [Integer] :count Number of rows to return.
114
+ # @option options [String] :invitee_email Return events scheduled with the specified invitee email
115
+ # @option options [String] :max_start_timeUpper bound (inclusive) for an event's start time to filter by.
116
+ # @option options [String] :min_start_time Lower bound (inclusive) for an event's start time to filter by.
117
+ # @option options [String] :page_token Pass this to get the next portion of collection.
118
+ # @option options [String] :sort Order results by the specified field and directin.
93
119
  # Accepts comma-separated list of {field}:{direction} values.
94
- # @option opts [String] :status Whether the scheduled event is active or canceled
120
+ # @option options [String] :status Whether the scheduled event is active or canceled
95
121
  # @return [Array<Calendly::Event>]
96
122
  # @raise [Calendly::Error] if the uri is empty.
97
123
  # @raise [Calendly::ApiError] if the api returns error code.
98
124
  # @since 0.5.0
99
- def scheduled_events(opts = {})
100
- return @cached_scheduled_events if @cached_scheduled_events
125
+ def scheduled_events(options: nil)
126
+ return @cached_scheduled_events if defined?(@cached_scheduled_events) && @cached_scheduled_events
101
127
 
102
- request_proc = proc { |options| client.scheduled_events uri, options }
103
- @cached_scheduled_events = auto_pagination request_proc, opts
128
+ request_proc = proc { |opts| client.scheduled_events uri, options: opts }
129
+ @cached_scheduled_events = auto_pagination request_proc, options
104
130
  end
105
131
 
106
132
  # @since 0.5.0
107
- def scheduled_events!(opts = {})
133
+ def scheduled_events!(options: nil)
108
134
  @cached_scheduled_events = nil
109
- scheduled_events opts
135
+ scheduled_events options: options
110
136
  end
111
137
 
112
138
  #
113
139
  # Get List of organization scope Webhooks associated with self.
114
140
  #
115
- # @param [Hash] opts the optional request parameters.
116
- # @option opts [Integer] :count Number of rows to return.
117
- # @option opts [String] :page_token Pass this to get the next portion of collection.
118
- # @option opts [String] :sort Order results by the specified field and directin. Accepts comma-separated list of {field}:{direction} values.
141
+ # @param [Hash] options the optional request parameters. Optional.
142
+ # @option options [Integer] :count Number of rows to return.
143
+ # @option options [String] :page_token Pass this to get the next portion of collection.
144
+ # @option options [String] :sort Order results by the specified field and directin. Accepts comma-separated list of {field}:{direction} values.
119
145
  # Accepts comma-separated list of {field}:{direction} values.
120
146
  # @return [Array<Calendly::WebhookSubscription>]
121
147
  # @raise [Calendly::Error] if the uri is empty.
122
148
  # @raise [Calendly::ApiError] if the api returns error code.
123
149
  # @since 0.1.3
124
- def webhooks(opts = {})
125
- return @cached_webhooks if @cached_webhooks
150
+ def webhooks(options: nil)
151
+ return @cached_webhooks if defined?(@cached_webhooks) && @cached_webhooks
126
152
 
127
- request_proc = proc { |options| client.webhooks uri, options }
128
- @cached_webhooks = auto_pagination request_proc, opts
153
+ request_proc = proc { |opts| client.webhooks uri, options: opts }
154
+ @cached_webhooks = auto_pagination request_proc, options
129
155
  end
130
156
 
131
157
  # @since 0.2.0
132
- def webhooks!(opts = {})
158
+ def webhooks!(options: nil)
133
159
  @cached_webhooks = nil
134
- webhooks opts
160
+ webhooks options: options
135
161
  end
136
162
 
137
163
  #
@@ -139,14 +165,15 @@ module Calendly
139
165
  #
140
166
  # @param [String] url Canonical reference (unique identifier) for the resource.
141
167
  # @param [Array<String>] events List of user events to subscribe to. options: invitee.created or invitee.canceled
168
+ # @param [String] signing_key secret key shared between your application and Calendly. Optional.
142
169
  # @return [Calendly::WebhookSubscription]
143
170
  # @raise [Calendly::Error] if the url arg is empty.
144
171
  # @raise [Calendly::Error] if the events arg is empty.
145
172
  # @raise [Calendly::Error] if the uri is empty.
146
173
  # @raise [Calendly::ApiError] if the api returns error code.
147
174
  # @since 0.1.3
148
- def create_webhook(url, events)
149
- client.create_webhook url, events, uri
175
+ def create_webhook(url, events, signing_key: nil)
176
+ client.create_webhook url, events, uri, signing_key: signing_key
150
177
  end
151
178
  end
152
179
  end