push_type_core 0.2.1 → 0.3.1

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