cortex-plugins-core 0.12.4 → 1.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: 9d305ae51534e0eb527d14f4c66dfc6dc2b69801
4
- data.tar.gz: bc5ca64125c5ca11529873d603070bd84c977dd5
3
+ metadata.gz: e86996214ab1af991435ee71b2289eed0d776400
4
+ data.tar.gz: c08a47c80f73e4d5cbc1a35227ebea1d72e57c3d
5
5
  SHA512:
6
- metadata.gz: e64174a622f1559e62112cd799bed061a580390f1c014b72f50866f0106059c7024603753c9362fa8b7163e0d53ca1b71c872cbb79de8f13983b9a4d1e755724
7
- data.tar.gz: 982c1eb55daff97862f59fe2b4e6cd46002afa027ac6dc660423e9e08319819b7a1939d26f53ddc7c7602f2858bbf3cbd85527d88b7638ce168661182f71cbea
6
+ metadata.gz: da4e0d5fe38e0cdb08eea25590481494c3cd8e6fcd4f195367f70d1b2233512cc8418de0c429256f84a2791ca183853ac2db5e0a19264a0e74125cd1cee064f7
7
+ data.tar.gz: de2b55abef7fbe6f5e4e83ca5101973650e176d2869dd4128463135db8c512eb8e3717438deef3c2c7b9fe354d5bebfcde04e19281a59d9ec96dec4acc6b752a
@@ -2,4 +2,5 @@
2
2
  @import 'variables/colors';
3
3
  @import 'variables/typography';
4
4
 
5
+ @import 'components/tags-input';
5
6
  @import 'components/thumbnail-placeholder';
@@ -0,0 +1,21 @@
1
+ .bootstrap-tagsinput {
2
+ width: 100%;
3
+ border-radius: 0 !important;
4
+ border-top: none;
5
+ border-right: none;
6
+ border-left: none;
7
+ border-bottom: 1px solid $color-grey-light;
8
+ box-shadow: none;
9
+ }
10
+ .cortex-bootstrap .label {
11
+ border-radius: 0.75em;
12
+ font-weight: normal;
13
+ }
14
+
15
+ .cortex-bootstrap .label-info {
16
+ background-color: $color-grey;
17
+ }
18
+
19
+ .bootstrap-tagsinput .tag {
20
+ text-transform: uppercase;
21
+ }
@@ -8,7 +8,7 @@
8
8
  - if asset_is_image?
9
9
  .mdl-card__title
10
10
  %h2.mdl-card__title-text
11
- = image_tag(asset['versions']['original']['url'], style: 'max-height: 200px;')
11
+ = image_tag(asset['versions']['original']['url'], style: 'min-height: 50px; max-height: 200px;')
12
12
  .mdl-card__supporting-text
13
13
  %dl
14
14
  %dt Original Filename
@@ -1,9 +1,6 @@
1
1
  = render_label
2
2
  = render_tooltip unless @options[:tooltip].nil?
3
3
 
4
- %p
5
- Please select 1-2 Categories.
6
-
7
4
  - @options[:metadata]["data"]["tree_array"].each do |node|
8
5
  = render_field_id
9
6
  = cell(Plugins::Core::CheckboxCell, nil, form: @options[:form], node: node, data: data).(:checkbox)
@@ -88,7 +88,7 @@ class AssetFieldType < FieldType
88
88
  end
89
89
 
90
90
  def host_alias
91
- metadata[:storage][:host_alias] unless metadata[:storage][:host_alias].empty?
91
+ metadata&.[](:storage)&.[](:host_alias)
92
92
  end
93
93
 
94
94
  def versions_data
@@ -30,6 +30,6 @@ class AuthorFieldType < FieldType
30
30
  end
31
31
 
32
32
  def validate_presence?
33
- @validations.key? :presence
33
+ validations.key? :presence
34
34
  end
35
35
  end
@@ -35,6 +35,6 @@ class DateTimeFieldType < FieldType
35
35
  end
36
36
 
37
37
  def validate_presence?
38
- @validations.key? :presence
38
+ validations.key? :presence
39
39
  end
40
40
  end
@@ -1,6 +1,6 @@
1
1
  class FloatFieldType < FieldType
