refinerycms-pages 3.0.3 → 3.0.4

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: 4933d54bda49d54b6458ba369411b14d07c4296d
4
- data.tar.gz: 7d9b0ffdaa544522cd7e58c2aa262795ba722ae2
3
+ metadata.gz: f8308e3073c942d0214a2decd15f895cb59337a2
4
+ data.tar.gz: 7bdadb6128ddc13e5bc6d82417bd6aa8218f22fe
5
5
  SHA512:
6
- metadata.gz: 7930a05fc308a3d86bfb85e606bcdd8e672c6c44aed78ba99ca47aff029421cde7031fa766a3d0f23c8941944f20c49adc5eada1dd797b37f57bc566e1890104
7
- data.tar.gz: 3e26bcbe3eb57580e81276f6e1750081b1c72f07fde92387692094d8aefe59cd212eb1768c0ffd5476cb427a104efbb0319e8208fe5b222363826bde76bbccbd
6
+ metadata.gz: ab53d5bb3c0f277efae545eb8ad0fe8baf2d2f7ef6c5d2839647c6bae25b9835bf6b8fe7c98553614051b9b75b0f6546fd6f5bc7250554cd1496d8e723eda8cd
7
+ data.tar.gz: 78d2d2482e752f92ec9c5ba6288e7c5d90986b363075fd1e8992d520f8c182dddf8959366f94c7e4b8400cb1f1f58ce3f31286fa035922faa741a6ae89b10d82
checksums.yaml.gz.sig ADDED
Binary file
@@ -108,7 +108,7 @@ module Refinery
108
108
  nested_url = page.nested_url
109
109
  {
110
110
  new_refinery_edit_page_path: refinery.admin_edit_page_path(nested_url),
111
- new_refinery_page_path: refinery.admin_page_path(nested_url),
111
+ new_refinery_page_path: refinery.admin_update_page_path(nested_url),
112
112
  new_page_path: refinery.pages_admin_preview_page_path(nested_url)
113
113
  }
114
114
  end
@@ -10,8 +10,6 @@ module Refinery
10
10
 
11
11
  skip_before_action :error_404, :set_canonical
12
12
 
13
- layout :layout
14
-
15
13
  def show
16
14
  render_with_templates?
17
15
  end
@@ -33,16 +31,18 @@ module Refinery
33
31
  end
34
32
  alias_method :page, :find_page
35
33
 
36
- def layout
37
- 'application'
34
+ def page_params
35
+ params.require(:page).permit(permitted_page_params)
38
36
  end
39
37
 
40
- def page_params
41
- params.require(:page).permit(
38
+ private
39
+
40
+ def permitted_page_params
41
+ [
42
42
  :browser_title, :draft, :link_url, :menu_title, :meta_description,
43
43
  :parent_id, :skip_to_first_child, :show_in_menu, :title, :view_template,
44
- :layout_template, parts_attributes: [:id, :title, :body, :position]
45
- )
44
+ :layout_template, :custom_slug, parts_attributes: [:id, :title, :slug, :body, :position]
45
+ ]
46
46
  end
47
47
  end
48
48
  end
@@ -68,12 +68,7 @@ module Refinery
68
68
  end
69
69
 
70
70
  def find_page(fallback_to_404 = true)
71
- @page ||= case action_name
72
- when "home"
73
- Refinery::Page.find_by(link_url: '/')
74
- when "show"
75
- Refinery::Page.friendly.find_by_path_or_id(params[:path], params[:id])
76
- end
71
+ @page ||= action_page_finder.call(params) if action_has_page_finder?
77
72
  @page || (error_404 if fallback_to_404)
78
73
  end
79
74
 
@@ -89,5 +84,28 @@ module Refinery
89
84
  cache_page(response.body, File.join('', 'refinery', 'cache', 'pages', request.path).to_s)
90
85
  end
91
86
  end
87
+
88
+ private
89
+ def action_has_page_finder?
90
+ Finders.const_defined? action_name.classify
91
+ end
92
+
93
+ def action_page_finder
94
+ Finders.const_get action_name.classify
95
+ end
96
+
97
+ module Finders
98
+ class Home
99
+ def self.call(_params)
100
+ Refinery::Page.find_by link_url: "/"
101
+ end
102
+ end
103
+
104
+ class Show
105
+ def self.call(params)
106
+ Refinery::Page.friendly.find_by_path_or_id params[:path], params[:id]
107
+ end
108
+ end
109
+ end
92
110
  end
