push_type_core 0.2.1 → 0.3.1

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 (54) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/images/push_type/pushtype-favicon.png +0 -0
  3. data/app/assets/images/push_type/pushtype-logo.svg +23 -0
  4. data/app/controllers/concerns/push_type/application_controller_methods.rb +58 -2
  5. data/app/controllers/front_end_controller.rb +25 -8
  6. data/app/fields/push_type/date_field.rb +1 -0
  7. data/app/models/push_type/node.rb +11 -2
  8. data/app/views/push_type/setup.html.erb +129 -0
  9. data/config/locales/en.yml +9 -0
  10. data/lib/generators/push_type/field/USAGE +9 -0
  11. data/lib/generators/push_type/field/field_generator.rb +9 -0
  12. data/lib/generators/push_type/field/templates/field.rb +15 -0
  13. data/lib/generators/push_type/node/USAGE +2 -1
  14. data/lib/generators/push_type/node/node_generator.rb +7 -0
  15. data/lib/generators/push_type/node/templates/node.rb +3 -1
  16. data/lib/generators/push_type/node/templates/template.html.erb +8 -1
  17. data/lib/push_type/core/engine.rb +12 -2
  18. data/lib/push_type/core.rb +5 -0
  19. data/lib/push_type/menu_builder/dsl/menu.rb +32 -0
  20. data/lib/push_type/menu_builder/dsl/menu_item.rb +45 -0
  21. data/lib/push_type/menu_builder/helpers.rb +11 -0
  22. data/lib/push_type/menu_builder/menu.rb +57 -0
  23. data/lib/push_type/menu_builder/menu_item.rb +39 -0
  24. data/lib/push_type/menu_builder/menu_renderer.rb +47 -0
  25. data/lib/push_type/menu_builder.rb +17 -0
  26. data/lib/push_type/version.rb +1 -1
  27. data/test/controllers/front_end_controller_test.rb +16 -7
  28. data/test/dummy/app/models/page.rb +1 -1
  29. data/test/dummy/app/views/nodes/page.html.erb +3 -1
  30. data/test/dummy/config/initializers/push_type.rb +1 -1
  31. data/test/dummy/config/secrets.yml +2 -2
  32. data/test/dummy/db/schema.rb +1 -1
  33. data/test/dummy/log/test.log +2032 -67930
  34. data/test/dummy/tmp/cache/assets/test/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
  35. data/test/dummy/tmp/cache/assets/test/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
  36. data/test/dummy/tmp/cache/assets/test/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
  37. data/test/dummy/tmp/generators/app/models/home_page.rb +3 -1
  38. data/test/dummy/tmp/generators/app/views/nodes/home_page.html.erb +11 -1
  39. data/test/lib/generators/push_type/field_generator_test.rb +16 -0
  40. data/test/lib/generators/push_type/node_generator_test.rb +5 -1
  41. data/test/lib/push_type/menu_builder/menu_dsl_test.rb +25 -0
  42. data/test/lib/push_type/menu_builder/menu_item_dsl_test.rb +35 -0
  43. data/test/lib/push_type/menu_builder/menu_item_test.rb +40 -0
  44. data/test/lib/push_type/menu_builder/menu_renderer_test.rb +26 -0
  45. data/test/lib/push_type/menu_builder/menu_test.rb +62 -0
  46. data/test/lib/push_type/menu_builder_test.rb +20 -0
  47. data/test/models/concerns/push_type/nestable_test.rb +9 -4
  48. data/test/models/concerns/push_type/templatable_test.rb +9 -5
  49. data/test/models/push_type/node_test.rb +16 -0
  50. metadata +38 -10
  51. /data/test/dummy/db/migrate/{20150209204334_create_push_type_users.push_type.rb → 20150222152443_create_push_type_users.push_type.rb} +0 -0
  52. /data/test/dummy/db/migrate/{20150209204335_create_push_type_nodes.push_type.rb → 20150222152444_create_push_type_nodes.push_type.rb} +0 -0
  53. /data/test/dummy/db/migrate/{20150209204336_create_push_type_node_hierarchies.push_type.rb → 20150222152445_create_push_type_node_hierarchies.push_type.rb} +0 -0
  54. /data/test/dummy/db/migrate/{20150209204337_create_push_type_assets.push_type.rb → 20150222152446_create_push_type_assets.push_type.rb} +0 -0
