forest_liana 1.1.28 → 1.1.29
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 +4 -4
- data/app/controllers/forest_liana/application_controller.rb +7 -2
- data/app/controllers/forest_liana/resources_controller.rb +12 -7
- data/app/deserializers/forest_liana/resource_deserializer.rb +9 -4
- data/app/services/forest_liana/activity_logger.rb +35 -0
- data/app/services/forest_liana/resource_creator.rb +23 -0
- data/app/services/forest_liana/resource_updater.rb +1 -1
- data/app/services/forest_liana/schema_adapter.rb +10 -5
- data/lib/forest_liana/bootstraper.rb +1 -1
- data/lib/forest_liana/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 1b687506a6797279131b36df0bfc64abd86fade4
|
|
4
|
+
data.tar.gz: 4d4a03bcd5f529c234cdfc160f4e8c061c97dea1
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 4d17df6bfb4519de6e7425fb7a5315b3233ea58d0a7dc696d16f868f51c3c6829b4eecfaf14a2117f5e5ca1419c98cf47f8b8a8393a43df5b949ce21ff93ec67
|
|
7
|
+
data.tar.gz: 8159e958705d5042b3d8622bb5f8994f5c45710fe50eeae16316f0d29eccedc8b84357fbd2a0c2ebc77b2fd78679198cca4d3f4859ddb4d571129432d927caad
|
|
@@ -4,6 +4,10 @@ module ForestLiana
|
|
|
4
4
|
class ApplicationController < ActionController::Base
|
|
5
5
|
before_filter :authenticate_user_from_jwt
|
|
6
6
|
|
|
7
|
+
def current_user
|
|
8
|
+
@jwt_decoded_token
|
|
9
|
+
end
|
|
10
|
+
|
|
7
11
|
def serialize_model(model, options = {})
|
|
8
12
|
options[:is_collection] = false
|
|
9
13
|
JSONAPI::Serializer.serialize(model, options)
|
|
@@ -28,8 +32,9 @@ module ForestLiana
|
|
|
28
32
|
|
|
29
33
|
def authenticate_user_from_jwt
|
|
30
34
|
if request.headers['Authorization']
|
|
31
|
-
JWT.decode
|
|
32
|
-
|
|
35
|
+
@jwt_decoded_token = JWT.decode(
|
|
36
|
+
request.headers['Authorization'].split[1],
|
|
37
|
+
ForestLiana.jwt_signing_key).try(:first)
|
|
33
38
|
else
|
|
34
39
|
render nothing: true, status: 401
|
|
35
40
|
end
|
|
@@ -25,24 +25,29 @@ module ForestLiana
|
|
|
25
25
|
end
|
|
26
26
|
|
|
27
27
|
def create
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
28
|
+
getter = ResourceCreator.new(@resource, params)
|
|
29
|
+
getter.perform
|
|
30
|
+
|
|
31
|
+
ActivityLogger.new.perform(current_user, 'created', params[:collection],
|
|
32
|
+
getter.record.id)
|
|
33
33
|
|
|
34
|
-
render json: serialize_model(record, include: includes)
|
|
34
|
+
render json: serialize_model(getter.record, include: includes)
|
|
35
35
|
end
|
|
36
36
|
|
|
37
37
|
def update
|
|
38
38
|
getter = ResourceUpdater.new(@resource, params)
|
|
39
39
|
getter.perform
|
|
40
40
|
|
|
41
|
+
ActivityLogger.new.perform(current_user, 'updated', params[:collection],
|
|
42
|
+
getter.record.id)
|
|
43
|
+
|
|
41
44
|
render json: serialize_model(getter.record, include: includes)
|
|
42
45
|
end
|
|
43
46
|
|
|
44
47
|
def destroy
|
|
45
48
|
@resource.destroy_all(id: params[:id])
|
|
49
|
+
ActivityLogger.new.perform(current_user, 'deleted', params[:collection],
|
|
50
|
+
params[:id])
|
|
46
51
|
render nothing: true, status: 204
|
|
47
52
|
end
|
|
48
53
|
|
|
@@ -64,7 +69,7 @@ module ForestLiana
|
|
|
64
69
|
@resource
|
|
65
70
|
.reflect_on_all_associations
|
|
66
71
|
.select do |a|
|
|
67
|
-
[:belongs_to, :
|
|
72
|
+
[:belongs_to, :has_one]
|
|
68
73
|
.include?(a.macro) && !a.options[:polymorphic]
|
|
69
74
|
end
|
|
70
75
|
.map {|a| a.name.to_s }
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
module ForestLiana
|
|
2
2
|
class ResourceDeserializer
|
|
3
3
|
|
|
4
|
-
def initialize(resource, params)
|
|
4
|
+
def initialize(resource, record, params)
|
|
5
5
|
@params = params
|
|
6
6
|
@resource = resource
|
|
7
|
+
@record = record
|
|
7
8
|
end
|
|
8
9
|
|
|
9
10
|
def perform
|
|
@@ -36,9 +37,13 @@ module ForestLiana
|
|
|
36
37
|
@attributes[name] = nil
|
|
37
38
|
end
|
|
38
39
|
when :has_many, :has_and_belongs_to_many
|
|
39
|
-
if data.is_a?(
|
|
40
|
-
|
|
41
|
-
|
|
40
|
+
if data.is_a?(Array)
|
|
41
|
+
data.each do |x|
|
|
42
|
+
existing_records = @record.send(name)
|
|
43
|
+
new_record = association.klass.find(x[:id])
|
|
44
|
+
if !existing_records.include?(new_record)
|
|
45
|
+
existing_records << new_record
|
|
46
|
+
end
|
|
42
47
|
end
|
|
43
48
|
end
|
|
44
49
|
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
require 'jwt'
|
|
2
|
+
|
|
3
|
+
class ForestLiana::ActivityLogger
|
|
4
|
+
|
|
5
|
+
def perform(user, action, collection_name, resource_id)
|
|
6
|
+
token = JWT.encode({}, ForestLiana.jwt_signing_key, 'HS256')
|
|
7
|
+
uri = URI.parse("#{forest_url}/api/projects/#{project_id(user)}/activity-logs")
|
|
8
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
|
9
|
+
http.use_ssl = true if forest_url.start_with?('https')
|
|
10
|
+
|
|
11
|
+
http.start do |client|
|
|
12
|
+
request = Net::HTTP::Post.new(uri.path)
|
|
13
|
+
request['Content-Type'] = 'application/json'
|
|
14
|
+
request['Authorization'] = "Bearer #{token}"
|
|
15
|
+
request.body = {
|
|
16
|
+
session: user['session'],
|
|
17
|
+
action: action,
|
|
18
|
+
collection: collection_name,
|
|
19
|
+
resource: resource_id
|
|
20
|
+
}.to_json
|
|
21
|
+
|
|
22
|
+
client.request(request)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
private
|
|
27
|
+
|
|
28
|
+
def project_id(user)
|
|
29
|
+
user['session']['data']['relationships']['project']['data']['id'];
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def forest_url
|
|
33
|
+
ENV['FOREST_URL'] || 'https://forestadmin-server.herokuapp.com';
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module ForestLiana
|
|
2
|
+
class ResourceCreator
|
|
3
|
+
attr_accessor :record
|
|
4
|
+
|
|
5
|
+
def initialize(resource, params)
|
|
6
|
+
@resource = resource
|
|
7
|
+
@params = params
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def perform
|
|
11
|
+
if Rails::VERSION::MAJOR == 4
|
|
12
|
+
@record = @resource.create!(resource_params.permit!)
|
|
13
|
+
else
|
|
14
|
+
@record = @resource.create!(resource_params, without_protection: true)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def resource_params
|
|
19
|
+
ResourceDeserializer.new(@resource, @params[:resource]).perform
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -31,7 +31,8 @@ module ForestLiana
|
|
|
31
31
|
type: ['String'],
|
|
32
32
|
reference: 'intercom_conversations.id',
|
|
33
33
|
column: nil,
|
|
34
|
-
is_searchable: false
|
|
34
|
+
is_searchable: false,
|
|
35
|
+
integration: 'intercom'
|
|
35
36
|
}
|
|
36
37
|
|
|
37
38
|
@collection.fields << {
|
|
@@ -39,7 +40,8 @@ module ForestLiana
|
|
|
39
40
|
type: 'String',
|
|
40
41
|
reference: 'intercom_attributes.id',
|
|
41
42
|
column: nil,
|
|
42
|
-
is_searchable: false
|
|
43
|
+
is_searchable: false,
|
|
44
|
+
integration: 'intercom'
|
|
43
45
|
}
|
|
44
46
|
end
|
|
45
47
|
|
|
@@ -51,7 +53,8 @@ module ForestLiana
|
|
|
51
53
|
type: ['String'],
|
|
52
54
|
reference: 'stripe_payments.id',
|
|
53
55
|
column: nil,
|
|
54
|
-
is_searchable: false
|
|
56
|
+
is_searchable: false,
|
|
57
|
+
integration: 'stripe'
|
|
55
58
|
}
|
|
56
59
|
|
|
57
60
|
@collection.fields << {
|
|
@@ -59,7 +62,8 @@ module ForestLiana
|
|
|
59
62
|
type: ['String'],
|
|
60
63
|
reference: 'stripe_invoices.id',
|
|
61
64
|
column: nil,
|
|
62
|
-
is_searchable: false
|
|
65
|
+
is_searchable: false,
|
|
66
|
+
integration: 'stripe'
|
|
63
67
|
}
|
|
64
68
|
|
|
65
69
|
@collection.fields << {
|
|
@@ -67,7 +71,8 @@ module ForestLiana
|
|
|
67
71
|
type: ['String'],
|
|
68
72
|
reference: 'stripe_cards.id',
|
|
69
73
|
column: nil,
|
|
70
|
-
is_searchable: false
|
|
74
|
+
is_searchable: false,
|
|
75
|
+
integration: 'stripe'
|
|
71
76
|
}
|
|
72
77
|
end
|
|
73
78
|
|
|
@@ -26,7 +26,7 @@ module ForestLiana
|
|
|
26
26
|
|
|
27
27
|
# Monkey patch the find_serializer_class_name method to specify the
|
|
28
28
|
# good serializer to use.
|
|
29
|
-
JSONAPI::Serializer.class_eval do
|
|
29
|
+
::JSONAPI::Serializer.class_eval do
|
|
30
30
|
def self.find_serializer_class_name(obj)
|
|
31
31
|
SerializerFactory.get_serializer_name(obj.class)
|
|
32
32
|
end
|
data/lib/forest_liana/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: forest_liana
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.1.
|
|
4
|
+
version: 1.1.29
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Sandro Munda
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2016-
|
|
11
|
+
date: 2016-02-02 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rails
|
|
@@ -170,6 +170,7 @@ files:
|
|
|
170
170
|
- app/serializers/forest_liana/stripe_card_serializer.rb
|
|
171
171
|
- app/serializers/forest_liana/stripe_invoice_serializer.rb
|
|
172
172
|
- app/serializers/forest_liana/stripe_payment_serializer.rb
|
|
173
|
+
- app/services/forest_liana/activity_logger.rb
|
|
173
174
|
- app/services/forest_liana/collection.rb
|
|
174
175
|
- app/services/forest_liana/has_many_getter.rb
|
|
175
176
|
- app/services/forest_liana/intercom_attributes_getter.rb
|
|
@@ -177,6 +178,7 @@ files:
|
|
|
177
178
|
- app/services/forest_liana/line_stat_getter.rb
|
|
178
179
|
- app/services/forest_liana/operator_value_parser.rb
|
|
179
180
|
- app/services/forest_liana/pie_stat_getter.rb
|
|
181
|
+
- app/services/forest_liana/resource_creator.rb
|
|
180
182
|
- app/services/forest_liana/resource_getter.rb
|
|
181
183
|
- app/services/forest_liana/resource_updater.rb
|
|
182
184
|
- app/services/forest_liana/resources_getter.rb
|