2
2
  attr_accessor :float
3
-
3
+
4
4
  validates :float, presence: true, if: Proc.new { |float| validate_key(:presence) }
5
5
  validates_numericality_of :float, unless: "float.nil?"
6
6
  validate :less_than, if: Proc.new { |float| validate_key(:max) }
@@ -27,14 +27,14 @@ class FloatFieldType < FieldType
27
27
  end
28
28
 
29
29
  def validate_key(key)
30
- @validations.key? key
30
+ validations.key? key
31
31
  end
32
32
 
33
33
  def less_than
34
- errors.add(:float, "must be less_than #{@validations[:max]}") if :float <= @validations[:max]
34
+ errors.add(:float, "must be less_than #{validations[:max]}") if :float <= validations[:max]
35
35
  end
36
36
 
37
37
  def greater_than
38
- errors.add(:float, "must be greater_than #{@validations[:min]}") if :float >= @validations[:min]
38
+ errors.add(:float, "must be greater_than #{validations[:min]}") if :float >= validations[:min]
39
39
  end
40
40
  end
@@ -27,14 +27,14 @@ class IntegerFieldType < FieldType
27
27
  end
28
28
 
29
29
  def validate_key
30
- @validations.key? key
30
+ validations.key? key
31
31
  end
32
32
 
33
33
  def less_than
34
- errors.add(:integer, "must be less_than #{@validations[:max]}") if :integer <= @validations[:max]
34
+ errors.add(:integer, "must be less_than #{validations[:max]}") if :integer <= validations[:max]
35
35
  end
36
36
 
37
37
  def greater_than
38
- errors.add(:integer, "must be greater_than #{@validations[:min]}") if :integer >= @validations[:min]
38
+ errors.add(:integer, "must be greater_than #{validations[:min]}") if :integer >= validations[:min]
39
39
  end
40
40
  end
@@ -25,6 +25,6 @@ class TagFieldType < FieldType
25
25
  end
26
26
 
27
27
  def validate_presence?
28
- @validations.key? :presence
28
+ validations.key? :presence
29
29
  end
30
30
  end
@@ -39,14 +39,14 @@ class TextFieldType < FieldType
39
39
  end
40
40
 
41
41
  def validate_uniqueness?
42
- @validations.key? :uniqueness
42
+ validations.key? :uniqueness
43
43
  end
44
44
 
45
45
  def validate_presence?
46
- @validations.key? :presence
46
+ validations.key? :presence
47
47
  end
48
48
 
49
49
  def validate_length?
50
- @validations.key? :length
50
+ validations.key? :length
51
51
  end
52
52
  end
@@ -36,7 +36,7 @@ class TreeFieldType < FieldType
36
36
  end
37
37
 
38
38
  def minimum
39
- if !@values.nil? && @values[:values].length >= @validations[:minimum]
39
+ if !@values.nil? && @values[:values].length >= validations[:minimum]
40
40
  true
41
41
  else
42
42
  errors.add(:minimum, "You have selected too few values.")
@@ -46,7 +46,7 @@ class TreeFieldType < FieldType
46
46
 
47
47
  def maximum
48
48
  unless @values.nil?
49
- if @values[:values].length <= @validations[:maximum]
49
+ if @values[:values].length <= validations[:maximum]
50
50
  true
51
51
  else
52
52
  errors.add(:maximum, "You have selected too many values.")
@@ -56,14 +56,14 @@ class TreeFieldType < FieldType
56
56
  end
57
57
 
58
58
  def validate_presence?
59
- @validations.key? :presence
59
+ validations.key? :presence
60
60
  end
61
61
 
62
62
  def validate_minimum?
63
- @validations.key? :minimum
63
+ validations.key? :minimum
64
64
  end
65
65
 
66
66
  def validate_maximum?
67
- @validations.key? :maximum
67
+ validations.key? :maximum
68
68
  end
69
69
  end
@@ -34,6 +34,6 @@ class UserFieldType < FieldType
34
34
  end
35
35
 
36
36
  def validate_presence?
37
- @validations.key? :presence
37
+ validations.key? :presence
38
38
  end
39
39
  end
