releaf-content 0.2.1 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
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