releaf-content 0.2.1 → 1.0.3

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.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +19 -21
  3. data/app/assets/javascripts/{releaf/controllers → controllers}/releaf/content/nodes.js +0 -0
  4. data/app/assets/stylesheets/{releaf/controllers → controllers}/releaf/content/nodes.scss +0 -0
  5. data/app/builders/releaf/content/builders/action_dialog.rb +9 -1
  6. data/app/builders/releaf/content/builders/tree.rb +1 -1
  7. data/app/builders/releaf/content/content_type_dialog_builder.rb +2 -2
  8. data/app/builders/releaf/content/nodes/form_builder.rb +3 -3
  9. data/app/builders/releaf/content/nodes/index_builder.rb +1 -1
  10. data/app/builders/releaf/content/nodes/toolbox_builder.rb +0 -5
  11. data/app/controllers/releaf/content/nodes_controller.rb +109 -129
  12. data/app/middleware/releaf/content/routes_reloader.rb +12 -4
  13. data/app/services/releaf/content/node/copy.rb +90 -0
  14. data/app/services/releaf/content/node/move.rb +21 -0
  15. data/app/services/releaf/content/node/save_under_parent.rb +22 -0
  16. data/app/services/releaf/content/node/service.rb +17 -0
  17. data/app/validators/releaf/content/node/singleness_validator.rb +1 -24
  18. data/lib/releaf-content.rb +85 -6
  19. data/lib/releaf/content/acts_as_node.rb +0 -5
  20. data/lib/releaf/content/acts_as_node/active_record/acts/node.rb +2 -8
  21. data/lib/releaf/content/configuration.rb +61 -0
  22. data/lib/releaf/content/engine.rb +1 -34
  23. data/lib/releaf/content/node.rb +30 -101
  24. data/lib/releaf/content/node_mapper.rb +28 -2
  25. data/lib/releaf/content/route.rb +37 -25
  26. data/spec/builders/content/nodes/action_dialog_spec.rb +39 -0
  27. data/spec/builders/content/nodes/form_builder_spec.rb +47 -3
  28. data/spec/builders/content/nodes/toolbox_builder_spec.rb +1 -32
  29. data/spec/controllers/releaf/content/nodes_controller_spec.rb +42 -11
  30. data/spec/features/nodes_services_spec.rb +207 -0
  31. data/spec/features/nodes_spec.rb +328 -30
  32. data/spec/lib/releaf/content/acts_as_node_spec.rb +4 -32
  33. data/spec/lib/releaf/content/configuration_spec.rb +159 -0
  34. data/spec/lib/releaf/content/engine_spec.rb +149 -0
  35. data/spec/lib/releaf/content/node_spec.rb +66 -324
  36. data/spec/lib/releaf/content/route_spec.rb +223 -34
  37. data/spec/middleware/routes_reloader_spec.rb +62 -14
  38. data/spec/routing/node_mapper_spec.rb +223 -55
  39. data/spec/services/releaf/content/node/copy_spec.rb +115 -0
  40. data/spec/services/releaf/content/node/move_spec.rb +20 -0
  41. data/spec/services/releaf/content/node/save_under_parent_spec.rb +49 -0
  42. data/spec/services/releaf/content/node/service_spec.rb +19 -0
  43. metadata +38 -21
  44. data/app/builders/releaf/content/go_to_dialog_builder.rb +0 -9
  45. data/app/views/releaf/content/nodes/go_to_dialog.ruby +0 -1
  46. data/lib/releaf/content/builders_autoload.rb +0 -18
  47. data/releaf-content.gemspec +0 -20