93
111
  end
@@ -40,6 +40,14 @@ module Refinery
40
40
  ::I18n.t('hidden', :scope => 'refinery.admin.pages.page')
41
41
  end unless page.show_in_menu?
42
42
 
43
+ meta_information << content_tag(:span, :class => 'label') do
44
+ ::I18n.t('skip_to_first_child', :scope => 'refinery.admin.pages.page')
45
+ end if page.skip_to_first_child?
46
+
47
+ meta_information << content_tag(:span, :class => 'label') do
48
+ ::I18n.t('redirected', :scope => 'refinery.admin.pages.page')
49
+ end if page.link_url?
50
+
43
51
  meta_information << content_tag(:span, :class => 'label notice') do
44
52
  ::I18n.t('draft', :scope => 'refinery.admin.pages.page')
45
53
  end if page.draft?
@@ -1,3 +1,5 @@
1
+ require 'diffy'
2
+
1
3
  module Refinery
2
4
  module Pages
3
5
  # Knows how to build the html for a section. A section is part of the visible html, that has
@@ -48,7 +50,7 @@ module Refinery
48
50
  "no_#{id}"
49
51
  end
50
52
 
51
- protected
53
+ protected
52
54
 
53
55
  def content_html(can_use_fallback)
54
56
  override_html.presence || html_from_fallback(can_use_fallback)
@@ -58,17 +60,49 @@ module Refinery
58
60
  fallback_html.presence if can_use_fallback
59
61
  end
60
62
 
61
- private
63
+ private
62
64
 
63
65
  attr_writer :id, :fallback_html, :hidden
64
66
 
65
67
  def wrap_content_in_tag(content)
66
- content = sanitize(content,
67
- tags: Refinery::Pages::whitelist_elements,
68
- attributes: Refinery::Pages::whitelist_attributes
69
- )
70
- content_tag(:section, content_tag(:div, content, :class => 'inner'), :id => id)
68
+ content_tag(:section, content_tag(:div, sanitize_content(content), :class => 'inner'), :id => id)
69
+ end
70
+
71
+ def sanitize_content(input)
72
+ output = sanitize(input, scrubber: CustomScrubber.new(Refinery::Pages::whitelist_elements,
73
+ Refinery::Pages::whitelist_attributes))
74
+
75
+ if input != output
76
+ warning = "\n-- SANITIZED CONTENT WARNING --\n"
77
+ warning << "Refinery::Pages::SectionPresenter#wrap_content_in_tag\n"
78
+ warning << "HTML attributes and/or elements content has been sanitized\n"
79
+ warning << "#{::Diffy::Diff.new(input, output).to_s(:color)}\n"
80
+ warn warning
81
+ end
82
+
83
+ return output
84
+ end
85
+ end
86
+
87
+ class CustomScrubber < Rails::Html::PermitScrubber
88
+ def initialize(tags, attributes)
89
+ @direction = :bottom_up
90
+ @tags = tags
91
+ @attributes = attributes
92
+ end
93
+
94
+ def allowed_node?(node)
95
+ tags.include?(node.name)
96
+ end
97
+
98
+ def skip_node?(node)
99
+ node.text?
100
+ end
101
+
102
+ def scrub_attribute?(name)
103
+ attributes.exclude?(name) && name !~ /\Adata-[\w-]+\z/
71
104
  end
105
+
72
106
  end
73
107
  end
74
108
  end
@@ -4,7 +4,7 @@
4
4
  delete_url = refinery.admin_delete_page_path(page.nested_url)
5
5
  delete_options = {
6
6
  class: "cancel confirm-delete",
7
- data: {confirm: t('message', scope: 'refinery.admin.delete', title: page_title_with_translations(page))}
7
+ data: {confirm: t('message', scope: 'refinery.admin.delete', title: translated_field(page, :title))}
8
8
  }
9
9
  %>
10
10
 
@@ -11,7 +11,7 @@
11
11
  :rel => page_link.title,
12
12
  :class => 'page_link'