@@ -0,0 +1,6 @@
1
+ module UpdateTags
2
+ extend ActiveSupport::Concern
3
+
4
+ included do
5
+ end
6
+ end
@@ -0,0 +1,18 @@
1
+ class GetFieldTreeListTransaction < ApplicationTransaction
2
+ step :init
3
+ step :process
4
+
5
+ def init(input)
6
+ field = Field.find_by_id(input[:args]['field_id'])
7
+
8
+ field ? Right({ content_item: input[:content_item], field: field }) : Left(:not_found)
9
+ end
10
+
11
+ def process(input)
12
+ tree_array = input[:field].metadata['allowed_values']['data']['tree_array']
13
+ tree_values = input[:content_item].field_items.find {|field_item| field_item.field_id == input[:field].id}.data['values']
14
+
15
+ tree_list = tree_values.map {|value| tree_array.find {|node| node['id'] == value.to_i}['node']['name']}.join(',')
16
+ Right(tree_list)
17
+ end
18
+ end
@@ -0,0 +1,7 @@
1
+ class NewTagFieldItemTransaction < ApplicationTransaction
2
+ step :process
3
+
4
+ def process(field_item)
5
+ Right(field_item)
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ class NewUserFieldItemTransaction < ApplicationTransaction
2
+ step :process
3
+
4
+ def process(field_item)
5
+ Right(field_item)
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ class UpdateTagFieldItemTransaction < ApplicationTransaction
2
+ step :process
3
+
4
+ def process(field_item)
5
+ Right(field_item)
6
+ end
7
+ end
@@ -1,7 +1,9 @@
1
1
  require 'image_processing/mini_magick'
2
+ require 'image_optim'
2
3
 
3
4
  class AssetUploader < Shrine
4
5
  include ImageProcessing::MiniMagick
6
+ include Imageable
5
7
 
6
8
  plugin :determine_mime_type
7
9
  plugin :store_dimensions
@@ -25,14 +27,15 @@ class AssetUploader < Shrine
25
27
  end
26
28
 
27
29
  process(:store) do |io, context|
28
- # TODO: Perform image optimizations (build plugin), support versions without processors or formatters
30
+ # TODO: support versions without processors
29
31
  context[:generated_hex] = SecureRandom.hex(8)
30
32
  versions = { original: io.download }
31
33
 
32
34
  if image?(io)
35
+ image_optim = image_optim_for(context[:config][:metadata][:image_optim_config])
33
36
  versions.merge!(context[:config][:metadata][:versions].transform_values do |version|
34
37
  processed_version = send("#{version[:process][:method]}!", io.download, *version[:process][:config].values)
35
- convert!(processed_version, version[:format])
38
+ optimize_image!(processed_version, image_optim) # TODO: per-version image_optim_config
36
39
  end)
37
40
  end
38
41
 
@@ -48,8 +51,4 @@ class AssetUploader < Shrine
48
51
 
49
52
  ERB.new(context[:config][:metadata][:path]).result(binding)
50
53
  end
51
-
52
- def image?(io)
53
- MimeMagic.new(io.data['metadata']['mime_type']).mediatype == 'image'
54
- end
55
54
  end
@@ -0,0 +1,30 @@
1
+ module Imageable
2
+ extend ActiveSupport::Concern
3
+
4
+ included do
5
+ def image?(io)
6
+ MimeMagic.new(io.data['metadata']['mime_type']).mediatype == 'image'
7
+ end
8
+
9
+ def optimize_image!(image, image_optim)
10
+ pathname = image_optim.optimize_image!(image) # TODO: move to ActiveJob
11
+ pathname ? pathname.open : image
12
+ end
13
+
14
+ def image_optim_for(image_optim_config)
15
+ ImageOptim.new(process_image_optim_config(image_optim_config))
16
+ end
17
+
18
+ def process_image_optim_config(image_optim_config)
19
+ processed_image_optim_config = image_optim_config.merge(pngout: false, svgo: false, verbose: true, skip_missing_workers: false)
20
+ processed_image_optim_config.extend(Hashie::Extensions::DeepLocate)
21
+ quality_range_hashes = processed_image_optim_config.deep_locate -> (key, value, object) { key == :quality_range }
22
+ quality_range_hashes.each do |quality_range_hash|
23
+ quality_range_hash[:quality] = quality_range_hash[:quality_range][:begin]..quality_range_hash[:quality_range][:end]
24
+ quality_range_hash.delete(:quality_range)
25
+ end
26
+
27
+ processed_image_optim_config
28
+ end
29
+ end
30
+ end
@@ -1,7 +1,7 @@
1
1
  module Cortex
