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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1f3381b8c2e3dde673ed01a1ca93376ddbbaadd0
4
- data.tar.gz: 46079feb7aa93c0bde6070df39a6bfda9727b755
3
+ metadata.gz: 4dc28b90aba6d3e04a498dbec52d516a65ac6597
4
+ data.tar.gz: b9020e7d48accd9c6f9a68dd660cd5afa9adf199
5
5
  SHA512:
6
- metadata.gz: 3a8b0f790a6100d9bd66f8ab3d749e0b95eec743f2797b6226fdcfab0848cbcef79a0f54cdea9520bb1dbea9f88ef528af3c859a9003659b2d89991361e2ba46
7
- data.tar.gz: 48d6db6c536e40847c6c995487661dd5912cea5bd2ed541df180d22c085903fba2620088d7b7137147ab899d86e3e467d35324955a6d6c60b78e172274905e97
6
+ metadata.gz: 23b7a8cbae6de6bae80eb469a9345d3fe71fae75ec19bdf1673943732acbdca6ab4b804d9afaf79c4f5d5082d9c157876b68b45cef80bc1e9b4201babdf3fec1
7
+ data.tar.gz: e88ac91fb0ee68f23a237eb9bced4ab80ce80d94d147364187719c1524527c2e6f65fc7836ebb3060423a640e3aeb0e7e8943261a240cf6703ab54788b6f1d7e
@@ -1,5 +1,5 @@
1
1
  module Woody
2
2
  module Decorators
3
- VERSION = '6.7.0'.freeze
3
+ VERSION = '7.0.0'.freeze
4
4
  end
5
5
  end
@@ -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/post'
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 insights_posts
88
- @model.insights('posts').map do |post|
89
- Insights::Post.new(post)
90
- end
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(cards)
94
- Insights::Summary.new(
95
- @model.insights('summary'), cards
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(precision)
16
- lambda { |val| val.round(precision) }
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.apply_transformers(transformers, value)
28
- transformers.reduce(value) do |accum, transformer|
29
- transformer.(accum)
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: 6.7.0
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-05 00:00:00.000000000 Z
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/post.rb
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