13
13
  }.merge(link_args) do %>
14
- <%= page_title_with_translations page_link %>
14
+ <%= translated_field(page_link, :title) %>
15
15
  <%= page_meta_information page_link %>
16
16
  <% end %>
17
17
  </li>
@@ -37,9 +37,11 @@ en:
37
37
  new: Add a new child page
38
38
  expand_collapse: Expand or collapse sub pages
39
39
  page:
40
- view_live_html: View this page live <br/><em>(opens in a new window)</em>
41
- hidden: hidden
42
40
  draft: draft
41
+ hidden: hidden
42
+ redirected: Redirected
43
+ skip_to_first_child: Skip to first child
44
+ view_live_html: View this page live <br/><em>(opens in a new window)</em>
43
45
  form:
44
46
  preview: Preview
45
47
  preview_changes: Preview your changes before making them live
@@ -3,7 +3,6 @@ ru:
3
3
  plugins:
4
4
  refinery_pages:
5
5
  title: Страницы
6
- article: feminine
7
6
  description: Управление страницами с содержимым
8
7
  admin:
9
8
  pages_dialogs:
@@ -38,14 +37,17 @@ ru:
38
37
  new: Добавить новую подстраницу
39
38
  expand_collapse: Развернуть или свернуть подстраницу
40
39
  page:
41
- view_live_html: Показать эту страницу вживую <br/><em>(откроется в новом окне)</em>
42
- hidden: скрытая
43
40
  draft: черновик
41
+ hidden: скрытая
42
+ redirected: Перенаправлена
43
+ skip_to_first_child: Пропуск страницы верхнего уровня
44
+ view_live_html: Показать эту страницу вживую <br/><em>(откроется в новом окне)</em>
44
45
  form:
45
46
  preview: Посмотреть
46
47
  preview_changes: Посмотреть свои изменения перед сохранением
47
48
  form_new_page_parts:
48
49
  title: Заголовок
50
+ slug: Slug
49
51
  form_page_parts:
50
52
  create_content_section: Добавить колонку
51
53
  delete_content_section: Удалить колонку
@@ -66,7 +66,13 @@ Refinery::Pages.configure do |config|
66
66
 
67
67
  # config.show_title_in_body = <%= Refinery::Pages.show_title_in_body.inspect %>
68
68
 
69
+ # You can add new HTML elements not already supported by Loofah::HTML5::WhiteList::ALLOWED_ELEMENTS
70
+ # For more information on whitelist see ALLOWED_ELEMENTS
71
+ # (https://github.com/flavorjones/loofah/blob/v2.0.3/lib/loofah/html5/whitelist.rb#L151)
69
72
  # config.add_whitelist_elements = <%= Refinery::Pages.add_whitelist_elements.inspect %>
70
-
73
+
74
+ # You can add new HTML attributes not already supported by Loofah::HTML5::WhiteList::ALLOWED_ATTRIBUTES
75
+ # For more information on whitelist see ALLOWED_ATTRIBUTES
76
+ # (https://github.com/flavorjones/loofah/blob/v2.0.3/lib/loofah/html5/whitelist.rb#L152)
71
77
  # config.add_whitelist_attributes = <%= Refinery::Pages.add_whitelist_attributes.inspect %>
72
78
  end
@@ -23,6 +23,7 @@ module Refinery
23
23
  self.cache_pages_full = false
24
24
  self.layout_template_whitelist = ["application"]
25
25
  self.add_whitelist_elements = %w[ source track ]
26
+ # Note: "data-" attributes are whitelisted by default. See https://github.com/refinery/refinerycms/pull/3187
26
27
  self.add_whitelist_attributes = %w[ kind srclang placeholder controls ]
27
28
 
28
29
 
@@ -26,6 +26,12 @@ Gem::Specification.new do |s|
26
26
  s.add_dependency 'refinerycms-core', version
27
27
  s.add_dependency 'babosa', '!= 0.3.6'
28
28
  s.add_dependency 'speakingurl-rails', '~> 8.0.0'
29
+ s.add_dependency 'diffy', '~> 3.1.0'
29
30
 
30
31
  s.required_ruby_version = Refinery::Version.required_ruby_version
