radiant-parameterized_snippets-extension 1.0.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.
- data/README +47 -0
- data/Rakefile +120 -0
- data/lib/parameterized_snippets/page_ext.rb +94 -0
- data/lib/radiant-parameterized_snippets-extension.rb +8 -0
- data/lib/tasks/parameterized_snippets_extension_tasks.rake +28 -0
- data/parameterized_snippets_extension.gemspec +23 -0
- data/parameterized_snippets_extension.rb +11 -0
- data/spec/spec.opts +6 -0
- data/spec/spec_helper.rb +37 -0
- metadata +71 -0
data/README
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
= Radiant 'Parameterized Snippets' Extension
|
2
|
+
|
3
|
+
Call snippets with parameters which can be reused in the snippet.
|
4
|
+
|
5
|
+
|
6
|
+
= Installation
|
7
|
+
|
8
|
+
In your Rails app directory:
|
9
|
+
|
10
|
+
git clone git://github.com/manuelmeurer/radiant-parameterized-snippets-extension.git vendor/extensions/parameterized_snippets
|
11
|
+
|
12
|
+
Or download the ZIP or TAR file from http://github.com/manuelmeurer/radiant-parameterized-snippets-extension/ and extract to vendor/extensions/parameterized_snippets
|
13
|
+
|
14
|
+
|
15
|
+
= Usage
|
16
|
+
|
17
|
+
In some page:
|
18
|
+
|
19
|
+
What's up with elephants?
|
20
|
+
|
21
|
+
<r:snippet name="animal_info" animal="elephant" />
|
22
|
+
|
23
|
+
And lions? What do lions do?
|
24
|
+
|
25
|
+
<r:snippet name="animal_info" animal="lion" />
|
26
|
+
|
27
|
+
In snippet 'animal_info':
|
28
|
+
|
29
|
+
<r:unless_var name="animal">
|
30
|
+
What animal do you want info about?
|
31
|
+
Please set the 'animal' parameter when calling this snippet!
|
32
|
+
</r:unless_var>
|
33
|
+
<r:if_var name="animal">
|
34
|
+
<r:if_var name="animal" matches=".*cat.*">
|
35
|
+
So you wanna know something about a cat?
|
36
|
+
Could be a 'house cat', just a 'cat' or a 'caterpillar'...
|
37
|
+
But it is a <r:var name="animal" />!
|
38
|
+
</r:if_var>
|
39
|
+
|
40
|
+
<r:unless_var name="animal" matches="ant|mouse|eagle">
|
41
|
+
Glad you didn't ask about ants, mice or eagles! I don't know JACK about those animals!
|
42
|
+
</r:if_var>
|
43
|
+
|
44
|
+
Enimal? Is there an enimal? If yes, tell me what it is,
|
45
|
+
if no, don't you dare returning an error message! <r:var name="enimal" missing="ignore" />
|
46
|
+
</r:if_var>
|
47
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,120 @@
|
|
1
|
+
# I think this is the one that should be moved to the extension Rakefile template
|
2
|
+
|
3
|
+
# In rails 1.2, plugins aren't available in the path until they're loaded.
|
4
|
+
# Check to see if the rspec plugin is installed first and require
|
5
|
+
# it if it is. If not, use the gem version.
|
6
|
+
|
7
|
+
# Determine where the RSpec plugin is by loading the boot
|
8
|
+
unless defined? RADIANT_ROOT
|
9
|
+
ENV["RAILS_ENV"] = "test"
|
10
|
+
case
|
11
|
+
when ENV["RADIANT_ENV_FILE"]
|
12
|
+
require File.dirname(ENV["RADIANT_ENV_FILE"]) + "/boot"
|
13
|
+
when File.dirname(__FILE__) =~ %r{vendor/radiant/vendor/extensions}
|
14
|
+
require "#{File.expand_path(File.dirname(__FILE__) + "/../../../../../")}/config/boot"
|
15
|
+
else
|
16
|
+
require "#{File.expand_path(File.dirname(__FILE__) + "/../../../")}/config/boot"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
require 'rake'
|
21
|
+
require 'rake/rdoctask'
|
22
|
+
require 'rake/testtask'
|
23
|
+
|
24
|
+
rspec_base = File.expand_path(RADIANT_ROOT + '/vendor/plugins/rspec/lib')
|
25
|
+
$LOAD_PATH.unshift(rspec_base) if File.exist?(rspec_base)
|
26
|
+
require 'spec/rake/spectask'
|
27
|
+
# require 'spec/translator'
|
28
|
+
|
29
|
+
# Cleanup the RADIANT_ROOT constant so specs will load the environment
|
30
|
+
Object.send(:remove_const, :RADIANT_ROOT)
|
31
|
+
|
32
|
+
extension_root = File.expand_path(File.dirname(__FILE__))
|
33
|
+
|
34
|
+
task :default => :spec
|
35
|
+
task :stats => "spec:statsetup"
|
36
|
+
|
37
|
+
desc "Run all specs in spec directory"
|
38
|
+
Spec::Rake::SpecTask.new(:spec) do |t|
|
39
|
+
t.spec_opts = ['--options', "\"#{extension_root}/spec/spec.opts\""]
|
40
|
+
t.spec_files = FileList['spec/**/*_spec.rb']
|
41
|
+
end
|
42
|
+
|
43
|
+
namespace :spec do
|
44
|
+
desc "Run all specs in spec directory with RCov"
|
45
|
+
Spec::Rake::SpecTask.new(:rcov) do |t|
|
46
|
+
t.spec_opts = ['--options', "\"#{extension_root}/spec/spec.opts\""]
|
47
|
+
t.spec_files = FileList['spec/**/*_spec.rb']
|
48
|
+
t.rcov = true
|
49
|
+
t.rcov_opts = ['--exclude', 'spec', '--rails']
|
50
|
+
end
|
51
|
+
|
52
|
+
desc "Print Specdoc for all specs"
|
53
|
+
Spec::Rake::SpecTask.new(:doc) do |t|
|
54
|
+
t.spec_opts = ["--format", "specdoc", "--dry-run"]
|
55
|
+
t.spec_files = FileList['spec/**/*_spec.rb']
|
56
|
+
end
|
57
|
+
|
58
|
+
[:models, :controllers, :views, :helpers].each do |sub|
|
59
|
+
desc "Run the specs under spec/#{sub}"
|
60
|
+
Spec::Rake::SpecTask.new(sub) do |t|
|
61
|
+
t.spec_opts = ['--options', "\"#{extension_root}/spec/spec.opts\""]
|
62
|
+
t.spec_files = FileList["spec/#{sub}/**/*_spec.rb"]
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
# Hopefully no one has written their extensions in pre-0.9 style
|
67
|
+
# desc "Translate specs from pre-0.9 to 0.9 style"
|
68
|
+
# task :translate do
|
69
|
+
# translator = ::Spec::Translator.new
|
70
|
+
# dir = RAILS_ROOT + '/spec'
|
71
|
+
# translator.translate(dir, dir)
|
72
|
+
# end
|
73
|
+
|
74
|
+
# Setup specs for stats
|
75
|
+
task :statsetup do
|
76
|
+
require 'code_statistics'
|
77
|
+
::STATS_DIRECTORIES << %w(Model\ specs spec/models)
|
78
|
+
::STATS_DIRECTORIES << %w(View\ specs spec/views)
|
79
|
+
::STATS_DIRECTORIES << %w(Controller\ specs spec/controllers)
|
80
|
+
::STATS_DIRECTORIES << %w(Helper\ specs spec/views)
|
81
|
+
::CodeStatistics::TEST_TYPES << "Model specs"
|
82
|
+
::CodeStatistics::TEST_TYPES << "View specs"
|
83
|
+
::CodeStatistics::TEST_TYPES << "Controller specs"
|
84
|
+
::CodeStatistics::TEST_TYPES << "Helper specs"
|
85
|
+
::STATS_DIRECTORIES.delete_if {|a| a[0] =~ /test/}
|
86
|
+
end
|
87
|
+
|
88
|
+
namespace :db do
|
89
|
+
namespace :fixtures do
|
90
|
+
desc "Load fixtures (from spec/fixtures) into the current environment's database. Load specific fixtures using FIXTURES=x,y"
|
91
|
+
task :load => :environment do
|
92
|
+
require 'active_record/fixtures'
|
93
|
+
ActiveRecord::Base.establish_connection(RAILS_ENV.to_sym)
|
94
|
+
(ENV['FIXTURES'] ? ENV['FIXTURES'].split(/,/) : Dir.glob(File.join(RAILS_ROOT, 'spec', 'fixtures', '*.{yml,csv}'))).each do |fixture_file|
|
95
|
+
Fixtures.create_fixtures('spec/fixtures', File.basename(fixture_file, '.*'))
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
desc 'Generate documentation for the parameterized_snippets extension.'
|
103
|
+
Rake::RDocTask.new(:rdoc) do |rdoc|
|
104
|
+
rdoc.rdoc_dir = 'rdoc'
|
105
|
+
rdoc.title = 'ParameterizedSnippetsExtension'
|
106
|
+
rdoc.options << '--line-numbers' << '--inline-source'
|
107
|
+
rdoc.rdoc_files.include('README')
|
108
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
109
|
+
end
|
110
|
+
|
111
|
+
# For extensions that are in transition
|
112
|
+
desc 'Test the parameterized_snippets extension.'
|
113
|
+
Rake::TestTask.new(:test) do |t|
|
114
|
+
t.libs << 'lib'
|
115
|
+
t.pattern = 'test/**/*_test.rb'
|
116
|
+
t.verbose = true
|
117
|
+
end
|
118
|
+
|
119
|
+
# Load any custom rakefiles for extension
|
120
|
+
Dir[File.dirname(__FILE__) + '/tasks/*.rake'].sort.each { |f| require f }
|
@@ -0,0 +1,94 @@
|
|
1
|
+
module ParameterizedSnippets
|
2
|
+
module PageExt
|
3
|
+
|
4
|
+
include Radiant::Taggable
|
5
|
+
|
6
|
+
desc %{
|
7
|
+
Renders the containing elements only if the snippet was called with a certain parameter.
|
8
|
+
If an additional "matches" parameter containing a regular expression is used, the containing
|
9
|
+
elements are only rendered if the parameter exists and matches the regular expression.
|
10
|
+
|
11
|
+
*Usage:*
|
12
|
+
|
13
|
+
<pre><code><r:if_var name="parameter_name" [matches="regex"]>...</r:if_var></code></pre>
|
14
|
+
|
15
|
+
*Example:*
|
16
|
+
|
17
|
+
Some page:
|
18
|
+
|
19
|
+
<pre><code><r:snippet name="animal_info" animal="elephant" /></code></pre>
|
20
|
+
|
21
|
+
animal_info snippet:
|
22
|
+
|
23
|
+
<pre><code><r:if_var name="animal" matches=".le(?:ph|f)ant">...</r:if_var></code></pre>
|
24
|
+
}
|
25
|
+
tag 'snippet:if_var' do |tag|
|
26
|
+
tag.expand if var_exists_and_matches(tag)
|
27
|
+
end
|
28
|
+
|
29
|
+
desc %{
|
30
|
+
The opposite of the @if_var@ tag.
|
31
|
+
|
32
|
+
*Usage:*
|
33
|
+
|
34
|
+
<pre><code><r:unless_var name="parameter_name" [matches="regex"]>...</r:unless_var></code></pre>
|
35
|
+
}
|
36
|
+
tag 'snippet:unless_var' do |tag|
|
37
|
+
tag.expand unless var_exists_and_matches(tag)
|
38
|
+
end
|
39
|
+
|
40
|
+
desc %{
|
41
|
+
Outputs the value of the parameter.
|
42
|
+
If the value cannot be found, an error message or, if you use the 'missing' parameter, nothing is shown.
|
43
|
+
|
44
|
+
*Usage:*
|
45
|
+
|
46
|
+
<pre><code><r:var name="parameter_name" [missing="ignore"] /></code></pre>
|
47
|
+
|
48
|
+
*Example:*
|
49
|
+
|
50
|
+
Some page:
|
51
|
+
|
52
|
+
<pre><code><r:snippet name="animal_info" animal="elephant" /></code></pre>
|
53
|
+
|
54
|
+
animal_info snippet:
|
55
|
+
|
56
|
+
<pre><code><r:var name="animal" /> # Outputs 'elephant'
|
57
|
+
<r:var name="enimal" missing="ignore" /> # Outputs nothing</code></pre>
|
58
|
+
}
|
59
|
+
tag 'snippet:var' do |tag|
|
60
|
+
ignore_missing = tag.attr['missing'] == 'ignore'
|
61
|
+
var = check_for_attr(tag, 'name')
|
62
|
+
tag_binding = get_snippet_tag_binding(tag)
|
63
|
+
if tag_binding && tag_binding.attr[var]
|
64
|
+
tag_binding.attr[var]
|
65
|
+
else
|
66
|
+
ignore_missing ? '' : "Could not find parameter '#{var}' in snippet '#{tag_binding.attributes['name']}'."
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
protected
|
71
|
+
|
72
|
+
def check_for_attr(tag, attr)
|
73
|
+
returning type = tag.attr[attr.to_s].to_s do
|
74
|
+
raise TagError, "Please define the '#{attr}' attribute for the tag '#{tag.name}'." unless type
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def get_snippet_tag_binding(tag)
|
79
|
+
tag.context.instance_variable_get(:@tag_binding_stack).reverse.detect { |tag_binding| tag_binding.name == 'snippet' }
|
80
|
+
end
|
81
|
+
|
82
|
+
def var_exists_and_matches(tag)
|
83
|
+
var = check_for_attr(tag, 'name')
|
84
|
+
tag_binding = get_snippet_tag_binding(tag)
|
85
|
+
if tag.attr['matches']
|
86
|
+
tag_binding.attr[var] =~ /^#{tag.attr['matches']}$/
|
87
|
+
else
|
88
|
+
tag_binding.attr[var]
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
@@ -0,0 +1,8 @@
|
|
1
|
+
module RadiantParameterizedSnippetsExtension
|
2
|
+
AUTHORS = 'Manuel Meurer, Michael Starke (gemification)'
|
3
|
+
EMAIL = 'manuel.meurer@gmail.com'
|
4
|
+
DESCRIPTION = 'Allow sending parameters to snippets'
|
5
|
+
URL = 'http://github.com/mstarke/radiant-parameterized-snippets-extension'
|
6
|
+
VERSION = '1.0.1'
|
7
|
+
SUMMARY = 'Parameters in snippets'
|
8
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
namespace :radiant do
|
2
|
+
namespace :extensions do
|
3
|
+
namespace :parameterized_snippets do
|
4
|
+
|
5
|
+
desc "Runs the migration of the Parameterized Snippets extension"
|
6
|
+
task :migrate => :environment do
|
7
|
+
require 'radiant/extension_migrator'
|
8
|
+
if ENV["VERSION"]
|
9
|
+
ParameterizedSnippetsExtension.migrator.migrate(ENV["VERSION"].to_i)
|
10
|
+
else
|
11
|
+
ParameterizedSnippetsExtension.migrator.migrate
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
desc "Copies public assets of the Parameterized Snippets to the instance public/ directory."
|
16
|
+
task :update => :environment do
|
17
|
+
is_svn_or_dir = proc {|path| path =~ /\.svn/ || File.directory?(path) }
|
18
|
+
Dir[ParameterizedSnippetsExtension.root + "/public/**/*"].reject(&is_svn_or_dir).each do |file|
|
19
|
+
path = file.sub(ParameterizedSnippetsExtension.root, '')
|
20
|
+
directory = File.dirname(path)
|
21
|
+
puts "Copying #{path}..."
|
22
|
+
mkdir_p RAILS_ROOT + directory
|
23
|
+
cp file, RAILS_ROOT + path
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "radiant-parameterized_snippets-extension"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "radiant-parameterized_snippets-extension"
|
7
|
+
s.version = RadiantParameterizedSnippetsExtension::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = RadiantParameterizedSnippetsExtension::AUTHORS
|
10
|
+
s.email = RadiantParameterizedSnippetsExtension::EMAIL
|
11
|
+
s.homepage = RadiantParameterizedSnippetsExtension::URL
|
12
|
+
s.summary = RadiantParameterizedSnippetsExtension::SUMMARY
|
13
|
+
s.description = RadiantParameterizedSnippetsExtension::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.require_paths = ["lib"]
|
23
|
+
end
|
data/spec/spec.opts
ADDED
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,37 @@
|
|
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
|
+
if File.directory?(File.dirname(__FILE__) + "/scenarios")
|
15
|
+
Scenario.load_paths.unshift File.dirname(__FILE__) + "/scenarios"
|
16
|
+
end
|
17
|
+
if File.directory?(File.dirname(__FILE__) + "/matchers")
|
18
|
+
Dir[File.dirname(__FILE__) + "/matchers/*.rb"].each {|file| require file }
|
19
|
+
end
|
20
|
+
|
21
|
+
Spec::Runner.configure do |config|
|
22
|
+
# config.use_transactional_fixtures = true
|
23
|
+
# config.use_instantiated_fixtures = false
|
24
|
+
# config.fixture_path = RAILS_ROOT + '/spec/fixtures'
|
25
|
+
|
26
|
+
# You can declare fixtures for each behaviour like this:
|
27
|
+
# describe "...." do
|
28
|
+
# fixtures :table_a, :table_b
|
29
|
+
#
|
30
|
+
# Alternatively, if you prefer to declare them only once, you can
|
31
|
+
# do so here, like so ...
|
32
|
+
#
|
33
|
+
# config.global_fixtures = :table_a, :table_b
|
34
|
+
#
|
35
|
+
# If you declare global fixtures, be aware that they will be declared
|
36
|
+
# for all of your examples, even those that don't use them.
|
37
|
+
end
|
metadata
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: radiant-parameterized_snippets-extension
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 1
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
version: 1.0.1
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Manuel Meurer, Michael Starke (gemification)
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2012-10-04 00:00:00 +02:00
|
18
|
+
default_executable:
|
19
|
+
dependencies: []
|
20
|
+
|
21
|
+
description: Allow sending parameters to snippets
|
22
|
+
email: manuel.meurer@gmail.com
|
23
|
+
executables: []
|
24
|
+
|
25
|
+
extensions: []
|
26
|
+
|
27
|
+
extra_rdoc_files: []
|
28
|
+
|
29
|
+
files:
|
30
|
+
- lib/parameterized_snippets/page_ext.rb
|
31
|
+
- lib/radiant-parameterized_snippets-extension.rb
|
32
|
+
- lib/tasks/parameterized_snippets_extension_tasks.rake
|
33
|
+
- parameterized_snippets_extension.gemspec
|
34
|
+
- parameterized_snippets_extension.rb
|
35
|
+
- Rakefile
|
36
|
+
- README
|
37
|
+
- spec/spec.opts
|
38
|
+
- spec/spec_helper.rb
|
39
|
+
has_rdoc: true
|
40
|
+
homepage: http://github.com/mstarke/radiant-parameterized-snippets-extension
|
41
|
+
licenses: []
|
42
|
+
|
43
|
+
post_install_message:
|
44
|
+
rdoc_options: []
|
45
|
+
|
46
|
+
require_paths:
|
47
|
+
- lib
|
48
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
49
|
+
requirements:
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
segments:
|
53
|
+
- 0
|
54
|
+
version: "0"
|
55
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - ">="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
segments:
|
60
|
+
- 0
|
61
|
+
version: "0"
|
62
|
+
requirements: []
|
63
|
+
|
64
|
+
rubyforge_project:
|
65
|
+
rubygems_version: 1.3.6
|
66
|
+
signing_key:
|
67
|
+
specification_version: 3
|
68
|
+
summary: Parameters in snippets
|
69
|
+
test_files:
|
70
|
+
- spec/spec.opts
|
71
|
+
- spec/spec_helper.rb
|