@@ -4,7 +4,9 @@ class HomePage < PushType::Node
4
4
  # has_child_nodes :all
5
5
 
6
6
  # Set custom fields
7
- # field :description
8
7
  # field :body, :text, validates: { presence: true }
8
+ field :foo, :string
9
+ field :bar, :text
10
+
9
11
 
10
12
  end
@@ -1,3 +1,13 @@
1
1
  <h1><%= @node.title %></h1>
2
2
  <p>This is a generated HomePage template.</p>
3
- <p>Find me at: app/views/nodes/home_page.html.erb</p>
3
+ <p>Find me at: app/views/nodes/home_page.html.erb</p>
4
+
5
+ <div>
6
+ <div>Foo:</div>
7
+ <div><%= @node.foo %></div>
8
+ </div>
9
+ <div>
10
+ <div>Bar:</div>
11
+ <div><%= @node.bar %></div>
12
+ </div>
13
+
@@ -0,0 +1,16 @@
1
+ require "test_helper"
2
+ require "generators/push_type/field/field_generator"
3
+
4
+ module PushType
5
+ describe FieldGenerator do
6
+ tests FieldGenerator
7
+ destination Rails.root.join('tmp/generators')
8
+
9
+ before :all do
10
+ prepare_destination
11
+ run_generator ['rich_text']
12
+ end
13
+
14
+ it { assert_file 'app/fields/rich_text_field.rb', %r{class RichTextField < PushType::FieldType} }
15
+ end
16
+ end
@@ -8,10 +8,14 @@ module PushType
8
8
 
9
9
  before :all do
10
10
  prepare_destination
11
- run_generator ['home_page']
11
+ run_generator ['home_page', 'foo', 'bar:text']
12
12
  end
13
13
 
14
14
  it { assert_file 'app/models/home_page.rb', %r{class HomePage < PushType::Node} }
15
+ it { assert_file 'app/models/home_page.rb', %r{field :foo, :string} }
16
+ it { assert_file 'app/models/home_page.rb', %r{field :bar, :text} }
15
17
  it { assert_file 'app/views/nodes/home_page.html.erb', %r{<h1><%= @node.title %></h1>} }
18
+ it { assert_file 'app/views/nodes/home_page.html.erb', %r{<div>Foo:</div>} }
19
+ it { assert_file 'app/views/nodes/home_page.html.erb', %r{<div><%= @node.foo %></div>} }
16
20
  end
17
21
  end