32
+
33
+ s.cert_chain = [File.expand_path("../../certs/parndt.pem", __FILE__)]
34
+ if $0 =~ /gem\z/ && ARGV.include?("build") && ARGV.include?(__FILE__)
35
+ s.signing_key = File.expand_path("~/.ssh/gem-private_key.pem")
36
+ end
31
37
  end
@@ -193,16 +193,19 @@ module Refinery
193
193
  end
194
194
 
195
195
  describe "edit/update" do
196
- before do
197
- Page.create :title => "Update me"
196
+ let(:updateable_page_parent) { Page.create title: "Parent page" }
197
+ let!(:updateable_page) {
198
+ updateable_page_parent.children.create title: "Update me"
199
+ }
198
200
 
201
+ before do
199
202
  visit refinery.admin_pages_path
200
203
  expect(page).to have_content("Update me")
201
204
  end
202
205
 
203
206
  context 'when saving and returning to index' do
204
- it "updates page", js:true do
205
- find('a[tooltip="Edit this page"]').trigger(:click)
207
+ it "updates page", js: true do
208
+ find("a[href$='#{updateable_page.slug}/edit']").trigger(:click)
206
209
 
207
210
  fill_in "Title", :with => "Updated"
208
211
  find("#submit_button").click
@@ -211,25 +214,33 @@ module Refinery
211
214
  end
212
215
  end
213
216
 
214
- context 'when saving and continuing to edit' do
217
+ context 'when saving and continuing to edit', js: true do
215
218
  before :each do
216
- expect(page).to have_selector('a[tooltip^=Edit]', visible: true)
217
- find('a[tooltip^=Edit]').click
219
+ expect(page).to have_selector("a[href$='#{updateable_page.slug}/edit']", visible: true)
220
+ find("a[href$='#{updateable_page.slug}/edit']").click
218
221
 
219
- fill_in "Title", :with => "Updated"
222
+ fill_in "Title", :with => "Updated you"
220
223
  find("#submit_continue_button").click
221
224
  find('#flash').visible?
222
225
  end
223
226
 
224
- it "updates page", js: true do
225
- expect(page).to have_content("'Updated' was successfully updated.")
227
+ it "updates page" do
228
+ expect(page).to have_content("'Updated you' was successfully updated.")
229
+ end
230
+
231
+ # Regression test for https://github.com/refinery/refinerycms/issues/3179
232
+ # We expect this to end with /updated-you rather than /updated%2Fyou
233
+ it "doesn't have an encoded URL" do
234
+ updateable_page.reload # the slug will be different now
235
+ expect(page).not_to have_selector("form[action$='%2F#{updateable_page.slug}']")
236
+ expect(page).to have_selector("form[action$='/#{updateable_page.slug}']")
226
237
  end
227
238
 
228
239
  # Regression test for https://github.com/refinery/refinerycms/issues/1892
229
240
  context 'when saving to exit (a second time)' do
230
- it 'updates page', js: true do
241
+ it 'updates page' do
231
242
  find("#submit_button").click
232
- expect(page).to have_content("'Updated' was successfully updated.")
243
+ expect(page).to have_content("'Updated you' was successfully updated.")
233
244
  end
234
245
  end
235
246
  end
@@ -332,6 +332,7 @@ module Refinery
332
332
 
333
333
  within ".active * > .selected a" do
334
334
  expect(page).to have_content(child_page.title)
335
+ expect(page).to_not have_content(::I18n.t('skip_to_first_child', scope: 'refinery.skip_to_first_child_page_message'))
335
336
  end
336
337
  end
337
338
  end
@@ -63,6 +63,26 @@ module Refinery
63
63
  end
64
64
  end
65
65
 
