supersaas-api-client 0.9.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/.gitignore +11 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +22 -0
- data/LICENSE +21 -0
- data/README.md +252 -0
- data/Rakefile +10 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/examples/appointments.rb +84 -0
- data/examples/forms.rb +39 -0
- data/examples/schedules.rb +27 -0
- data/examples/users.rb +51 -0
- data/lib/supersaas-api-client/api/appointments.rb +152 -0
- data/lib/supersaas-api-client/api/base_api.rb +55 -0
- data/lib/supersaas-api-client/api/forms.rb +21 -0
- data/lib/supersaas-api-client/api/schedules.rb +16 -0
- data/lib/supersaas-api-client/api/users.rb +82 -0
- data/lib/supersaas-api-client/client.rb +159 -0
- data/lib/supersaas-api-client/exception.rb +8 -0
- data/lib/supersaas-api-client/models/appointment.rb +22 -0
- data/lib/supersaas-api-client/models/base_model.rb +19 -0
- data/lib/supersaas-api-client/models/form.rb +5 -0
- data/lib/supersaas-api-client/models/resource.rb +5 -0
- data/lib/supersaas-api-client/models/schedule.rb +5 -0
- data/lib/supersaas-api-client/models/slot.rb +14 -0
- data/lib/supersaas-api-client/models/user.rb +16 -0
- data/lib/supersaas-api-client/version.rb +4 -0
- data/lib/supersaas-api-client.rb +1 -0
- data/lib/supersaas.rb +15 -0
- data/supersaas-api-client.gemspec +27 -0
- data/test/appointments_test.rb +99 -0
- data/test/client_test.rb +46 -0
- data/test/forms_test.rb +22 -0
- data/test/schedules_test.rb +19 -0
- data/test/test_helper.rb +23 -0
- data/test/users_test.rb +68 -0
- metadata +131 -0
@@ -0,0 +1,152 @@
|
|
1
|
+
module Supersaas
|
2
|
+
# REF: https://www.supersaas.com/info/dev/appointment_api
|
3
|
+
class Appointments < BaseApi
|
4
|
+
def agenda(schedule_id, user_id, from_time=nil)
|
5
|
+
path = "/agenda/#{validate_id(schedule_id)}"
|
6
|
+
params = {
|
7
|
+
user: validate_present(user_id),
|
8
|
+
from: from_time && validate_datetime(from_time)
|
9
|
+
}
|
10
|
+
res = client.get(path, params)
|
11
|
+
map_slots_or_bookings(res)
|
12
|
+
end
|
13
|
+
|
14
|
+
def agenda_slots(schedule_id, user_id, from_time=nil)
|
15
|
+
path = "/agenda/#{validate_id(schedule_id)}"
|
16
|
+
params = {
|
17
|
+
user: validate_present(user_id),
|
18
|
+
from: from_time && validate_datetime(from_time),
|
19
|
+
slot: true
|
20
|
+
}
|
21
|
+
res = client.get(path, params)
|
22
|
+
map_slots_or_bookings(res, true)
|
23
|
+
end
|
24
|
+
|
25
|
+
def available(schedule_id, from_time, length_minutes=nil, resource=nil, full=nil, limit=nil)
|
26
|
+
path = "/free/#{validate_id(schedule_id)}"
|
27
|
+
params = {
|
28
|
+
length: length_minutes && validate_number(length_minutes),
|
29
|
+
from: validate_datetime(from_time),
|
30
|
+
resource: resource,
|
31
|
+
full: full ? true : nil,
|
32
|
+
maxresults: limit && validate_number(limit)
|
33
|
+
}
|
34
|
+
res = client.get(path, params)
|
35
|
+
map_slots_or_bookings(res)
|
36
|
+
end
|
37
|
+
|
38
|
+
def list(schedule_id, form=nil, start_time=nil, limit=nil)
|
39
|
+
path = "/bookings"
|
40
|
+
params = {
|
41
|
+
schedule_id: validate_id(schedule_id),
|
42
|
+
form: form ? true : nil,
|
43
|
+
start: start_time ? validate_datetime(start_time) : nil,
|
44
|
+
limit: limit && validate_number(limit)
|
45
|
+
}
|
46
|
+
res = client.get(path, params)
|
47
|
+
map_slots_or_bookings(res)
|
48
|
+
end
|
49
|
+
|
50
|
+
def get(schedule_id, appointment_id)
|
51
|
+
params = {schedule_id: validate_id(schedule_id)}
|
52
|
+
path = "/bookings/#{validate_id(appointment_id)}"
|
53
|
+
res = client.get(path, params)
|
54
|
+
Supersaas::Appointment.new(res)
|
55
|
+
end
|
56
|
+
|
57
|
+
def create(schedule_id, user_id, attributes, form=nil, webhook=nil)
|
58
|
+
path = "/bookings"
|
59
|
+
params = {
|
60
|
+
schedule_id: schedule_id,
|
61
|
+
webhook: webhook,
|
62
|
+
user_id: validate_id(user_id),
|
63
|
+
form: form ? true : nil,
|
64
|
+
booking: {
|
65
|
+
start: attributes[:start],
|
66
|
+
finish: attributes[:finish],
|
67
|
+
name: attributes[:name],
|
68
|
+
email: attributes[:email],
|
69
|
+
full_name: attributes[:full_name],
|
70
|
+
address: attributes[:address],
|
71
|
+
mobile: attributes[:mobile],
|
72
|
+
phone: attributes[:phone],
|
73
|
+
country: attributes[:country],
|
74
|
+
field_1: attributes[:field_1],
|
75
|
+
field_2: attributes[:field_2],
|
76
|
+
field_1_r: attributes[:field_1_r],
|
77
|
+
field_2_r: attributes[:field_2_r],
|
78
|
+
super_field: attributes[:super_field],
|
79
|
+
resource_id: attributes[:resource_id],
|
80
|
+
slot_id: attributes[:slot_id]
|
81
|
+
}
|
82
|
+
}
|
83
|
+
client.post(path, params)
|
84
|
+
end
|
85
|
+
|
86
|
+
def update(schedule_id, appointment_id, attributes, form=nil, webhook=nil)
|
87
|
+
path = "/bookings/#{validate_id(appointment_id)}"
|
88
|
+
params = {
|
89
|
+
schedule_id: schedule_id,
|
90
|
+
webhook: webhook,
|
91
|
+
form: form,
|
92
|
+
booking: {
|
93
|
+
start: attributes[:start],
|
94
|
+
finish: attributes[:finish],
|
95
|
+
name: validate_present(attributes[:name]),
|
96
|
+
email: attributes[:email],
|
97
|
+
full_name: attributes[:full_name],
|
98
|
+
address: attributes[:address],
|
99
|
+
mobile: attributes[:mobile],
|
100
|
+
phone: attributes[:phone],
|
101
|
+
country: attributes[:country],
|
102
|
+
field_1: attributes[:field_1],
|
103
|
+
field_2: attributes[:field_2],
|
104
|
+
field_1_r: attributes[:field_1_r],
|
105
|
+
field_2_r: attributes[:field_2_r],
|
106
|
+
super_field: attributes[:super_field],
|
107
|
+
resource_id: attributes[:resource_id],
|
108
|
+
slot_id: attributes[:slot_id]
|
109
|
+
}
|
110
|
+
}
|
111
|
+
client.put(path, params)
|
112
|
+
end
|
113
|
+
|
114
|
+
def delete(appointment_id)
|
115
|
+
path = "/bookings/#{validate_id(appointment_id)}"
|
116
|
+
client.delete(path)
|
117
|
+
end
|
118
|
+
|
119
|
+
def changes(schedule_id, from_time)
|
120
|
+
path = "/changes/#{validate_id(schedule_id)}"
|
121
|
+
params = { from: validate_datetime(from_time) }
|
122
|
+
res = client.get(path, params)
|
123
|
+
map_slots_or_bookings(res)
|
124
|
+
end
|
125
|
+
|
126
|
+
def changes_slots(schedule_id, from_time)
|
127
|
+
path = "/changes/#{validate_id(schedule_id)}"
|
128
|
+
params = {
|
129
|
+
from: validate_datetime(from_time),
|
130
|
+
slot: true
|
131
|
+
}
|
132
|
+
res = client.get(path, params)
|
133
|
+
map_slots_or_bookings(res, true)
|
134
|
+
end
|
135
|
+
|
136
|
+
private
|
137
|
+
|
138
|
+
def map_slots_or_bookings(obj, slot=false)
|
139
|
+
if obj.is_a?(Array) && slot
|
140
|
+
obj.map { |attributes| Supersaas::Slot.new(attributes) }
|
141
|
+
elsif obj.is_a?(Array)
|
142
|
+
obj.map { |attributes| Supersaas::Appointment.new(attributes) }
|
143
|
+
elsif obj['slots']
|
144
|
+
obj['slots'].map { |attributes| Supersaas::Slot.new(attributes) }
|
145
|
+
elsif obj['bookings']
|
146
|
+
obj['bookings'].map { |attributes| Supersaas::Appointment.new(attributes) }
|
147
|
+
else
|
148
|
+
[]
|
149
|
+
end
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module Supersaas
|
2
|
+
class BaseApi
|
3
|
+
attr_accessor :client
|
4
|
+
|
5
|
+
INTEGER_REGEX = /\A[0-9]+\Z/
|
6
|
+
DATETIME_REGEX = /\A\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2}:\d{1,2}\Z/
|
7
|
+
|
8
|
+
def initialize(client)
|
9
|
+
@client = client
|
10
|
+
end
|
11
|
+
|
12
|
+
protected
|
13
|
+
|
14
|
+
def validate_id(value)
|
15
|
+
if value.is_a?(Integer)
|
16
|
+
value
|
17
|
+
elsif value.is_a?(String) && value =~ INTEGER_REGEX
|
18
|
+
value.to_i
|
19
|
+
else
|
20
|
+
raise Supersaas::Exception.new("Invalid id parameter: #{value}. Provide a integer value.")
|
21
|
+
end
|
22
|
+
end
|
23
|
+
def validate_number(value); validate_id(value); end
|
24
|
+
|
25
|
+
def validate_present(value)
|
26
|
+
if value.is_a?(String) ? value.size : value
|
27
|
+
value
|
28
|
+
else
|
29
|
+
raise Supersaas::Exception.new("Required parameter is missing.")
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def validate_datetime(value)
|
34
|
+
begin
|
35
|
+
if value.is_a?(String) && value =~ DATETIME_REGEX
|
36
|
+
value
|
37
|
+
elsif value.is_a?(Time) || value.is_a?(DateTime)
|
38
|
+
value.strftime("%Y-%m-%d %H:%M:%S")
|
39
|
+
else
|
40
|
+
raise ArgumentError
|
41
|
+
end
|
42
|
+
rescue ArgumentError
|
43
|
+
raise Supersaas::Exception.new("Invalid datetime parameter: #{value}. Provide a Time object or formatted 'YYYY-DD-MM HH:MM:SS' string.")
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def validate_options(value, options)
|
48
|
+
if options.include?(value)
|
49
|
+
value
|
50
|
+
else
|
51
|
+
raise Supersaas::Exception.new("Invalid option parameter: #{value}. Must be one of #{options.join(', ')}.")
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Supersaas
|
2
|
+
# REF: https://www.supersaas.com/info/dev/form_api
|
3
|
+
class Forms < BaseApi
|
4
|
+
def list(template_form_id, from_time=nil)
|
5
|
+
path = "/forms"
|
6
|
+
params = {
|
7
|
+
form_id: validate_id(template_form_id),
|
8
|
+
from: from_time ? validate_datetime(from_time) : nil
|
9
|
+
}
|
10
|
+
res = client.get(path, params)
|
11
|
+
res.map { |attributes| Supersaas::Form.new(attributes) }
|
12
|
+
end
|
13
|
+
|
14
|
+
def get(form_id)
|
15
|
+
path = "/forms"
|
16
|
+
params = {id: validate_id(form_id)}
|
17
|
+
res = client.get(path, params)
|
18
|
+
Supersaas::Form.new(res)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Supersaas
|
2
|
+
class Schedules < BaseApi
|
3
|
+
def list
|
4
|
+
path = "/schedules"
|
5
|
+
res = client.get(path)
|
6
|
+
res.map { |attributes| Supersaas::Schedule.new(attributes) }
|
7
|
+
end
|
8
|
+
|
9
|
+
def resources(schedule_id)
|
10
|
+
path = "/resources"
|
11
|
+
query = {schedule_id: validate_id(schedule_id)}
|
12
|
+
res = client.get(path, query)
|
13
|
+
res.map { |attributes| Supersaas::Resource.new(attributes) }
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
module Supersaas
|
2
|
+
# REF: https://www.supersaas.com/info/dev/user_api
|
3
|
+
class Users < BaseApi
|
4
|
+
def list(form=nil, limit=nil, offset=nil)
|
5
|
+
path = user_path(nil)
|
6
|
+
params = {
|
7
|
+
form: form ? true : nil,
|
8
|
+
limit: limit && validate_number(limit),
|
9
|
+
offset: offset && validate_number(offset)
|
10
|
+
}
|
11
|
+
res = client.get(path, params)
|
12
|
+
res.map { |attributes| Supersaas::User.new(attributes) }
|
13
|
+
end
|
14
|
+
|
15
|
+
def get(user_id)
|
16
|
+
path = user_path(user_id)
|
17
|
+
res = client.get(path)
|
18
|
+
Supersaas::User.new(res)
|
19
|
+
end
|
20
|
+
|
21
|
+
def create(attributes, user_id=nil, webhook=nil)
|
22
|
+
path = user_path(user_id)
|
23
|
+
query = {webhook: webhook}
|
24
|
+
params = {
|
25
|
+
user: {
|
26
|
+
name: validate_present(attributes[:name]),
|
27
|
+
email: attributes[:email],
|
28
|
+
password: attributes[:password],
|
29
|
+
full_name: attributes[:full_name],
|
30
|
+
address: attributes[:address],
|
31
|
+
mobile: attributes[:mobile],
|
32
|
+
phone: attributes[:phone],
|
33
|
+
country: attributes[:country],
|
34
|
+
field_1: attributes[:field_1],
|
35
|
+
field_2: attributes[:field_2],
|
36
|
+
super_field: attributes[:super_field],
|
37
|
+
credit: attributes[:credit] && validate_number(attributes[:credit]),
|
38
|
+
role: attributes[:role] && validate_options(attributes[:role], User::ROLES)
|
39
|
+
}
|
40
|
+
}
|
41
|
+
client.post(path, params, query)
|
42
|
+
end
|
43
|
+
|
44
|
+
def update(user_id, attributes, webhook=nil)
|
45
|
+
path = user_path(validate_id(user_id))
|
46
|
+
query = {webhook: webhook}
|
47
|
+
params = {
|
48
|
+
user: {
|
49
|
+
name: attributes[:name],
|
50
|
+
email: attributes[:email],
|
51
|
+
password: attributes[:password],
|
52
|
+
full_name: attributes[:full_name],
|
53
|
+
address: attributes[:address],
|
54
|
+
mobile: attributes[:mobile],
|
55
|
+
phone: attributes[:phone],
|
56
|
+
country: attributes[:country],
|
57
|
+
field_1: attributes[:field_1],
|
58
|
+
field_2: attributes[:field_2],
|
59
|
+
super_field: attributes[:super_field],
|
60
|
+
credit: attributes[:credit] && validate_number(attributes[:credit]),
|
61
|
+
role: attributes[:role] && validate_options(attributes[:role], User::ROLES)
|
62
|
+
}
|
63
|
+
}
|
64
|
+
client.put(path, params, query)
|
65
|
+
end
|
66
|
+
|
67
|
+
def delete(user_id)
|
68
|
+
path = user_path(validate_id(user_id))
|
69
|
+
client.delete(path)
|
70
|
+
end
|
71
|
+
|
72
|
+
private
|
73
|
+
|
74
|
+
def user_path(user_id)
|
75
|
+
if user_id.nil? || user_id == ''
|
76
|
+
"/users"
|
77
|
+
else
|
78
|
+
"/users/#{user_id}"
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,159 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
require 'uri'
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
module Supersaas
|
6
|
+
class Client
|
7
|
+
class << self
|
8
|
+
attr_accessor :configuration
|
9
|
+
|
10
|
+
def configure
|
11
|
+
self.configuration ||= Configuration.new
|
12
|
+
yield(configuration)
|
13
|
+
end
|
14
|
+
|
15
|
+
def instance
|
16
|
+
Thread.current['SUPER_SAAS_CLIENT'] ||= new(configuration || Configuration.new)
|
17
|
+
end
|
18
|
+
|
19
|
+
def user_agent
|
20
|
+
"SSS/#{VERSION} Ruby/#{RUBY_VERSION} API/#{API_VERSION}"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
attr_accessor :account_name, :password, :host, :dry_run, :verbose
|
25
|
+
attr_reader :last_request
|
26
|
+
|
27
|
+
def initialize(configuration=nil)
|
28
|
+
configuration = configuration || Configuration.new
|
29
|
+
@account_name = configuration.account_name
|
30
|
+
@password = configuration.password
|
31
|
+
@host = configuration.host
|
32
|
+
@dry_run = configuration.dry_run
|
33
|
+
@verbose = configuration.verbose
|
34
|
+
end
|
35
|
+
|
36
|
+
def appointments; @appointments ||= Appointments.new(self); end
|
37
|
+
def forms; @forms ||= Forms.new(self); end
|
38
|
+
def schedules; @schedules ||= Schedules.new(self); end
|
39
|
+
def users; @users ||= Users.new(self); end
|
40
|
+
|
41
|
+
def get(path, query={})
|
42
|
+
request(:get, path, {}, query)
|
43
|
+
end
|
44
|
+
|
45
|
+
def post(path, params={}, query={})
|
46
|
+
request(:post, path, params, query)
|
47
|
+
end
|
48
|
+
|
49
|
+
def put(path, params={}, query={})
|
50
|
+
request(:put, path, params, query)
|
51
|
+
end
|
52
|
+
|
53
|
+
def delete(path, params={}, query={})
|
54
|
+
request(:delete, path, params, query)
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
|
59
|
+
def request(http_method, path, params={}, query={})
|
60
|
+
raise Supersaas::Exception.new("Account name not configured. Call `Supersaas::Client.configure`.") unless account_name && account_name.size
|
61
|
+
raise Supersaas::Exception.new("Account password not configured. Call `Supersaas::Client.configure`.") unless password && password.size
|
62
|
+
|
63
|
+
uri = URI.parse(host)
|
64
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
65
|
+
http.use_ssl = uri.scheme == 'https'
|
66
|
+
|
67
|
+
params = delete_blank_values params
|
68
|
+
query = delete_blank_values query
|
69
|
+
|
70
|
+
path = "/api#{path}.json"
|
71
|
+
path += "?#{URI.encode_www_form(query)}" if query.keys.size > 0
|
72
|
+
|
73
|
+
case http_method
|
74
|
+
when :get
|
75
|
+
req = Net::HTTP::Get.new(path)
|
76
|
+
when :post
|
77
|
+
req = Net::HTTP::Post.new(path)
|
78
|
+
req.body = params.to_json
|
79
|
+
when :put
|
80
|
+
req = Net::HTTP::Put.new(path)
|
81
|
+
req.body = params.to_json
|
82
|
+
when :delete
|
83
|
+
req = Net::HTTP::Delete.new(path)
|
84
|
+
req.body = params.to_json
|
85
|
+
else
|
86
|
+
raise Supersaas::Exception.new("Invalid HTTP Method: #{http_method}. Only `:get`, `:post`, `:put`, `:delete` supported.")
|
87
|
+
end
|
88
|
+
|
89
|
+
req.basic_auth account_name, password
|
90
|
+
|
91
|
+
req['Accept'] = 'application/json'
|
92
|
+
req['Content-Type'] = 'application/json'
|
93
|
+
req['User-Agent'] = self.class.user_agent
|
94
|
+
|
95
|
+
if verbose
|
96
|
+
puts "### SuperSaaS Client Request:"
|
97
|
+
puts "#{http_method} #{path}"
|
98
|
+
puts params.to_json
|
99
|
+
puts "------------------------------"
|
100
|
+
end
|
101
|
+
|
102
|
+
@last_request = req
|
103
|
+
return {} if dry_run
|
104
|
+
|
105
|
+
begin
|
106
|
+
res = http.request(req)
|
107
|
+
rescue Timeout::Error, Errno::EINVAL, Errno::ECONNRESET, EOFError,
|
108
|
+
Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError, Net::ProtocolError => e
|
109
|
+
raise Supersaas::Exception.new("HTTP Request Error (#{uri}#{path}): #{e.message}")
|
110
|
+
end
|
111
|
+
|
112
|
+
if verbose
|
113
|
+
puts "Response:"
|
114
|
+
puts res.body
|
115
|
+
puts "=============================="
|
116
|
+
end
|
117
|
+
|
118
|
+
code = res.code.to_i
|
119
|
+
case code
|
120
|
+
when 200, 201
|
121
|
+
json_body(res)
|
122
|
+
when 422, 400
|
123
|
+
json_body(res)
|
124
|
+
else
|
125
|
+
{}
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
def json_body(res)
|
130
|
+
begin
|
131
|
+
res.body && res.body.size ? JSON.parse(res.body) : {}
|
132
|
+
rescue JSON::ParserError
|
133
|
+
{}
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
def delete_blank_values(hash)
|
138
|
+
return hash unless hash
|
139
|
+
hash.delete_if do |k, v|
|
140
|
+
v = v.delete_if { |k2, v2| v2.nil? } if (v.is_a?(Hash))
|
141
|
+
v.nil? || v == ''
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
class Configuration
|
146
|
+
DEFAULT_HOST = 'https://www.supersaas.com'
|
147
|
+
|
148
|
+
attr_accessor :account_name, :host, :password, :dry_run, :verbose
|
149
|
+
|
150
|
+
def initialize
|
151
|
+
@account_name = ENV['SSS_API_ACCOUNT_NAME']
|
152
|
+
@password = ENV['SSS_API_PASSWORD']
|
153
|
+
@host = DEFAULT_HOST
|
154
|
+
@dry_run = false
|
155
|
+
@verbose = false
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
159
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Supersaas
|
2
|
+
class Appointment < BaseModel
|
3
|
+
attr_accessor :address, :country, :created_by, :created_on, :deleted, :description, :email, :field_1, :field_2, :field_1_r, :field_2_r, :finish, :form_id, :full_name, :id, :mobile, :name, :phone, :price, :res_name, :resource_id, :schedule_id, :schedule_name, :service_id, :service_name, :slot_id, :start, :status, :super_field, :updated_by, :updated_on, :user_id, :waitlisted
|
4
|
+
attr_reader :form, :slot
|
5
|
+
|
6
|
+
def form=(value)
|
7
|
+
if value.is_a?(Hash)
|
8
|
+
@form = Supersaas::Form.new(value)
|
9
|
+
else
|
10
|
+
@form = value
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def slot=(value)
|
15
|
+
if value.is_a?(Hash)
|
16
|
+
@slot = Supersaas::Slot.new(value)
|
17
|
+
else
|
18
|
+
@slot = value
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Supersaas
|
2
|
+
class BaseModel
|
3
|
+
attr_accessor :errors
|
4
|
+
attr_reader :attributes
|
5
|
+
|
6
|
+
def initialize(attributes)
|
7
|
+
@attributes = attributes
|
8
|
+
assign_attributes(attributes)
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def assign_attributes(attributes)
|
14
|
+
attributes.each do |key, value|
|
15
|
+
public_send("#{key}=", value) if respond_to?("#{key}=")
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Supersaas
|
2
|
+
class Slot < BaseModel
|
3
|
+
attr_accessor :count, :description, :finish, :id, :location, :name, :start, :title
|
4
|
+
attr_reader :bookings
|
5
|
+
|
6
|
+
def bookings=(value)
|
7
|
+
if value.is_a?(Array)
|
8
|
+
@bookings = value.map {|attributes| Supersaas::Appointment.new(attributes) }
|
9
|
+
else
|
10
|
+
@bookings = value
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Supersaas
|
2
|
+
class User < BaseModel
|
3
|
+
ROLES = [3, 4, -1]
|
4
|
+
|
5
|
+
attr_accessor :address, :country, :created_on, :credit, :email, :field_1, :field_2, :fk, :full_name, :id, :mobile, :name, :phone, :role, :super_field
|
6
|
+
attr_reader :form
|
7
|
+
|
8
|
+
def form=(value)
|
9
|
+
if value.is_a?(Hash)
|
10
|
+
@form = Supersaas::Form.new(value)
|
11
|
+
else
|
12
|
+
@form = value
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require_relative './supersaas'
|
data/lib/supersaas.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
require "supersaas-api-client/version"
|
2
|
+
require "supersaas-api-client/exception"
|
3
|
+
require "supersaas-api-client/models/base_model"
|
4
|
+
require "supersaas-api-client/models/appointment"
|
5
|
+
require "supersaas-api-client/models/form"
|
6
|
+
require "supersaas-api-client/models/resource"
|
7
|
+
require "supersaas-api-client/models/schedule"
|
8
|
+
require "supersaas-api-client/models/slot"
|
9
|
+
require "supersaas-api-client/models/user"
|
10
|
+
require "supersaas-api-client/api/base_api"
|
11
|
+
require "supersaas-api-client/api/appointments"
|
12
|
+
require "supersaas-api-client/api/forms"
|
13
|
+
require "supersaas-api-client/api/schedules"
|
14
|
+
require "supersaas-api-client/api/users"
|
15
|
+
require "supersaas-api-client/client"
|
@@ -0,0 +1,27 @@
|
|
1
|
+
$:.push File.expand_path('../lib', __FILE__)
|
2
|
+
|
3
|
+
require "supersaas-api-client/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = "supersaas-api-client"
|
7
|
+
spec.version = Supersaas::VERSION
|
8
|
+
spec.authors = ["Travis Dunn"]
|
9
|
+
spec.email = ["travis@supersaas.com"]
|
10
|
+
|
11
|
+
spec.summary = %q{Online bookings/appointments/calendars using the SuperSaaS scheduling platform.}
|
12
|
+
spec.description = %q{Online appointment scheduler for any type of business. Flexible and affordable booking software that can be integrated into any site. Free basic version.}
|
13
|
+
spec.homepage = "https://www.supersaas.com"
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
17
|
+
f.match(%r{^(test)/})
|
18
|
+
end
|
19
|
+
spec.test_files = Dir['test/**/*']
|
20
|
+
spec.bindir = "bin"
|
21
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
22
|
+
spec.require_paths = ["lib"]
|
23
|
+
|
24
|
+
spec.add_development_dependency "bundler", "~> 1.16"
|
25
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
26
|
+
spec.add_development_dependency "minitest", "~> 5.0"
|
27
|
+
end
|