refinerycms-sl-snippets 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. data/app/assets/javascripts/page-snippet-picker.js +121 -0
  2. data/app/assets/javascripts/part-snippets-select.js +40 -0
  3. data/app/assets/stylesheets/page-snippet-picker.css +82 -0
  4. data/app/controllers/refinery/admin/snippets_controller.rb +38 -0
  5. data/app/controllers/refinery/admin/snippets_page_parts_controller.rb +38 -0
  6. data/app/models/refinery/snippet.rb +62 -0
  7. data/app/models/refinery/snippet_page_part.rb +20 -0
  8. data/app/views/admin/pages/tabs/_snippets_field.html.erb +46 -0
  9. data/app/views/refinery/admin/pages/tabs/_snippets.html.erb +3 -0
  10. data/app/views/refinery/admin/pages/tabs/_snippets_content.html.erb +24 -0
  11. data/app/views/refinery/admin/pages/tabs/_snippets_field.html.erb +55 -0
  12. data/app/views/refinery/admin/pages/tabs/_snippets_list_item.html.erb +20 -0
  13. data/app/views/refinery/admin/snippets/_actions.html.erb +28 -0
  14. data/app/views/refinery/admin/snippets/_form.html.erb +35 -0
  15. data/app/views/refinery/admin/snippets/_locale_picker.html.erb +12 -0
  16. data/app/views/refinery/admin/snippets/_records.html.erb +18 -0
  17. data/app/views/refinery/admin/snippets/_snippet.html.erb +22 -0
  18. data/app/views/refinery/admin/snippets/_snippets.html.erb +2 -0
  19. data/app/views/refinery/admin/snippets/_sortable_list.html.erb +7 -0
  20. data/app/views/refinery/admin/snippets/edit.html.erb +1 -0
  21. data/app/views/refinery/admin/snippets/index.html.erb +10 -0
  22. data/app/views/refinery/admin/snippets/new.html.erb +1 -0
  23. data/app/views/refinery/admin/snippets_page_parts/add.html.erb +1 -0
  24. data/app/views/refinery/admin/snippets_page_parts/remove.html.erb +1 -0
  25. data/config/locales/cs.yml +35 -0
  26. data/config/locales/en.yml +44 -0
  27. data/config/locales/es.yml +44 -0
  28. data/config/locales/nl.yml +22 -0
  29. data/config/routes.rb +18 -0
  30. data/db/migrate/1_create_snippets.rb +22 -0
  31. data/db/migrate/2_translate_snippets.rb +20 -0
  32. data/db/migrate/3_create_snippets_page_parts.rb +22 -0
  33. data/db/migrate/6_remove_position_from_snippets.rb +12 -0
  34. data/db/seeds.rb +6 -0
  35. data/features/manage_snippets.feature +63 -0
  36. data/features/step_definitions/snippet_steps.rb +14 -0
  37. data/features/support/paths.rb +17 -0
  38. data/lib/extensions/application_helper_extensions.rb +39 -0
  39. data/lib/extensions/page_extensions.rb +22 -0
  40. data/lib/gemspec.rb +31 -0
  41. data/lib/generators/refinery/snippets_generator.rb +22 -0
  42. data/lib/refinery/snippets.rb +29 -0
  43. data/lib/refinery/snippets/engine.rb +49 -0
  44. data/lib/refinery/snippets/tabs.rb +22 -0
  45. data/lib/refinery/snippets/version.rb +5 -0
  46. data/lib/refinerycms-snippets.rb +1 -0
  47. data/lib/tasks/snippets.rake +13 -0
  48. data/readme.md +52 -0
  49. data/refinerycms-snippets.gemspec +106 -0
  50. data/spec/helpers/application_helper_spec.rb +43 -0
  51. data/spec/models/page_spec.rb +39 -0
  52. data/spec/models/snippet_spec.rb +91 -0
  53. metadata +133 -0
