scrivito_sdk 0.60.0.rc1 → 0.60.0.rc2

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: a8911a89b494e43e231fd96f8531db03f4e8cd9a
4
- data.tar.gz: 134bacda1d8ac4999e4da8b848db773ea3979c9e
3
+ metadata.gz: 712c28035633619477bfc444b11996dab6d76fc6
4
+ data.tar.gz: 32d66f14ac294339b7303c4283fd81b0a4d7d0b7
5
5
  SHA512:
6
- metadata.gz: 3aa713d056322a84c6dc80dcb3ccadd185e78ac269e54092b5148c5e731b65085288a9b132e754eb0044240b1b3036795a6a6252701fd29cad6309b8d1575fe8
7
- data.tar.gz: 04beb72d21730486cebe70591f23cc99982ddd85fcc9c53065c921d22a10c29c426126d63a4f4161c2a0ac160e479e76d6ddcd8b5fc2996a6f32e69ccce1c279
6
+ metadata.gz: f09d10a74b5949b591ce41cdd6469c2c95da7413156d33dc133e8bac84e931dc9d7d75345c0b9e76987c6f1741e6717629462b752e97b853e29d95a34f7af48f
7
+ data.tar.gz: 19d63941f41c476ceb5e5e8e914cc8b6b2186e64bf5053e7731bfcc6277e304fceb624692f89337907701dc56d7a0090736f9caf67ad55384d66978d3048d9c7
data/.yardopts CHANGED
@@ -4,3 +4,4 @@
4
4
  --non-transitive-tag api
5
5
  --api public
6
6
  --embed-mixin AttributeContent
7
+ --embed-mixin Scrivito::AttributeContent::ClassMethods
@@ -98,27 +98,15 @@ module Scrivito
98
98
 
99
99
  def page_class_selection
100
100
  @page_class_markup = valid_page_classes.map do |page_class_name|
101
- begin
102
- markup = render_to_string("#{page_class_name.underscore}/thumbnail", formats: :html)
103
- {name: page_class_name, markup: markup}
104
- rescue ActionView::MissingTemplate
105
- end
101
+ build_selection_option(page_class_name)
106
102
  end
107
- @page_class_markup.compact!
108
103
  end
109
104
 
110
105
  def widget_class_selection
111
106
  load_obj
112
107
 
113
108
  @widgets_classes = valid_widget_classes.map do |widget_class_name|
114
- template_path = "#{widget_class_name.underscore}/thumbnail"
115
- markup = begin
116
- render_to_string(template_path, layout: false, formats: :html)
117
- rescue ActionView::MissingTemplate
118
- render_to_string('scrivito/widget_thumbnail', layout: false, formats: :html,
119
- locals: {widget_class_name: widget_class_name, template_path: template_path})
120
- end
121
- {name: widget_class_name, markup: markup}
109
+ build_selection_option(widget_class_name)
122
110
  end
123
111
  end
124
112
 
@@ -188,21 +176,33 @@ module Scrivito
188
176
  name ? Configuration.obj_formats[name] : proc { |obj, _| obj.id }
189
177
  end
190
178
 
179
+ def build_selection_option(class_name)
180
+ template_path = "#{class_name.underscore}/thumbnail"
181
+ markup = begin
182
+ render_to_string(template_path, layout: false, formats: :html)
183
+ rescue ActionView::MissingTemplate
184
+ render_to_string('scrivito/fallback_thumbnail', layout: false, formats: :html,
185
+ locals: {class_name: class_name, template_path: template_path})
186
+ end
187
+ {name: class_name, markup: markup}
188
+ end
189
+
191
190
  def valid_page_classes
192
- (page_classes_from_obj || page_descendants).map(&:to_s)
191
+ without_hidden_classes(page_classes_from_obj).map(&:to_s)
193
192
  end
194
193
 
195
194
  def page_classes_from_obj
196
- Obj.valid_page_classes_beneath(params[:parent_path])
195
+ Obj.valid_page_ruby_classes_beneath(params[:parent_path])
197
196
  end
198
197
 
199
- def page_descendants
200
- Scrivito.models.pages
198
+ def valid_widget_classes
199
+ widget_classes = current_widget_or_obj.valid_widget_ruby_classes_for(params[:field_name])
200
+
201
+ without_hidden_classes(widget_classes).map(&:to_s)
201
202
  end
202
203
 
203
- def valid_widget_classes
204
- current_widget_or_obj.valid_widget_class_names_for(params[:field_name]) -
205
- ['Scrivito::ContentWidget']
204
+ def without_hidden_classes(obj_types)
205
+ obj_types.reject(&:hide_from_editor?)
206
206
  end
207
207
 
208
208
  def current_widget_or_obj
@@ -2,6 +2,8 @@ module Scrivito
2
2
  class ContentWidget < ::Widget
3
3
  attribute :content, :reference
4
4
 
5
+ hide_from_editor
6
+
5
7
  def description_for_editor
6
8
  content.try(:description_for_editor).presence || 'Content Widget'
7
9
  end
@@ -0,0 +1,3 @@
1
+ <%= scrivito_thumbnail class_name do %>
2
+ Missing template "<%= template_path %>". Please provide one.
3
+ <% end %>
data/config/ca-bundle.crt CHANGED
@@ -1,7 +1,7 @@
1
1
  ##
2
2
  ## Bundle of CA Root Certificates