66
+ context "when skip_to_first_child is true" do
67
+ it "adds 'skip to first child' label" do
68
+ page.skip_to_first_child = true
69
+
70
+ expect(helper.page_meta_information(page)).to eq(
71
+ %Q{<span class="label">#{::I18n.t('refinery.admin.pages.page.skip_to_first_child')}</span>}
72
+ )
73
+ end
74
+ end
75
+
76
+ context "when link_url is present" do
77
+ it "adds 'redirected' label" do
78
+ page.link_url = '/redirect'
79
+
80
+ expect(helper.page_meta_information(page)).to eq(
81
+ %Q{<span class="label">#{::I18n.t('refinery.admin.pages.page.redirected')}</span>}
82
+ )
83
+ end
84
+ end
85
+
66
86
  context "when draft is true" do
67
87
  it "adds 'draft' label" do
68
88
  page.draft = true
@@ -2,8 +2,6 @@ require "spec_helper"
2
2
 
3
3
  module Refinery
4
4
  module Pages
5
-
6
-
7
5
  describe SectionPresenter do
8
6
  it "can build a css class for when it is not present based on id" do
9
7
  section = SectionPresenter.new(:fallback_html => 'foobar', :id => 'mynode')
@@ -28,6 +26,14 @@ module Refinery
28
26
  end
29
27
 
30
28
  describe "when building html for a section" do
29
+ before do
30
+ @errors = StringIO.new
31
+ @old_err = $stderr
32
+ $stderr = @errors
33
+ end
34
+
35
+ after(:each) { $stderr = @old_err }
36
+
31
37
  it "wont show a hidden section" do
32
38
  section = SectionPresenter.new(:fallback_html => 'foobar', :hidden => true)
33
39
  expect(section.has_content?(true)).to be_falsey
@@ -47,7 +53,6 @@ module Refinery
47
53
  expect(section.wrapped_html(true)).to xml_eq('<section id="mynode"><div class="inner">foobar</div></section>')
48
54
  end
49
55
 
50
-
51
56
  # Regression tests for https://github.com/refinery/refinerycms-inquiries/issues/168
52
57
  describe "#whitelist_elements" do
53
58
  context "when an element is not in a whitelist" do
@@ -95,6 +100,28 @@ module Refinery
95
100
  )
96
101
  end
97
102
  end
103
+
104
+ context 'data attributes' do
105
+ it 'all data attributes passed thru' do
106
+ section = SectionPresenter.new
107
+ section.override_html = %Q{<a data-foo-bar="value"></a>}
108
+ expect(section.wrapped_html(true)).to xml_eq(
109
+ %Q{<section><div class="inner"><a data-foo-bar="value"></a></div></section>}
110
+ )
111
+ end
112
+ end
113
+ end
114
+
115
+ describe "#sanitize_content" do
116
+ it "shows a sanitized content warning" do
117
+ section = SectionPresenter.new
118
+ section.override_html = %Q{<dummy></dummy>}
119
+ section.wrapped_html(true)
120
+ @errors.rewind
121
+ expect(@errors.read).to eq(
122
+ %Q{\n-- SANITIZED CONTENT WARNING --\nRefinery::Pages::SectionPresenter#wrap_content_in_tag\nHTML attributes and/or elements content has been sanitized\n\e[31m-<dummy></dummy>\e[0m\n\\n\n}
123
+ )
124
+ end
98
125
  end
99
126
 
100
127
  describe "if allowed to use fallback html" do
data.tar.gz.sig ADDED
@@ -0,0 +1,2 @@
1
+ O ��������w�]�!3|�e�umğ�3�C�w�c6�^����<�F��n#�5�2ě�̎��K��!�*6��{:Rn�ބ~���_����i��K����Q.�y���fC�|�;��T'F+i����GY���%�;|�yŬ���� 
2
+ xU�ꭙc�3����\��$��u&���+Pե#i�ua��g�GL��F�Z�� V��S���r)�Sb�n��[��!�3W.oɸ�m��"��9�x
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: refinerycms-pages
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.3
4
+ version: 3.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Philip Arndt
@@ -9,8 +9,30 @@ authors:
9
9
  - Rob Yurkowski
10
10
  autorequire:
11
11
  bindir: bin
12
- cert_chain: []
13
- date: 2016-04-27 00:00:00.000000000 Z
12
+ cert_chain:
13
+ - |
14
+ -----BEGIN CERTIFICATE-----
15
+ MIIDhjCCAm6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBNMQ0wCwYDVQQDDARnZW1z
16
+ MREwDwYKCZImiZPyLGQBGRYBcDEVMBMGCgmSJomT8ixkARkWBWFybmR0MRIwEAYK
17
+ CZImiZPyLGQBGRYCaW8wHhcNMTYwNjEwMDMwNjQyWhcNMTcwNjEwMDMwNjQyWjBN
18
+ MQ0wCwYDVQQDDARnZW1zMREwDwYKCZImiZPyLGQBGRYBcDEVMBMGCgmSJomT8ixk
19
+ ARkWBWFybmR0MRIwEAYKCZImiZPyLGQBGRYCaW8wggEiMA0GCSqGSIb3DQEBAQUA
20
+ A4IBDwAwggEKAoIBAQDMLLiiRX/NrRDQxcNO/bPNe51IhKeyACDjTTx0VGCG696t
21
+ qdD23FjUrAYuQTW5P7Auh9qdcCnvPHJSwf31m+EGTshy/hcNYz2k/mrbwAfdytv3
22
+ GAR+sFnMYtWvVQNeHBWXIaYMiSDP0WtbT6QqQx3SuA6ZpXNXD1dbm64MzHgMHqXP
23
+ uHnLf2s0VCnTLorPH2J6CO5Y+Sx+IBqJi9/nO2oEEIXQCQRLgRevHk+TovDisW5V
24
+ OMEPX7fo29R5J2T7mjkNLGJ5Ae1KiU9A60LsMco37HMWE8DM90pg1ues5tg6MfJT
25
+ yuX4N0rJWdIC5ciHDsyJ4pi21s8fdUulk0YmJALDAgMBAAGjcTBvMAkGA1UdEwQC
26
+ MAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBSqXg48+kmcdOxIrkZhhgSV1flD1jAa
27
+ BgNVHREEEzARgQ9nZW1zQHAuYXJuZHQuaW8wGgYDVR0SBBMwEYEPZ2Vtc0BwLmFy
28
+ bmR0LmlvMA0GCSqGSIb3DQEBBQUAA4IBAQBSSS4nOXpPPMdAK4ApGHxbzS+/u77p
29
+ V8gLBJX4hKMpbMNmdI+n6YsqvG6kMljgYBamucfrAkKdmHWn9ydST3o8RQAcYxS8
30
+ bz49gD3c4Nm4P6eEVKFmebO9/MoiM7rMb0lk/xH1drtey/9ulohrg8Dz+BoQJ+9T
31
+ m2lJzojOU7w461lPVZtKlDlseu68KvEQ2AdUBBa1b6w3S/EFkcdhErOT7dyQpePI
32
+ +wsbjPvdIWsjWQMn6MasZYIVTnenwP2jg+z9HSNxW0NL2vZx8VabpsWGWfrb+koj
33
+ rE1h12GTgwaC3r9FOkdnSpClgPYAzTTCJ8kD74qO2zC9pGegrUXdWFM6
34
+ -----END CERTIFICATE-----
35
+ date: 2016-07-18 00:00:00.000000000 Z
14
36
  dependencies:
15
37
  - !ruby/object:Gem::Dependency
16
38
  name: friendly_id
@@ -86,14 +108,14 @@ dependencies:
86
108
  requirements:
87
109
  - - '='
88
110
  - !ruby/object:Gem::Version
89
- version: 3.0.3
111
+ version: 3.0.4
90
112
  type: :runtime
91
113
  prerelease: false
92
114
  version_requirements: !ruby/object:Gem::Requirement
93
115
  requirements:
94
116
  - - '='
95
117
  - !ruby/object:Gem::Version
96
- version: 3.0.3
118
+ version: 3.0.4
97
119
  - !ruby/object:Gem::Dependency
98
120
  name: babosa
99
121
  requirement: !ruby/object:Gem::Requirement
@@ -122,6 +144,20 @@ dependencies:
122
144
  - - "~>"
123
145
  - !ruby/object:Gem::Version
124
146
  version: 8.0.0
147
+ - !ruby/object:Gem::Dependency
148
+ name: diffy
149
+ requirement: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - "~>"
152
+ - !ruby/object:Gem::Version
153
+ version: 3.1.0
154
+ type: :runtime
155
+ prerelease: false
156
+ version_requirements: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - "~>"
159
+ - !ruby/object:Gem::Version
160
+ version: 3.1.0
125
161
  description: The default content extension of Refinery CMS. This extension handles
126
162
  the administration and display of user-editable pages.
127
163
  email: refinerycms@p.arndt.io
metadata.gz.sig ADDED
Binary file