trusty-snippets-extension 1.0.0
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.
- data/README.md +7 -0
- data/Rakefile +109 -0
- data/app/controllers/admin/snippets_controller.rb +8 -0
- data/app/helpers/admin/snippets_helper.rb +3 -0
- data/app/models/snippet.rb +23 -0
- data/app/models/snippet_finder.rb +24 -0
- data/app/models/snippet_tags.rb +80 -0
- data/app/views/admin/snippets/_form.html.haml +29 -0
- data/app/views/admin/snippets/_popups.html.haml +4 -0
- data/app/views/admin/snippets/edit.html.haml +11 -0
- data/app/views/admin/snippets/index.html.haml +33 -0
- data/app/views/admin/snippets/new.html.haml +9 -0
- data/app/views/admin/snippets/remove.html.haml +17 -0
- data/config/initializers/radiant_config.rb +3 -0
- data/config/locales/en.yml +16 -0
- data/config/routes.rb +8 -0
- data/cucumber.yml +1 -0
- data/features/admin/configuration.feature +9 -0
- data/features/admin/pagination.feature +27 -0
- data/features/admin/snippets_management.feature +82 -0
- data/features/step_definitions/admin/snippet_steps.rb +25 -0
- data/features/support/env.rb +11 -0
- data/features/support/paths.rb +22 -0
- data/lib/snippets/engine.rb +5 -0
- data/lib/tasks/snippets_extension_tasks.rake +47 -0
- data/lib/trusty-snippets-extension.rb +8 -0
- data/snippets_extension.rb +69 -0
- data/spec/ci/before_script +22 -0
- data/spec/ci/script +2 -0
- data/spec/controllers/admin/snippets_controller_spec.rb +110 -0
- data/spec/datasets/snippets_dataset.rb +44 -0
- data/spec/fixtures/snippet_template.radius +1 -0
- data/spec/lib/radiant/admin_ui_spec.rb +33 -0
- data/spec/models/page_spec.rb +81 -0
- data/spec/models/snippet_finder_spec.rb +20 -0
- data/spec/models/snippet_spec.rb +59 -0
- data/spec/models/user_action_observer_spec.rb +25 -0
- data/spec/snippets_spec_helper.rb +36 -0
- data/spec/spec.opts +6 -0
- data/trusty-snippets-extension.gemspec +26 -0
- metadata +120 -0
@@ -0,0 +1 @@
|
|
1
|
+
<h1>Hello</h1>
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../snippets_spec_helper.rb')
|
2
|
+
|
3
|
+
describe Radiant::AdminUI do
|
4
|
+
let(:admin) do
|
5
|
+
@admin = Radiant::AdminUI.new
|
6
|
+
@admin.snippet = @admin.load_default_snippet_regions
|
7
|
+
@admin
|
8
|
+
end
|
9
|
+
|
10
|
+
subject{ admin }
|
11
|
+
its(:snippet){ should_not be_nil }
|
12
|
+
its(:snippets){ should_not be_nil }
|
13
|
+
|
14
|
+
context 'edit Region' do
|
15
|
+
subject{ admin.snippet.edit }
|
16
|
+
its(:main){ should == %w{ edit_header edit_form } }
|
17
|
+
its(:form){ should == %w{ edit_title edit_content edit_filter } }
|
18
|
+
its(:form_bottom){ should == %w{ edit_buttons edit_timestamp } }
|
19
|
+
end
|
20
|
+
|
21
|
+
context 'new Region' do
|
22
|
+
subject{ admin.snippet.new }
|
23
|
+
its(:main){ should == %w{ edit_header edit_form } }
|
24
|
+
its(:form){ should == %w{ edit_title edit_content edit_filter } }
|
25
|
+
its(:form_bottom){ should == %w{ edit_buttons edit_timestamp } }
|
26
|
+
end
|
27
|
+
|
28
|
+
subject{ admin.snippet.index }
|
29
|
+
its(:top){ should == [] }
|
30
|
+
its(:thead){ should == %w{ title_header actions_header } }
|
31
|
+
its(:tbody){ should == %w{ title_cell actions_cell } }
|
32
|
+
its(:bottom){ should == %w{ new_button } }
|
33
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../snippets_spec_helper.rb')
|
2
|
+
|
3
|
+
describe "Page rendering snippets" do
|
4
|
+
dataset :pages, :snippets
|
5
|
+
|
6
|
+
test_helper :render
|
7
|
+
|
8
|
+
let(:page){ pages(:home) }
|
9
|
+
|
10
|
+
it 'should render a snippet' do
|
11
|
+
page.render_snippet(snippets(:first)).should == 'test'
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'should render a snippet with a filter' do
|
15
|
+
page.render_snippet(snippets(:markdown)).should include(%{**markdown** for Snippets!})
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'should render a snippet with a tag' do
|
19
|
+
page.render_snippet(snippets(:radius)).should == 'Home'
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "<r:snippet>" do
|
23
|
+
it "should render the contents of the specified snippet" do
|
24
|
+
page.should render('<r:snippet name="first" />').as('test')
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should render an error when the snippet does not exist" do
|
28
|
+
page.should render('<r:snippet name="non-existent" />').with_error("snippet not found: non-existent")
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should render an error when not given a 'name' attribute" do
|
32
|
+
page.should render('<r:snippet />').with_error("`snippet' tag must contain `name' attribute")
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should filter the snippet with its assigned filter" do
|
36
|
+
page.should render('<r:page><r:snippet name="markdown" /></r:page>').matching(Regexp.new(Regexp.quote('**markdown** for Snippets!')))
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should maintain the global page inside the snippet" do
|
40
|
+
parent_page = pages(:parent)
|
41
|
+
parent_page.should render('<r:snippet name="global_page_cascade" />').as("#{parent_page.title} " * parent_page.children.count)
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should maintain the global page when the snippet renders recursively" do
|
45
|
+
pages(:child).should render('<r:snippet name="recursive" />').as("Great GrandchildGrandchildChild")
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should render the specified snippet when called as an empty double-tag" do
|
49
|
+
page.should render('<r:snippet name="first"></r:snippet>').as('test')
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should capture contents of a double tag, substituting for <r:yield/> in snippet" do
|
53
|
+
page.should render('<r:snippet name="yielding">inner</r:snippet>').
|
54
|
+
as('Before...inner...and after')
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should do nothing with contents of double tag when snippet doesn't yield" do
|
58
|
+
page.should render('<r:snippet name="first">content disappears!</r:snippet>').
|
59
|
+
as('test')
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should render nested yielding snippets" do
|
63
|
+
page.should render('<r:snippet name="div_wrap"><r:snippet name="yielding">Hello, World!</r:snippet></r:snippet>').
|
64
|
+
as('<div>Before...Hello, World!...and after</div>')
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should render double-tag snippets called from within a snippet" do
|
68
|
+
page.should render('<r:snippet name="nested_yields">the content</r:snippet>').
|
69
|
+
as('<snippet name="div_wrap">above the content below</snippet>')
|
70
|
+
end
|
71
|
+
|
72
|
+
it "should render contents each time yield is called" do
|
73
|
+
page.should render('<r:snippet name="yielding_often">French</r:snippet>').
|
74
|
+
as('French is Frencher than French')
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
it "should do nothing when called from page body" do
|
79
|
+
page.should render('<r:yield/>').as("")
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../snippets_spec_helper.rb')
|
2
|
+
|
3
|
+
class TestSnippetFinder; end
|
4
|
+
class AlternateSnippetFinder; end
|
5
|
+
|
6
|
+
describe 'SnippetFinder' do
|
7
|
+
it 'finds a snippet by name in the first finder type' do
|
8
|
+
SnippetFinder.stub!(:finder_types).and_return([TestSnippetFinder, AlternateSnippetFinder])
|
9
|
+
TestSnippetFinder.should_receive(:find_by_name).and_return(OpenStruct.new(:name => 'test_snippet'))
|
10
|
+
|
11
|
+
SnippetFinder.find_by_name('test_snippet')
|
12
|
+
end
|
13
|
+
it 'finds a snippet by name in the next finder type after no result from the previous' do
|
14
|
+
SnippetFinder.stub!(:finder_types).and_return([TestSnippetFinder, AlternateSnippetFinder])
|
15
|
+
TestSnippetFinder.stub!(:find_by_name).and_return(nil)
|
16
|
+
AlternateSnippetFinder.should_receive(:find_by_name).and_return(OpenStruct.new(:name => 'alternate_snippet'))
|
17
|
+
|
18
|
+
SnippetFinder.find_by_name('alternate_snippet')
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../snippets_spec_helper.rb')
|
2
|
+
|
3
|
+
describe Snippet do
|
4
|
+
dataset :snippets
|
5
|
+
test_helper :validations
|
6
|
+
|
7
|
+
before :each do
|
8
|
+
@original_filter = Radiant::Config['defaults.snippet.filter']
|
9
|
+
@snippet = @model = Snippet.new(snippet_params)
|
10
|
+
end
|
11
|
+
|
12
|
+
after :each do
|
13
|
+
Radiant::Config['defaults.snippet.filter'] = @original_filter
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should take the filter from the default filter" do
|
17
|
+
Radiant::Config.should_receive(:[]).with("defaults.snippet.filter").and_return('Textile')
|
18
|
+
snippet = Snippet.new :name => 'new-snippet'
|
19
|
+
snippet.filter_id.should == "Textile"
|
20
|
+
end
|
21
|
+
|
22
|
+
it "shouldn't override existing snippets filters with the default filter" do
|
23
|
+
snippet = Snippet.find(:first, :conditions => {:filter_id => nil})
|
24
|
+
Radiant::Config.stub!(:[]).with("defaults.snippet.filter").and_return('Textile')
|
25
|
+
snippet.reload
|
26
|
+
snippet.filter_id.should_not == "Textile"
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'should validate length of' do
|
30
|
+
{
|
31
|
+
:name => 100,
|
32
|
+
:filter_id => 25
|
33
|
+
}.each do |field, max|
|
34
|
+
assert_invalid field, ('this must not be longer than %d characters' % max), 'x' * (max + 1)
|
35
|
+
assert_valid field, 'x' * max
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'should validate presence of' do
|
40
|
+
[:name].each do |field|
|
41
|
+
assert_invalid field, 'this must not be blank', '', ' ', nil
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'should validate uniqueness of' do
|
46
|
+
assert_invalid :name, 'this name is already in use', 'first', 'another', 'markdown'
|
47
|
+
assert_valid :name, 'just-a-test'
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'should validate format of name' do
|
51
|
+
assert_valid :name, 'abc', 'abcd-efg', 'abcd_efg', 'abc.html', '/', '123'
|
52
|
+
assert_invalid :name, 'cannot contain spaces or tabs'
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'should allow the filter to be specified' do
|
56
|
+
@snippet = snippets(:markdown)
|
57
|
+
@snippet.filter.should be_kind_of(SnippetMarkdownFilter)
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../snippets_spec_helper.rb')
|
2
|
+
|
3
|
+
describe UserActionObserver do
|
4
|
+
dataset :users, :pages_with_layouts, :snippets
|
5
|
+
|
6
|
+
before(:each) do
|
7
|
+
@user = users(:existing)
|
8
|
+
UserActionObserver.current_user = @user
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'should observe create' do
|
12
|
+
snippet = Snippet.create!(snippet_params)
|
13
|
+
snippet.created_by.should == @user
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'should observe update' do
|
17
|
+
[
|
18
|
+
snippets(:first)
|
19
|
+
].each do |model|
|
20
|
+
model.attributes = model.attributes.dup
|
21
|
+
model.save.should == true
|
22
|
+
model.updated_by.should == @user
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
unless defined? RADIANT_ROOT
|
2
|
+
ENV["RAILS_ENV"] = "test"
|
3
|
+
case
|
4
|
+
when ENV["RADIANT_ENV_FILE"]
|
5
|
+
require ENV["RADIANT_ENV_FILE"]
|
6
|
+
when File.dirname(__FILE__) =~ %r{vendor/radiant/vendor/extensions}
|
7
|
+
require "#{File.expand_path(File.dirname(__FILE__) + "/../../../../../../")}/config/environment"
|
8
|
+
else
|
9
|
+
require "#{File.expand_path(File.dirname(__FILE__) + "/../../../../")}/config/environment"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
require "#{RADIANT_ROOT}/spec/spec_helper"
|
13
|
+
|
14
|
+
Dataset::Resolver.default << (File.dirname(__FILE__) + "/datasets")
|
15
|
+
|
16
|
+
if File.directory?(File.dirname(__FILE__) + "/matchers")
|
17
|
+
Dir[File.dirname(__FILE__) + "/matchers/*.rb"].each {|file| require file }
|
18
|
+
end
|
19
|
+
|
20
|
+
Spec::Runner.configure do |config|
|
21
|
+
# config.use_transactional_fixtures = true
|
22
|
+
# config.use_instantiated_fixtures = false
|
23
|
+
# config.fixture_path = RAILS_ROOT + '/spec/fixtures'
|
24
|
+
|
25
|
+
# You can declare fixtures for each behaviour like this:
|
26
|
+
# describe "...." do
|
27
|
+
# fixtures :table_a, :table_b
|
28
|
+
#
|
29
|
+
# Alternatively, if you prefer to declare them only once, you can
|
30
|
+
# do so here, like so ...
|
31
|
+
#
|
32
|
+
# config.global_fixtures = :table_a, :table_b
|
33
|
+
#
|
34
|
+
# If you declare global fixtures, be aware that they will be declared
|
35
|
+
# for all of your examples, even those that don't use them.
|
36
|
+
end
|
data/spec/spec.opts
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "trusty-snippets-extension"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "trusty-snippets-extension"
|
7
|
+
s.version = TrustySnippetsExtension::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = TrustySnippetsExtension::AUTHORS
|
10
|
+
s.email = TrustySnippetsExtension::EMAIL
|
11
|
+
s.homepage = TrustySnippetsExtension::URL
|
12
|
+
s.summary = TrustySnippetsExtension::SUMMARY
|
13
|
+
s.description = TrustySnippetsExtension::DESCRIPTION
|
14
|
+
|
15
|
+
ignores = if File.exist?('.gitignore')
|
16
|
+
File.read('.gitignore').split("\n").inject([]) {|a,p| a + Dir[p] }
|
17
|
+
else
|
18
|
+
[]
|
19
|
+
end
|
20
|
+
s.files = Dir['**/*'] - ignores
|
21
|
+
s.test_files = Dir['test/**/*','spec/**/*','features/**/*'] - ignores
|
22
|
+
# s.executables = Dir['bin/*'] - ignores
|
23
|
+
s.require_paths = ["lib"]
|
24
|
+
|
25
|
+
s.add_dependency "trusty-cms", "~> 1.0.1"
|
26
|
+
end
|
metadata
ADDED
@@ -0,0 +1,120 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: trusty-snippets-extension
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Jim Gay
|
9
|
+
- Eric Sipple
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
date: 2014-11-24 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: trusty-cms
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
19
|
+
requirements:
|
20
|
+
- - ~>
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 1.0.1
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
27
|
+
requirements:
|
28
|
+
- - ~>
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: 1.0.1
|
31
|
+
description: Makes Trusty better by adding snippets!
|
32
|
+
email:
|
33
|
+
- sipple@trustarts.org
|
34
|
+
executables: []
|
35
|
+
extensions: []
|
36
|
+
extra_rdoc_files: []
|
37
|
+
files:
|
38
|
+
- app/controllers/admin/snippets_controller.rb
|
39
|
+
- app/helpers/admin/snippets_helper.rb
|
40
|
+
- app/models/snippet.rb
|
41
|
+
- app/models/snippet_finder.rb
|
42
|
+
- app/models/snippet_tags.rb
|
43
|
+
- app/views/admin/snippets/_form.html.haml
|
44
|
+
- app/views/admin/snippets/_popups.html.haml
|
45
|
+
- app/views/admin/snippets/edit.html.haml
|
46
|
+
- app/views/admin/snippets/index.html.haml
|
47
|
+
- app/views/admin/snippets/new.html.haml
|
48
|
+
- app/views/admin/snippets/remove.html.haml
|
49
|
+
- config/initializers/radiant_config.rb
|
50
|
+
- config/locales/en.yml
|
51
|
+
- config/routes.rb
|
52
|
+
- cucumber.yml
|
53
|
+
- features/admin/configuration.feature
|
54
|
+
- features/admin/pagination.feature
|
55
|
+
- features/admin/snippets_management.feature
|
56
|
+
- features/step_definitions/admin/snippet_steps.rb
|
57
|
+
- features/support/env.rb
|
58
|
+
- features/support/paths.rb
|
59
|
+
- lib/snippets/engine.rb
|
60
|
+
- lib/tasks/snippets_extension_tasks.rake
|
61
|
+
- lib/trusty-snippets-extension.rb
|
62
|
+
- Rakefile
|
63
|
+
- README.md
|
64
|
+
- snippets_extension.rb
|
65
|
+
- spec/ci/before_script
|
66
|
+
- spec/ci/script
|
67
|
+
- spec/controllers/admin/snippets_controller_spec.rb
|
68
|
+
- spec/datasets/snippets_dataset.rb
|
69
|
+
- spec/fixtures/snippet_template.radius
|
70
|
+
- spec/lib/radiant/admin_ui_spec.rb
|
71
|
+
- spec/models/page_spec.rb
|
72
|
+
- spec/models/snippet_finder_spec.rb
|
73
|
+
- spec/models/snippet_spec.rb
|
74
|
+
- spec/models/user_action_observer_spec.rb
|
75
|
+
- spec/snippets_spec_helper.rb
|
76
|
+
- spec/spec.opts
|
77
|
+
- trusty-snippets-extension.gemspec
|
78
|
+
homepage: http://github.com/pgharts/trusty-snippets-extension
|
79
|
+
licenses: []
|
80
|
+
post_install_message:
|
81
|
+
rdoc_options: []
|
82
|
+
require_paths:
|
83
|
+
- lib
|
84
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
85
|
+
none: false
|
86
|
+
requirements:
|
87
|
+
- - ! '>='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
91
|
+
none: false
|
92
|
+
requirements:
|
93
|
+
- - ! '>='
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '0'
|
96
|
+
requirements: []
|
97
|
+
rubyforge_project:
|
98
|
+
rubygems_version: 1.8.29
|
99
|
+
signing_key:
|
100
|
+
specification_version: 3
|
101
|
+
summary: Snippets for Trusty CMS
|
102
|
+
test_files:
|
103
|
+
- spec/ci/before_script
|
104
|
+
- spec/ci/script
|
105
|
+
- spec/controllers/admin/snippets_controller_spec.rb
|
106
|
+
- spec/datasets/snippets_dataset.rb
|
107
|
+
- spec/fixtures/snippet_template.radius
|
108
|
+
- spec/lib/radiant/admin_ui_spec.rb
|
109
|
+
- spec/models/page_spec.rb
|
110
|
+
- spec/models/snippet_finder_spec.rb
|
111
|
+
- spec/models/snippet_spec.rb
|
112
|
+
- spec/models/user_action_observer_spec.rb
|
113
|
+
- spec/snippets_spec_helper.rb
|
114
|
+
- spec/spec.opts
|
115
|
+
- features/admin/configuration.feature
|
116
|
+
- features/admin/pagination.feature
|
117
|
+
- features/admin/snippets_management.feature
|
118
|
+
- features/step_definitions/admin/snippet_steps.rb
|
119
|
+
- features/support/env.rb
|
120
|
+
- features/support/paths.rb
|