@@ -0,0 +1,115 @@
1
+ require "rails_helper"
2
+
3
+ describe Releaf::Content::Node::Copy do
4
+ class DummyNodeServiceIncluder
5
+ include Releaf::Content::Node::Service
6
+ end
7
+
8
+ let(:node){ Node.new }
9
+ subject{ described_class.new(node: node, parent_id: 12) }
10
+
11
+ describe "#duplicate_content" do
12
+ let(:node) { create(:node) }
13
+
14
+ context "when content_id is blank" do
15
+ it "returns nil" do
16
+ expect( subject.duplicate_content ).to be nil
17
+ end
18
+ end
19
+
20
+ context "when content_id is not blank" do
21
+ let(:node) { create(:home_page_node) }
22
+
23
+ it "returns saved duplicated content" do
24
+ content = HomePage.new
25
+ expect( content ).to receive(:save!)
26
+ expect( node.content.class ).to receive(:new).and_return(content)
27
+ expect( subject.duplicate_content ).to eq content
28
+ end
29
+
30
+ it "reassigns dragonfly accessors" do
31
+ content = HomePage.new
32
+ expect( content ).to receive(:save!)
33
+ allow( node.content.class ).to receive(:new).and_return(content)
34
+ expect( subject ).to receive(:duplicate_content_dragonfly_attributes).with(content)
35
+ expect( subject.duplicate_content ).to eq content
36
+ end
37
+
38
+ it "doesn't return same as original content" do
39
+ result = subject.duplicate_content
40
+ expect( result ).to be_an_instance_of HomePage
41
+ expect( result.id ).to_not eq node.content_id
42
+ end
43
+ end
44
+ end
45
+
46
+ describe "#cloned_content_attributes" do
47
+ it "returns attributes without id and dragonfly attributes" do
48
+ node.content = HomePage.new(id: 42, banner_uid: "re", intro_text_html: "some text")
49
+
50
+ expect(subject.cloned_content_attributes).to have_key("intro_text_html")
51
+ expect(subject.cloned_content_attributes).not_to include(:id, :banner_uid)
52
+ end
53
+ end
54
+
55
+ describe "#duplicate_content_dragonfly_attributes" do
56
+ context "when dragonfly file is present" do
57
+ it "reassigns dragonfly accessors to given content instance from node content" do
58
+ old_content = HomePage.create(banner: File.new("releaf-core/spec/fixtures/cs.png"))
59
+ new_content = HomePage.new()
60
+ node.content = old_content
61
+
62
+ expect(new_content).to receive(:banner=).with(old_content.banner)
63
+ expect(new_content).to receive(:banner_uid=).with(nil)
64
+ subject.duplicate_content_dragonfly_attributes(new_content)
65
+ end
66
+ end
67
+
68
+ context "when dragonfly file is not present" do
69
+ it "doesn't reassigns dragonfly accessors to given content instance from node content" do
70
+ old_content = HomePage.new(banner_uid: "yy")
71
+ new_content = HomePage.new()
72
+ node.content = old_content
73
+
74
+ expect(new_content).to receive(:banner=).with(nil)
75
+ expect(new_content).to receive(:banner_uid=).with(nil)
76
+ subject.duplicate_content_dragonfly_attributes(new_content)
77
+ end
78
+ end
79
+ end
80
+
81
+ describe "#content_dragonfly_attributes" do
82
+ it "returns array of node content object dragonfly attributes" do
83
+ node.content = HomePage.new
84
+ expect(subject.content_dragonfly_attributes).to eq(["banner_uid"])
85
+ end
86
+ end
87
+
88
+ describe "#duplicate_under" do
89
+ let!(:source_node) { create(:node, locale: "lv") }
90
+ let!(:target_node) { create(:node, locale: "en") }
91
+
92
+ before do
93
+ allow_any_instance_of(Releaf::Content::Node::RootValidator).to receive(:validate)
94
+ subject.node = source_node
95
+ subject.parent_id = target_node.id
96
+ end
97
+
98
+ it "creates duplicated node under target node" do
99
+ new_node = Node.new
100
+ duplicated_content = double('content', id: 1234)
101
+ expect( Node ).to receive(:new).ordered.and_return(new_node)
102
+ expect( new_node ).to receive(:assign_attributes_from).with(source_node).ordered.and_call_original
103
+ expect( subject ).to receive(:duplicate_content).ordered.and_return(duplicated_content)
104
+ expect( new_node ).to receive(:content_id=).with(1234).ordered
105
+ expect( Releaf::Content::Node::SaveUnderParent ).to receive(:call).with(node: new_node, parent_id: target_node.id)
106
+ .ordered.and_call_original
107
+ expect(subject.duplicate_under).to eq(new_node)
108
+ end
109
+
110
+ it "doesn't update settings timestamp" do
111
+ expect( Node ).to_not receive(:updated)
112
+ subject.duplicate_under
113
+ end
114
+ end
115
+ end
@@ -0,0 +1,20 @@
1
+ require "rails_helper"
2
+
3
+ describe Releaf::Content::Node::Move do
4
+ class DummyNodeServiceIncluder
5
+ include Releaf::Content::Node::Service
6
+ end
7
+
8
+ let(:node){ Node.new }
9
+ subject{ described_class.new(node: node, parent_id: 12) }
10
+
11
+ describe "#call" do
12
+ context "when parent is same" do
13
+ it "does nothing" do
14
+ node.parent_id = 12
15
+ expect(node.class).to_not receive(:transaction)
16
+ subject.call
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,49 @@
1
+ require "rails_helper"
2
+
3
+ describe Releaf::Content::Node::SaveUnderParent do
4
+ class DummyNodeServiceIncluder
5
+ include Releaf::Content::Node::Service
6
+ end
7
+
8
+ let(:root_node){ create(:node, locale: "lv") }
9
+ let(:node){ build(:text_page_node) }
10
+ subject{ described_class.new(node: node, parent_id: root_node.id) }
11
+
12
+ describe "#call" do
13
+ it "saves node nuder node with given node_id" do
14
+ node2 = create(:text_page_node, parent: root_node)
15
+
16
+ subject.parent_id = node2.id
17
+ subject.call
18
+ expect( node ).to_not be_new_record
19
+ expect( node.parent ).to eq node2
20
+ end
21
+
22
+ it "maintains node name, updates slug and then saves record" do
23
+ expect( node ).to receive(:maintain_name).ordered.and_call_original
24
+ expect( node ).to receive(:reasign_slug).ordered.and_call_original
25
+ expect( node ).to receive(:save!).ordered.and_call_original
26
+ subject.call
27
+ end
28
+
29
+ context "when #validate_root_locale_uniqueness? returns true" do
30
+ let(:node){ root_node }
31
+
32
+ it "sets locale to nil" do
33
+ allow(node).to receive(:validate_root_locale_uniqueness?).and_return(true)
34
+ subject.parent_id = nil
35
+ expect { subject.call }.to change{ node.locale }.from("lv").to(nil)
36
+ end
37
+ end
38
+
39
+ context "when #validate_root_locale_uniqueness? returns false" do
40
+ let(:node){ root_node }
41
+
42
+ it "doesn't set locale to nil" do
43
+ allow(node).to receive(:validate_root_locale_uniqueness?).and_return(false)
44
+ subject.parent_id = nil
45
+ expect { subject.call }.to_not change{ node.locale }
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,19 @@
1
+ require "rails_helper"
2
+
3
+ describe Releaf::Content::Node::Service do
4
+ class DummyNodeServiceIncluder
5
+ include Releaf::Content::Node::Service
6
+ end
7
+
8
+ let(:node){ Node.new }
9
+ subject{ DummyNodeServiceIncluder.new(node: node) }
10
+
11
+ describe "#add_error_and_raise" do
12
+ it "adds errors to base and raise validation error" do
13
+ expect{ subject.add_error_and_raise("shit happen") }.to raise_error do |exception|
14
+ expect(exception).to be_instance_of ActiveRecord::RecordInvalid
15
+ expect(exception.record.errors[:base]).to eq(["shit happen"])
16
+ end
17
+ end
18
+ end
19
+ end
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: 0.2.1
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - CubeSystems
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-01-26 00:00:00.000000000 Z
11
+ date: 2016-10-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: releaf-core
@@ -16,42 +16,42 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 0.2.1
19
+ version: 1.0.3
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: 0.2.1
26
+ version: 1.0.3
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: stringex
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: '2.6'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
40
+ version: '2.6'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: awesome_nested_set
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
47
+ version: '3.1'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '0'
54
+ version: '3.1'
55
55
  description: Content subsystem for releaf
