woody-decorators 6.7.0 → 7.0.0

Sign up to get free protection for your applications and to get access to all the features.
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