sidebar-engine 0.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/CHANGELOG +0 -0
- data/LICENSE +0 -0
- data/README.md +13 -0
- data/lib/scene_sidebar.rb +12 -0
- data/lib/sidebar-engine.rb +4 -0
- data/lib/sidebar.rb +248 -0
- data/lib/sidebar_helper.rb +30 -0
- data/sidebar-engine.gemspec +23 -0
- metadata +86 -0
data/CHANGELOG
ADDED
File without changes
|
data/LICENSE
ADDED
File without changes
|
data/README.md
ADDED
data/lib/sidebar.rb
ADDED
@@ -0,0 +1,248 @@
|
|
1
|
+
class Sidebar
|
2
|
+
include Mongoid::Document
|
3
|
+
field :description, :type => String
|
4
|
+
field :display_name, :type => String
|
5
|
+
field :config, :type=>Hash,:default=>{}
|
6
|
+
belongs_to :scene_sidebar
|
7
|
+
|
8
|
+
class ParamField
|
9
|
+
attr_accessor :key
|
10
|
+
attr_accessor :options
|
11
|
+
attr_accessor :default
|
12
|
+
include ActionView::Helpers::TagHelper
|
13
|
+
include ActionView::Helpers::FormTagHelper
|
14
|
+
include ActionView::Helpers::FormOptionsHelper
|
15
|
+
|
16
|
+
def initialize(key, default, options = { })
|
17
|
+
@key, @default, @options = key.to_s, default, options
|
18
|
+
end
|
19
|
+
|
20
|
+
def label
|
21
|
+
options[:label] || key.humanize.gsub(/url/i, 'URL')
|
22
|
+
end
|
23
|
+
|
24
|
+
def label_html(sidebar)
|
25
|
+
content_tag('label', label)
|
26
|
+
end
|
27
|
+
|
28
|
+
def input_html(sidebar)
|
29
|
+
text_field_tag(input_name(sidebar), sidebar.config[key], { :class => 'span4'})
|
30
|
+
end
|
31
|
+
|
32
|
+
def line_html(sidebar)
|
33
|
+
html = label_html(sidebar)
|
34
|
+
html << content_tag(:div, input_html(sidebar), :class => 'input')
|
35
|
+
end
|
36
|
+
|
37
|
+
def input_name(sidebar)
|
38
|
+
"configure[#{sidebar.id}][#{key}]"
|
39
|
+
end
|
40
|
+
|
41
|
+
def canonicalize(value)
|
42
|
+
value
|
43
|
+
end
|
44
|
+
|
45
|
+
class SelectField < self
|
46
|
+
def input_html(sidebar)
|
47
|
+
select_tag(input_name(sidebar),
|
48
|
+
options_for_select(options[:choices], sidebar.config[key]),
|
49
|
+
options)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
class TextAreaField < self
|
54
|
+
def input_html(sidebar)
|
55
|
+
html_options = { "rows" => "10", "class" => "span4" }.update(options.stringify_keys)
|
56
|
+
text_area_tag(input_name(sidebar), sidebar.config[key], html_options)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
class RadioField < self
|
61
|
+
def input_html(sidebar)
|
62
|
+
options[:choices].collect do |choice|
|
63
|
+
value = value_for(choice)
|
64
|
+
radio_button_tag(input_name(sidebar), value,
|
65
|
+
value == sidebar.config[key], options) +
|
66
|
+
content_tag('label', label_for(choice))
|
67
|
+
end.join("<br />")
|
68
|
+
end
|
69
|
+
|
70
|
+
def label_for(choice)
|
71
|
+
choice.is_a?(Array) ? choice.last : choice.to_s.humanize
|
72
|
+
end
|
73
|
+
|
74
|
+
def value_for(choice)
|
75
|
+
choice.is_a?(Array) ? choice.first : choice
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
class CheckBoxField < self
|
80
|
+
def input_html(sidebar)
|
81
|
+
hidden_field_tag(input_name(sidebar),0)+
|
82
|
+
check_box_tag(input_name(sidebar), 1, sidebar.config[key], options)
|
83
|
+
end
|
84
|
+
|
85
|
+
def line_html(sidebar)
|
86
|
+
input_html(sidebar) + ' ' + label_html(sidebar) + '<br >'
|
87
|
+
end
|
88
|
+
|
89
|
+
def canonicalize(value)
|
90
|
+
case value
|
91
|
+
when "0"
|
92
|
+
false
|
93
|
+
else
|
94
|
+
true
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
def self.build(key, default, options)
|
100
|
+
param_field = class_for(options).new(key, default, options)
|
101
|
+
end
|
102
|
+
|
103
|
+
def self.class_for(options)
|
104
|
+
case options[:input_type]
|
105
|
+
when :text_area
|
106
|
+
TextAreaField
|
107
|
+
when :textarea
|
108
|
+
TextAreaField
|
109
|
+
when :radio
|
110
|
+
RadioField
|
111
|
+
when :checkbox
|
112
|
+
CheckBoxField
|
113
|
+
when :select
|
114
|
+
SelectField
|
115
|
+
else
|
116
|
+
if options[:choices]
|
117
|
+
SelectField
|
118
|
+
else
|
119
|
+
self
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
|
126
|
+
class << self
|
127
|
+
def setting(key, default=nil, options = { })
|
128
|
+
return if instance_methods.include?(key.to_s)
|
129
|
+
param_fields << ParamField.build(key.to_s, default, options)
|
130
|
+
fieldmap.update(key.to_s => param_fields.last)
|
131
|
+
self.send(:define_method, key) do
|
132
|
+
self.config[key.to_s]
|
133
|
+
end
|
134
|
+
self.send(:define_method, "#{key}=") do |newval|
|
135
|
+
self.config[key.to_s] = newval
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
def fieldmap
|
140
|
+
@fieldmap ||= {}
|
141
|
+
end
|
142
|
+
|
143
|
+
def param_fields
|
144
|
+
@param_fields ||= []
|
145
|
+
end
|
146
|
+
|
147
|
+
def param_fields=(newval)
|
148
|
+
@param_fields = newval
|
149
|
+
end
|
150
|
+
|
151
|
+
def description(desc = nil)
|
152
|
+
if desc
|
153
|
+
@description = desc
|
154
|
+
else
|
155
|
+
@description
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
def lifetime(timeout = nil)
|
160
|
+
if timeout
|
161
|
+
@lifetime = timeout
|
162
|
+
else
|
163
|
+
@lifetime
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
def short_name
|
168
|
+
self.to_s.underscore.split(%r{_}).first
|
169
|
+
end
|
170
|
+
|
171
|
+
def path_name
|
172
|
+
self.to_s.underscore
|
173
|
+
end
|
174
|
+
|
175
|
+
def display_name(new_dn = nil)
|
176
|
+
@display_name = new_dn if new_dn
|
177
|
+
@display_name || short_name.humanize
|
178
|
+
end
|
179
|
+
|
180
|
+
def instantiate(attrs = nil, allocating = false)
|
181
|
+
doc = super(attrs,allocating)
|
182
|
+
param_fields.each do |field|
|
183
|
+
unless doc.config.has_key?(field.key)
|
184
|
+
doc.config[field.key] = field.default
|
185
|
+
end
|
186
|
+
end
|
187
|
+
doc
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
191
|
+
def initialize(*args)
|
192
|
+
if block_given?
|
193
|
+
super(*args) { |instance| yield instance }
|
194
|
+
else
|
195
|
+
super(*args)
|
196
|
+
end
|
197
|
+
self.class.param_fields.each do |field|
|
198
|
+
unless config.has_key?(field.key)
|
199
|
+
config[field.key] = field.default
|
200
|
+
end
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
204
|
+
def html_id
|
205
|
+
short_name + '-' + id.to_s
|
206
|
+
end
|
207
|
+
|
208
|
+
def parse_request(params,contents,current_user)
|
209
|
+
end
|
210
|
+
|
211
|
+
def param_fields
|
212
|
+
self.class.param_fields
|
213
|
+
end
|
214
|
+
|
215
|
+
def fieldmap(field = nil)
|
216
|
+
if field
|
217
|
+
self.class.fieldmap[field.to_s]
|
218
|
+
else
|
219
|
+
self.class.fieldmap
|
220
|
+
end
|
221
|
+
end
|
222
|
+
|
223
|
+
def description
|
224
|
+
self.class.description
|
225
|
+
end
|
226
|
+
|
227
|
+
def short_name
|
228
|
+
self.class.short_name
|
229
|
+
end
|
230
|
+
|
231
|
+
def display_name
|
232
|
+
self.class.display_name
|
233
|
+
end
|
234
|
+
|
235
|
+
def content_partial
|
236
|
+
"/#{self.class.path_name}/content"
|
237
|
+
end
|
238
|
+
|
239
|
+
def to_locals_hash
|
240
|
+
param_fields.inject({ :sidebar => self }) do |hash, field|
|
241
|
+
hash.merge(field.key => config[field.key])
|
242
|
+
end
|
243
|
+
end
|
244
|
+
|
245
|
+
def lifetime
|
246
|
+
self.class.lifetime
|
247
|
+
end
|
248
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module SidebarHelper
|
2
|
+
def render_scene_sidebars(scene)
|
3
|
+
scene_htmls = []
|
4
|
+
begin
|
5
|
+
@scene = SceneSidebar.parse_scene(scene)
|
6
|
+
if @scene
|
7
|
+
@scene.sidebars.each do |sb|
|
8
|
+
sb.parse_request(params,content_hash,controller.current_user)
|
9
|
+
scene_htmls << render_sidebar(sb)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
scene_htmls.join
|
14
|
+
end
|
15
|
+
|
16
|
+
def render_sidebar(sidebar)
|
17
|
+
render_to_string(:partial => sidebar.content_partial,
|
18
|
+
:locals => sidebar.to_locals_hash,
|
19
|
+
:layout => false)
|
20
|
+
end
|
21
|
+
|
22
|
+
# get controller instance variables
|
23
|
+
def content_hash
|
24
|
+
hash = {}
|
25
|
+
controller.instance_variables.grep(/@[a-zA-Z]/).map do |var|
|
26
|
+
hash[var.to_s] = controller.instance_variable_get(var)
|
27
|
+
end
|
28
|
+
hash
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
Gem::Specification.new do |gem|
|
4
|
+
gem.name = "sidebar-engine"
|
5
|
+
gem.version = "0.0.1"
|
6
|
+
gem.platform = Gem::Platform::RUBY
|
7
|
+
|
8
|
+
gem.homepage = "https://github.com/totothink/sidebar-engine"
|
9
|
+
gem.description = %q{provide sidbar engine.}
|
10
|
+
gem.summary = gem.description
|
11
|
+
gem.authors = ["Aaron"]
|
12
|
+
gem.email = ["yalong1976@gmail.com"]
|
13
|
+
|
14
|
+
gem.files = Dir["lib/*"] + ["README.md", "LICENSE", "sidebar-engine.gemspec","CHANGELOG"]
|
15
|
+
gem.require_path = "lib"
|
16
|
+
|
17
|
+
gem.required_ruby_version = ">= 1.9.3"
|
18
|
+
|
19
|
+
gem.license = "MIT"
|
20
|
+
|
21
|
+
gem.add_dependency "mongoid", ">= 2.0"
|
22
|
+
gem.add_dependency "rails", ">= 3.2"
|
23
|
+
end
|
metadata
ADDED
@@ -0,0 +1,86 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: sidebar-engine
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Aaron
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-03-28 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: mongoid
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '2.0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '2.0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rails
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '3.2'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '3.2'
|
46
|
+
description: provide sidbar engine.
|
47
|
+
email:
|
48
|
+
- yalong1976@gmail.com
|
49
|
+
executables: []
|
50
|
+
extensions: []
|
51
|
+
extra_rdoc_files: []
|
52
|
+
files:
|
53
|
+
- lib/sidebar-engine.rb
|
54
|
+
- lib/scene_sidebar.rb
|
55
|
+
- lib/sidebar_helper.rb
|
56
|
+
- lib/sidebar.rb
|
57
|
+
- README.md
|
58
|
+
- LICENSE
|
59
|
+
- sidebar-engine.gemspec
|
60
|
+
- CHANGELOG
|
61
|
+
homepage: https://github.com/totothink/sidebar-engine
|
62
|
+
licenses:
|
63
|
+
- MIT
|
64
|
+
post_install_message:
|
65
|
+
rdoc_options: []
|
66
|
+
require_paths:
|
67
|
+
- lib
|
68
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
69
|
+
none: false
|
70
|
+
requirements:
|
71
|
+
- - ! '>='
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: 1.9.3
|
74
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
75
|
+
none: false
|
76
|
+
requirements:
|
77
|
+
- - ! '>='
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: '0'
|
80
|
+
requirements: []
|
81
|
+
rubyforge_project:
|
82
|
+
rubygems_version: 1.8.25
|
83
|
+
signing_key:
|
84
|
+
specification_version: 3
|
85
|
+
summary: provide sidbar engine.
|
86
|
+
test_files: []
|