3
3
  ##
4
- ## Certificate data from Mozilla as of: Thu Apr 16 11:00:56 2015
4
+ ## Certificate data from Mozilla as of: Mon Apr 27 14:17:45 2015
5
5
  ##
6
6
  ## This is a bundle of X.509 certificates of public Certificate Authorities
7
7
  ## (CA). These were automatically extracted from Mozilla's root certificates
@@ -14,7 +14,7 @@
14
14
  ## Just configure this file as the SSLCACertificateFile.
15
15
  ##
16
16
  ## Conversion done with mk-ca-bundle.pl version 1.25.
17
- ## SHA1: f9bc9fa76145720d94124527f82a7185d921975e
17
+ ## SHA1: ed3c0bbfb7912bcc00cd2033b0cb85c98d10559c
18
18
  ##
19
19
 
20
20
 
@@ -2790,28 +2790,6 @@ yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi
2790
2790
  LXpUq3DDfSJlgnCW
2791
2791
  -----END CERTIFICATE-----
2792
2792
 
2793
- E-Guven Kok Elektronik Sertifika Hizmet Saglayicisi
2794
- ===================================================
2795
- -----BEGIN CERTIFICATE-----
2796
- MIIDtjCCAp6gAwIBAgIQRJmNPMADJ72cdpW56tustTANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG
2797
- EwJUUjEoMCYGA1UEChMfRWxla3Ryb25payBCaWxnaSBHdXZlbmxpZ2kgQS5TLjE8MDoGA1UEAxMz
2798
- ZS1HdXZlbiBLb2sgRWxla3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhZ2xheWljaXNpMB4XDTA3
2799
- MDEwNDExMzI0OFoXDTE3MDEwNDExMzI0OFowdTELMAkGA1UEBhMCVFIxKDAmBgNVBAoTH0VsZWt0
2800
- cm9uaWsgQmlsZ2kgR3V2ZW5saWdpIEEuUy4xPDA6BgNVBAMTM2UtR3V2ZW4gS29rIEVsZWt0cm9u
2801
- aWsgU2VydGlmaWthIEhpem1ldCBTYWdsYXlpY2lzaTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
2802
- AQoCggEBAMMSIJ6wXgBljU5Gu4Bc6SwGl9XzcslwuedLZYDBS75+PNdUMZTe1RK6UxYC6lhj71vY
2803
- 8+0qGqpxSKPcEC1fX+tcS5yWCEIlKBHMilpiAVDV6wlTL/jDj/6z/P2douNffb7tC+Bg62nsM+3Y
2804
- jfsSSYMAyYuXjDtzKjKzEve5TfL0TW3H5tYmNwjy2f1rXKPlSFxYvEK+A1qBuhw1DADT9SN+cTAI
2805
- JjjcJRFHLfO6IxClv7wC90Nex/6wN1CZew+TzuZDLMN+DfIcQ2Zgy2ExR4ejT669VmxMvLz4Bcpk
2806
- 9Ok0oSy1c+HCPujIyTQlCFzz7abHlJ+tiEMl1+E5YP6sOVkCAwEAAaNCMEAwDgYDVR0PAQH/BAQD
2807
- AgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFJ/uRLOU1fqRTy7ZVZoEVtstxNulMA0GCSqG
2808
- SIb3DQEBBQUAA4IBAQB/X7lTW2M9dTLn+sR0GstG30ZpHFLPqk/CaOv/gKlR6D1id4k9CnU58W5d
2809
- F4dvaAXBlGzZXd/aslnLpRCKysw5zZ/rTt5S/wzw9JKp8mxTq5vSR6AfdPebmvEvFZ96ZDAYBzwq
2810
- D2fK/A+JYZ1lpTzlvBNbCNvj/+27BrtqBrF6T2XGgv0enIu1De5Iu7i9qgi0+6N8y5/NkHZchpZ4
2811
- Vwpm+Vganf2XKWDeEaaQHBkc7gGWIjQ0LpH5t8Qn0Xvmv/uARFoW5evg1Ao4vOSR49XrXMGs3xtq
2812
- fJ7lddK2l4fbzIcrQzqECK+rPNv3PGYxhrCdU3nt+CPeQuMtgvEP5fqX
2813
- -----END CERTIFICATE-----
2814
-
2815
2793
  GlobalSign Root CA - R3
2816
2794
  =======================
2817
2795
  -----BEGIN CERTIFICATE-----
@@ -4482,3 +4460,220 @@ jP8DOr3Wnfrn3Ja5GmQ+xP3ZCrZlnrqlqFj8OyLwolfuildHnHfHJeGsNAVN84J+QSO6tFfz58YB
4482
4460
  ZddNiZkcaU1eePbrcnE9ssSVAZ9dDLcvJaZceUHvnsRnPKGdf3E60JWX7HhCdJhuvj5oTFc8qJNB
4483
4461
  hwvkua+R+1BMDLrAJCfRFdtlSCEKL9fcfqDMZX55
4484
4462
  -----END CERTIFICATE-----
