bima-shark-sdk 2.3.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 +13 -0
- data/.rspec +1 -0
- data/.rubocop.yml +56 -0
- data/.travis.yml +10 -0
- data/CHANGELOG.md +131 -0
- data/Gemfile +6 -0
- data/LICENSE.txt +21 -0
- data/README.md +53 -0
- data/Rakefile +8 -0
- data/bima-shark-sdk.gemspec +36 -0
- data/bin/console +24 -0
- data/bin/setup +8 -0
- data/lib/bima-shark-sdk/rspec.rb +38 -0
- data/lib/bima-shark-sdk.rb +3 -0
- data/lib/shark/account.rb +7 -0
- data/lib/shark/activity.rb +11 -0
- data/lib/shark/asset.rb +13 -0
- data/lib/shark/base.rb +36 -0
- data/lib/shark/client/connection.rb +67 -0
- data/lib/shark/concerns/connected.rb +44 -0
- data/lib/shark/concerns/normalized_email.rb +13 -0
- data/lib/shark/configuration.rb +90 -0
- data/lib/shark/consent.rb +31 -0
- data/lib/shark/contact.rb +40 -0
- data/lib/shark/contact_log.rb +7 -0
- data/lib/shark/double_opt_in/execution.rb +50 -0
- data/lib/shark/double_opt_in/request.rb +45 -0
- data/lib/shark/error.rb +69 -0
- data/lib/shark/form_service/base.rb +11 -0
- data/lib/shark/form_service/form/container.rb +10 -0
- data/lib/shark/form_service/form/element.rb +83 -0
- data/lib/shark/form_service/form/multiple_choice.rb +21 -0
- data/lib/shark/form_service/form/rating_scale.rb +20 -0
- data/lib/shark/form_service/form/rating_star.rb +13 -0
- data/lib/shark/form_service/form/structure.rb +13 -0
- data/lib/shark/form_service/form/text_area.rb +10 -0
- data/lib/shark/form_service/form/text_field.rb +17 -0
- data/lib/shark/form_service/v2/base.rb +13 -0
- data/lib/shark/form_service/v2/form.rb +18 -0
- data/lib/shark/form_service/v2/form_input.rb +15 -0
- data/lib/shark/form_service/v2/form_version.rb +19 -0
- data/lib/shark/form_service.rb +21 -0
- data/lib/shark/group.rb +18 -0
- data/lib/shark/mailing_service/base.rb +11 -0
- data/lib/shark/mailing_service/configuration.rb +9 -0
- data/lib/shark/mailing_service/mail.rb +8 -0
- data/lib/shark/mailing_service/mailers/base_mailer.rb +96 -0
- data/lib/shark/mailing_service/renderers/context.rb +40 -0
- data/lib/shark/mailing_service/renderers/erb_renderer.rb +46 -0
- data/lib/shark/mailing_service.rb +23 -0
- data/lib/shark/membership.rb +16 -0
- data/lib/shark/middleware/compose_request.rb +41 -0
- data/lib/shark/middleware/status.rb +36 -0
- data/lib/shark/notification.rb +21 -0
- data/lib/shark/package.rb +7 -0
- data/lib/shark/permission.rb +7 -0
- data/lib/shark/rails.rb +13 -0
- data/lib/shark/rspec/fake_asset_service/object_cache.rb +76 -0
- data/lib/shark/rspec/fake_asset_service/public_id.rb +21 -0
- data/lib/shark/rspec/fake_asset_service/request.rb +154 -0
- data/lib/shark/rspec/fake_asset_service.rb +20 -0
- data/lib/shark/rspec/fake_consent_service/object_cache.rb +44 -0
- data/lib/shark/rspec/fake_consent_service/request.rb +53 -0
- data/lib/shark/rspec/fake_consent_service.rb +19 -0
- data/lib/shark/rspec/fake_contact_service/object_cache.rb +88 -0
- data/lib/shark/rspec/fake_contact_service/request.rb +170 -0
- data/lib/shark/rspec/fake_contact_service.rb +19 -0
- data/lib/shark/rspec/fake_double_opt_in/object_cache.rb +59 -0
- data/lib/shark/rspec/fake_double_opt_in/request.rb +133 -0
- data/lib/shark/rspec/fake_double_opt_in.rb +19 -0
- data/lib/shark/rspec/fake_mailing_service/request.rb +41 -0
- data/lib/shark/rspec/fake_mailing_service.rb +13 -0
- data/lib/shark/rspec/fake_notification_service/request.rb +53 -0
- data/lib/shark/rspec/fake_notification_service.rb +13 -0
- data/lib/shark/rspec/fake_subscription_service/object_cache.rb +54 -0
- data/lib/shark/rspec/fake_subscription_service/request.rb +100 -0
- data/lib/shark/rspec/fake_subscription_service.rb +19 -0
- data/lib/shark/rspec/fake_survey_service/object_cache.rb +36 -0
- data/lib/shark/rspec/fake_survey_service/request.rb +66 -0
- data/lib/shark/rspec/fake_survey_service.rb +19 -0
- data/lib/shark/rspec/fixtures/form_inputs.json +26 -0
- data/lib/shark/rspec/fixtures/form_structure.json +175 -0
- data/lib/shark/rspec/helpers/cache_helper.rb +44 -0
- data/lib/shark/rspec/helpers/fixtures.rb +26 -0
- data/lib/shark/rspec/helpers/form_service_helper.rb +27 -0
- data/lib/shark/rspec/helpers/response.rb +25 -0
- data/lib/shark/rspec/helpers.rb +26 -0
- data/lib/shark/subscription.rb +43 -0
- data/lib/shark/survey.rb +29 -0
- data/lib/shark/survey_participant.rb +37 -0
- data/lib/shark/version.rb +5 -0
- data/lib/shark.rb +91 -0
- metadata +291 -0
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Shark
|
|
4
|
+
module AssetService
|
|
5
|
+
module Resource
|
|
6
|
+
mattr_accessor :site
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
module ContactService
|
|
11
|
+
module Resource
|
|
12
|
+
mattr_accessor :site
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
module ConsentService
|
|
17
|
+
module Resource
|
|
18
|
+
mattr_accessor :site
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
module DoubleOptIn
|
|
23
|
+
class ExceededNumberOfVerificationRequestsError < Error; end
|
|
24
|
+
class RequestedUnverifiedExecutionError < Error; end
|
|
25
|
+
class VerificationExpiredError < Error; end
|
|
26
|
+
|
|
27
|
+
module Resource
|
|
28
|
+
mattr_accessor :site
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
module NotificationService
|
|
33
|
+
module Resource
|
|
34
|
+
mattr_accessor :site
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
module SubscriptionService
|
|
39
|
+
module Resource
|
|
40
|
+
mattr_accessor :site
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
module SurveyService
|
|
45
|
+
module Resource
|
|
46
|
+
mattr_accessor :site
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
class Configuration
|
|
51
|
+
class Service
|
|
52
|
+
attr_accessor :site
|
|
53
|
+
attr_reader :headers
|
|
54
|
+
|
|
55
|
+
def initialize
|
|
56
|
+
@headers = {}
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def headers=(value)
|
|
60
|
+
@headers.merge!(value)
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
#
|
|
65
|
+
# Shark Configuration
|
|
66
|
+
#
|
|
67
|
+
attr_accessor :cache, :logger
|
|
68
|
+
attr_reader :contact_service
|
|
69
|
+
attr_reader :consent_service
|
|
70
|
+
attr_reader :double_opt_in
|
|
71
|
+
attr_reader :form_service
|
|
72
|
+
attr_reader :survey_service
|
|
73
|
+
attr_reader :notification_service
|
|
74
|
+
attr_reader :subscription_service
|
|
75
|
+
attr_reader :asset_service
|
|
76
|
+
attr_reader :mailing_service
|
|
77
|
+
|
|
78
|
+
def initialize
|
|
79
|
+
@asset_service = AssetService::Resource
|
|
80
|
+
@contact_service = ContactService::Resource
|
|
81
|
+
@consent_service = ConsentService::Resource
|
|
82
|
+
@double_opt_in = DoubleOptIn::Resource
|
|
83
|
+
@form_service = Service.new
|
|
84
|
+
@mailing_service = Service.new
|
|
85
|
+
@notification_service = NotificationService::Resource
|
|
86
|
+
@subscription_service = SubscriptionService::Resource
|
|
87
|
+
@survey_service = SurveyService::Resource
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Shark
|
|
4
|
+
class Consent < Base
|
|
5
|
+
extend ConsentService::Resource
|
|
6
|
+
|
|
7
|
+
def self.all
|
|
8
|
+
raise Shark::ActionNotSupportedError,
|
|
9
|
+
'Shark::ConsentService::Consent.all is not supported'
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def update_attributes(_attributes = {})
|
|
13
|
+
raise Shark::ActionNotSupportedError,
|
|
14
|
+
'Shark::ConsentService::Consent#update_attributes is not supported'
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def destroy
|
|
18
|
+
raise Shark::ActionNotSupportedError,
|
|
19
|
+
'Shark::ConsentService::Consent#destroy is not supported'
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def save
|
|
23
|
+
if self['id'].present?
|
|
24
|
+
raise Shark::ActionNotSupportedError,
|
|
25
|
+
'Shark::ConsentService::Consent#save is not supported for persisted consents'
|
|
26
|
+
else
|
|
27
|
+
super
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Shark
|
|
4
|
+
class Contact < Base
|
|
5
|
+
extend ContactService::Resource
|
|
6
|
+
include Shark::NormalizedEmail
|
|
7
|
+
|
|
8
|
+
custom_endpoint :avatar, on: :collection, request_method: :get
|
|
9
|
+
|
|
10
|
+
property :account_id
|
|
11
|
+
|
|
12
|
+
has_many :memberships
|
|
13
|
+
has_many :groups
|
|
14
|
+
has_one :permission
|
|
15
|
+
|
|
16
|
+
def self.find_by_email(email)
|
|
17
|
+
normalized_email = normalize_email(email)
|
|
18
|
+
options = { filter: { equals: { email: normalized_email } } }
|
|
19
|
+
where(options).first
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# @example
|
|
23
|
+
# contacts = Shark::ContactService::Contact.find_by_permissions([
|
|
24
|
+
# { resource: 'paragraph::contract', privilege: 'admin' },
|
|
25
|
+
# { resource: 'datenraum', privilege: 'admin'}
|
|
26
|
+
# ])
|
|
27
|
+
#
|
|
28
|
+
# @param permissions_filter [Array] the filter of resources and privileges.
|
|
29
|
+
# @api public
|
|
30
|
+
def self.find_by_permissions(permissions_filter)
|
|
31
|
+
includes('permission').where(permissions: permissions_filter)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def account
|
|
35
|
+
return nil if account_id.blank?
|
|
36
|
+
|
|
37
|
+
Shark::Account.find(account_id).first
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Shark
|
|
4
|
+
module DoubleOptIn
|
|
5
|
+
class Execution < Base
|
|
6
|
+
extend DoubleOptIn::Resource
|
|
7
|
+
|
|
8
|
+
attr_accessor :payload, :request_type
|
|
9
|
+
|
|
10
|
+
def self.verify(verification_token)
|
|
11
|
+
response = connection.run(:post, "/executions/#{verification_token}/verify")
|
|
12
|
+
new(response.body['data'])
|
|
13
|
+
rescue UnprocessableEntity => e
|
|
14
|
+
if caused_by_error_code?(e.errors, 'exceeded_number_of_verification_requests')
|
|
15
|
+
raise ExceededNumberOfVerificationRequestsError
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
raise VerificationExpiredError if caused_by_error_code?(e.errors, 'verification_expired')
|
|
19
|
+
|
|
20
|
+
raise e
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def self.find(verification_token)
|
|
24
|
+
response = connection.run(:get, "/executions/#{verification_token}")
|
|
25
|
+
new(response.body['data'])
|
|
26
|
+
rescue UnprocessableEntity => e
|
|
27
|
+
if caused_by_error_code?(e.errors, 'requested_unverified_execution')
|
|
28
|
+
raise RequestedUnverifiedExecutionError
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
raise e
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def self.terminate(verification_token)
|
|
35
|
+
response = connection.run(:delete, "/executions/#{verification_token}")
|
|
36
|
+
new(response.body['data'])
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def initialize(data)
|
|
40
|
+
%w[payload request_type].each do |key|
|
|
41
|
+
public_send("#{key}=", data['attributes'][key])
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def self.caused_by_error_code?(errors, error_code)
|
|
46
|
+
errors.detect { |error| error['code'] == error_code }
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Shark
|
|
4
|
+
module DoubleOptIn
|
|
5
|
+
class Request < Base
|
|
6
|
+
extend DoubleOptIn::Resource
|
|
7
|
+
|
|
8
|
+
ATTRIBUTES = %w[
|
|
9
|
+
payload
|
|
10
|
+
request_type
|
|
11
|
+
recipient
|
|
12
|
+
subject
|
|
13
|
+
header
|
|
14
|
+
sub_header
|
|
15
|
+
message
|
|
16
|
+
verification_url
|
|
17
|
+
verification_link_text
|
|
18
|
+
message_footer_html
|
|
19
|
+
timeout
|
|
20
|
+
leeway_to_terminate
|
|
21
|
+
max_verifications
|
|
22
|
+
].freeze
|
|
23
|
+
|
|
24
|
+
attr_accessor(*ATTRIBUTES)
|
|
25
|
+
|
|
26
|
+
def self.create(attributes)
|
|
27
|
+
body = {
|
|
28
|
+
data: {
|
|
29
|
+
type: 'requests',
|
|
30
|
+
attributes: attributes
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
response = connection.request(:post, '/requests/', body: body)
|
|
35
|
+
new(response.body['data'])
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def initialize(data)
|
|
39
|
+
ATTRIBUTES.each do |key|
|
|
40
|
+
public_send("#{key}=", data['attributes'][key])
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
data/lib/shark/error.rb
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Shark
|
|
4
|
+
class Error < StandardError; end
|
|
5
|
+
|
|
6
|
+
class ApiError < Error
|
|
7
|
+
attr_reader :code, :env
|
|
8
|
+
|
|
9
|
+
def initialize(code, env)
|
|
10
|
+
@code = code
|
|
11
|
+
@env = env
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def body
|
|
15
|
+
env[:body]
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def url
|
|
19
|
+
env[:url]
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def message
|
|
23
|
+
body.to_s
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
class ConnectionError < ApiError
|
|
28
|
+
def initialize(env)
|
|
29
|
+
@env = env
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
class ClientError < ApiError; end
|
|
34
|
+
|
|
35
|
+
class AccessDenied < ClientError; end
|
|
36
|
+
|
|
37
|
+
class NotAuthorized < ClientError; end
|
|
38
|
+
|
|
39
|
+
class ResourceConflict < ClientError; end
|
|
40
|
+
|
|
41
|
+
class ResourceNotFound < ClientError
|
|
42
|
+
def message
|
|
43
|
+
"Couldn't find resource at: #{url}"
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
class UnprocessableEntity < ClientError
|
|
48
|
+
def errors
|
|
49
|
+
body['errors'] || {}
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def message
|
|
53
|
+
errors.to_json
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
class ServerError < ApiError; end
|
|
58
|
+
|
|
59
|
+
class UnexpectedStatus < ServerError
|
|
60
|
+
def message
|
|
61
|
+
"Unexpected response status: #{code} from: #{url}"
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
#
|
|
66
|
+
# Other errors
|
|
67
|
+
#
|
|
68
|
+
class ActionNotSupportedError < Error; end
|
|
69
|
+
end
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Shark
|
|
4
|
+
module FormService
|
|
5
|
+
module Form
|
|
6
|
+
class Element
|
|
7
|
+
attr_reader :parent, :children
|
|
8
|
+
|
|
9
|
+
def initialize(element, parent = nil)
|
|
10
|
+
@element = element.except('elements') || {}
|
|
11
|
+
@parent = parent
|
|
12
|
+
@children = parse_children(element['elements'] || [])
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def id
|
|
16
|
+
@element['id']
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def label
|
|
20
|
+
%w[label legend].each do |attr|
|
|
21
|
+
next unless attribute_defined?(attr)
|
|
22
|
+
|
|
23
|
+
return attribute_definition(attr)['value']
|
|
24
|
+
end
|
|
25
|
+
''
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def type
|
|
29
|
+
@element['type']
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def text
|
|
33
|
+
return '' unless attribute_defined?('text')
|
|
34
|
+
|
|
35
|
+
attribute_definition('text')['value']
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def attribute_definitions
|
|
39
|
+
@element['attribute_definitions'] || []
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def attribute_definition(name)
|
|
43
|
+
attribute_definitions.detect { |a| a['name'] == name }
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def attribute_defined?(name)
|
|
47
|
+
attribute_definition(name).present?
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def ancestors
|
|
51
|
+
return parent.ancestors << self if parent.present?
|
|
52
|
+
|
|
53
|
+
[self]
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
protected
|
|
57
|
+
|
|
58
|
+
attr_reader :element
|
|
59
|
+
|
|
60
|
+
def parse_children(elements)
|
|
61
|
+
elements.map do |e|
|
|
62
|
+
case e['type']
|
|
63
|
+
when 'form_container'
|
|
64
|
+
Container.new(e, self)
|
|
65
|
+
when 'form_multiple_choice'
|
|
66
|
+
MultipleChoice.new(e, self)
|
|
67
|
+
when 'form_rating_scale'
|
|
68
|
+
RatingScale.new(e, self)
|
|
69
|
+
when 'form_rating_star'
|
|
70
|
+
RatingStar.new(e, self)
|
|
71
|
+
when 'form_text_field'
|
|
72
|
+
TextField.new(e, self)
|
|
73
|
+
when 'form_textarea'
|
|
74
|
+
TextArea.new(e, self)
|
|
75
|
+
else
|
|
76
|
+
raise ArgumentError, "Unknown form element type: #{e['type']}"
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Shark
|
|
4
|
+
module FormService
|
|
5
|
+
module Form
|
|
6
|
+
class MultipleChoice < Element
|
|
7
|
+
def values
|
|
8
|
+
element['valid_values']
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def more_on_choice?
|
|
12
|
+
more_on_choice = attribute('more_on_choice')
|
|
13
|
+
|
|
14
|
+
return values.include?(more_on_choice['value']) if more_on_choice.present?
|
|
15
|
+
|
|
16
|
+
false
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Shark
|
|
4
|
+
module FormService
|
|
5
|
+
module Form
|
|
6
|
+
class RatingScale < Element
|
|
7
|
+
def values
|
|
8
|
+
scale_start = element['scale_start'].to_i
|
|
9
|
+
scale_end = element['scale_end'].to_i
|
|
10
|
+
allow_no_information = element['allow_no_information']
|
|
11
|
+
|
|
12
|
+
scale_values = (scale_start..scale_end).to_a
|
|
13
|
+
scale_values << -1 if allow_no_information == true
|
|
14
|
+
|
|
15
|
+
scale_values
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Shark
|
|
4
|
+
module FormService
|
|
5
|
+
module Form
|
|
6
|
+
class TextField < Element
|
|
7
|
+
def pre_text
|
|
8
|
+
attribute_definition('pre_text')['value']
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def post_text
|
|
12
|
+
attribute_definition('post_text')['value']
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Shark
|
|
4
|
+
module FormService
|
|
5
|
+
module V2
|
|
6
|
+
class Form < V2::Base
|
|
7
|
+
# @example
|
|
8
|
+
# form = Shark::FormService::V2::Form.find(id)
|
|
9
|
+
# form.activate
|
|
10
|
+
#
|
|
11
|
+
# @api public
|
|
12
|
+
def activate
|
|
13
|
+
update(state: 'active')
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Shark
|
|
4
|
+
module FormService
|
|
5
|
+
module V2
|
|
6
|
+
class FormVersion < V2::Base
|
|
7
|
+
belongs_to :form
|
|
8
|
+
|
|
9
|
+
def self.table_name
|
|
10
|
+
'versions'
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def form_structure
|
|
14
|
+
@form_structure ||= FormService::Form::Structure.new(structure)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'shark/form_service/base'
|
|
4
|
+
require 'shark/form_service/form/element'
|
|
5
|
+
require 'shark/form_service/form/container'
|
|
6
|
+
require 'shark/form_service/form/multiple_choice'
|
|
7
|
+
require 'shark/form_service/form/rating_scale'
|
|
8
|
+
require 'shark/form_service/form/rating_star'
|
|
9
|
+
require 'shark/form_service/form/text_area'
|
|
10
|
+
require 'shark/form_service/form/text_field'
|
|
11
|
+
require 'shark/form_service/form/structure'
|
|
12
|
+
|
|
13
|
+
require 'shark/form_service/v2/base'
|
|
14
|
+
require 'shark/form_service/v2/form'
|
|
15
|
+
require 'shark/form_service/v2/form_input'
|
|
16
|
+
require 'shark/form_service/v2/form_version'
|
|
17
|
+
|
|
18
|
+
module Shark
|
|
19
|
+
module FormService
|
|
20
|
+
end
|
|
21
|
+
end
|
data/lib/shark/group.rb
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Shark
|
|
4
|
+
class Group < Base
|
|
5
|
+
extend ContactService::Resource
|
|
6
|
+
|
|
7
|
+
has_many :contacts
|
|
8
|
+
|
|
9
|
+
def contact?(contact_id)
|
|
10
|
+
contacts = relationships['contacts']
|
|
11
|
+
return false if contacts.blank? || contacts['data'].blank?
|
|
12
|
+
|
|
13
|
+
contacts['data'].any? { |c| c['type'] == 'contacts' && c['id'].to_s == contact_id.to_s }
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
alias has_contact? contact?
|
|
17
|
+
end
|
|
18
|
+
end
|