56
56
  email: info@cubesystems.lv
57
57
  executables: []
@@ -59,14 +59,13 @@ extensions: []
59
59
  extra_rdoc_files: []
60
60
  files:
61
61
  - LICENSE
62
- - app/assets/javascripts/releaf/controllers/releaf/content/nodes.js
63
- - app/assets/stylesheets/releaf/controllers/releaf/content/nodes.scss
62
+ - app/assets/javascripts/controllers/releaf/content/nodes.js
63
+ - app/assets/stylesheets/controllers/releaf/content/nodes.scss
64
64
  - app/builders/releaf/content/builders/action_dialog.rb
65
65
  - app/builders/releaf/content/builders/dialog.rb
66
66
  - app/builders/releaf/content/builders/tree.rb
67
67
  - app/builders/releaf/content/content_type_dialog_builder.rb
68
68
  - app/builders/releaf/content/copy_dialog_builder.rb
69
- - app/builders/releaf/content/go_to_dialog_builder.rb
70
69
  - app/builders/releaf/content/move_dialog_builder.rb
71
70
  - app/builders/releaf/content/nodes/content_form_builder.rb
72
71
  - app/builders/releaf/content/nodes/form_builder.rb
@@ -74,39 +73,50 @@ files:
74
73
  - app/builders/releaf/content/nodes/toolbox_builder.rb
