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 ADDED
File without changes
data/LICENSE ADDED
File without changes
data/README.md ADDED
@@ -0,0 +1,13 @@
1
+ # SidebarEngine
2
+
3
+ This gem provide sidebar engine base on mongoid for rails application.
4
+
5
+ ## Installation
6
+
7
+ Put it in your `Gemfile`:
8
+
9
+ ```ruby
10
+ gem "sidebar-engine"
11
+ ```
12
+
13
+ And run `bundle install`.
@@ -0,0 +1,12 @@
1
+ class SceneSidebar
2
+ include Mongoid::Document
3
+ field :name, :type => String
4
+ field :description, :type => String
5
+ has_many :sidebars
6
+
7
+ class << self
8
+ def parse_scene(scence)
9
+ self.find_by :name => scence.to_s
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,4 @@
1
+ require "sidebar"
2
+ require "scene_sidebar"
3
+ require "sidebar_helper"
4
+ ActionView::Base.send(:include, SidebarHelper)
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: []