2
2
  module Plugins
3
3
  module Core
4
- VERSION = '0.12.4'
4
+ VERSION = '1.0.0'
5
5
  end
6
6
  end
7
7
  end
@@ -32,16 +32,17 @@ namespace :cortex do
32
32
  naming_data: {
33
33
  title: fieldTitle.id
34
34
  },
35
- versions: {
36
- large: { process: { method: 'resize_to_limit', config: { width: '1800', height: '1800' } }, format: :jpg },
37
- medium: { process: { method: 'resize_to_limit', config: { width: '800', height: '800' } }, format: :jpg },
38
- default: { process: { method: 'resize_to_limit', config: { width: '300', height: '300' } }, format: :jpg },
39
- mini: { process: { method: 'resize_to_limit', config: { width: '100', height: '100' } }, format: :jpg },
40
- micro: { process: { method: 'resize_to_limit', config: { width: '50', height: '50' } }, format: :jpg },
35
+ versions: { # Move to YAML
36
+ large: { process: { method: 'resize_to_limit', config: { width: '1800', height: '1800' } } },
37
+ medium: { process: { method: 'resize_to_limit', config: { width: '800', height: '800' } } },
38
+ default: { process: { method: 'resize_to_limit', config: { width: '300', height: '300' } } },
39
+ mini: { process: { method: 'resize_to_limit', config: { width: '100', height: '100' } } },
40
+ micro: { process: { method: 'resize_to_limit', config: { width: '50', height: '50' } } },
41
+ rss: { process: { method: 'resize_to_limit', config: { width: '840', height: '840' } } },
41
42
  },
42
43
  keep_files: [:destroyed, :replaced],
43
44
  path: 'media/<%= attachment %>/<%= original_name %>-<%= style %>-<%= generated_hex %>.<%= extension %>',
44
- storage: {
45
+ storage: { # Move to YAML
45
46
  type: 's3',
46
47
  host_alias: ENV['HOST_ALIAS'],
47
48
  config: {
@@ -54,6 +55,33 @@ namespace :cortex do
54
55
  cache_control: 'public, max-age=315576000'
55
56
  }
56
57
  }
58
+ },
59
+ image_optim_config: { # Move to YAML
60
+ allow_lossy: true,
61
+ jpegoptim: {
62
+ allow_lossy: true,
63
+ strip: 'all',
64
+ max_quality: 60
65
+ },
66
+ pngquant: {
67
+ allow_lossy: true,
68
+ quality_range: {
69
+ begin: 33,
70
+ end: 50
71
+ },
72
+ speed: 3
73
+ },
74
+ gifsicle: {
75
+ interlace: true
76
+ },
77
+ advpng: false,
78
+ jhead: false,
79
+ jpegrecompress: false,
80
+ jpegtran: false,
81
+ optipng: false,
82
+ pngcrush: false,
83
+ pngout: false,
84
+ svgo: false
57
85
  }
58
86
  })
59
87
  media.fields.new(name: 'Description', field_type: 'text_field_type', validations: {presence: true})
@@ -76,7 +104,7 @@ namespace :cortex do
76
104
  "elements": [
77
105
  {
78
106
  "id": media.fields.find_by_name('Asset').id,
79
- "tooltip": "Recommended blog featured image size: 1452px x 530px with a live area of 930px x 530px"
107
+ "tooltip": "Recommended Size: 840 x 400 if you want to use a single image as your tile and blog header image."
80
108
  }
81
109
  ]
82
110
  }
@@ -164,7 +192,7 @@ namespace :cortex do
164
192
  "name": "Creator",