75
74
  - app/controllers/releaf/content/nodes_controller.rb
76
75
  - app/middleware/releaf/content/routes_reloader.rb
76
+ - app/services/releaf/content/node/copy.rb
77
+ - app/services/releaf/content/node/move.rb
78
+ - app/services/releaf/content/node/save_under_parent.rb
79
+ - app/services/releaf/content/node/service.rb
77
80
  - app/validators/releaf/content/node/parent_validator.rb
78
81
  - app/validators/releaf/content/node/root_validator.rb
79
82
  - app/validators/releaf/content/node/singleness_validator.rb
80
83
  - app/views/releaf/content/nodes/content_type_dialog.ruby
81
84
  - app/views/releaf/content/nodes/copy_dialog.ruby
82
- - app/views/releaf/content/nodes/go_to_dialog.ruby
83
85
  - app/views/releaf/content/nodes/move_dialog.ruby
84
86
  - lib/releaf-content.rb
85
87
  - lib/releaf/content/acts_as_node.rb
86
88
  - lib/releaf/content/acts_as_node/action_controller/acts/node.rb
87
89
  - lib/releaf/content/acts_as_node/active_record/acts/node.rb
88
- - lib/releaf/content/builders_autoload.rb
90
+ - lib/releaf/content/configuration.rb
89
91
  - lib/releaf/content/engine.rb
90
92
  - lib/releaf/content/node.rb
91
93
  - lib/releaf/content/node_mapper.rb
92
94
  - lib/releaf/content/route.rb
93
95
  - lib/releaf/content/router_proxy.rb
94
- - releaf-content.gemspec
96
+ - spec/builders/content/nodes/action_dialog_spec.rb
95
97
  - spec/builders/content/nodes/content_form_builder_spec.rb
96
98
  - spec/builders/content/nodes/form_builder_spec.rb
97
99
  - spec/builders/content/nodes/toolbox_builder_spec.rb
98
100
  - spec/controllers/releaf/content/nodes_controller_spec.rb
101
+ - spec/features/nodes_services_spec.rb
99
102
  - spec/features/nodes_spec.rb
100
103
  - spec/lib/releaf/content/acts_as_node_spec.rb
104
+ - spec/lib/releaf/content/configuration_spec.rb
105
+ - spec/lib/releaf/content/engine_spec.rb
101
106
  - spec/lib/releaf/content/node_spec.rb
102
107
  - spec/lib/releaf/content/route_spec.rb
103
108
  - spec/middleware/routes_reloader_spec.rb
104
109
  - spec/routing/node_mapper_spec.rb
110
+ - spec/services/releaf/content/node/copy_spec.rb
111
+ - spec/services/releaf/content/node/move_spec.rb
112
+ - spec/services/releaf/content/node/save_under_parent_spec.rb
113
+ - spec/services/releaf/content/node/service_spec.rb
105
114
  - spec/validators/content/node/parent_validator_spec.rb