@@ -0,0 +1,25 @@
1
+ require "test_helper"
2
+
3
+ module PushType
4
+ module MenuBuilder
5
+ describe Dsl::Menu do
6
+
7
+ let(:menu) { MenuBuilder::Menu.new }
8
+
9
+ describe '.build' do
10
+ before do
11
+ MenuBuilder::Dsl::Menu.build(menu) do
12
+ element :div
13
+ html_options class: 'foo-bar'
14
+ active_class 'foo-active'
15
+ end
16
+ end
17
+
18
+ it { menu.element.must_equal :div }
19
+ it { menu.html_options[:class].must_equal 'foo-bar' }
20
+ it { menu.active_class.must_equal 'foo-active' }
21
+ end
22
+
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,35 @@
1
+ require "test_helper"
2
+
3
+ module PushType
4
+ module MenuBuilder
5
+ describe Dsl::MenuItem do
6
+
7
+ let(:item) { MenuBuilder::MenuItem.new(:bar) }
8
+
9
+ describe '.build' do
10
+ before do
11
+ MenuBuilder::Dsl::MenuItem.build(item) do
12
+ text 'FooBar'
13
+ link '/foobar'
14
+ active { 1 == 1 }
15
+ element :div
16
+ item_options class: 'foo-bar', data: { foo: 'bar' }
17
+ link_options class: 'foo-baz', data: { foo: 'baz' }
18
+ active_class 'foo-active'
19
+ end
20
+ end
21
+
22
+ it { item.text.must_equal 'FooBar' }
23
+ it { item.link.must_equal '/foobar' }
24
+ it { item.active.call.must_equal true }
25
+ it { item.element.must_equal :div }
26
+ it { item.item_options[:class].must_equal 'foo-bar' }
27
+ it { item.item_options[:data][:foo].must_equal 'bar' }
28
+ it { item.link_options[:class].must_equal 'foo-baz' }
29
+ it { item.link_options[:data][:foo].must_equal 'baz' }
30
+ it { item.active_class.must_equal 'foo-active' }
31
+ end
32
+
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,40 @@
1
+ require "test_helper"
2
+
3
+ module PushType
4
+ module MenuBuilder
5
+ describe MenuItem do
6
+
7
+ let(:item) { MenuBuilder::MenuItem.new :foo }
8
+
9
+ it { item.key.must_equal :foo }
10
+ it { item.text.must_equal 'Foo' }
11
+ it { item.link.must_equal nil }
12
+ it { item.active.must_equal false }
13
+ it { item.element.must_equal :li }
14
+ it { item.item_options.must_be_instance_of Hash }
15
+ it { item.link_options.must_be_instance_of Hash }
16
+ it { item.active_class.must_equal nil }
17
+
18
+ describe '#submenu' do
19
+ it 'should create a new menu' do
20
+ item.submenu.must_be_instance_of MenuBuilder::Menu
21
+ end
22
+ it 'should use existing submenu if present' do
23
+ menu = item.submenu
24
+ item.submenu.must_equal menu
25
+ end
26
+ end
27
+
28
+ describe '#validate!' do
29
+ describe 'without all attributes' do
30
+ it { proc { item.validate! }.must_raise RuntimeError }
31
+ end
32
+ describe 'with all attributes' do
33
+ before { item.link = '/foobar' }
34
+ it { item.validate!.must_equal true }
35
+ end
36
+ end
37
+
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,26 @@
1
+ require "test_helper"
2
+
3
+ module PushType
4
+ module MenuBuilder
5
+ class MenuRendererTest < ActionView::TestCase
6
+
7
+ let(:menu) { MenuBuilder::Menu.new }
8
+ let(:item) { MenuBuilder::MenuItem.new :foo }
9
+ let(:renderer) { MenuBuilder::MenuRenderer.new self }
10
+
11
+ describe '#render_menu' do
12
+ subject { renderer.render_menu menu }
13
+ it { subject.must_be_kind_of String }
14
+ it { subject.must_match %r{\A<ul>.*</ul>\z} }
15
+ end
16
+
17
+ describe '#render_item' do
18
+ before { item.link = '/foobar' }
19
+ subject { renderer.render_item item }
20
+ it { subject.must_be_kind_of String }
21
+ it { subject.must_match %r{\A<li><a href="/foobar">.*</a></li>\z} }
22
+ end
23
+
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,62 @@
1
+ require "test_helper"
2
+
3
+ module PushType
4
+ module MenuBuilder
5
+ describe Menu do
6
+
7
+ let(:menu) { MenuBuilder::Menu.new }
8
+
9
+ it { menu.items.must_be_instance_of Array }
10
+ it { menu.element.must_equal :ul }
11
+ it { menu.html_options.must_be_instance_of Hash }
12
+ it { menu.active_class.must_equal 'active' }
13
+
14
+ describe '#item' do
15
+ it 'should create a new menu item' do
16
+ menu.item(:foo).must_be_instance_of MenuBuilder::MenuItem
17
+ end
18
+ it 'should use existing menu item if present' do
19
+ item = menu.item(:foo)
20
+ menu.item(:foo).must_equal item
21
+ end
22
+ end
23
+
24
+ describe '#insert_at' do
25
+ before do
26
+ menu.item(:foo)
27
+ menu.item(:bar)
28
+ menu.item(:baz)
29
+ end
30
+ it 'should insert at the given index' do
31
+ item = menu.insert_at 1, :bang
32
+ menu.items.find_index(item).must_equal 1
33
+ end
34
+ end
35
+
36
+ describe '#insert_before' do
37
+ before do
38
+ menu.item(:foo)
39
+ menu.item(:bar)
40
+ menu.item(:baz)
41
+ end
42
+ it 'should insert before the given key' do
43
+ item = menu.insert_before :baz, :bang
44
+ menu.items.find_index(item).must_equal 2
45
+ end
46
+ end
47
+
48
+ describe '#insert_after' do
49
+ before do
50
+ menu.item(:foo)
51
+ menu.item(:bar)
52
+ menu.item(:baz)
53
+ end
54
+ it 'should insert before the given key' do
55
+ item = menu.insert_after :baz, :bang
56
+ menu.items.find_index(item).must_equal 3
57
+ end
58
+ end
59
+
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,20 @@
1
+ require "test_helper"
2
+
3
+ module PushType
4
+ describe MenuBuilder do
5
+
6
+ before { MenuBuilder.class_variable_set :@@menus, {} }
7
+ after { MenuBuilder.class_variable_set :@@menus, {} }
8
+
9
+ describe '.select' do
10
+ it 'should create a new menu' do
11
+ MenuBuilder.select(:foo).must_be_instance_of MenuBuilder::Menu
12
+ end
13
+ it 'should use existing menu if present' do
14
+ menu = MenuBuilder.select(:bar)
15
+ MenuBuilder.select(:bar).must_equal menu
16
+ end
17
+ end
18
+
19
+ end
20
+ end
@@ -6,12 +6,17 @@ module PushType
6
6
  let(:page) { TestPage.new }
