radiant-snippets-extension 1.0.2 → 1.1.0.alpha
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/app/controllers/admin/snippet_files_controller.rb +3 -0
- data/app/models/snippet_file.rb +49 -0
- data/app/models/snippet_finder.rb +24 -0
- data/{lib → app/models}/snippet_tags.rb +1 -1
- data/app/views/admin/snippet_files/index.html.haml +26 -0
- data/app/views/admin/snippet_files/show.html.haml +19 -0
- data/config/locales/en.yml +3 -0
- data/config/routes.rb +1 -0
- data/lib/radiant-snippets-extension.rb +1 -1
- data/snippets_extension.rb +23 -3
- data/spec/fixtures/snippet_template.radius +1 -0
- data/spec/models/snippet_file_spec.rb +39 -0
- data/spec/models/snippet_finder_spec.rb +20 -0
- metadata +17 -6
@@ -0,0 +1,49 @@
|
|
1
|
+
class SnippetFile < Struct.new(:name, :content)
|
2
|
+
class << self
|
3
|
+
def find_by_name(name)
|
4
|
+
if file(name)
|
5
|
+
self.new(name, self.read(name))
|
6
|
+
end
|
7
|
+
end
|
8
|
+
alias find find_by_name
|
9
|
+
|
10
|
+
def all
|
11
|
+
Dir.glob([root, '/','*',suffix].join('')).collect{ |file_path|
|
12
|
+
name = File.basename(file_path, suffix)
|
13
|
+
content = File.read(file_path)
|
14
|
+
self.new(name, content)
|
15
|
+
}
|
16
|
+
end
|
17
|
+
|
18
|
+
def root
|
19
|
+
@root ||= Rails.root.to_s + '/app/templates/snippets'
|
20
|
+
end
|
21
|
+
|
22
|
+
def suffix
|
23
|
+
'.radius'
|
24
|
+
end
|
25
|
+
|
26
|
+
def path(name)
|
27
|
+
[root, '/', name, suffix].join('')
|
28
|
+
end
|
29
|
+
|
30
|
+
def file(name, collection=Dir.glob(path(name)))
|
31
|
+
@files ||= {}
|
32
|
+
return @files[name] if @files[name]
|
33
|
+
@files[name] = collection.first
|
34
|
+
end
|
35
|
+
|
36
|
+
def read(name, reader=File)
|
37
|
+
reader.read(file(name))
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def to_param
|
42
|
+
name
|
43
|
+
end
|
44
|
+
|
45
|
+
def updated_at
|
46
|
+
time = File.mtime(self.class.file(name))
|
47
|
+
I18n.localize(time, :format => :timestamp)
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
class SnippetFinder
|
2
|
+
class << self
|
3
|
+
def find(id)
|
4
|
+
find_map('find',id)
|
5
|
+
end
|
6
|
+
|
7
|
+
def find_by_name(name)
|
8
|
+
find_map('find_by_name', name)
|
9
|
+
end
|
10
|
+
|
11
|
+
def finder_types
|
12
|
+
[SnippetFile, Snippet]
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def find_map(meth, *args)
|
18
|
+
finder_types.find{|type|
|
19
|
+
found = type.send(meth, *args)
|
20
|
+
return found if found
|
21
|
+
}
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
- @page_title = t('snippet_files') + ' - ' + default_page_title
|
2
|
+
|
3
|
+
.outset
|
4
|
+
= render_region :top
|
5
|
+
%table.index#snippet_files
|
6
|
+
%thead
|
7
|
+
%tr
|
8
|
+
- render_region :thead do |thead|
|
9
|
+
- thead.title_header do
|
10
|
+
%th.name= t('snippet')
|
11
|
+
%tbody
|
12
|
+
- if @snippet_files.any?
|
13
|
+
- @snippet_files.each do |snippet|
|
14
|
+
%tr[snippet]
|
15
|
+
- render_region :tbody, :locals => {:snippet => snippet} do |tbody|
|
16
|
+
- tbody.title_cell do
|
17
|
+
%td.name
|
18
|
+
= link_to image('snippet', :alt => '') + ' ' + snippet.name, admin_snippet_file_url(snippet)
|
19
|
+
- else
|
20
|
+
%tr
|
21
|
+
%td.empty{:colspan => admin.snippet.index.tbody.length}= t('no_snippet_files')
|
22
|
+
|
23
|
+
- render_region :bottom do |bottom|
|
24
|
+
- bottom.new_button do
|
25
|
+
#actions
|
26
|
+
= pagination_for(@snippet_files)
|
@@ -0,0 +1,19 @@
|
|
1
|
+
- @page_title = model.name + ' ' + t('snippet_file') + ' - ' + default_page_title
|
2
|
+
|
3
|
+
- render_region :main do |main|
|
4
|
+
- main.header do
|
5
|
+
%h1= model.name
|
6
|
+
.form_area
|
7
|
+
- render_region :display_content do |display|
|
8
|
+
- display.title do
|
9
|
+
%p.title
|
10
|
+
= t('name') + ':'
|
11
|
+
= model.name
|
12
|
+
- display.content do
|
13
|
+
%p.content
|
14
|
+
= t('body')
|
15
|
+
%br/
|
16
|
+
~ text_area_tag :content, model.content, :class => "textarea large", :style => "width: 95%"
|
17
|
+
- render_region :bottom do |bottom|
|
18
|
+
- bottom.timestamp do
|
19
|
+
= model.updated_at
|
data/config/locales/en.yml
CHANGED
@@ -2,6 +2,8 @@
|
|
2
2
|
en:
|
3
3
|
snippet: 'Snippet'
|
4
4
|
snippets: 'Snippets'
|
5
|
+
snippet_files: 'Snippet Files'
|
6
|
+
snippet_file: 'Snippet File'
|
5
7
|
config:
|
6
8
|
defaults:
|
7
9
|
snippet:
|
@@ -10,6 +12,7 @@ en:
|
|
10
12
|
edit_snippet: 'Edit Snippet'
|
11
13
|
new_snippet: 'New Snippet'
|
12
14
|
no_snippets: 'No Snippets'
|
15
|
+
no_snippet_files: 'No Snippet Files'
|
13
16
|
remove_snippet: 'Remove Snippet'
|
14
17
|
text:
|
15
18
|
snippets:
|
data/config/routes.rb
CHANGED
data/snippets_extension.rb
CHANGED
@@ -19,8 +19,10 @@ class SnippetsExtension < Radiant::Extension
|
|
19
19
|
end
|
20
20
|
|
21
21
|
Radiant::AdminUI.class_eval do
|
22
|
-
attr_accessor :snippet
|
22
|
+
attr_accessor :snippet, :snippet_file
|
23
|
+
|
23
24
|
alias_method :snippets, :snippet
|
25
|
+
alias_method :snippet_files, :snippet_file
|
24
26
|
|
25
27
|
def load_default_snippet_regions
|
26
28
|
OpenStruct.new.tap do |snippet|
|
@@ -38,14 +40,32 @@ class SnippetsExtension < Radiant::Extension
|
|
38
40
|
snippet.new = snippet.edit
|
39
41
|
end
|
40
42
|
end
|
43
|
+
|
44
|
+
def load_default_snippet_file_regions
|
45
|
+
OpenStruct.new.tap do |snippet|
|
46
|
+
snippet.show = Radiant::AdminUI::RegionSet.new do |edit|
|
47
|
+
edit.main.concat %w{ header }
|
48
|
+
edit.display_content.concat %w{ title content }
|
49
|
+
edit.bottom.concat %w{ timestamp }
|
50
|
+
end
|
51
|
+
snippet.index = Radiant::AdminUI::RegionSet.new do |index|
|
52
|
+
index.top.concat %w{}
|
53
|
+
index.thead.concat %w{title_header}
|
54
|
+
index.tbody.concat %w{title_cell}
|
55
|
+
index.bottom.concat %w{new_button}
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
41
59
|
end
|
42
60
|
|
43
|
-
admin.snippet
|
61
|
+
admin.snippet ||= Radiant::AdminUI.load_default_snippet_regions
|
62
|
+
admin.snippet_file ||= Radiant::AdminUI.load_default_snippet_file_regions
|
44
63
|
|
45
|
-
UserActionObserver.instance.send :add_observer!, Snippet
|
64
|
+
UserActionObserver.instance.send :add_observer!, ::Snippet
|
46
65
|
|
47
66
|
tab 'Design' do
|
48
67
|
add_item "Snippets", "/admin/snippets"
|
68
|
+
add_item "Snippet Files", "/admin/snippet_files"
|
49
69
|
end
|
50
70
|
|
51
71
|
end
|
@@ -0,0 +1 @@
|
|
1
|
+
<h1>Hello</h1>
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../snippets_spec_helper.rb')
|
2
|
+
|
3
|
+
describe SnippetFile do
|
4
|
+
|
5
|
+
let(:fixture_file){
|
6
|
+
spec_directory_path = File.expand_path(File.dirname(__FILE__))
|
7
|
+
fixture_directory_path = spec_directory_path + "/fixtures"
|
8
|
+
Dir.glob(fixture_directory_path + 'snippet_template.radius').first
|
9
|
+
}
|
10
|
+
|
11
|
+
it 'has a root in the Rails path' do
|
12
|
+
SnippetFile.root.should == Rails.root.to_s + '/app/templates/snippets'
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'has a file suffix' do
|
16
|
+
SnippetFile.suffix.should == '.radius'
|
17
|
+
end
|
18
|
+
|
19
|
+
it "returns a snippet file from the found file" do
|
20
|
+
mock_file = OpenStruct.new(:name => 'snippet_template')
|
21
|
+
SnippetFile.stub!(:file).with('snippet_template').and_return(mock_file)
|
22
|
+
SnippetFile.stub!(:read).with('snippet_template').and_return('content')
|
23
|
+
SnippetFile.find_by_name('snippet_template').should be_a(SnippetFile)
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'has a file found by name' do
|
27
|
+
SnippetFile.file(name).should == fixture_file
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'returns contents of a named snippet file' do
|
31
|
+
reader = mock('reader')
|
32
|
+
reader.stub!(:read).and_return('content')
|
33
|
+
SnippetFile.read(name, reader).should == 'content'
|
34
|
+
end
|
35
|
+
|
36
|
+
subject{ SnippetFile.new('test','details')}
|
37
|
+
its(:name){ should == 'test' }
|
38
|
+
its(:content){ should == 'details'}
|
39
|
+
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
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: radiant-snippets-extension
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
5
|
-
prerelease:
|
4
|
+
version: 1.1.0.alpha
|
5
|
+
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Jim Gay
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-08-27 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: Makes Radiant better by adding snippets!
|
15
15
|
email:
|
@@ -18,9 +18,15 @@ executables: []
|
|
18
18
|
extensions: []
|
19
19
|
extra_rdoc_files: []
|
20
20
|
files:
|
21
|
+
- app/controllers/admin/snippet_files_controller.rb
|
21
22
|
- app/controllers/admin/snippets_controller.rb
|
22
23
|
- app/helpers/admin/snippets_helper.rb
|
23
24
|
- app/models/snippet.rb
|
25
|
+
- app/models/snippet_file.rb
|
26
|
+
- app/models/snippet_finder.rb
|
27
|
+
- app/models/snippet_tags.rb
|
28
|
+
- app/views/admin/snippet_files/index.html.haml
|
29
|
+
- app/views/admin/snippet_files/show.html.haml
|
24
30
|
- app/views/admin/snippets/_form.html.haml
|
25
31
|
- app/views/admin/snippets/edit.html.haml
|
26
32
|
- app/views/admin/snippets/index.html.haml
|
@@ -37,7 +43,6 @@ files:
|
|
37
43
|
- features/support/env.rb
|
38
44
|
- features/support/paths.rb
|
39
45
|
- lib/radiant-snippets-extension.rb
|
40
|
-
- lib/snippet_tags.rb
|
41
46
|
- lib/tasks/snippets_extension_tasks.rake
|
42
47
|
- radiant-snippets-extension.gemspec
|
43
48
|
- Rakefile
|
@@ -47,8 +52,11 @@ files:
|
|
47
52
|
- spec/ci/script
|
48
53
|
- spec/controllers/admin/snippets_controller_spec.rb
|
49
54
|
- spec/datasets/snippets_dataset.rb
|
55
|
+
- spec/fixtures/snippet_template.radius
|
50
56
|
- spec/lib/radiant/admin_ui_spec.rb
|
51
57
|
- spec/models/page_spec.rb
|
58
|
+
- spec/models/snippet_file_spec.rb
|
59
|
+
- spec/models/snippet_finder_spec.rb
|
52
60
|
- spec/models/snippet_spec.rb
|
53
61
|
- spec/models/user_action_observer_spec.rb
|
54
62
|
- spec/snippets_spec_helper.rb
|
@@ -68,9 +76,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
68
76
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
69
77
|
none: false
|
70
78
|
requirements:
|
71
|
-
- - ! '
|
79
|
+
- - ! '>'
|
72
80
|
- !ruby/object:Gem::Version
|
73
|
-
version:
|
81
|
+
version: 1.3.1
|
74
82
|
requirements: []
|
75
83
|
rubyforge_project:
|
76
84
|
rubygems_version: 1.8.11
|
@@ -82,8 +90,11 @@ test_files:
|
|
82
90
|
- spec/ci/script
|
83
91
|
- spec/controllers/admin/snippets_controller_spec.rb
|
84
92
|
- spec/datasets/snippets_dataset.rb
|
93
|
+
- spec/fixtures/snippet_template.radius
|
85
94
|
- spec/lib/radiant/admin_ui_spec.rb
|
86
95
|
- spec/models/page_spec.rb
|
96
|
+
- spec/models/snippet_file_spec.rb
|
97
|
+
- spec/models/snippet_finder_spec.rb
|
87
98
|
- spec/models/snippet_spec.rb
|
88
99
|
- spec/models/user_action_observer_spec.rb
|
89
100
|
- spec/snippets_spec_helper.rb
|