woody-decorators 6.7.0 → 7.0.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 +4 -4
- data/lib/woody/decorators.rb +1 -1
- data/lib/woody/decorators/brief.rb +13 -10
- data/lib/woody/decorators/insights/field_transformer.rb +32 -5
- data/lib/woody/decorators/insights/hydrator.rb +37 -0
- metadata +3 -4
- data/lib/woody/decorators/insights/post.rb +0 -58
- data/lib/woody/decorators/insights/summary.rb +0 -64
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 4dc28b90aba6d3e04a498dbec52d516a65ac6597
|
|
4
|
+
data.tar.gz: b9020e7d48accd9c6f9a68dd660cd5afa9adf199
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 23b7a8cbae6de6bae80eb469a9345d3fe71fae75ec19bdf1673943732acbdca6ab4b804d9afaf79c4f5d5082d9c157876b68b45cef80bc1e9b4201babdf3fec1
|
|
7
|
+
data.tar.gz: e88ac91fb0ee68f23a237eb9bced4ab80ce80d94d147364187719c1524527c2e6f65fc7836ebb3060423a640e3aeb0e7e8943261a240cf6703ab54788b6f1d7e
|
data/lib/woody/decorators.rb
CHANGED
|
@@ -4,8 +4,7 @@ require 'wes/data/api/brief'
|
|
|
4
4
|
require 'woody/decorators/base'
|
|
5
5
|
require 'woody/decorators/brand'
|
|
6
6
|
require 'woody/decorators/brief_question'
|
|
7
|
-
require 'woody/decorators/insights/
|
|
8
|
-
require 'woody/decorators/insights/summary'
|
|
7
|
+
require 'woody/decorators/insights/hydrator'
|
|
9
8
|
|
|
10
9
|
module Woody
|
|
11
10
|
module Decorators
|
|
@@ -84,16 +83,20 @@ module Woody
|
|
|
84
83
|
@model.type == 'public'
|
|
85
84
|
end
|
|
86
85
|
|
|
87
|
-
def
|
|
88
|
-
|
|
89
|
-
Insights::
|
|
90
|
-
|
|
86
|
+
def insights_posts_list(yml_config)
|
|
87
|
+
{
|
|
88
|
+
posts: Insights::Hydrator.hydrate_array(
|
|
89
|
+
yml_config, @model.insights('posts')
|
|
90
|
+
)
|
|
91
|
+
}
|
|
91
92
|
end
|
|
92
93
|
|
|
93
|
-
def insights_summary(
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
94
|
+
def insights_summary(yml_config)
|
|
95
|
+
{
|
|
96
|
+
summary: Insights::Hydrator.hydrate(
|
|
97
|
+
yml_config, @model.insights('summary')
|
|
98
|
+
)
|
|
99
|
+
}
|
|
97
100
|
end
|
|
98
101
|
|
|
99
102
|
private
|
|
@@ -1,19 +1,39 @@
|
|
|
1
|
+
require 'wes/cloudkit'
|
|
2
|
+
require 'wes/data/api/video'
|
|
3
|
+
require 'woody/decorators/video'
|
|
4
|
+
|
|
1
5
|
module Woody
|
|
2
6
|
module Decorators
|
|
3
7
|
module Insights
|
|
4
8
|
module FieldTransformer
|
|
9
|
+
def self.apply(transformers, value)
|
|
10
|
+
transformers.reduce(value) do |accum, transformer|
|
|
11
|
+
if transformer.key?('args')
|
|
12
|
+
self.send(transformer['method'], transformer['args']).(accum)
|
|
13
|
+
else
|
|
14
|
+
self.send(transformer['method']).(accum)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
5
19
|
def self.commas()
|
|
6
20
|
lambda do |val|
|
|
7
21
|
val.to_s.reverse.gsub(/(\d{3})(?=\d)/, '\\1,').reverse
|
|
8
22
|
end
|
|
9
23
|
end
|
|
10
24
|
|
|
25
|
+
def self.date()
|
|
26
|
+
lambda do |val|
|
|
27
|
+
DateTime.parse(val).strftime("%-d %B %Y")
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
11
31
|
def self.percentage()
|
|
12
32
|
lambda { |val| format('%s%', val.to_s) }
|
|
13
33
|
end
|
|
14
34
|
|
|
15
|
-
def self.round(
|
|
16
|
-
lambda { |val| val.round(
|
|
35
|
+
def self.round(p)
|
|
36
|
+
lambda { |val| val.round(p) }
|
|
17
37
|
end
|
|
18
38
|
|
|
19
39
|
def self.shorten()
|
|
@@ -24,11 +44,18 @@ module Woody
|
|
|
24
44
|
end
|
|
25
45
|
end
|
|
26
46
|
|
|
27
|
-
def self.
|
|
28
|
-
|
|
29
|
-
|
|
47
|
+
def self.thumbnail()
|
|
48
|
+
lambda do |val|
|
|
49
|
+
config = Wes::Cloudkit.config
|
|
50
|
+
Woody::Decorators::Video.new(
|
|
51
|
+
Wes::Data::API::Video.find('facebook_id', val), config
|
|
52
|
+
).thumbnail
|
|
30
53
|
end
|
|
31
54
|
end
|
|
55
|
+
|
|
56
|
+
def self.truncate(length)
|
|
57
|
+
lambda { |val| format('%s...', val[0..(length + 1)]) }
|
|
58
|
+
end
|
|
32
59
|
end
|
|
33
60
|
end
|
|
34
61
|
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
require 'woody/decorators/insights/field_transformer'
|
|
2
|
+
|
|
3
|
+
module Woody
|
|
4
|
+
module Decorators
|
|
5
|
+
module Insights
|
|
6
|
+
class Hydrator
|
|
7
|
+
def self.hydrate(yml_config, data)
|
|
8
|
+
yml_config.map do |config_node|
|
|
9
|
+
raw_value = data.dig(*config_node['json_location'])
|
|
10
|
+
|
|
11
|
+
if config_node.key?('transformers')
|
|
12
|
+
config_node['value'] = transform(
|
|
13
|
+
config_node['transformers'], raw_value
|
|
14
|
+
).to_s
|
|
15
|
+
config_node.delete('transformers')
|
|
16
|
+
else
|
|
17
|
+
config_node['value'] = raw_value.to_s
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
config_node.delete('json_location')
|
|
21
|
+
config_node
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def self.hydrate_array(yml_config, data_array)
|
|
26
|
+
data_array.map do |data|
|
|
27
|
+
hydrate(yml_config, data)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def self.transform(*args)
|
|
32
|
+
FieldTransformer.apply(*args)
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: woody-decorators
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 7.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- ''
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2016-09-
|
|
11
|
+
date: 2016-09-06 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -154,8 +154,7 @@ files:
|
|
|
154
154
|
- lib/woody/decorators/creator_user.rb
|
|
155
155
|
- lib/woody/decorators/helper/aspect_ratio.rb
|
|
156
156
|
- lib/woody/decorators/insights/field_transformer.rb
|
|
157
|
-
- lib/woody/decorators/insights/
|
|
158
|
-
- lib/woody/decorators/insights/summary.rb
|
|
157
|
+
- lib/woody/decorators/insights/hydrator.rb
|
|
159
158
|
- lib/woody/decorators/submission.rb
|
|
160
159
|
- lib/woody/decorators/user.rb
|
|
161
160
|
- lib/woody/decorators/video.rb
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
require 'woody/decorators/insights/field_transformer'
|
|
2
|
-
require 'json'
|
|
3
|
-
|
|
4
|
-
module Woody
|
|
5
|
-
module Decorators
|
|
6
|
-
module Insights
|
|
7
|
-
class Post
|
|
8
|
-
def initialize(data)
|
|
9
|
-
@data = transform(data)
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def to_json
|
|
13
|
-
JSON.generate(@data)
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
private
|
|
17
|
-
|
|
18
|
-
def field_transformers
|
|
19
|
-
{
|
|
20
|
-
'minutes_viewed' => [FieldTransformer.round(2)],
|
|
21
|
-
'average_duration' => [FieldTransformer.round(2)],
|
|
22
|
-
'video_view_cost' => [FieldTransformer.round(4)],
|
|
23
|
-
'engagement_percent_people_viewed' => [FieldTransformer.round(2)],
|
|
24
|
-
'view_rate' => [FieldTransformer.round(2)],
|
|
25
|
-
'spend' => [FieldTransformer.round(2)],
|
|
26
|
-
'audience_split' => [FieldTransformer.round(2)],
|
|
27
|
-
'video_completion_percent' => [FieldTransformer.round(2)]
|
|
28
|
-
}
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
def transform(data)
|
|
32
|
-
data['data'].each do |key, value|
|
|
33
|
-
if field_transformers.key?(key) && !value.is_a?(Hash)
|
|
34
|
-
data['data'][key] = apply_transformers(key, value)
|
|
35
|
-
next
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
if key == 'audience_split'
|
|
39
|
-
data['data'][key].each do |age_range, split|
|
|
40
|
-
split.each do |gender, percent_value|
|
|
41
|
-
data['data'][key][age_range][gender] = apply_transformers(key, percent_value)
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
@data = data
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
def apply_transformers(key, value)
|
|
50
|
-
FieldTransformer.apply_transformers(
|
|
51
|
-
field_transformers[key],
|
|
52
|
-
value
|
|
53
|
-
)
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
end
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
require 'woody/decorators/insights/field_transformer'
|
|
2
|
-
|
|
3
|
-
module Woody
|
|
4
|
-
module Decorators
|
|
5
|
-
module Insights
|
|
6
|
-
class Summary
|
|
7
|
-
attr_reader :data
|
|
8
|
-
|
|
9
|
-
def initialize(data, cards)
|
|
10
|
-
@data = transform(data, cards)
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
private
|
|
14
|
-
|
|
15
|
-
def apply_transformers(key, value)
|
|
16
|
-
FieldTransformer.apply_transformers(
|
|
17
|
-
field_transformers[key],
|
|
18
|
-
value
|
|
19
|
-
)
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
def field_transformers
|
|
23
|
-
{
|
|
24
|
-
'campaign_reach' => [
|
|
25
|
-
FieldTransformer.commas()
|
|
26
|
-
],
|
|
27
|
-
'campaign_views' => [
|
|
28
|
-
FieldTransformer.commas()
|
|
29
|
-
],
|
|
30
|
-
'minutes_viewed' => [
|
|
31
|
-
FieldTransformer.round(0), FieldTransformer.commas()
|
|
32
|
-
],
|
|
33
|
-
'unqiue_viewers' => [
|
|
34
|
-
FieldTransformer.shorten()
|
|
35
|
-
],
|
|
36
|
-
'overall_view_rate' => [
|
|
37
|
-
FieldTransformer.round(0), FieldTransformer.percentage()
|
|
38
|
-
],
|
|
39
|
-
'total_engagement' => [
|
|
40
|
-
FieldTransformer.shorten()
|
|
41
|
-
],
|
|
42
|
-
'engagement_rate' => [
|
|
43
|
-
FieldTransformer.round(0), FieldTransformer.percentage()
|
|
44
|
-
]
|
|
45
|
-
}
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
def transform(data, cards)
|
|
49
|
-
transformed_cards = cards.map do |card|
|
|
50
|
-
if field_transformers.key?(card['key'])
|
|
51
|
-
card['value'] = apply_transformers(
|
|
52
|
-
card['key'], data[card['key']]
|
|
53
|
-
).to_s
|
|
54
|
-
else
|
|
55
|
-
card['value'] = data[card['key']].to_s
|
|
56
|
-
end
|
|
57
|
-
card
|
|
58
|
-
end
|
|
59
|
-
{ cards: transformed_cards }
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
end
|