4463
+
4464
+ Staat der Nederlanden Root CA - G3
4465
+ ==================================
4466
+ -----BEGIN CERTIFICATE-----
4467
+ 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
4492
+ -----END CERTIFICATE-----
4493
+
4494
+ Staat der Nederlanden EV Root CA
4495
+ ================================
4496
+ -----BEGIN CERTIFICATE-----
4497
+ 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
4521
+ eUN51q1veieQA6TqJIc/2b3Z6fJfUEkc7uzXLg==
4522
+ -----END CERTIFICATE-----
4523
+
4524
+ IdenTrust Commercial Root CA 1
4525
+ ==============================
4526
+ -----BEGIN CERTIFICATE-----
4527
+ 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
4551
+ cGzM7vRX+Bi6hG6H
4552
+ -----END CERTIFICATE-----
4553
+
4554
+ IdenTrust Public Sector Root CA 1
4555
+ =================================
4556
+ -----BEGIN CERTIFICATE-----
4557
+ MIIFZjCCA06gAwIBAgIQCgFCgAAAAUUjz0Z8AAAAAjANBgkqhkiG9w0BAQsFADBNMQswCQYDVQQG
4558
+ EwJVUzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3Rv
4559
+ ciBSb290IENBIDEwHhcNMTQwMTE2MTc1MzMyWhcNMzQwMTE2MTc1MzMyWjBNMQswCQYDVQQGEwJV
4560
+ UzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3RvciBS
4561
+ b290IENBIDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2IpT8pEiv6EdrCvsnduTy
4562
+ P4o7ekosMSqMjbCpwzFrqHd2hCa2rIFCDQjrVVi7evi8ZX3yoG2LqEfpYnYeEe4IFNGyRBb06tD6
4563
+ Hi9e28tzQa68ALBKK0CyrOE7S8ItneShm+waOh7wCLPQ5CQ1B5+ctMlSbdsHyo+1W/CD80/HLaXI
4564
+ rcuVIKQxKFdYWuSNG5qrng0M8gozOSI5Cpcu81N3uURF/YTLNiCBWS2ab21ISGHKTN9T0a9SvESf
4565
+ qy9rg3LvdYDaBjMbXcjaY8ZNzaxmMc3R3j6HEDbhuaR672BQssvKplbgN6+rNBM5Jeg5ZuSYeqoS
4566
+ mJxZZoY+rfGwyj4GD3vwEUs3oERte8uojHH01bWRNszwFcYr3lEXsZdMUD2xlVl8BX0tIdUAvwFn
4567
+ ol57plzy9yLxkA2T26pEUWbMfXYD62qoKjgZl3YNa4ph+bz27nb9cCvdKTz4Ch5bQhyLVi9VGxyh
4568
+ LrXHFub4qjySjmm2AcG1hp2JDws4lFTo6tyePSW8Uybt1as5qsVATFSrsrTZ2fjXctscvG29ZV/v
4569
+ iDUqZi/u9rNl8DONfJhBaUYPQxxp+pu10GFqzcpL2UyQRqsVWaFHVCkugyhfHMKiq3IXAAaOReyL
4570
+ 4jM9f9oZRORicsPfIsbyVtTdX5Vy7W1f90gDW/3FKqD2cyOEEBsB5wIDAQABo0IwQDAOBgNVHQ8B
4571
+ Af8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU43HgntinQtnbcZFrlJPrw6PRFKMw
4572
+ DQYJKoZIhvcNAQELBQADggIBAEf63QqwEZE4rU1d9+UOl1QZgkiHVIyqZJnYWv6IAcVYpZmxI1Qj
4573
+ t2odIFflAWJBF9MJ23XLblSQdf4an4EKwt3X9wnQW3IV5B4Jaj0z8yGa5hV+rVHVDRDtfULAj+7A
4574
+ mgjVQdZcDiFpboBhDhXAuM/FSRJSzL46zNQuOAXeNf0fb7iAaJg9TaDKQGXSc3z1i9kKlT/YPyNt
4575
+ GtEqJBnZhbMX73huqVjRI9PHE+1yJX9dsXNw0H8GlwmEKYBhHfpe/3OsoOOJuBxxFcbeMX8S3OFt
4576
+ m6/n6J91eEyrRjuazr8FGF1NFTwWmhlQBJqymm9li1JfPFgEKCXAZmExfrngdbkaqIHWchezxQMx
4577
+ NRF4eKLg6TCMf4DfWN88uieW4oA0beOY02QnrEh+KHdcxiVhJfiFDGX6xDIvpZgF5PgLZxYWxoK4
4578
+ Mhn5+bl53B/N66+rDt0b20XkeucC4pVd/GnwU2lhlXV5C15V5jgclKlZM57IcXR5f1GJtshquDDI
4579
+ ajjDbp7hNxbqBWJMWxJH7ae0s1hWx0nzfxJoCTFx8G34Tkf71oXuxVhAGaQdp/lLQzfcaFpPz+vC
4580
+ ZHTetBXZ9FRUGi8c15dxVJCO2SCdUyt/q4/i6jC8UDfv8Ue1fXwsBOxonbRJRBD0ckscZOf85muQ
4581
+ 3Wl9af0AVqW3rLatt8o+Ae+c
4582
+ -----END CERTIFICATE-----
4583
+
4584
+ S-TRUST Universal Root CA
4585
+ =========================
4586
+ -----BEGIN CERTIFICATE-----
4587
+ MIID2DCCAsCgAwIBAgIQYFbFSyNAW2TU7SXa2dYeHjANBgkqhkiG9w0BAQsFADCBhTELMAkGA1UE
4588
+ BhMCREUxKTAnBgNVBAoTIERldXRzY2hlciBTcGFya2Fzc2VuIFZlcmxhZyBHbWJIMScwJQYDVQQL
4589
+ Ex5TLVRSVVNUIENlcnRpZmljYXRpb24gU2VydmljZXMxIjAgBgNVBAMTGVMtVFJVU1QgVW5pdmVy
4590
+ c2FsIFJvb3QgQ0EwHhcNMTMxMDIyMDAwMDAwWhcNMzgxMDIxMjM1OTU5WjCBhTELMAkGA1UEBhMC
4591
+ REUxKTAnBgNVBAoTIERldXRzY2hlciBTcGFya2Fzc2VuIFZlcmxhZyBHbWJIMScwJQYDVQQLEx5T
4592
+ LVRSVVNUIENlcnRpZmljYXRpb24gU2VydmljZXMxIjAgBgNVBAMTGVMtVFJVU1QgVW5pdmVyc2Fs
4593
+ IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCo4wvfETeFgpq1bGZ8YT/A
4594
+ RxodRuOwVWTluII5KAd+F//0m4rwkYHqOD8heGxI7GsvotOKcrKn19nqf7TASWswJYmM67fVQGGY
4595
+ 4tw8IJLNZUpynxqOjPolFb/zIYMoDYuvWRGCQ1ybTSVRf1gYY2A7s7WKi1hjN0hIkETCQN1d90Np
4596
+ KZhcEmVeq5CSS2bf1XUSU1QYpt6K1rtXAzlZmRgFDPn9FcaQZEYXgtfCSkE9/QC+V3IYlHcbU1qJ
4597
+ AfYzcg6TOtzoHv0FBda8c+CI3KtP7LUYhk95hA5IKmYq3TLIeGXIC51YAQVx7YH1aBduyw20S9ih
4598
+ 7K446xxYL6FlAzQvAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G
4599
+ A1UdDgQWBBSafdfr639UmEUptCCrbQuWIxmkwjANBgkqhkiG9w0BAQsFAAOCAQEATpYS2353XpIn
4600
+ niEXGIJ22D+8pQkEZoiJrdtVszNqxmXEj03zMjbceQSWqXcy0Zf1GGuMuu3OEdBEx5LxtESO7YhS
4601
+ SJ7V/Vn4ox5R+wFS5V/let2qJE8ii912RvaloA812MoPmLkwXSBvwoEevb3A/hXTOCoJk5gnG5N7
4602
+ 0Cs0XmilFU/RUsOgyqCDRR319bdZc11ZAY+qwkcvFHHVKeMQtUeTJcwjKdq3ctiR1OwbSIoi5MEq
4603
+ 9zpok59FGW5Dt8z+uJGaYRo2aWNkkijzb2GShROfyQcsi1fc65551cLeCNVUsldOKjKNoeI60RAg
4604
+ Ijl9NEVvcTvDHfz/sk+o4vYwHg==
4605
+ -----END CERTIFICATE-----
4606
+
4607
+ Entrust Root Certification Authority - G2
4608
+ =========================================
4609
+ -----BEGIN CERTIFICATE-----
4610
+ MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMCVVMxFjAUBgNV
4611
+ BAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVy
4612
+ bXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ug
4613
+ b25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIw
4614
+ HhcNMDkwNzA3MTcyNTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoT
4615
+ DUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMx
4616
+ OTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25s
4617
+ eTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwggEi
4618
+ MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP
4619
+ /vaCeb9zYQYKpSfYs1/TRU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXz
4620
+ HHfV1IWNcCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hWwcKU
4621
+ s/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1U1+cPvQXLOZprE4y
4622
+ TGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0jaWvYkxN4FisZDQSA/i2jZRjJKRx
4623
+ AgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ6
4624
+ 0B7vfec7aVHUbI2fkBJmqzANBgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5Z
4625
+ iXMRrEPR9RP/jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ
4626
+ Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v1fN2D807iDgi
4627
+ nWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4RnAuknZoh8/CbCzB428Hch0P+
4628
+ vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmHVHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xO
4629
+ e4pIb4tF9g==
4630
+ -----END CERTIFICATE-----
4631
+
4632
+ Entrust Root Certification Authority - EC1
4633
+ ==========================================
4634
+ -----BEGIN CERTIFICATE-----
4635
+ MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkGA1UEBhMCVVMx
4636
+ FjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVn
4637
+ YWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXpl
4638
+ ZCB1c2Ugb25seTEzMDEGA1UEAxMqRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5
4639
+ IC0gRUMxMB4XDTEyMTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYw
4640
+ FAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0L2xlZ2Fs
4641
+ LXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhvcml6ZWQg
4642
+ dXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt
4643
+ IEVDMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHy
4644
+ AsWfoPZb1YsGGYZPUxBtByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef
4645
+ 9eNi1KlHBz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
4646
+ FLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVCR98crlOZF7ZvHH3h
4647
+ vxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nXhTcGtXsI/esni0qU+eH6p44mCOh8
4648
+ kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G
4649
+ -----END CERTIFICATE-----
4650
+
4651
+ CFCA EV ROOT
4652
+ ============
4653
+ -----BEGIN CERTIFICATE-----
4654
+ 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
4679
+ -----END CERTIFICATE-----
@@ -25,6 +25,7 @@ module AttributeContent
25
25
  %w[html string],
