scrivito_sdk 0.60.0.rc1 → 0.60.0.rc2

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: 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
+ 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
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