165
193
  "cells": [{
166
194
  "field": {
167
- "method": "author_email"
195
+ "method": "creator.email"
168
196
  },
169
197
  "display": {
170
198
  "classes": [
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cortex-plugins-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.4
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - CareerBuilder Employer Site & Content Products
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-05-10 00:00:00.000000000 Z
11
+ date: 2017-09-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -86,28 +86,28 @@ dependencies:
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: 1.0.0.beta
89
+ version: '1.0'
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: 1.0.0.beta
96
+ version: '1.0'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: shrine
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '2.6'
103
+ version: '2.7'
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: '2.6'
110
+ version: '2.7'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: mimemagic
113
113
  requirement: !ruby/object:Gem::Requirement
@@ -142,14 +142,14 @@ dependencies:
142
142
  requirements:
143
143
  - - "~>"
144
144
  - !ruby/object:Gem::Version
145
- version: '4.7'
145
+ version: '4.8'
146
146
  type: :runtime
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
150
  - - "~>"
151
151
  - !ruby/object:Gem::Version
152
- version: '4.7'
152
+ version: '4.8'
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: fastimage
155
155
  requirement: !ruby/object:Gem::Requirement
@@ -164,6 +164,34 @@ dependencies:
164
164
  - - "~>"
165
165
  - !ruby/object:Gem::Version
166
166
  version: '2.1'
167
+ - !ruby/object:Gem::Dependency
168
+ name: image_optim
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - "~>"
172
+ - !ruby/object:Gem::Version
173
+ version: '0.25'
174
+ type: :runtime
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - "~>"
179
+ - !ruby/object:Gem::Version
180
+ version: '0.25'
181
+ - !ruby/object:Gem::Dependency
182
+ name: image_optim_pack
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - "~>"
186
+ - !ruby/object:Gem::Version
187
+ version: '0.5'
188
+ type: :runtime
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - "~>"
193
+ - !ruby/object:Gem::Version
194
+ version: '0.5'
167
195
  description:
168
196
  email:
169
197
  - EmployerSiteContentProducts@cb.com
@@ -181,6 +209,7 @@ files:
181
209
  - app/assets/javascripts/cortex-plugins-core/cells/content_item.js
182
210
  - app/assets/javascripts/cortex-plugins-core/cells/text.js
183
211
  - app/assets/stylesheets/cortex-plugins-core/application.scss
212
+ - app/assets/stylesheets/cortex-plugins-core/components/tags-input.scss
184
213
  - app/assets/stylesheets/cortex-plugins-core/components/thumbnail-placeholder.scss
185
214
  - app/assets/stylesheets/cortex-plugins-core/variables/_colors.scss
186
215
  - app/assets/stylesheets/cortex-plugins-core/variables/_typography.scss
@@ -232,7 +261,14 @@ files:
232
261
  - app/models/text_field_type.rb
233
262
  - app/models/tree_field_type.rb
234
263
  - app/models/user_field_type.rb
264
+ - app/transactions/concerns/update_tags.rb
265
+ - app/transactions/get_content_item_tags_transaction.rb
266
+ - app/transactions/get_field_tree_list_transaction.rb
267
+ - app/transactions/new_tag_field_item_transaction.rb
268
+ - app/transactions/new_user_field_item_transaction.rb
269
+ - app/transactions/update_tag_field_item_transaction.rb
235
270
  - app/uploaders/asset_uploader.rb
271
+ - app/uploaders/concerns/imageable.rb
236
272
  - config/initializers/react_on_rails.rb
237
273
  - config/initializers/shrine.rb
238
274
  - lib/cortex/plugins/core.rb
@@ -241,8 +277,6 @@ files:
241
277
  - lib/shrine/plugins/cortex_validation_helpers.rb
242
278
  - lib/tasks/cortex/core/db.rake
243
279
  - lib/tasks/cortex/core/media.rake
244
- - lib/tasks/cortex/test/dummy/db/development.sqlite3
245
- - lib/tasks/cortex/test/dummy/db/test.sqlite3
246
280
  homepage: https://github.com/cortex-cms/cortex-plugins-core
247
281
  licenses:
248
282
  - Apache-2.0
@@ -263,7 +297,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
263
297
  version: '0'
264
298
  requirements: []
265
299
  rubyforge_project:
266
- rubygems_version: 2.5.1
300
+ rubygems_version: 2.6.11
267
301
  signing_key:
268
302
  specification_version: 4
269
303
  summary: The combined set of Core FieldTypes for the Cortex CMS platform
File without changes