106
115
  - spec/validators/content/node/root_validator_spec.rb
107
116
  - spec/validators/content/node/singleness_validator_spec.rb
108
117
  homepage: https://github.com/cubesystems/releaf
109
- licenses: []
118
+ licenses:
119
+ - MIT
110
120
  metadata: {}
111
121
  post_install_message:
112
122
  rdoc_options: []
@@ -124,22 +134,29 @@ required_rubygems_version: !ruby/object:Gem::Requirement
124
134
  version: '0'
125
135
  requirements: []
126
136
  rubyforge_project:
127
- rubygems_version: 2.4.8
137
+ rubygems_version: 2.5.1
128
138
  signing_key:
129
139
  specification_version: 4
130
140
  summary: Node and content routes support for releaf
131
141
  test_files:
142
+ - spec/builders/content/nodes/action_dialog_spec.rb
132
143
  - spec/builders/content/nodes/content_form_builder_spec.rb
133
144
  - spec/builders/content/nodes/form_builder_spec.rb
134
145
  - spec/builders/content/nodes/toolbox_builder_spec.rb
135
146
  - spec/controllers/releaf/content/nodes_controller_spec.rb
147
+ - spec/features/nodes_services_spec.rb
136
148
  - spec/features/nodes_spec.rb
137
149
  - spec/lib/releaf/content/acts_as_node_spec.rb
150
+ - spec/lib/releaf/content/configuration_spec.rb
151
+ - spec/lib/releaf/content/engine_spec.rb
138
152
  - spec/lib/releaf/content/node_spec.rb
139
153
  - spec/lib/releaf/content/route_spec.rb
140
154
  - spec/middleware/routes_reloader_spec.rb
141
155
  - spec/routing/node_mapper_spec.rb
156
+ - spec/services/releaf/content/node/copy_spec.rb
157
+ - spec/services/releaf/content/node/move_spec.rb
158
+ - spec/services/releaf/content/node/save_under_parent_spec.rb
159
+ - spec/services/releaf/content/node/service_spec.rb
142
160
  - spec/validators/content/node/parent_validator_spec.rb
143
161
  - spec/validators/content/node/root_validator_spec.rb
144
162
  - spec/validators/content/node/singleness_validator_spec.rb
145
- has_rdoc:
@@ -1,9 +0,0 @@
1
- module Releaf::Content
2
- class GoToDialogBuilder
3
- include Releaf::Content::Builders::Dialog
4
-
5
- def section_header_text
6
- t("Go to node")
7
- end
8
- end
9
- end
@@ -1 +0,0 @@
1
- Releaf::Content::GoToDialogBuilder.new(self).output
@@ -1,18 +0,0 @@
1
- root_path = File.expand_path('../..', File.dirname(__dir__))
2
- files = %w(
3
- builders/tree
4
- builders/dialog
5
- builders/action_dialog
6
- content_type_dialog_builder
7
- copy_dialog_builder
8
- copy_dialog_builder
9
- go_to_dialog_builder
10
- move_dialog_builder
11
- nodes/content_form_builder
12
- nodes/form_builder
13
- nodes/index_builder
14
- nodes/toolbox_builder
15
- )
16
- files.each do|file|
17
- require "#{root_path}/app/builders/releaf/content/#{file}"
18
- end
@@ -1,20 +0,0 @@
1
- require File.expand_path("../../releaf-core/lib/releaf/version.rb", __FILE__)
2
-
3
- Gem::Specification.new do |s|
4
- s.name = "releaf-content"
5
- s.version = Releaf::VERSION
6
-
7
- s.summary = "Node and content routes support for releaf"
8
- s.description = "Content subsystem for releaf"
9
- s.authors = ["CubeSystems"]
10
- s.email = 'info@cubesystems.lv'
11
- s.homepage = 'https://github.com/cubesystems/releaf'
12
-
13
- s.files = `git ls-files`.split("\n")
14
- s.test_files = Dir["spec/**/*"]
15
-
16
- s.add_dependency 'releaf-core', Releaf::VERSION
17
- s.add_dependency 'stringex'
18
- s.add_dependency 'awesome_nested_set'
19
-
20
- end