relevant-widget 0.0.2
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/.gitignore +1 -0
- data/README.md +13 -0
- data/Rakefile +25 -0
- data/lib/relevant/relevant.rb +18 -0
- data/lib/relevant/renderer.rb +16 -0
- data/lib/relevant/version.rb +3 -0
- data/lib/relevant/widget.rb +41 -0
- data/relevant-widget.gemspec +60 -0
- data/spec/relevant/relevant_spec.rb +24 -0
- data/spec/relevant/renderer_spec.rb +15 -0
- data/spec/relevant/widget_spec.rb +32 -0
- data/spec/spec_helper.rb +26 -0
- metadata +109 -0
data/.gitignore
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
relevant-widget-*.gem
|
data/README.md
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
Relevant/Widget
|
2
|
+
===============
|
3
|
+
|
4
|
+
This library is the core of the widget system for Relevant. As a result, it will be a dependency of every widget.
|
5
|
+
|
6
|
+
Registering Widgets
|
7
|
+
-------------------
|
8
|
+
|
9
|
+
In order for Relevant to be aware of your widget you will need to register it. You can do this in the same file as your widget, or you can just call it somewhere else if you'd like it to be optional.
|
10
|
+
|
11
|
+
Relevant.register FooWidget
|
12
|
+
|
13
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require File.dirname(__FILE__) + "/lib/relevant/version.rb"
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'jeweler'
|
6
|
+
Jeweler::Tasks.new do |gemspec|
|
7
|
+
gemspec.version = Relevant::Version
|
8
|
+
gemspec.name = "relevant-widget"
|
9
|
+
gemspec.summary = "Base widget class for your mind!"
|
10
|
+
gemspec.description = "Base class to do widgets for the Relevant raditor"
|
11
|
+
gemspec.email = "opensource@thinkrelevance.com"
|
12
|
+
gemspec.homepage = "http://github.com/relevance/relevant-widget"
|
13
|
+
gemspec.authors = ["Jared Pace", "Rob Sanheim"]
|
14
|
+
gemspec.add_dependency "tilt", "1.1"
|
15
|
+
gemspec.add_development_dependency "rspec", "~> 2.0.0.beta.22"
|
16
|
+
end
|
17
|
+
Jeweler::GemcutterTasks.new
|
18
|
+
|
19
|
+
rescue LoadError
|
20
|
+
puts "Jeweler not available. Install it with: gem install jeweler"
|
21
|
+
end
|
22
|
+
|
23
|
+
require 'rspec/core/rake_task'
|
24
|
+
RSpec::Core::RakeTask.new(:spec)
|
25
|
+
task :default => :spec
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Relevant
|
2
|
+
|
3
|
+
class Renderer
|
4
|
+
def initialize(widget)
|
5
|
+
@widget = widget
|
6
|
+
end
|
7
|
+
|
8
|
+
def to_html
|
9
|
+
return unless @widget.class.template
|
10
|
+
|
11
|
+
template_handler = Tilt[@widget.class.template_format].new { @widget.class.template.strip }
|
12
|
+
template_handler.render(@widget)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require "tilt"
|
2
|
+
require "relevant/relevant"
|
3
|
+
require "relevant/renderer"
|
4
|
+
|
5
|
+
module Relevant
|
6
|
+
module Widget
|
7
|
+
|
8
|
+
def self.included(base)
|
9
|
+
base.extend ClassMethods
|
10
|
+
|
11
|
+
attr_accessor :options
|
12
|
+
end
|
13
|
+
|
14
|
+
module ClassMethods
|
15
|
+
|
16
|
+
def setup(options = {})
|
17
|
+
widget = new
|
18
|
+
widget.options = options
|
19
|
+
|
20
|
+
widget
|
21
|
+
end
|
22
|
+
|
23
|
+
def available_options(options = nil)
|
24
|
+
options.nil? ? @available_options : (@available_options = options)
|
25
|
+
end
|
26
|
+
|
27
|
+
def template_format(format = nil)
|
28
|
+
format.nil? ? @template_format : (@template_format = format)
|
29
|
+
end
|
30
|
+
|
31
|
+
def template(data = nil)
|
32
|
+
data.nil? ? @template : (@template = data)
|
33
|
+
end
|
34
|
+
|
35
|
+
def refresh_every(seconds = nil)
|
36
|
+
seconds.nil? ? @refresh_every : (@refresh_every = seconds)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{relevant-widget}
|
8
|
+
s.version = "0.0.2"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Jared Pace", "Rob Sanheim"]
|
12
|
+
s.date = %q{2010-09-24}
|
13
|
+
s.description = %q{Base class to do widgets for the Relevant raditor}
|
14
|
+
s.email = %q{opensource@thinkrelevance.com}
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"README.md"
|
17
|
+
]
|
18
|
+
s.files = [
|
19
|
+
".gitignore",
|
20
|
+
"README.md",
|
21
|
+
"Rakefile",
|
22
|
+
"lib/relevant/relevant.rb",
|
23
|
+
"lib/relevant/renderer.rb",
|
24
|
+
"lib/relevant/version.rb",
|
25
|
+
"lib/relevant/widget.rb",
|
26
|
+
"relevant-widget.gemspec",
|
27
|
+
"spec/relevant/relevant_spec.rb",
|
28
|
+
"spec/relevant/renderer_spec.rb",
|
29
|
+
"spec/relevant/widget_spec.rb",
|
30
|
+
"spec/spec_helper.rb"
|
31
|
+
]
|
32
|
+
s.homepage = %q{http://github.com/relevance/relevant-widget}
|
33
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
34
|
+
s.require_paths = ["lib"]
|
35
|
+
s.rubygems_version = %q{1.3.7}
|
36
|
+
s.summary = %q{Base widget class for your mind!}
|
37
|
+
s.test_files = [
|
38
|
+
"spec/relevant/relevant_spec.rb",
|
39
|
+
"spec/relevant/renderer_spec.rb",
|
40
|
+
"spec/relevant/widget_spec.rb",
|
41
|
+
"spec/spec_helper.rb"
|
42
|
+
]
|
43
|
+
|
44
|
+
if s.respond_to? :specification_version then
|
45
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
46
|
+
s.specification_version = 3
|
47
|
+
|
48
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
49
|
+
s.add_runtime_dependency(%q<tilt>, ["= 1.1"])
|
50
|
+
s.add_development_dependency(%q<rspec>, ["~> 2.0.0.beta.22"])
|
51
|
+
else
|
52
|
+
s.add_dependency(%q<tilt>, ["= 1.1"])
|
53
|
+
s.add_dependency(%q<rspec>, ["~> 2.0.0.beta.22"])
|
54
|
+
end
|
55
|
+
else
|
56
|
+
s.add_dependency(%q<tilt>, ["= 1.1"])
|
57
|
+
s.add_dependency(%q<rspec>, ["~> 2.0.0.beta.22"])
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Relevant do
|
4
|
+
|
5
|
+
context '#widgets' do
|
6
|
+
around do |example|
|
7
|
+
Relevant.unregister_all!
|
8
|
+
example.run
|
9
|
+
Relevant.unregister_all!
|
10
|
+
end
|
11
|
+
|
12
|
+
it "can unregister_all widgets" do
|
13
|
+
Relevant.register TestWidget
|
14
|
+
Relevant.unregister_all!
|
15
|
+
Relevant.widgets.should == []
|
16
|
+
end
|
17
|
+
|
18
|
+
it "can register widgets" do
|
19
|
+
Relevant.register TestWidget
|
20
|
+
Relevant.widgets.should == [TestWidget]
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Relevant::Renderer do
|
4
|
+
describe "to_html" do
|
5
|
+
it "renders the widgets template" do
|
6
|
+
TestWidget.template "Hello <%= @options[:name] %>"
|
7
|
+
TestWidget.template_format :erb
|
8
|
+
widget = TestWidget.setup(:name => 'Mr. Roboto')
|
9
|
+
|
10
|
+
renderer = Relevant::Renderer.new widget
|
11
|
+
renderer.to_html.should == "Hello Mr. Roboto"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Relevant::Widget do
|
4
|
+
describe "options" do
|
5
|
+
it "tracks the types for form building" do
|
6
|
+
TestWidget.available_options[:name].should == String
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
describe 'template_format' do
|
11
|
+
it "reads the format if given no options" do
|
12
|
+
TestWidget.template_format.should == :erb
|
13
|
+
end
|
14
|
+
|
15
|
+
it "allows sets the format if you pass it" do
|
16
|
+
TestWidget.template_format :haml
|
17
|
+
TestWidget.template_format.should == :haml
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe 'template' do
|
22
|
+
it "reads the template if given no options" do
|
23
|
+
TestWidget.template.should == "Hello <%= @options[:name] %>"
|
24
|
+
end
|
25
|
+
|
26
|
+
it "allows sets the template if you pass it" do
|
27
|
+
TestWidget.template "Hello World"
|
28
|
+
TestWidget.template.should == "Hello World"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'rspec'
|
2
|
+
require 'active_support'
|
3
|
+
require 'active_support/all'
|
4
|
+
|
5
|
+
$LOAD_PATH.unshift "../lib"
|
6
|
+
require "relevant/widget"
|
7
|
+
|
8
|
+
RSpec.configure do |config|
|
9
|
+
config.color_enabled = true
|
10
|
+
config.mock_with :mocha
|
11
|
+
|
12
|
+
config.formatter = :progress
|
13
|
+
config.color_enabled = true
|
14
|
+
config.filter_run :focused => true
|
15
|
+
config.run_all_when_everything_filtered = true
|
16
|
+
config.alias_example_to :fit, :focused => true
|
17
|
+
end
|
18
|
+
|
19
|
+
class TestWidget
|
20
|
+
include Relevant::Widget
|
21
|
+
|
22
|
+
available_options :name => String
|
23
|
+
|
24
|
+
template_format :erb
|
25
|
+
template 'Hello <%= @options[:name] %>'
|
26
|
+
end
|
metadata
ADDED
@@ -0,0 +1,109 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: relevant-widget
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 2
|
9
|
+
version: 0.0.2
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Jared Pace
|
13
|
+
- Rob Sanheim
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2010-09-24 00:00:00 -04:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: tilt
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - "="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
segments:
|
30
|
+
- 1
|
31
|
+
- 1
|
32
|
+
version: "1.1"
|
33
|
+
type: :runtime
|
34
|
+
version_requirements: *id001
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: rspec
|
37
|
+
prerelease: false
|
38
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ~>
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
segments:
|
44
|
+
- 2
|
45
|
+
- 0
|
46
|
+
- 0
|
47
|
+
- beta
|
48
|
+
- 22
|
49
|
+
version: 2.0.0.beta.22
|
50
|
+
type: :development
|
51
|
+
version_requirements: *id002
|
52
|
+
description: Base class to do widgets for the Relevant raditor
|
53
|
+
email: opensource@thinkrelevance.com
|
54
|
+
executables: []
|
55
|
+
|
56
|
+
extensions: []
|
57
|
+
|
58
|
+
extra_rdoc_files:
|
59
|
+
- README.md
|
60
|
+
files:
|
61
|
+
- .gitignore
|
62
|
+
- README.md
|
63
|
+
- Rakefile
|
64
|
+
- lib/relevant/relevant.rb
|
65
|
+
- lib/relevant/renderer.rb
|
66
|
+
- lib/relevant/version.rb
|
67
|
+
- lib/relevant/widget.rb
|
68
|
+
- relevant-widget.gemspec
|
69
|
+
- spec/relevant/relevant_spec.rb
|
70
|
+
- spec/relevant/renderer_spec.rb
|
71
|
+
- spec/relevant/widget_spec.rb
|
72
|
+
- spec/spec_helper.rb
|
73
|
+
has_rdoc: true
|
74
|
+
homepage: http://github.com/relevance/relevant-widget
|
75
|
+
licenses: []
|
76
|
+
|
77
|
+
post_install_message:
|
78
|
+
rdoc_options:
|
79
|
+
- --charset=UTF-8
|
80
|
+
require_paths:
|
81
|
+
- lib
|
82
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
83
|
+
none: false
|
84
|
+
requirements:
|
85
|
+
- - ">="
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
segments:
|
88
|
+
- 0
|
89
|
+
version: "0"
|
90
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
91
|
+
none: false
|
92
|
+
requirements:
|
93
|
+
- - ">="
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
segments:
|
96
|
+
- 0
|
97
|
+
version: "0"
|
98
|
+
requirements: []
|
99
|
+
|
100
|
+
rubyforge_project:
|
101
|
+
rubygems_version: 1.3.7
|
102
|
+
signing_key:
|
103
|
+
specification_version: 3
|
104
|
+
summary: Base widget class for your mind!
|
105
|
+
test_files:
|
106
|
+
- spec/relevant/relevant_spec.rb
|
107
|
+
- spec/relevant/renderer_spec.rb
|
108
|
+
- spec/relevant/widget_spec.rb
|
109
|
+
- spec/spec_helper.rb
|