simonmenke-mr_henry 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/License.txt +20 -0
- data/README +8 -0
- data/about.yml +7 -0
- data/app/controllers/lalala/base_controller.rb +8 -0
- data/app/helpers/lalala/base_helper.rb +47 -0
- data/app/helpers/lalala/tabs_helper.rb +96 -0
- data/app/views/lalala/layouts/application.html.erb +39 -0
- data/config/routes.rb +0 -0
- data/generators/mr_resource/USAGE +25 -0
- data/generators/mr_resource/mr_resource_generator.rb +103 -0
- data/generators/mr_resource/templates/controller.rb +24 -0
- data/generators/mr_resource/templates/functional_test.rb +45 -0
- data/generators/mr_resource/templates/helper.rb +2 -0
- data/generators/mr_resource/templates/partial_form.html.erb +14 -0
- data/generators/mr_resource/templates/partial_item.html.erb +3 -0
- data/generators/mr_resource/templates/view_edit.html.erb +2 -0
- data/generators/mr_resource/templates/view_index.html.erb +7 -0
- data/generators/mr_resource/templates/view_new.html.erb +2 -0
- data/generators/mr_resource/templates/view_show.html.erb +14 -0
- data/lib/mr_henry.rb +4 -0
- data/lib/mr_henry/action_controller.rb +5 -0
- data/lib/mr_henry/action_controller/handles_resource.rb +85 -0
- data/lib/mr_henry/generator.rb +5 -0
- data/lib/mr_henry/generator/create.rb +68 -0
- data/lib/mr_henry/generator/destroy.rb +51 -0
- data/lib/mr_henry/generator/update.rb +41 -0
- data/lib/mr_henry/version.rb +10 -0
- data/lib/tasks/passenger.rake +5 -0
- data/public/images/error.png +0 -0
- data/public/images/handle.png +0 -0
- data/public/images/henry.png +0 -0
- data/public/images/pointer.gif +0 -0
- data/public/images/spinner.gif +0 -0
- data/public/images/tab-active.png +0 -0
- data/public/images/tab-hover.png +0 -0
- data/public/javascripts/c_b_s.js +16 -0
- data/public/javascripts/lang.cbs +69 -0
- data/public/javascripts/lowpro.js +320 -0
- data/public/stylesheets/lalala.css +367 -0
- data/public/stylesheets/lalala_custom.css +0 -0
- data/rails/init.rb +35 -0
- data/setup/setup.rb +6 -0
- metadata +149 -0
@@ -0,0 +1,14 @@
|
|
1
|
+
<%% form_for([:lalala, <%= singular_name %>]) do |f| %>
|
2
|
+
|
3
|
+
<% for attribute in attributes -%>
|
4
|
+
<div>
|
5
|
+
<%%= f.label :<%= attribute.name %> %>
|
6
|
+
<%%= f.<%= attribute.field_type %> :<%= attribute.name %> %>
|
7
|
+
</div>
|
8
|
+
<% end -%>
|
9
|
+
<div class="button">
|
10
|
+
<%%= f.submit (<%= singular_name %>.new_record? ? "Create" : "Update") %>
|
11
|
+
<%%= link_to "Cancel", lalala_<%= plural_name %>_path %>
|
12
|
+
</div>
|
13
|
+
|
14
|
+
<%% end %>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<h1 id="title"><%= singular_name %></h1>
|
2
|
+
|
3
|
+
<div class="actions">
|
4
|
+
<%%= link_to "Edit", [:edit, :lalala, <%= singular_name %>] %>
|
5
|
+
<%%= link_to "Delete", [:lalala, <%= singular_name %>], :method => :delete, :confirm => "Are you sure?" %>
|
6
|
+
</div>
|
7
|
+
|
8
|
+
<% for attribute in attributes -%>
|
9
|
+
<p>
|
10
|
+
<b><%= attribute.column.human_name %>:</b>
|
11
|
+
<%%=h <%= singular_name %>.<%= attribute.name %> %>
|
12
|
+
</p>
|
13
|
+
|
14
|
+
<% end -%>
|
data/lib/mr_henry.rb
ADDED
@@ -0,0 +1,85 @@
|
|
1
|
+
|
2
|
+
module MrHenry
|
3
|
+
module ActionController
|
4
|
+
module HandlesResource
|
5
|
+
|
6
|
+
def self.included(target)
|
7
|
+
target.send :extend, ::MrHenry::ActionController::HandlesResource::Macros
|
8
|
+
end
|
9
|
+
|
10
|
+
module Macros
|
11
|
+
|
12
|
+
def resource(name,options={})
|
13
|
+
options.reverse_merge! :param => :id
|
14
|
+
parent = options[:from].nil? ? nil : options[:from].to_s.underscore.singularize
|
15
|
+
|
16
|
+
klass = name.to_s.classify
|
17
|
+
singular_name = klass.underscore.singularize
|
18
|
+
association = singular_name
|
19
|
+
if parent.nil?
|
20
|
+
singular_finder = %(#{klass}.find(params[:#{options[:param]}]))
|
21
|
+
singular_builder = %(#{klass}.new(params[:#{singular_name}]))
|
22
|
+
else
|
23
|
+
singular_finder = %(#{parent}.#{association})
|
24
|
+
singular_builder = %(#{parent}.#{association}.build(params[:#{singular_name}]))
|
25
|
+
end
|
26
|
+
|
27
|
+
generate_resource_method(singular_name, options[:param], singular_finder, singular_builder)
|
28
|
+
end
|
29
|
+
|
30
|
+
def resources(name,options={})
|
31
|
+
options.reverse_merge! :paginate => false, :param => :id
|
32
|
+
parent = options[:from].nil? ? nil : options[:from].to_s.underscore.singularize
|
33
|
+
|
34
|
+
klass = name.to_s.classify
|
35
|
+
singular_name = klass.underscore.singularize
|
36
|
+
plural_name = singular_name.pluralize
|
37
|
+
association = plural_name
|
38
|
+
finder_method = options[:paginate] ? "paginate" : "find"
|
39
|
+
finder_options = Array.new
|
40
|
+
finder_options << %(:all)
|
41
|
+
finder_options << %(:page => params[:page]) if options[:paginate]
|
42
|
+
finder_options << %(:order => '#{options[:order]}') unless options[:order].nil?
|
43
|
+
if parent.nil?
|
44
|
+
singular_finder = %(#{klass}.find(params[:#{options[:param]}]))
|
45
|
+
singular_builder = %(#{klass}.new(params[:#{singular_name}]))
|
46
|
+
plural_finder = %(#{klass}.#{finder_method}(#{finder_options.join(', ')}))
|
47
|
+
else
|
48
|
+
singular_finder = %(#{parent}.#{association}.find(params[:#{options[:param]}]))
|
49
|
+
singular_builder = %(#{parent}.#{association}.build(params[:#{singular_name}]))
|
50
|
+
plural_finder = %(#{parent}.#{association}.#{finder_method}(#{finder_options.join(', ')}))
|
51
|
+
end
|
52
|
+
|
53
|
+
generate_resource_method(singular_name, options[:param], singular_finder, singular_builder)
|
54
|
+
generate_resources_method(plural_name, plural_finder)
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
|
59
|
+
def generate_resource_method(name, param, finder, builder)
|
60
|
+
class_eval %(
|
61
|
+
def #{name}
|
62
|
+
@#{name} ||= if params[:#{param}]
|
63
|
+
#{finder}
|
64
|
+
else
|
65
|
+
#{builder}
|
66
|
+
end
|
67
|
+
end
|
68
|
+
helper_method :#{name}
|
69
|
+
private :#{name})
|
70
|
+
end
|
71
|
+
|
72
|
+
def generate_resources_method(name, finder)
|
73
|
+
class_eval %(
|
74
|
+
def #{name}
|
75
|
+
@#{name} ||= #{finder}
|
76
|
+
end
|
77
|
+
helper_method :#{name}
|
78
|
+
private :#{name})
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
|
2
|
+
module MrHenry
|
3
|
+
module Generator
|
4
|
+
module Create
|
5
|
+
|
6
|
+
def plugin(repo)
|
7
|
+
logger.plugin repo
|
8
|
+
system(%{script/plugin install #{repo} > /dev/null 2>&1})
|
9
|
+
end
|
10
|
+
|
11
|
+
def patch(patch_file, target_file)
|
12
|
+
patch_file = source_path(File.join("..", "patches", patch_file))
|
13
|
+
target_file = destination_path(target_file)
|
14
|
+
logger.patch target_file
|
15
|
+
system(%{patch -i '#{patch_file}' '#{target_file}' > /dev/null 2>&1})
|
16
|
+
end
|
17
|
+
|
18
|
+
def drop(target_file)
|
19
|
+
target_file = destination_path(target_file)
|
20
|
+
logger.drop target_file
|
21
|
+
system(%{rm -fr '#{target_file}' > /dev/null 2>&1})
|
22
|
+
end
|
23
|
+
|
24
|
+
def route_lalala_resources(*resources)
|
25
|
+
resource_list = resources.map { |r| r.to_sym.inspect }.join(', ')
|
26
|
+
sentinel = ' map.namespace :lalala do |lalala|'
|
27
|
+
|
28
|
+
logger.route_lalala "lalala.resources #{resource_list}"
|
29
|
+
unless options[:pretend]
|
30
|
+
gsub_file 'config/routes.rb', /(#{Regexp.escape(sentinel)})/mi do |match|
|
31
|
+
"#{match}\n lalala.resources #{resource_list}"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def lalala_menu(name, resource)
|
37
|
+
sentinel = " <div id=\"menu\">\n "
|
38
|
+
|
39
|
+
logger.menu_lalala "menu_item(\"#{name}\", :lalala_#{resource}_path)"
|
40
|
+
unless options[:pretend]
|
41
|
+
gsub_file 'app/views/lalala/layouts/application.html.erb', /(#{Regexp.escape(sentinel)})/mi do |match|
|
42
|
+
"#{match}\n <%= menu_item(\"#{name}\", :lalala_#{resource}_path) %>"
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def asset(relative_source, *rest, &block)
|
48
|
+
file(File.join("..", "assets", relative_source), *rest, &block)
|
49
|
+
end
|
50
|
+
|
51
|
+
def add_gem(gem, c={})
|
52
|
+
sentinel = " # config.gem \"aws-s3\", :lib => \"aws/s3\""
|
53
|
+
|
54
|
+
logger.add_gem "config.gem '#{gem}', #{c.inspect}"
|
55
|
+
unless options[:pretend]
|
56
|
+
gsub_file 'config/environment.rb', /(#{Regexp.escape(sentinel)})/mi do |match|
|
57
|
+
"#{match}\n config.gem '#{gem}', #{c.inspect}"
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def reset_session_id
|
63
|
+
gsub_file 'config/environment.rb', /\:session_key => '[^']+',/mi, ":session_key => '_session_id',"
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
|
2
|
+
module MrHenry
|
3
|
+
module Generator
|
4
|
+
module Destroy
|
5
|
+
|
6
|
+
def plugin(repo)
|
7
|
+
logger.plugin repo
|
8
|
+
system(%{script/plugin remove #{repo} > /dev/null 2>&1})
|
9
|
+
end
|
10
|
+
|
11
|
+
def patch(patch_file, target_file)
|
12
|
+
patch_file = source_path(File.join("..", "patches", patch_file))
|
13
|
+
target_file = destination_path(target_file)
|
14
|
+
logger.patch target_file
|
15
|
+
system(%{patch -R -i '#{patch_file}' '#{target_file}' > /dev/null 2>&1})
|
16
|
+
end
|
17
|
+
|
18
|
+
def drop(target_file)
|
19
|
+
# do nothing
|
20
|
+
end
|
21
|
+
|
22
|
+
def route_lalala_resources(*resources)
|
23
|
+
resource_list = resources.map { |r| r.to_sym.inspect }.join(', ')
|
24
|
+
look_for = "\n lalala.resources #{resource_list}"
|
25
|
+
logger.route_lalala "lalala.resources #{resource_list}"
|
26
|
+
gsub_file 'config/routes.rb', /(#{look_for})/mi, ''
|
27
|
+
end
|
28
|
+
|
29
|
+
def lalala_menu(name, resource)
|
30
|
+
look_for = "\n <%= menu_item(\"#{name}\", :lalala_#{resource}_path) %>"
|
31
|
+
logger.menu_lalala "menu_item(\"#{name}\", :lalala_#{resource}_path)"
|
32
|
+
gsub_file 'app/views/lalala/layouts/application.html.erb', /(#{look_for})/mi, ''
|
33
|
+
end
|
34
|
+
|
35
|
+
def asset(relative_source, *rest, &block)
|
36
|
+
file(File.join("..", "assets", relative_source), *rest, &block)
|
37
|
+
end
|
38
|
+
|
39
|
+
def reset_session_id
|
40
|
+
# do nothing
|
41
|
+
end
|
42
|
+
|
43
|
+
def add_gem(gem, c={})
|
44
|
+
look_for = "\n config.gem '#{gem}', #{c.inspect}"
|
45
|
+
logger.add_gem "config.gem '#{gem}', #{c.inspect}"
|
46
|
+
gsub_file 'config/environment.rb', /(#{Regexp.escape(look_for)})/mi, ''
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
|
2
|
+
module MrHenry
|
3
|
+
module Generator
|
4
|
+
module Update
|
5
|
+
|
6
|
+
def plugin(repo)
|
7
|
+
logger.plugin repo
|
8
|
+
system(%{script/plugin update #{repo} > /dev/null 2>&1})
|
9
|
+
end
|
10
|
+
|
11
|
+
def patch(patch_file, target_file)
|
12
|
+
# do nothing
|
13
|
+
end
|
14
|
+
|
15
|
+
def drop(target_file)
|
16
|
+
# do nothing
|
17
|
+
end
|
18
|
+
|
19
|
+
def route_lalala_resources(*resources)
|
20
|
+
# do nothing
|
21
|
+
end
|
22
|
+
|
23
|
+
def lalala_menu(name, resource)
|
24
|
+
# do nothing
|
25
|
+
end
|
26
|
+
|
27
|
+
def add_gem(*args)
|
28
|
+
# do nothing
|
29
|
+
end
|
30
|
+
|
31
|
+
def reset_session_id
|
32
|
+
# do nothing
|
33
|
+
end
|
34
|
+
|
35
|
+
def asset(relative_source, *rest, &block)
|
36
|
+
file(File.join("..", "assets", relative_source), *rest, &block)
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,16 @@
|
|
1
|
+
// CSS Browser Selector v0.2.5
|
2
|
+
// Documentation: http://rafael.adm.br/css_browser_selector
|
3
|
+
// License: http://creativecommons.org/licenses/by/2.5/
|
4
|
+
// Author: Rafael Lima (http://rafael.adm.br)
|
5
|
+
// Contributors: http://rafael.adm.br/css_browser_selector#contributors
|
6
|
+
|
7
|
+
var css_browser_selector = function() {
|
8
|
+
var
|
9
|
+
ua=navigator.userAgent.toLowerCase(),
|
10
|
+
is=function(t){ return ua.indexOf(t) != -1; },
|
11
|
+
h=document.getElementsByTagName('html')[0],
|
12
|
+
b=(!(/opera|webtv/i.test(ua))&&/msie (\d)/.test(ua))?('ie ie'+RegExp.$1):is('gecko/')? 'gecko':is('opera/9')?'opera opera9':/opera (\d)/.test(ua)?'opera opera'+RegExp.$1:is('konqueror')?'konqueror':is('applewebkit/')?'webkit safari':is('mozilla/')?'gecko':'',
|
13
|
+
os=(is('x11')||is('linux'))?' linux':is('mac')?' mac':is('win')?' win':'';
|
14
|
+
var c=b+os+' js';
|
15
|
+
h.className += h.className?' '+c:c;
|
16
|
+
}();
|
@@ -0,0 +1,69 @@
|
|
1
|
+
|
2
|
+
@behavior LanguageButton {
|
3
|
+
initialize(parent) {
|
4
|
+
this.parent = parent;
|
5
|
+
}
|
6
|
+
onchange {
|
7
|
+
var index = this.element.selectedIndex;
|
8
|
+
var option = this.element.options[index];
|
9
|
+
this.parent._selectLanguage(option.value);
|
10
|
+
return false;
|
11
|
+
}
|
12
|
+
}
|
13
|
+
|
14
|
+
@behavior LanguageChooser {
|
15
|
+
initialize {
|
16
|
+
var self = this;
|
17
|
+
self.languages = [];
|
18
|
+
self.elements_by_language = {};
|
19
|
+
self.default_language = self.element.readAttribute('lang');
|
20
|
+
self.current_language = null;
|
21
|
+
|
22
|
+
$$('.lang').each(function(element){
|
23
|
+
var lang = element.readAttribute('lang');
|
24
|
+
self.languages.push(lang);
|
25
|
+
if (!self.elements_by_language[lang]) { self.elements_by_language[lang] = []; }
|
26
|
+
self.elements_by_language[lang].push(element);
|
27
|
+
element.hide();
|
28
|
+
});
|
29
|
+
|
30
|
+
self.languages = self.languages.uniq();
|
31
|
+
|
32
|
+
self._buildSelectTag();
|
33
|
+
self._selectLanguage(self.default_language);
|
34
|
+
}
|
35
|
+
|
36
|
+
_buildSelectTag {
|
37
|
+
var html = '';
|
38
|
+
var default_language = this.default_language;
|
39
|
+
html += 'languages: <select id="lang_chooser_select_tag">';
|
40
|
+
this.languages.each(function(lang){
|
41
|
+
html += '<option value="'+lang+'" '+(default_language == lang ? 'selected="selected"' : '')+'>'+lang+'</option>';
|
42
|
+
});
|
43
|
+
html += '</select>';
|
44
|
+
this.element.insert(html);
|
45
|
+
LanguageButton.attach($('lang_chooser_select_tag'), this);
|
46
|
+
}
|
47
|
+
|
48
|
+
_selectLanguage(lang) {
|
49
|
+
var self = this;
|
50
|
+
if (self.current_language) {
|
51
|
+
self.elements_by_language[self.current_language].each(function(element){
|
52
|
+
element.hide();
|
53
|
+
});
|
54
|
+
|
55
|
+
self.elements_by_language[lang].each(function(element){
|
56
|
+
element.show();
|
57
|
+
element.highlight();
|
58
|
+
});
|
59
|
+
} else {
|
60
|
+
self.elements_by_language[lang].each(function(element){
|
61
|
+
element.show();
|
62
|
+
});
|
63
|
+
}
|
64
|
+
|
65
|
+
self.current_language = lang;
|
66
|
+
}
|
67
|
+
}
|
68
|
+
|
69
|
+
#lang_chooser % LanguageChooser ;
|