releaf-content 1.1.22 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1637dcdeaab2669dc82f88448544a9a21b1b36095373431baf9cf8aae3c83746
4
- data.tar.gz: f509768c07ac56b563258d2a2f4501d6396cd4f1d8a1908057bc6d0b60e74256
3
+ metadata.gz: 900ae0e38ceb2c4d2a99f33aeac58222a7d3bf9dd3101527d00b52048754f951
4
+ data.tar.gz: 7cc316c4cc9351d81a7012debc8c26c1df209c8b37c95ab9e702377ccf56f247
5
5
  SHA512:
6
- metadata.gz: '094e38b9d0064c32b01157e7a1a2165442d806100c0882775a7ea988687f831209bbdd8b19c0aef760705195ae3ef0e2ecc6494b1166027dabd333d037bd7f64'
7
- data.tar.gz: e139db290880054b924b112ec972aeee2cdf059ec62e213c44c4dab1ff7a166c4f5ba383f004e2ffbc26e41f88e0abd1f0d813e58df0de7af1fe1e8b808e5438
6
+ metadata.gz: 889dd3be635bc6a64c219a700253f2c46770624314af350c072566e07c168b86186e5fae5d3c63cae2c7f107d6c10a9f50a9b893a9c7feb3c6701f9e4787669d
7
+ data.tar.gz: f17de37b5b96ab4dcfe50c71802076b2e96897a2f524975d834f4ccf47740986ec24aaf12b0f4e80863ccd1623dbc7dbbd9e74dd95ae8a05e97458f85fa16bb1
@@ -0,0 +1,2 @@
1
+ //= link controllers/releaf/content/nodes.css
2
+ //= link controllers/releaf/content/nodes.js
@@ -76,17 +76,14 @@ jQuery(function()
76
76
  slug_input.trigger('sluggenerate');
77
77
  });
78
78
 
79
- if (name_input.val() === '')
79
+ // bind onchange slug generation only if starting out with an empty name
80
+ name_input.on('change', function()
80
81
  {
81
- // bind onchange slug generation only if starting out with an empty name
82
- name_input.on('change', function()
82
+ if(slug_input.val().length === 0)
83
83
  {
84
- if(slug_input.val().length === 0)
85
- {
86
- slug_input.trigger('sluggenerate');
87
- }
88
- });
89
- }
84
+ slug_input.trigger('sluggenerate');
85
+ }
86
+ });
90
87
  }
91
88
 
92
89
  });
@@ -10,7 +10,7 @@ class Releaf::Content::NodesController < Releaf::ActionController
10
10
  tmp_resource.name = params[:name]
11
11
  tmp_resource.reasign_slug
12
12
 
13
- render text: tmp_resource.slug
13
+ render plain: tmp_resource.slug
14
14
  end
15
15
 
16
16
  def content_type_dialog
@@ -1,7 +1,7 @@
1
1
  module Releaf::Content
2
2
  class Engine < ::Rails::Engine