26
26
  %w[multienum stringlist],
27
27
  %w[string html],
28
+ %w[string text],
28
29
  %w[widgetlist widget],
29
30
  ]
30
31
 
@@ -43,8 +44,6 @@ module AttributeContent
43
44
  'widgetlist' => [],
44
45
  }
45
46
 
46
- extend ActiveSupport::Concern
47
-
48
47
  delegate :attribute_definitions, to: :class
49
48
 
50
49
  def has_attribute?(attribute_name)
@@ -52,7 +51,8 @@ module AttributeContent
52
51
  end
53
52
 
54
53
  def has_custom_attribute?(attribute_name)
55
- if revision.workspace.uses_obj_classes && attribute_definitions.blank?
54
+ if revision.workspace.uses_obj_classes && attribute_definitions.blank? &&
55
+ !self.class.special_class?
56
56
  Scrivito.raise_obj_class_deprecated_error
57
57
  end
58
58
  !!attribute_definitions[attribute_name]
@@ -108,15 +108,18 @@ module AttributeContent
108
108
  def valid_widget_classes_for(field_name)
109
109
  end
110
110
 
111
- def valid_widget_class_names_for(field)
112
- class_names = []
113
- (valid_widget_classes_for(field) || Scrivito.models.widgets.to_a).select do |object|
114
- widget_class = object.is_a?(Class) ? object : object.to_s.constantize
115
- class_names << widget_class.to_s if widget_class.valid_inside_container?(self.class)
111
+ def valid_widget_ruby_classes_for(field)
112
+ computed_classes = valid_widget_classes_for(field)
113
+
114
+ return Scrivito.models.widgets.to_a unless computed_classes
115
+
116
+ type_computer = Widget.type_computer
117
+ ruby_classes = self.class.convert_to_obj_classes(computed_classes, type_computer) do |name|
118
+ Rails.logger.warn("Invalid widget class #{name} returned by #valid_widget_classes_for.")
116
119
  end
117
- class_names
118
- end
119
120
 
121
+ ruby_classes.select { |ruby_class| ruby_class.valid_inside_container?(self.class) }
122
+ end
120
123
 
121
124
  def modification_for_attribute(attribute_name, revision=Workspace.current.base_revision)
122
125
  return Modification::UNMODIFIED unless revision
@@ -174,8 +177,9 @@ module AttributeContent
174
177
  def find_attribute_containing_widget(widget_id)
175
178
  attribute_definitions.each do |attribute_definition|
176
179
  if attribute_definition.widgetlist?
177
- attribute_name = attribute_definition.name
178
- return attribute_name if data_from_cms.value_of(attribute_name).include?(widget_id)
180
+ widgetlist_name = attribute_definition.name
181
+ widgetlist_value = data_from_cms.value_of(widgetlist_name)
182
+ return widgetlist_name if widgetlist_value && widgetlist_value.include?(widget_id)
179
183
  end
180
184
  end
181
185
  nil
@@ -404,6 +408,47 @@ module AttributeContent
404
408
  AttributeDefinitionCollection.new(all_attribute_definitions)
405
409
  end
406
410
 
411
+ # @api public
412
+ #
413
+ # This method disables the creation of +Objs+ or +Widgets+ of the given type using the UI.
414
+ # It does not prevent adding these objects programatically.
415
+ #
416
+ # By default +hide_from_editor+ is +false+.
417
+ #
418
+ # @example Hiding error pages
419
+ # class ErrorPage < Obj
420
+ # hide_from_editor
421
+ # end
422
+ #
423
+ # @example Hiding admin widgets
424
+ # class AdminWidget < Widget
425
+ # hide_from_editor
426
+ # end
427
+ def hide_from_editor
428
+ @hide_from_editor = true
429
+ end
430
+
431
+ def hide_from_editor?
432
+ !!@hide_from_editor
433
+ end
434
+
435
+ def special_class?
436
+ type_computer.special_class?(self)
437
+ end
438
+
439
+ def convert_to_obj_classes(class_names, type_computer)
440
+ class_names.inject([]) do |classes, class_name|
441
+ widget_class = type_computer.compute_type_without_fallback(class_name.to_s)
442
+
443
+ if widget_class
444
+ classes << widget_class
445
+ else
446
+ yield class_name
447
+ end
448
+ classes
449
+ end
450
+ end
451
+
407
452
  protected
408
453
 
409
454
  def assert_valid_attribute_name(name)
@@ -431,10 +476,6 @@ module AttributeContent
431
476
 
432
477
  private
433
478
 
434
- def special_class?
435
- type_computer.special_class?(self)
436
- end
437
-
438
479
  def prepare_obj_class_attribute(attributes)
439
480
  if obj_class = attributes['_obj_class']
440
481
  assert_valid_obj_class(obj_class)
@@ -17,6 +17,7 @@ class AttributeDefinitionMigrator
17
17
  Dir[Rails.root + 'app/models/**/*.rb'].each do |model_path|
18
18
  new(model_path).migrate
19
19
  end
20
+ check_abandoned_obj_classes
20
21
  end
21
22
 
22
23
  def migrate
@@ -26,6 +27,8 @@ class AttributeDefinitionMigrator
26
27
  if obj_class
27
28
  say_status :migrating, relative_path
28
29
  inject_attribute_definitions
30
+ inject_hide_from_editor if hidden_from_editor?
31
+ check_model_name
29
32
  else
30
33
  with_padding do
31
34
  say %{[warning] Model "#{model_class}" has no corresponding ObjClass in published workspace.
@@ -56,10 +59,22 @@ class AttributeDefinitionMigrator
56
59
  model_class.ancestors.include?(BasicWidget) && model_class != ::Widget
57
60
  end
58
61
 
62
+ def inject_hide_from_editor
63
+ inject_into_class(path, model_class, " hide_from_editor\n\n")
64
+ end
65
+
59
66
  def inject_attribute_definitions
60
67
  inject_into_class(path, model_class, "#{attribute_definitions.join}\n", verbose: false)
61
68
  end
62
69
 
70
+ def hidden_from_editor?
71
+ !obj_class.active? || (page_model? && !template_exists?)
72
+ end
73
+
74
+ def template_exists?
75
+ lookup_context.template_exists?("#{class_name.underscore}/thumbnail")
76
+ end
77
+
63
78
  def class_name
64
79
  @class_name ||= path.gsub(/^.*\/app\/models/, '').gsub('.rb', '').classify
65
80
  end
@@ -99,10 +114,75 @@ class AttributeDefinitionMigrator
99
114
  end
100
115
  end
101
116
 
117
+ def lookup_context
118
+ ActionView::LookupContext.new(ActionController::Base.view_paths)
119
+ end
120
+
102
121
  def obj_class
103
122
  @obj_class = ObjClass.find(model_class.name)
104
123
  rescue Scrivito::ResourceNotFound
105
124
  end
125
+
126
+ def check_model_name
127
+ name = model_class.name
128
+
129
+ if page_model? && !name.ends_with?('Page')
130
+ is_binary = if obj_class.legacy_type?
131
+ obj_class.binary?
132
+ else
133
+ obj_class.attributes.any? { |attr| attr.name == 'blob' && attr.type == 'binary' }
134
+ end
135
+
136
+ unless is_binary
137
+ with_padding do
138
+ say %{[warning] The class name of the non-binary obj model "#{name}" does not end with "Page".
139
+ Class names of page models should end with "Page" in order to be automatically identified by Scrivito as pages.
140
+ Please ignore this warning if "#{name}" is not a page by design.
141
+ Otherwise you need to tell Scrivito about this page explicitly. Please add following to an initializer:
142
+
143
+ Scrivito.models.define { page "#{name}" }
144
+ }, :yellow
145
+ end
146
+ end
147
+ end
148
+
149
+ if widget_model? && !name.ends_with?('Widget') &&
150
+ Scrivito.models.widgets.none? { |w| w.name == name }
151
+ with_padding do
152
+ say %{[warning] The class name of the widget model "#{name}" does not end with "Widget".
153
+ Class names of widget models should end with "Widget" in order to be automatically identified by Scrivito as widgets.
154
+ You need to tell Scrivito about this widget explicitly. Please add following to an initializer:
155
+
156
+ Scrivito.models.define { widget "#{name}" }
157
+ }, :yellow
158
+ end
159
+ end
160
+ end
161
+
162
+ class << self
163
+ include Thor::Actions
164
+ include Thor::Base
165
+ include Thor::Shell
166
+
167
+ private
168
+
169
+ def check_abandoned_obj_classes
170
+ ObjClass.all.each do |obj_class|
171
+ next if obj_class.name == 'MigrationStore'
172
+ begin
173
+ obj_class.name.constantize
174
+ rescue NameError
175
+ with_padding do
176
+ say %{[warning] Could not find a ruby class for ObjClass "#{obj_class.name}".
177
+ Plase create a ruby class for that ObjClass and run this script again.
178
+
179
+ }, :yellow
180
+ end
181
+ end
182
+ end
183
+
184
+ end
185
+ end
106
186
  end
107
187
 
108
188
  end
@@ -12,6 +12,7 @@ class AttributeDeserializer < Struct.new(:model, :workspace)
12
12
  when 'multienum' then deserialize_multienum_value(attribute_value, attribute_definition)
13
13
  when 'reference' then deserialize_reference_value(attribute_value)
14
14
  when 'referencelist' then deserialize_referencelist_value(attribute_value)
15
+ when 'string' then deserialize_string_value(attribute_value)
15
16
  when 'widget' then deserialize_legacy_widget_value(attribute_value, attribute_definition)
16
17
  when 'widgetlist' then deserialize_widgetlist_value(attribute_value, attribute_definition)
17
18
  else attribute_value
@@ -35,7 +36,7 @@ class AttributeDeserializer < Struct.new(:model, :workspace)
35
36
  end
36
37
 
37
38
  def deserialize_html_value(attribute_value)
38
- StringTagging.tag_as_html(attribute_value)
39
+ StringTagging.tag_as_html(attribute_value || '')
39
40
  end
40
41
 
41
42
  def deserialize_link_value(attribute_value)
@@ -64,7 +65,11 @@ class AttributeDeserializer < Struct.new(:model, :workspace)
64
65
  end
65
66
 
66
67
  def deserialize_multienum_value(attribute_value, attribute_definition)
67
- attribute_value & attribute_definition.values
68
+ if attribute_value
69
+ attribute_value & attribute_definition.values
70
+ else
71
+ []
72
+ end
68
73
  end
69
74
 
70
75
  def deserialize_reference_value(attribute_value)
@@ -72,7 +77,7 @@ class AttributeDeserializer < Struct.new(:model, :workspace)
72
77
  end
73
78
 
74
79
  def deserialize_referencelist_value(attribute_value)
75
- workspace.objs.find(attribute_value).compact
80
+ attribute_value ? workspace.objs.find(attribute_value).compact : []
76
81
  end
77
82
 
78
83
  def deserialize_internal_link(attribute_value)
@@ -85,6 +90,10 @@ class AttributeDeserializer < Struct.new(:model, :workspace)
85
90
  Link.new(attribute_value.slice('url', 'title', 'target').symbolize_keys)
86
91
  end
87
92
 
93
+ def deserialize_string_value(attribute_value)
94
+ attribute_value || ''
95
+ end
96
+
88
97
  def deserialize_legacy_widget_value(widget_ids, attribute_definition)
89
98
  if workspace.uses_obj_classes
90
99
  deserialize_widgetlist_value(widget_ids, attribute_definition)
@@ -12,8 +12,6 @@ module Scrivito
12
12
  # @api public
13
13
  #
14
14
  class BasicObj
15
- # @!parse extend Scrivito::AttributeContent::ClassMethods
16
-
17
15
  PublicSystemAttributeDefinition = Class.new(AttributeDefinition)
18
16
 
19
17
  SYSTEM_ATTRIBUTES = AttributeDefinitionCollection.new(
@@ -43,6 +41,7 @@ module Scrivito
43
41
  ].freeze
44
42
 
45
43
  extend ActiveModel::Naming
44
+ extend AttributeContent::ClassMethods
46
45
 
47
46
  include AttributeContent
48
47
  include ModelIdentity
@@ -289,6 +288,18 @@ module Scrivito
289
288
  def self.valid_page_classes_beneath(parent_path)
290
289
  end
291
290
 
291
+ def self.valid_page_ruby_classes_beneath(parent_path)
292
+ computed_classes = valid_page_classes_beneath(parent_path)
293
+
294
+ return Scrivito.models.pages.to_a unless computed_classes
295
+
296
+ convert_to_obj_classes(computed_classes, Obj.type_computer) do |class_name|
297
+ Rails.logger.warn(
298
+ "Invalid page class #{class_name} returned by #valid_page_classes_beneath."
299
+ )
300
+ end
301
+ end
302
+
292
303
  # Update the {Scrivito::BasicObj Obj} with the attributes provided.
293
304
  #
294
305
  # For an overview of which values you can set via this method see the
@@ -3,8 +3,7 @@ module Scrivito
3
3
  # The CMS widget class
4
4
  # @api public
5
5
  class BasicWidget
6
- # @!parse extend Scrivito::AttributeContent::ClassMethods
7
-
6
+ extend AttributeContent::ClassMethods
8
7
  include AttributeContent
9
8
 
10
9
  def self.type_computer
@@ -21,6 +21,11 @@ module Cache
21
21
  internal_store.write(key, value, expires_in: expires_in)
22
22
  end
23
23
 
24
+ def transform_key(key)
25
+ # Workaround for rails/rails#15616. Will be fixed in Rails 4.2.
26
+ Digest::SHA1.hexdigest(key)
27
+ end
28
+
24
29
  def forward_write?(key, value, expires_in)
25
30
  super && !expires_in
26
31
  end
@@ -73,7 +73,8 @@ class CmsFieldTag < Struct.new(:view, :tag_name, :obj_or_widget, :field_name)
73
73
  private
74
74
 
75
75
  def build_valid_widget_classes
76
- obj_or_widget.valid_widget_class_names_for(field_name).map do |widget_class|
76
+ obj_or_widget.valid_widget_ruby_classes_for(field_name).map do |widget_class|
77
+ widget_class = widget_class.to_s
77
78
  {
78
79
  name: widget_class,
79
80
  description: description_for_widget_class(widget_class),
@@ -1,57 +1,9 @@
1
1
  module Scrivito
2
2
  module Migrations
3
- # CMS Migrations can alter the structure and content of the CMS and allow
4
- # other developers to simultaneously apply changes. Migrations provide a set
5
- # of methods to create, update or delete CMS objects, attributes and object
6
- # classes.
7
- #
8
- # @example Simple Migration
9
- #
10
- # class CreateTestAttribute < Scrivito::Migrations::Migration
11
- # def up
12
- # ObjClass.find('Homepage').attributes.add(Attribute.new(name: 'test', type: :string))
13
- # end
14
- # end
15
3
  class Migration
16
- class << self
17
- def copy(destination, sources)
18
- unless File.exist?(destination)
19
- FileUtils.mkdir_p(destination)
20
- end
21
-
22
- destination_migrations = Scrivito::Migrations::Migrator.determine_migrations(destination)
23
- last = destination_migrations.last
24
-
25
- sources.each do |scope, path|
26
- source_migrations = Scrivito::Migrations::Migrator.determine_migrations(path)
27
-
28
- source_migrations.each do |migration|
29
- next if duplicate_migration?(destination_migrations, migration.name, scope)
30
-
31
- name = migration.name
32
- version = next_migration_number(last ? last.version : 0)
33
- filename = File.join(destination, "#{version}_#{name.underscore}.#{scope}.rb")
34
-
35
- new_migration = self.new(name, version, filename, scope)
36
-
37
- FileUtils.cp(migration.filename, new_migration.filename)
38
-
39
- last = new_migration
40
- destination_migrations << new_migration
41
- end
42
- end
43
- end
44
-
45
- def duplicate_migration?(migrations, name, scope)
46
- migrations.detect do |migration|
47
- migration.name == name && migration.scope == scope.to_s
48
- end
49
- end
50
-
51
- def next_migration_number(current_migration_number)
52
- migration_number = current_migration_number + 1
53
- [Time.now.utc.strftime('%Y%m%d%H%M%S'), '%.14d' % migration_number].max
54
- end
4
+ def self.next_migration_number(current_migration_number)
5
+ migration_number = current_migration_number + 1
6
+ [Time.now.utc.strftime('%Y%m%d%H%M%S'), '%.14d' % migration_number].max
55
7
  end
56
8
 
57
9
  attr_accessor :name
@@ -5,7 +5,7 @@ module Scrivito
5
5
 
6
6
  # html flavour
7
7
  def self.tag_as_html(string)
8
- unless string.blank?
8
+ if string
9
9
  class << string
10
10
  include Scrivito::HtmlString
11
11
  end
@@ -26,10 +26,5 @@ namespace :scrivito do
26
26
  puts exception.message
27
27
  end
28
28
  end
29
-
30
- desc 'Copy CMS migrations from Engines. Specify Engines to use with FROM=engine1,engine2'
31
- task :install => :environment do
32
- Scrivito::Migrations::Installer.new(ENV['FROM']).install
33
- end
34
29
  end
35
30
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: scrivito_sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.60.0.rc1
4
+ version: 0.60.0.rc2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Infopark AG
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-16 00:00:00.000000000 Z
11
+ date: 2015-04-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable
@@ -173,6 +173,7 @@ files:
173
173
  - app/views/scrivito/_editing_auth_warning.html.erb
174
174
  - app/views/scrivito/blobs/upload_permission.json.jbuilder
175
175
  - app/views/scrivito/content_widget/show.html.erb
176
+ - app/views/scrivito/fallback_thumbnail.html.erb
176
177
  - app/views/scrivito/objs/copy_widget.html.erb
177
178
  - app/views/scrivito/objs/create_widget.html.erb
178
179
  - app/views/scrivito/objs/destroy.json.jbuilder
@@ -190,7 +191,6 @@ files:
190
191
  - app/views/scrivito/users/suggest.json.jbuilder
191
192
  - app/views/scrivito/webservice/empty.json
192
193
  - app/views/scrivito/webservice/error.json.jbuilder
193
- - app/views/scrivito/widget_thumbnail.html.erb
194
194
  - app/views/scrivito/workspaces/_workspace.json.jbuilder
195
195
  - app/views/scrivito/workspaces/check.json.jbuilder
196
196
  - app/views/scrivito/workspaces/create.json.jbuilder
@@ -206,7 +206,6 @@ files:
206
206
  - config/locales/en.scrivito.models.yml
207
207
  - config/precedence_routes.rb
208
208
  - config/routes.rb
209
- - lib/assets/images/180x120.gif
210
209
  - lib/assets/images/scrivito/image_placeholder.png
211
210
  - lib/assets/javascripts/scrivito_sdk.js
212
211
  - lib/assets/javascripts/scrivito_ui.js
@@ -314,7 +313,6 @@ files:
314
313
  - lib/scrivito/migration.rb
315
314
  - lib/scrivito/migrations.rb
316
315
  - lib/scrivito/migrations/cms_backend.rb
317
- - lib/scrivito/migrations/installer.rb
318
316
  - lib/scrivito/migrations/migration.rb
319
317
  - lib/scrivito/migrations/migration_store.rb
320
318
  - lib/scrivito/migrations/migrator.rb
@@ -1,9 +0,0 @@
1
- <div class="scrivito_editing_widget_visualization">
2
- <%= image_tag '180x120.gif' %>
3
- </div>
4
- <div class="scrivito_editing_widget_title">
5
- <%= widget_class_name %>
6
- </div>
7
- <div class="scrivito_editing_widget_description">
8
- Missing template "app/views/<%= template_path %>". Please provide one.
9
- </div>
Binary file
@@ -1,45 +0,0 @@
1
- module Scrivito
2
- module Migrations
3
- class Installer
4
- def initialize(from)
5
- @to_load = from.blank? ? :all : from.split(',').map(&:strip)
6
- end
7
-
8
- def install
9
- Scrivito::Migrations::Migration.copy(destination, find_engines_with_migrations)
10
- end
11
-
12
- private
13
-
14
- def destination
15
- Scrivito::Migrations::Migrator.migrations_path
16
- end
17
-
18
- def find_engines_with_migrations
19
- Rails.application.railties.inject({}) do |railties, railtie|
20
- next railties unless @to_load == :all || @to_load.include?(railtie.railtie_name)
21
-
22
- if path = railtie_migration_path_for(railtie)
23
- railties[railtie.railtie_name] = path
24
- end
25
-
26
- railties
27
- end
28
- end
29
-
30
- def railtie_migration_path_for(railtie)
31
- if railtie.respond_to?(:paths)
32
- path = railtie.paths.path + relative_migration_path
33
-
34
- if File.exist?(path)
35
- path
36
- end
37
- end
38
- end
39
-
40
- def relative_migration_path
41
- Scrivito::Configuration.migration_path
42
- end
43
- end
44
- end
45
- end