7
7
  let(:roots) { PushType.root_nodes }
8
8
 
9
+ before do
10
+ TestPage.instance_variable_set '@child_nodes', nil
11
+ TestPage.instance_variable_set '@child_order', nil
12
+ end
13
+ after do
14
+ TestPage.instance_variable_set '@child_nodes', nil
15
+ TestPage.instance_variable_set '@child_order', nil
16
+ end
17
+
9
18
  describe '.has_child_nodes' do
10
19
  describe 'defaults' do
11
- before do
12
- TestPage.instance_variable_set '@child_nodes', nil
13
- TestPage.instance_variable_set '@child_order', nil
14
- end
15
20
  it { TestPage.child_nodes.must_equal roots }
16
21
  it { page.child_nodes.must_equal roots }
17
22
  it { page.must_be :sortable? }
@@ -4,14 +4,18 @@ module PushType
4
4
  describe Templatable do
5
5
 
6
6
  let(:page) { TestPage.new }
7
+
8
+ before do
9
+ TestPage.instance_variable_set '@template_name', nil
10
+ TestPage.instance_variable_set '@template_opts', nil
11
+ end
12
+ after do
13
+ TestPage.instance_variable_set '@template_name', nil
14
+ TestPage.instance_variable_set '@template_opts', nil
15
+ end
7
16
 
8
17
  describe '.template' do
9
18
  describe 'defaults' do
10
- before do
11
- # Set class instance variables to nil
12
- TestPage.instance_variable_set '@template_name', nil
13
- TestPage.instance_variable_set '@template_opts', nil
14
- end
15
19
  before { page.template.must_equal 'nodes/test_page' }
16
20
  before { page.template_args.must_equal ['nodes/test_page', {}] }
17
21
  end
@@ -18,5 +18,21 @@ module PushType
18
18
  it { @node.permalink.must_equal 'one/two/three' }
19
19
  end
20
20
 