3
- initializer 'precompile', group: :all do |app|
4
- app.config.assets.precompile += %w(controllers/releaf/content/*)
3
+ initializer 'releaf_content.assets_precompile', group: :all do |app|
4
+ app.config.assets.precompile << "releaf_content_manifest.js"
5
5
  end
6
6
  end
7
7
  end
@@ -218,14 +218,14 @@ module Releaf::Content
218
218
  scope :active, ->() { where(active: true) }
219
219
 
220
220
  validates_presence_of :name, :slug, :content_type
221
- validates_uniqueness_of :slug, scope: :parent_id
221
+ validates_uniqueness_of :slug, scope: :parent_id, case_sensitive: false
222
222
  validates_length_of :name, :slug, :content_type, maximum: 255
223
- validates_uniqueness_of :locale, scope: :parent_id, if: :validate_root_locale_uniqueness?
223
+ validates_uniqueness_of :locale, scope: :parent_id, if: :validate_root_locale_uniqueness?, case_sensitive: false
224
224
  validates_presence_of :parent, if: :parent_id?
225
225
  validate :validate_parent_node_is_not_self
226
226
  validate :validate_parent_is_not_descendant
227
227
  validate :validate_slug
228
- belongs_to :content, polymorphic: true, dependent: :destroy
228
+ belongs_to :content, polymorphic: true, dependent: :destroy, required: false
229
229
  accepts_nested_attributes_for :content
230
230
 
231
231
  after_save :update_settings_timestamp, unless: :prevent_auto_update_settings_timestamp?
@@ -57,7 +57,6 @@ module Releaf::Content
57
57
  # @return [Array] array of Content::Route objects
58
58
  def self.for(node_class, node_content_class, default_controller)
59
59
  node_class = node_class.constantize if node_class.is_a? String
60
-
61
60
  Releaf::Content::BuildRouteObjects.call(
62
61
  node_class: node_class,
63
62
  node_content_class: node_content_class,
@@ -10,7 +10,7 @@ describe Releaf::Content::Builders::ActionDialog, type: :class do
10
10
  def action; end
11
11
  end
12
12
 
13
- let(:template){ ConfirmDestroyDialogTestHelper.new }
13
+ let(:template){ ConfirmDestroyDialogTestHelper.new(ActionView::LookupContext.new(nil), {}, nil) }
14
14
  let(:object){ Book.new }
15
15
  let(:subject){ ActionDialogIncluder.new(template) }
16
16
 
@@ -9,7 +9,7 @@ describe Releaf::Content::Nodes::ContentFormBuilder, type: :class do
9
9
  def generate_url_releaf_content_nodes_path(args); end
10
10
  end
11
11
 
12
- let(:template){ FormBuilderTestHelper.new }
12
+ let(:template){ FormBuilderTestHelper.new(ActionView::LookupContext.new(nil), {}, nil) }
13
13
  let(:node){ Node.new(content_type: "TextPage", slug: "b", id: 2,
14
14
  parent: Node.new(content_type: "TextPage", slug: "a", id: 1)) }
15
15
  let(:object){ node.build_content }
@@ -9,7 +9,7 @@ describe Releaf::Content::Nodes::FormBuilder, type: :class do
9
9
  def generate_url_releaf_content_nodes_path(args); end
10
10
  end
11
11
 
12
- let(:template){ FormBuilderTestHelper.new }
12
+ let(:template){ FormBuilderTestHelper.new(ActionView::LookupContext.new(nil), {}, nil) }
13
13
  let(:object){ Node.new(content_type: "TextPage", slug: "b", id: 2,
14
14
  parent: Node.new(content_type: "TextPage", slug: "a", id: 1)) }
15
15
  let(:subject){ described_class.new(:resource, object, template, {}) }
@@ -7,7 +7,7 @@ describe Releaf::Content::Nodes::ToolboxBuilder, type: :class do
7
7
  include Releaf::ApplicationHelper
8
8
  end
9
9
 
10
- let(:template){ NodeToolboxBuilderTestHelper.new }
10
+ let(:template){ NodeToolboxBuilderTestHelper.new(ActionView::LookupContext.new(nil), {}, nil) }
11
11
  subject { described_class.new(template) }
12
12
 
13
13
  let(:node){ Node.new(content_type: "TextPage", slug: "a", id: 99) }
@@ -423,8 +423,8 @@ describe "Nodes services (copy, move)" do
423
423
  expect_different_values(original_url, copied_file_urls[key])
424
424
 
425
425
  [original_url, copied_file_urls[key]].each do |file_url|
426
- visit file_url
427
- expect(page.status_code).to eq 200
426
+ tmpfile = download_file(file_url)
427
+ expect(Digest::SHA256.file(tmpfile)).to eq(Digest::SHA256.file(dummy_file_path))
428
428
  end
429
429
  end
430
430
 
@@ -284,7 +284,7 @@ describe "Nodes", js: true, with_tree: true, with_root: true do
284
284
 
285
285
  open_toolbox_dialog 'Add child', @lv_root, ".view-index .collection li"
286
286
  within_dialog do
287
- click_link("Text page")
287
+ click_link("Text page")
288
288
  end
289
289
 
290
290
  fill_in "Slug", with: "some-slug"
@@ -293,6 +293,7 @@ describe "Nodes", js: true, with_tree: true, with_root: true do
293
293
 
294
294
  fill_in "Slug", with: ""
295
295
  fill_in 'Name', with: "About them"
296
+ blur_from "Name"
296
297
  expect(page).to have_field("Slug", with: "about-them")
297
298
 
298
299
  # fill text to allow text page save
@@ -1,6 +1,6 @@
1
1
  require "rails_helper"
2
2
 
3
- describe Node do
3
+ describe Node, type: :model do
4
4
  class PlainNode < ActiveRecord::Base
5
5
  include Releaf::Content::Node
6
6
  self.table_name = "nodes"
@@ -9,7 +9,7 @@ describe Node do
9
9
  let(:plain_subject){ PlainNode.new }
10
10
 
11
11
  it { is_expected.to accept_nested_attributes_for(:content) }
12
- it { is_expected.to belong_to(:content) }
12
+ it { is_expected.to belong_to(:content).required(false) }
13
13
 
14
14
  it "includes Releaf::Content::Node module" do
15
15
  expect( Node.included_modules ).to include Releaf::Content::Node
@@ -19,7 +19,7 @@ describe Node do
19
19
  it { is_expected.to validate_presence_of(:name) }
20
20
  it { is_expected.to validate_presence_of(:slug) }
21
21
  it { is_expected.to validate_presence_of(:content_type) }
22
- it { is_expected.to validate_uniqueness_of(:slug).scoped_to(:parent_id) }
22
+ it { is_expected.to validate_uniqueness_of(:slug).scoped_to(:parent_id).case_insensitive }
23
23
  it { is_expected.to validate_length_of(:name).is_at_most(255) }
24
24
  it { is_expected.to validate_length_of(:slug).is_at_most(255) }
25
25
  end
@@ -31,10 +31,12 @@ describe Node do
31
31
  end
32
32
  end
33
33
 
34
- describe ".active (scope)" do
34
+ describe ":active scope" do
35
35
  it "returns active nodes" do
36
- expect( Node ).to receive(:where).with(active: true).and_return('foo')
37
- expect( Node.active ).to eq 'foo'
36
+ item_1 = create(:node, active: true, locale: "en")
37
+ item_2 = create(:node, active: false, locale: "de")
38
+ item_3 = create(:node, active: true, locale: "lv")
39
+ expect(Node.active).to eq [item_1, item_3]
38
40
  end
39
41
  end
40
42
 
@@ -519,7 +521,7 @@ describe Node do
519
521
 
520
522
  context "when #prevent_auto_update_settings_timestamp? is false" do
521
523
  it "is called after save" do
522
- node = FactoryGirl.build(:node)
524
+ node = build(:node)
523
525
  allow( node ).to receive(:prevent_auto_update_settings_timestamp?).and_return(false)
524
526
  expect( node ).to receive(:update_settings_timestamp).and_call_original
525
527
  node.save!
@@ -528,7 +530,7 @@ describe Node do
528
530
 
529
531
  context "when #prevent_auto_update_settings_timestamp? is true" do
530
532
  it "is not called after save" do
531
- node = FactoryGirl.build(:node)
533
+ node = build(:node)
532
534
  allow( node ).to receive(:prevent_auto_update_settings_timestamp?).and_return(true)
533
535
  expect( node ).to_not receive(:update_settings_timestamp)
534
536
  node.save!
@@ -1,7 +1,7 @@
1
1
  require "rails_helper"
2
2
 
3
3
  describe Releaf::Content::Route do
4
- let(:node_route) { FactoryGirl.build(:node_route, node_class: Node, node_id: 12, locale: "en", path: "/en") }
4
+ let(:node_route) { FactoryBot.build(:node_route, node_class: Node, node_id: 12, locale: "en", path: "/en") }
5
5
 
6
6
 
7
7
  describe ".default_controller" do
@@ -165,7 +165,8 @@ describe Releaf::Content::NodeMapper do
165
165
  it "uses the custom path for public website route" do
166
166
  routes.draw do
167
167
  node_routes_for(TextPage) do |route|
168
- get 'home_pages#show', path: "#{route.path}/abc/:my_id"
168
+ route.path += "/abc/:my_id"
169
+ get 'home_pages#show'
169
170
  end
170
171
  end
171
172
 
@@ -53,7 +53,7 @@ describe Releaf::Content::Node::Copy do
53
53
 
54
54
  # make sure the files are stored and exist
55
55
  expect(copy.content.top_banner.path).to start_with Dragonfly.app.datastore.root_path
56
- expect(node.content.top_banner.path).to start_with Dragonfly.app.datastore.root_path
56
+ expect(node.content.class.find(node.content.id).top_banner.path).to start_with Dragonfly.app.datastore.root_path
57
57
  expect(copy.content.top_banner.path).to_not eq node.content.top_banner.path
58
58
  end
59
59
  end
@@ -1,7 +1,7 @@
1
1
  require 'rails_helper'
2
2
 
3
3
  describe Releaf::Content::Node::ParentValidator do
4
- let!(:root_node) { FactoryGirl.create(:node, content_type: 'HomePage') }
4
+ let!(:root_node) { FactoryBot.create(:node, content_type: 'HomePage') }
5
5
 
6
6
  class DummyNodeParentValidatorModel < ActiveRecord::Base
7
7
  acts_as_node
@@ -25,8 +25,8 @@ describe Releaf::Content::Node::ParentValidator do
25
25
 
26
26
  context "when parent is valid" do
27
27
  it "doesn't add error" do
28
- parent = DummyNodeParentValidatorNode.create!( FactoryGirl.attributes_for(:node, content_type: 'DummyNodeParentValidator1Controller') )
29
- child = DummyNodeParentValidatorNode.new( FactoryGirl.attributes_for(:node, content_type: 'DummyNodeParentValidatorModel', parent_id: parent.id) )
28
+ parent = DummyNodeParentValidatorNode.create!( FactoryBot.attributes_for(:node, content_type: 'DummyNodeParentValidator1Controller') )
29
+ child = DummyNodeParentValidatorNode.new( FactoryBot.attributes_for(:node, content_type: 'DummyNodeParentValidatorModel', parent_id: parent.id) )
30
30
 
31
31
  expect( child ).to be_valid
32
32
  end
@@ -34,8 +34,8 @@ describe Releaf::Content::Node::ParentValidator do
34
34
 
35
35
  context "when parent is invalid" do
36
36
  it "adds error on content_type" do
37
- parent = DummyNodeParentValidatorNode.create!( FactoryGirl.attributes_for(:node, content_type: 'DummyNodeParentValidator2Controller') )
38
- child = DummyNodeParentValidatorNode.new( FactoryGirl.attributes_for(:node, content_type: 'DummyNodeParentValidatorModel', parent_id: parent.id) )
37
+ parent = DummyNodeParentValidatorNode.create!( FactoryBot.attributes_for(:node, content_type: 'DummyNodeParentValidator2Controller') )
38
+ child = DummyNodeParentValidatorNode.new( FactoryBot.attributes_for(:node, content_type: 'DummyNodeParentValidatorModel', parent_id: parent.id) )
39
39
 
40
40
  expect( child ).to be_invalid
41
41
  expect( child.errors[:content_type].size ).to eq(1)
@@ -46,8 +46,8 @@ describe Releaf::Content::Node::ParentValidator do
46
46
 
47
47
  context "when content_type is not in child list" do
48
48
  it "doesn't add error" do
49
- parent = DummyNodeParentValidatorNode.create!( FactoryGirl.attributes_for(:node, content_type: 'DummyNodeParentValidator1Controller') )
50
- child = DummyNodeParentValidatorNode.new( FactoryGirl.attributes_for(:node, content_type: 'DummyNodeParentValidator2Controller', parent_id: parent.id) )
49
+ parent = DummyNodeParentValidatorNode.create!( FactoryBot.attributes_for(:node, content_type: 'DummyNodeParentValidator1Controller') )
50
+ child = DummyNodeParentValidatorNode.new( FactoryBot.attributes_for(:node, content_type: 'DummyNodeParentValidator2Controller', parent_id: parent.id) )
51
51
 
52
52
  expect( child ).to be_valid
53
53
  end
@@ -19,11 +19,11 @@ describe Releaf::Content::Node::RootValidator do
19
19
 
20
20
 
21
21
  def create_node *params
22
- DummyRootValidatorNode.create!( FactoryGirl.attributes_for(:node, *params) )
22
+ DummyRootValidatorNode.create!( FactoryBot.attributes_for(:node, *params) )
23
23
  end
24
24
 
25
25
  def build_node *params
26
- DummyRootValidatorNode.new( FactoryGirl.attributes_for(:node, *params) )
26
+ DummyRootValidatorNode.new( FactoryBot.attributes_for(:node, *params) )
27
27
  end
28
28
 
29
29
  context "when node is allowed to be root node" do
@@ -30,11 +30,11 @@ describe Releaf::Content::Node::SinglenessValidator do
30
30
 
31
31
 
32
32
  def create_node *params
33
- DummySinglenessValidatorNode.create!( FactoryGirl.attributes_for(:node, *params) )
33
+ DummySinglenessValidatorNode.create!( FactoryBot.attributes_for(:node, *params) )
34
34
  end
35
35
 
36
36
  def build_node *params
37
- DummySinglenessValidatorNode.new( FactoryGirl.attributes_for(:node, *params) )
37
+ DummySinglenessValidatorNode.new( FactoryBot.attributes_for(:node, *params) )
38
38
  end
39
39
 
40
40
  let!(:root_node) { create_node(content_type: 'HomePage') }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: releaf-content
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.22
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - CubeSystems
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-05-26 00:00:00.000000000 Z
11
+ date: 2020-10-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: releaf-core
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 1.1.22
19
+ version: 2.0.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 1.1.22
26
+ version: 2.0.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: stringex
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -58,14 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 2.2.2
61
+ version: '3.0'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 2.2.2
68
+ version: '3.0'
69
69
  description: Content subsystem for releaf
70
70
  email: info@cubesystems.lv
71
71
  executables: []
@@ -73,6 +73,7 @@ extensions: []
73
73
  extra_rdoc_files: []
74
74
  files:
75
75
  - LICENSE
76
+ - app/assets/config/releaf_content_manifest.js
76
77
  - app/assets/javascripts/controllers/releaf/content/nodes.js
77
78
  - app/assets/stylesheets/controllers/releaf/content/nodes.scss
78
79
  - app/builders/releaf/content/builders/action_dialog.rb
@@ -135,7 +136,7 @@ homepage: https://github.com/cubesystems/releaf
135
136
  licenses:
136
137
  - MIT
137
138
  metadata: {}
138
- post_install_message:
139
+ post_install_message:
139
140
  rdoc_options: []
140
141
  require_paths:
141
142
  - lib
@@ -150,8 +151,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
150
151
  - !ruby/object:Gem::Version
151
152
  version: '0'
152
153
  requirements: []
153
- rubygems_version: 3.0.4
154
- signing_key:
154
+ rubygems_version: 3.0.8
155
+ signing_key:
155
156
  specification_version: 4
156
157
  summary: Node and content routes support for releaf
157
158
  test_files: