simonmenke-mr_henry 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. data/License.txt +20 -0
  2. data/README +8 -0
  3. data/about.yml +7 -0
  4. data/app/controllers/lalala/base_controller.rb +8 -0
  5. data/app/helpers/lalala/base_helper.rb +47 -0
  6. data/app/helpers/lalala/tabs_helper.rb +96 -0
  7. data/app/views/lalala/layouts/application.html.erb +39 -0
  8. data/config/routes.rb +0 -0
  9. data/generators/mr_resource/USAGE +25 -0
  10. data/generators/mr_resource/mr_resource_generator.rb +103 -0
  11. data/generators/mr_resource/templates/controller.rb +24 -0
  12. data/generators/mr_resource/templates/functional_test.rb +45 -0
  13. data/generators/mr_resource/templates/helper.rb +2 -0
  14. data/generators/mr_resource/templates/partial_form.html.erb +14 -0
  15. data/generators/mr_resource/templates/partial_item.html.erb +3 -0
  16. data/generators/mr_resource/templates/view_edit.html.erb +2 -0
  17. data/generators/mr_resource/templates/view_index.html.erb +7 -0
  18. data/generators/mr_resource/templates/view_new.html.erb +2 -0
  19. data/generators/mr_resource/templates/view_show.html.erb +14 -0
  20. data/lib/mr_henry.rb +4 -0
  21. data/lib/mr_henry/action_controller.rb +5 -0
  22. data/lib/mr_henry/action_controller/handles_resource.rb +85 -0
  23. data/lib/mr_henry/generator.rb +5 -0
  24. data/lib/mr_henry/generator/create.rb +68 -0
  25. data/lib/mr_henry/generator/destroy.rb +51 -0
  26. data/lib/mr_henry/generator/update.rb +41 -0
  27. data/lib/mr_henry/version.rb +10 -0
  28. data/lib/tasks/passenger.rake +5 -0
  29. data/public/images/error.png +0 -0
  30. data/public/images/handle.png +0 -0
  31. data/public/images/henry.png +0 -0
  32. data/public/images/pointer.gif +0 -0
  33. data/public/images/spinner.gif +0 -0
  34. data/public/images/tab-active.png +0 -0
  35. data/public/images/tab-hover.png +0 -0
  36. data/public/javascripts/c_b_s.js +16 -0
  37. data/public/javascripts/lang.cbs +69 -0
  38. data/public/javascripts/lowpro.js +320 -0
  39. data/public/stylesheets/lalala.css +367 -0
  40. data/public/stylesheets/lalala_custom.css +0 -0
  41. data/rails/init.rb +35 -0
  42. data/setup/setup.rb +6 -0
  43. 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,3 @@
1
+ <%% div_for <%= singular_name %>, :class => "record" do %>
2
+ <%%= link_to "<%= singular_name %> (Replace me)", [:lalala, <%= singular_name %>] %>
3
+ <%% end %>
@@ -0,0 +1,2 @@
1
+ <h1>Edit <%= singular_name %></h1>
2
+ <%%= render :partial => 'form' %>
@@ -0,0 +1,7 @@
1
+ <h1><%= plural_name.humanize %></h1>
2
+ <div id="actions">
3
+ <%%= link_to "New <%= singular_name %>", new_lalala_<%= singular_name %>_path %>
4
+ </div>
5
+ <div id="<%= plural_name %>" class="records">
6
+ <%%= render :partial => <%= plural_name %> %>
7
+ </div>
@@ -0,0 +1,2 @@
1
+ <h1>New <%= singular_name %></h1>
2
+ <%%= render :partial => 'form' %>
@@ -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,4 @@
1
+ require 'diamonds'
2
+
3
+ module MrHenry
4
+ end
@@ -0,0 +1,5 @@
1
+
2
+ module MrHenry
3
+ module ActionController
4
+ end
5
+ end
@@ -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,5 @@
1
+
2
+ module MrHenry
3
+ module Generator
4
+ end
5
+ 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
@@ -0,0 +1,10 @@
1
+
2
+ module MrHenry
3
+ module VERSION #:nodoc:
4
+ MAJOR = 0
5
+ MINOR = 0
6
+ TINY = 1
7
+
8
+ STRING = [MAJOR, MINOR, TINY].join('.')
9
+ end
10
+ end
@@ -0,0 +1,5 @@
1
+
2
+ desc "Restart passenger"
3
+ task :restart do
4
+ sh "touch #{RAILS_ROOT}/tmp/restart.txt"
5
+ 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 ;