@@ -0,0 +1,106 @@
1
+ Gem::Specification.new do |s|
2
+ s.platform = Gem::Platform::RUBY
3
+ s.name = %q{refinerycms-sl-snippets}
4
+ s.version = %q{1.0.0}
5
+ s.description = %q{Ruby on Rails Snippets engine for Refinery CMS}
6
+ s.date = %q{2012-09-05}
7
+ s.summary = %q{Html snippets for Refinery CMS page}
8
+ s.authors = ['Rodrigo García Suárez', 'Simplelogica', 'Marek L.']
9
+ s.email = %q{rodrigo@simplelogica.net}
10
+ s.require_paths = %w(lib)
11
+ s.homepage = %q{https://github.com/simplelogica/refinerycms-snippets}
12
+
13
+ s.add_dependency 'refinerycms-pages', '>= 2.0.0'
14
+
15
+ s.files = [
16
+ 'app',
17
+ 'app/models',
18
+ 'app/models/refinery',
19
+ 'app/models/refinery/snippet.rb',
20
+ 'app/models/refinery/snippet_page_part.rb',
21
+ 'app/controllers',
22
+ 'app/controllers/refinery',
23
+ 'app/controllers/refinery/admin',
24
+ 'app/controllers/refinery/admin/snippets_controller.rb',
25
+ 'app/controllers/refinery/admin/snippets_page_parts_controller.rb',
26
+ 'app/assets',
27
+ 'app/assets/stylesheets',
28
+ 'app/assets/stylesheets/page-snippet-picker.css',
29
+ 'app/assets/javascripts',
30
+ 'app/assets/javascripts/part-snippets-select.js',
31
+ 'app/assets/javascripts/page-snippet-picker.js',
32
+ 'app/views',
33
+ 'app/views/refinery',
34
+ 'app/views/refinery/admin',
35
+ 'app/views/refinery/admin/snippets',
36
+ 'app/views/refinery/admin/snippets/index.html.erb',
37
+ 'app/views/refinery/admin/snippets/edit.html.erb',
38
+ 'app/views/refinery/admin/snippets/_snippet.html.erb',
39
+ 'app/views/refinery/admin/snippets/new.html.erb',
40
+ 'app/views/refinery/admin/snippets/_locale_picker.html.erb',
41
+ 'app/views/refinery/admin/snippets/_snippets.html.erb',
42
+ 'app/views/refinery/admin/snippets/_records.html.erb',
43
+ 'app/views/refinery/admin/snippets/_form.html.erb',
44
+ 'app/views/refinery/admin/snippets/_actions.html.erb',
45
+ 'app/views/refinery/admin/snippets/_sortable_list.html.erb',
46
+ 'app/views/refinery/admin/snippets_page_parts',
47
+ 'app/views/refinery/admin/snippets_page_parts/add.html.erb',
48
+ 'app/views/refinery/admin/snippets_page_parts/remove.html.erb',
49
+ 'app/views/refinery/admin/pages',
50
+ 'app/views/refinery/admin/pages/tabs',
51
+ 'app/views/refinery/admin/pages/tabs/_snippets_field.html.erb',
52
+ 'app/views/refinery/admin/pages/tabs/_snippets_content.html.erb',
53
+ 'app/views/refinery/admin/pages/tabs/_snippets.html.erb',
54
+ 'app/views/refinery/admin/pages/tabs/_snippets_list_item.html.erb',
55
+ 'app/views/admin',
56
+ 'app/views/admin/pages',
57
+ 'app/views/admin/pages/tabs',
58
+ 'app/views/admin/pages/tabs/_snippets_field.html.erb',
59
+ 'lib',
60
+ 'lib/generators',
61
+ 'lib/generators/refinery',
62
+ 'lib/generators/refinery/snippets_generator.rb',
63
+ 'lib/refinery',
64
+ 'lib/refinery/snippets.rb',
65
+ 'lib/refinery/snippets',
66
+ 'lib/refinery/snippets/version.rb',
67
+ 'lib/refinery/snippets/tabs.rb',
68
+ 'lib/refinery/snippets/engine.rb',
69
+ 'lib/refinerycms-snippets.rb',
70
+ 'lib/gemspec.rb',
71
+ 'lib/tasks',
72
+ 'lib/tasks/snippets.rake',
73
+ 'lib/extensions',
74
+ 'lib/extensions/application_helper_extensions.rb',
75
+ 'lib/extensions/page_extensions.rb',
76
+ 'db',
77
+ 'db/seeds.rb',
78
+ 'db/migrate',
79
+ 'db/migrate/1_create_snippets.rb',
80
+ 'db/migrate/6_remove_position_from_snippets.rb',
81
+ 'db/migrate/2_translate_snippets.rb',
82
+ 'db/migrate/3_create_snippets_page_parts.rb',
83
+ 'spec',
84
+ 'spec/models',
85
+ 'spec/models/page_spec.rb',
86
+ 'spec/models/snippet_spec.rb',
87
+ 'spec/helpers',
88
+ 'spec/helpers/application_helper_spec.rb',
89
+ 'refinerycms-snippets.gemspec',
90
+ 'config',
91
+ 'config/routes.rb',
92
+ 'config/locales',
93
+ 'config/locales/nl.yml',
94
+ 'config/locales/en.yml',
95
+ 'config/locales/es.yml',
96
+ 'config/locales/cs.yml',
97
+ 'readme.md',
98
+ 'features',
99
+ 'features/support',
100
+ 'features/support/paths.rb',
101
+ 'features/step_definitions',
102
+ 'features/step_definitions/snippet_steps.rb',
103
+ 'features/manage_snippets.feature'
104
+ ]
105
+ s.require_path = 'lib'
106
+ end
@@ -0,0 +1,43 @@
1
+ require 'spec_helper'
2
+
3
+ describe ApplicationHelper do
4
+
5
+ def write_template(snippet = @snippet)
6
+ FileUtils.mkdir_p Refinery::Snippet::TEMPLATES_DIR
7
+ @file = File.open("#{Refinery::Snippet::TEMPLATES_DIR}/#{snippet.template_filename}", 'w')
8
+ @file.write("<%= snippet.title %>")
9
+ @file.close
10
+ return @file
11
+ end
12
+
13
+ before(:each) do
14
+ @page = Refinery::Page.create!(:title => 'Page title')
15
+ @part = Refinery::PagePart.create!(:title => 'Part', :body => "PART BODY")
16
+ @snippet_before = Refinery::Snippet.create!(:title => 'Before title', :body => "BEFORE BODY")
17
+ @snippet_after = Refinery::Snippet.create!(:title => 'After title', :body => "AFTER BODY")
18
+ Refinery::SnippetPagePart.create!(:page_part_id => @part.id, :snippet_id => @snippet_before.id, :before_body => true)
19
+ Refinery::SnippetPagePart.create!(:page_part_id => @part.id, :snippet_id => @snippet_after.id)
20
+ @page.parts << @part
21
+ end
22
+
23
+ after(:each) do
24
+ File.delete(@file.path) if @file
25
+ end
26
+
27
+ it 'should give content for one part wrapped with its snippets' do
28
+ content_of(@page, :part).should == "BEFORE BODY<p>PART BODY</p>AFTER BODY"
29
+ end
30
+
31
+ it 'should render snippets templates if present' do
32
+ write_template(@snippet_before)
33
+ should_receive(:render).with({:file => @snippet_before.template_path}).and_return('TEMPLATE')
34
+ content_of(@page, :part).should == "TEMPLATE<p>PART BODY</p>AFTER BODY"
35
+ end
36
+
37
+ it "should work when body of part is nil or don't have snippets" do
38
+ @part.update_attributes(:body => nil)
39
+ @part.snippets.map(&:delete)
40
+ Proc.new {content_of(@page, :part)}.should_not raise_exception
41
+ end
42
+
43
+ end
@@ -0,0 +1,39 @@
1
+ require 'spec_helper'
2
+
3
+ module Refinery
4
+ module Pages
5
+ describe Page do
6
+
7
+ before(:each) do
8
+ @page = Page.create!(:title => 'Page title')
9
+ @part = PagePart.create!(:title => 'Part', :body => "PART BODY")
10
+ @snippet_before = Snippet.create!(:title => 'Before title', :body => "BEFORE BODY")
11
+ @snippet_after = Snippet.create!(:title => 'After title', :body => "AFTER BODY")
12
+ SnippetPagePart.create!(:page_part_id => @part.id, :snippet_id => @snippet_before.id, :before_body => true)
13
+ SnippetPagePart.create!(:page_part_id => @part.id, :snippet_id => @snippet_after.id)
14
+ @page.parts << @part
15
+ end
16
+
17
+ it 'should return all snippets attached to its parts' do
18
+ page = Page.create!(:title => 'Other page')
19
+ part = PagePart.create!(:title => 'Other part', :body => "OTHER PART BODY")
20
+ snippet = Snippet.create!(:title => 'Other snippet', :body => "SNIPPET BODY")
21
+ part.snippets << snippet
22
+ @page.snippets.should have(2).snippets
23
+ @page.snippets.each do |s|
24
+ s.title.should_not == snippet.title
25
+ end
26
+ part.snippets.clear
27
+ part.save
28
+ page.snippets.should be_empty
29
+ end
30
+
31
+ it "should work when body of part is nil or don't have snippets" do
32
+ @part.update_attributes(:body => nil)
33
+ @part.snippets.map(&:delete)
34
+ Proc.new {@page.content_for(:part)}.should_not raise_exception
35
+ end
36
+
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,91 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'spec_helper'
3
+
4
+ module Refinery
5
+ module Snippets
6
+ describe Snippet do
7
+
8
+ def reset_snippet(options = {})
9
+ @valid_attributes = {
10
+ :id => 1,
11
+ :title => "RSpec is great for testing too"
12
+ }
13
+
14
+ @snippet.destroy! if @snippet
15
+ @snippet = Snippet.create!(@valid_attributes.update(options))
16
+ end
17
+
18
+ def write_template(snippet = @snippet)
19
+ FileUtils.mkdir_p Snippet::TEMPLATES_DIR
20
+ @file = File.open("#{Snippet::TEMPLATES_DIR}/#{snippet.template_filename}", 'w')
21
+ @file.write("<%= snippet.title %>")
22
+ @file.close
23
+ return @file
24
+ end
25
+
26
+ before(:each) do
27
+ reset_snippet
28
+ end
29
+
30
+ after(:each) do
31
+ File.delete(@file.path) if @file
32
+ end
33
+
34
+ context "validations" do
35
+
36
+ it "rejects empty title" do
37
+ Snippet.new(@valid_attributes.merge(:title => "")).should_not be_valid
38
+ end
39
+
40
+ it "rejects non unique title" do
41
+ # as one gets created before each spec by reset_snippet
42
+ Snippet.new(@valid_attributes).should_not be_valid
43
+ end
44
+
45
+ end
46
+
47
+ it 'should return the page it is attached' do
48
+ @snippet.pages.should be_empty
49
+ page = Page.create!(:title => 'Page')
50
+ 2.times do
51
+ other_page = Page.create!(:title => 'Other Page')
52
+ part = other_page.parts.create(:title => 'Other part', :body => "OTHER PART BODY")
53
+ part.snippets << @snippet
54
+ end
55
+
56
+ @snippet.pages.should have(2).pages
57
+ @snippet.pages.each do |p|
58
+ p.title.should_not == page.title
59
+ end
60
+ end
61
+
62
+ it 'should return the page it is attached to' do
63
+ @snippet.pages.should be_empty
64
+ page = Page.create!(:title => 'Page')
65
+ 2.times do
66
+ part = PagePart.create!(:title => 'Other part', :body => "OTHER PART BODY")
67
+ part.page = Page.create!(:title => 'Other Page')
68
+ part.save!
69
+ part.snippets << @snippet
70
+ end
71
+ @snippet.pages.should have(2).pages
72
+ @snippet.pages.each do |p|
73
+ p.title.should_not == page.title
74
+ end
75
+ end
76
+
77
+ it 'should verify if template for it exists' do
78
+ @snippet.template?.should be_false
79
+ write_template
80
+ @snippet.template?.should be_true
81
+ end
82
+
83
+ it 'should sanitize its title for a filename' do
84
+ @snippet.template_filename.should == '_rspec_is_great_for_testing_too.html.erb'
85
+ @snippet.title = '/dir & folder/FooÑBar'
86
+ @snippet.template_filename.should == '_dir_folder_foo_bar.html.erb'
87
+ end
88
+
89
+ end
90
+ end
91
+ end
metadata ADDED
@@ -0,0 +1,133 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: refinerycms-sl-snippets
3
+ version: !ruby/object:Gem::Version
4
+ hash: 23
5
+ prerelease:
6
+ segments:
7
+ - 1
8
+ - 0
9
+ - 0
10
+ version: 1.0.0
11
+ platform: ruby
12
+ authors:
13
+ - "Rodrigo Garc\xC3\xADa Su\xC3\xA1rez"
14
+ - Simplelogica
15
+ - Marek L.
16
+ autorequire:
17
+ bindir: bin
18
+ cert_chain: []
19
+
20
+ date: 2012-09-05 00:00:00 Z
21
+ dependencies:
22
+ - !ruby/object:Gem::Dependency
23
+ name: refinerycms-pages
24
+ prerelease: false
25
+ requirement: &id001 !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ">="
29
+ - !ruby/object:Gem::Version
30
+ hash: 15
31
+ segments:
32
+ - 2
33
+ - 0
34
+ - 0
35
+ version: 2.0.0
36
+ type: :runtime
37
+ version_requirements: *id001
38
+ description: Ruby on Rails Snippets engine for Refinery CMS
39
+ email: rodrigo@simplelogica.net
40
+ executables: []
41
+
42
+ extensions: []
43
+
44
+ extra_rdoc_files: []
45
+
46
+ files:
47
+ - app/models/refinery/snippet.rb
48
+ - app/models/refinery/snippet_page_part.rb
49
+ - app/controllers/refinery/admin/snippets_controller.rb
50
+ - app/controllers/refinery/admin/snippets_page_parts_controller.rb
51
+ - app/assets/stylesheets/page-snippet-picker.css
52
+ - app/assets/javascripts/part-snippets-select.js
53
+ - app/assets/javascripts/page-snippet-picker.js
54
+ - app/views/refinery/admin/snippets/index.html.erb
55
+ - app/views/refinery/admin/snippets/edit.html.erb
56
+ - app/views/refinery/admin/snippets/_snippet.html.erb
57
+ - app/views/refinery/admin/snippets/new.html.erb
58
+ - app/views/refinery/admin/snippets/_locale_picker.html.erb
59
+ - app/views/refinery/admin/snippets/_snippets.html.erb
60
+ - app/views/refinery/admin/snippets/_records.html.erb
61
+ - app/views/refinery/admin/snippets/_form.html.erb
62
+ - app/views/refinery/admin/snippets/_actions.html.erb
63
+ - app/views/refinery/admin/snippets/_sortable_list.html.erb
64
+ - app/views/refinery/admin/snippets_page_parts/add.html.erb
65
+ - app/views/refinery/admin/snippets_page_parts/remove.html.erb
66
+ - app/views/refinery/admin/pages/tabs/_snippets_field.html.erb
67
+ - app/views/refinery/admin/pages/tabs/_snippets_content.html.erb
68
+ - app/views/refinery/admin/pages/tabs/_snippets.html.erb
69
+ - app/views/refinery/admin/pages/tabs/_snippets_list_item.html.erb
70
+ - app/views/admin/pages/tabs/_snippets_field.html.erb
71
+ - lib/generators/refinery/snippets_generator.rb
72
+ - lib/refinery/snippets.rb
73
+ - lib/refinery/snippets/version.rb
74
+ - lib/refinery/snippets/tabs.rb
75
+ - lib/refinery/snippets/engine.rb
76
+ - lib/refinerycms-snippets.rb
77
+ - lib/gemspec.rb
78
+ - lib/tasks/snippets.rake
79
+ - lib/extensions/application_helper_extensions.rb
80
+ - lib/extensions/page_extensions.rb
81
+ - db/seeds.rb
82
+ - db/migrate/1_create_snippets.rb
83
+ - db/migrate/6_remove_position_from_snippets.rb
84
+ - db/migrate/2_translate_snippets.rb
85
+ - db/migrate/3_create_snippets_page_parts.rb
86
+ - spec/models/page_spec.rb
87
+ - spec/models/snippet_spec.rb
88
+ - spec/helpers/application_helper_spec.rb
89
+ - refinerycms-snippets.gemspec
90
+ - config/routes.rb
91
+ - config/locales/nl.yml
92
+ - config/locales/en.yml
93
+ - config/locales/es.yml
94
+ - config/locales/cs.yml
95
+ - readme.md
96
+ - features/support/paths.rb
97
+ - features/step_definitions/snippet_steps.rb
98
+ - features/manage_snippets.feature
99
+ homepage: https://github.com/simplelogica/refinerycms-snippets
100
+ licenses: []
101
+
102
+ post_install_message:
103
+ rdoc_options: []
104
+
105
+ require_paths:
106
+ - lib
107
+ required_ruby_version: !ruby/object:Gem::Requirement
108
+ none: false
109
+ requirements:
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ hash: 3
113
+ segments:
114
+ - 0
115
+ version: "0"
116
+ required_rubygems_version: !ruby/object:Gem::Requirement
117
+ none: false
118
+ requirements:
119
+ - - ">="
120
+ - !ruby/object:Gem::Version
121
+ hash: 3
122
+ segments:
123
+ - 0
124
+ version: "0"
125
+ requirements: []
126
+
127
+ rubyforge_project:
128
+ rubygems_version: 1.8.24
129
+ signing_key:
130
+ specification_version: 3
131
+ summary: Html snippets for Refinery CMS page
132
+ test_files: []
133
+