21
+ describe '#orphan?' do
22
+ let(:parent) { FactoryGirl.create :node }
23
+ let(:child) { FactoryGirl.create :node, parent: parent }
24
+ before { child && parent.trash! }
25
+ it { parent.wont_be :orphan? }
26
+ it { child.must_be :orphan? }
27
+ end
28
+
29
+ describe '#trash!' do
30
+ let(:parent) { FactoryGirl.create :node }
31
+ let(:child) { FactoryGirl.create :node, parent: parent }
32
+ before { child && parent.trash! }
33
+ it { parent.must_be :trashed? }
34
+ it { parent.reload.must_be :trashed? }
35
+ end
36
+
21
37
  end
22
38
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: push_type_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aaron Russell
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-17 00:00:00.000000000 Z
11
+ date: 2015-02-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -118,6 +118,8 @@ extra_rdoc_files: []
118
118
  files:
119
119
  - LICENSE.md
120
120
  - README.md
121
+ - app/assets/images/push_type/pushtype-favicon.png
122
+ - app/assets/images/push_type/pushtype-logo.svg
121
123
  - app/controllers/concerns/push_type/application_controller_methods.rb
122
124
  - app/controllers/front_end_controller.rb
123
125
  - app/fields/push_type/array_field.rb
@@ -137,7 +139,9 @@ files:
137
139
  - app/models/push_type/node.rb
138
140
  - app/models/push_type/user.rb
139
141
  - app/views/layouts/push_type/application.html.erb
142
+ - app/views/push_type/setup.html.erb
140
143
  - config/initializers/dragonfly.rb
144
+ - config/locales/en.yml
141
145
  - config/routes.rb
142
146
  - db/migrate/20141117170533_create_push_type_users.rb
143
147
  - db/migrate/20141117204630_create_push_type_nodes.rb
@@ -147,6 +151,9 @@ files:
147
151
  - lib/generators/push_type/dummy/templates/application.rb
148
152
  - lib/generators/push_type/dummy/templates/boot.rb
149
153
  - lib/generators/push_type/dummy/templates/page.rb
154
+ - lib/generators/push_type/field/USAGE
155
+ - lib/generators/push_type/field/field_generator.rb
156
+ - lib/generators/push_type/field/templates/field.rb
150
157
  - lib/generators/push_type/install/install_generator.rb
151
158
  - lib/generators/push_type/install/templates/push_type.rb
152
159
  - lib/generators/push_type/node/USAGE
@@ -157,6 +164,13 @@ files:
157
164
  - lib/push_type/core.rb
158
165
  - lib/push_type/core/engine.rb
159
166
  - lib/push_type/field_type.rb
167
+ - lib/push_type/menu_builder.rb
168
+ - lib/push_type/menu_builder/dsl/menu.rb
169
+ - lib/push_type/menu_builder/dsl/menu_item.rb
170
+ - lib/push_type/menu_builder/helpers.rb
171
+ - lib/push_type/menu_builder/menu.rb
172
+ - lib/push_type/menu_builder/menu_item.rb
173
+ - lib/push_type/menu_builder/menu_renderer.rb
160
174
  - lib/push_type/rails/routes.rb
161
175
  - lib/push_type/tag_list_query.rb
162
176
  - lib/push_type/testing/common_rake.rb
@@ -200,10 +214,10 @@ files:
200
214
  - test/dummy/config/locales/en.yml
201
215
  - test/dummy/config/routes.rb
202
216
  - test/dummy/config/secrets.yml
203
- - test/dummy/db/migrate/20150209204334_create_push_type_users.push_type.rb
204
- - test/dummy/db/migrate/20150209204335_create_push_type_nodes.push_type.rb
205
- - test/dummy/db/migrate/20150209204336_create_push_type_node_hierarchies.push_type.rb
206
- - test/dummy/db/migrate/20150209204337_create_push_type_assets.push_type.rb
217
+ - test/dummy/db/migrate/20150222152443_create_push_type_users.push_type.rb
218
+ - test/dummy/db/migrate/20150222152444_create_push_type_nodes.push_type.rb
219
+ - test/dummy/db/migrate/20150222152445_create_push_type_node_hierarchies.push_type.rb
220
+ - test/dummy/db/migrate/20150222152446_create_push_type_assets.push_type.rb
207
221
  - test/dummy/db/schema.rb
208
222
  - test/dummy/db/seeds.rb
209
223
  - test/dummy/log/test.log
@@ -221,10 +235,17 @@ files:
221
235
  - test/files/document.pdf
222
236
  - test/files/image.png
223
237
  - test/files/video.mp4
238
+ - test/lib/generators/push_type/field_generator_test.rb
224
239
  - test/lib/generators/push_type/install_generator_test.rb
225
240
  - test/lib/generators/push_type/node_generator_test.rb
226
241
  - test/lib/push_type/core_test.rb
227
242
  - test/lib/push_type/field_type_test.rb
243
+ - test/lib/push_type/menu_builder/menu_dsl_test.rb
244
+ - test/lib/push_type/menu_builder/menu_item_dsl_test.rb
245
+ - test/lib/push_type/menu_builder/menu_item_test.rb
246
+ - test/lib/push_type/menu_builder/menu_renderer_test.rb
247
+ - test/lib/push_type/menu_builder/menu_test.rb
248
+ - test/lib/push_type/menu_builder_test.rb
228
249
  - test/lib/push_type/tag_list_query_test.rb
229
250
  - test/models/concerns/push_type/customizable_test.rb
230
251
  - test/models/concerns/push_type/nestable_test.rb
@@ -292,10 +313,10 @@ test_files:
292
313
  - test/dummy/config/routes.rb
293
314
  - test/dummy/config/secrets.yml
294
315
  - test/dummy/config.ru
295
- - test/dummy/db/migrate/20150209204334_create_push_type_users.push_type.rb
296
- - test/dummy/db/migrate/20150209204335_create_push_type_nodes.push_type.rb
297
- - test/dummy/db/migrate/20150209204336_create_push_type_node_hierarchies.push_type.rb
298
- - test/dummy/db/migrate/20150209204337_create_push_type_assets.push_type.rb
316
+ - test/dummy/db/migrate/20150222152443_create_push_type_users.push_type.rb
317
+ - test/dummy/db/migrate/20150222152444_create_push_type_nodes.push_type.rb
318
+ - test/dummy/db/migrate/20150222152445_create_push_type_node_hierarchies.push_type.rb
319
+ - test/dummy/db/migrate/20150222152446_create_push_type_assets.push_type.rb
299
320
  - test/dummy/db/schema.rb
300
321
  - test/dummy/db/seeds.rb
301
322
  - test/dummy/log/test.log
@@ -315,10 +336,17 @@ test_files:
315
336
  - test/files/document.pdf
316
337
  - test/files/image.png
317
338
  - test/files/video.mp4
339
+ - test/lib/generators/push_type/field_generator_test.rb
318
340
  - test/lib/generators/push_type/install_generator_test.rb
319
341
  - test/lib/generators/push_type/node_generator_test.rb
320
342
  - test/lib/push_type/core_test.rb
321
343
  - test/lib/push_type/field_type_test.rb
344
+ - test/lib/push_type/menu_builder/menu_dsl_test.rb
345
+ - test/lib/push_type/menu_builder/menu_item_dsl_test.rb
346
+ - test/lib/push_type/menu_builder/menu_item_test.rb
347
+ - test/lib/push_type/menu_builder/menu_renderer_test.rb
348
+ - test/lib/push_type/menu_builder/menu_test.rb
349
+ - test/lib/push_type/menu_builder_test.rb
322
350
  - test/lib/push_type/tag_list_query_test.rb
323
351
  - test/models/concerns/push_type/customizable_test.rb
324
352
  - test/models/concerns/push_type/nestable_test.rb