qm-acts-as-generic-controller 0.0.18 → 0.1.0
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/Rakefile +2 -1
 - data/app/views/generic_controller/_index_table.erb +10 -4
 - data/app/views/generic_controller/form.erb +20 -27
 - data/app/views/generic_controller/index.erb +1 -1
 - data/app/views/generic_controller/show.erb +10 -10
 - data/lib/qm-acts-as-generic-controller-model.rb +25 -7
 - data/lib/qm-acts-as-generic-controller-view.rb +29 -6
 - metadata +30 -15
 - data/app/views/generic_controller/_data.erb +0 -26
 
    
        data/Rakefile
    CHANGED
    
    | 
         @@ -9,9 +9,10 @@ begin 
     | 
|
| 
       9 
9 
     | 
    
         
             
                gemspec.email = "marcin@saepia.net"
         
     | 
| 
       10 
10 
     | 
    
         
             
                gemspec.homepage = "http://q.saepia.net"
         
     | 
| 
       11 
11 
     | 
    
         
             
                gemspec.authors = ["Marcin Lewandowski"]
         
     | 
| 
       12 
     | 
    
         
            -
                gemspec.version = "0.0 
     | 
| 
      
 12 
     | 
    
         
            +
                gemspec.version = "0.1.0"
         
     | 
| 
       13 
13 
     | 
    
         
             
                gemspec.files = Rake::FileList.new [ "MIT-LICENSE", "Rakefile", "lib/*", "app/views/generic_controller/*" ]
         
     | 
| 
       14 
14 
     | 
    
         
             
                gemspec.add_dependency "qui-common-helpers", ">= 0.0.7"
         
     | 
| 
      
 15 
     | 
    
         
            +
                gemspec.add_dependency "qui-index-table", ">= 0.0.8"
         
     | 
| 
       15 
16 
     | 
    
         
             
                gemspec.add_dependency "qui-tabs", ">= 0.0.3"
         
     | 
| 
       16 
17 
     | 
    
         
             
                gemspec.add_dependency "qui-toolbar", ">= 0.0.4"
         
     | 
| 
       17 
18 
     | 
    
         
             
                gemspec.add_dependency "rfc822"
         
     | 
| 
         @@ -1,13 +1,13 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            <%- records ||= instance_variable_get("@#{@controller.class.to_s.demodulize.gsub("Controller", "").tableize}") -%>
         
     | 
| 
       2 
2 
     | 
    
         
             
            <%- class_name ||= @controller.class.to_s.demodulize.gsub("Controller", "").singularize.constantize -%>
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
     | 
    
         
            -
            <%- headers = class_name.generic_fields.collect{|x| x 
     | 
| 
      
 4 
     | 
    
         
            +
            <%- headers = class_name.generic_fields(:action => :index).collect{ |x| x[:options][:index_header] || ".#{x[:name]}".to_sym } -%>
         
     | 
| 
       5 
5 
     | 
    
         
             
            <%- controller_name = "#{defined?(section) ? "#{section.to_s.camelize}::" : ""}#{class_name.to_s.pluralize}".tableize %>
         
     | 
| 
       6 
6 
     | 
    
         
             
            <%- has_edit = ActionController::Routing::Routes.routes.collect{|x| x if x.matches_controller_and_action?(controller_name, "edit") }.compact.size > 0 %>
         
     | 
| 
       7 
7 
     | 
    
         
             
            <%- has_delete = ActionController::Routing::Routes.routes.collect{|x| x if x.matches_controller_and_action?(controller_name, "destroy") }.compact.size > 0 %>
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
       9 
9 
     | 
    
         
             
            <%- if defined?(QM::ActsAsWorkflow) and class_name.is_workflow? -%>
         
     | 
| 
       10 
     | 
    
         
            -
              <%- headers << :" 
     | 
| 
      
 10 
     | 
    
         
            +
              <%- headers << :"workflow.common.indexTableHeader" -%>
         
     | 
| 
       11 
11 
     | 
    
         
             
            <%- end -%>
         
     | 
| 
       12 
12 
     | 
    
         | 
| 
       13 
13 
     | 
    
         
             
            <%- if defined?(QUI::IndexTable) -%>
         
     | 
| 
         @@ -16,8 +16,14 @@ 
     | 
|
| 
       16 
16 
     | 
    
         
             
              <%- headers << :oneicon if has_delete %>
         
     | 
| 
       17 
17 
     | 
    
         | 
| 
       18 
18 
     | 
    
         
             
              <%- index_table records, :headers => headers, :class_name => class_name do |r| %>
         
     | 
| 
       19 
     | 
    
         
            -
                <%- class_name.generic_fields.each do |field| -%>
         
     | 
| 
       20 
     | 
    
         
            -
                  <td 
     | 
| 
      
 19 
     | 
    
         
            +
                <%- class_name.generic_fields(:action => :index).each do |field| -%>
         
     | 
| 
      
 20 
     | 
    
         
            +
                  <td>
         
     | 
| 
      
 21 
     | 
    
         
            +
                    <%- if field[:options].has_key? :renderer -%>
         
     | 
| 
      
 22 
     | 
    
         
            +
                      <%= send(field[:options][:renderer], { :record => r, :field => field, :action => :index }) %>
         
     | 
| 
      
 23 
     | 
    
         
            +
                    <%- else -%>
         
     | 
| 
      
 24 
     | 
    
         
            +
                      <%= generic_renderer(:index, { :record => r, :field => field }) %>
         
     | 
| 
      
 25 
     | 
    
         
            +
                    <%- end -%>
         
     | 
| 
      
 26 
     | 
    
         
            +
                  </td>
         
     | 
| 
       21 
27 
     | 
    
         
             
                <%- end -%>
         
     | 
| 
       22 
28 
     | 
    
         | 
| 
       23 
29 
     | 
    
         
             
                <%- if defined?(QM::ActsAsWorkflow) and class_name.is_workflow? -%>
         
     | 
| 
         @@ -14,65 +14,58 @@ 
     | 
|
| 
       14 
14 
     | 
    
         
             
              <%- end -%>
         
     | 
| 
       15 
15 
     | 
    
         | 
| 
       16 
16 
     | 
    
         
             
              <ol>
         
     | 
| 
       17 
     | 
    
         
            -
              <%- klass.generic_fields.each do |field| -%>
         
     | 
| 
       18 
     | 
    
         
            -
                <%-  
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
       20 
     | 
    
         
            -
                <%- else -%>
         
     | 
| 
       21 
     | 
    
         
            -
                  <%- attribute_name = field.to_sym -%>
         
     | 
| 
       22 
     | 
    
         
            -
                <%- end -%>
         
     | 
| 
       23 
     | 
    
         
            -
                
         
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
                <%- is_association = klass.generic_field_associations[attribute_name].present? -%>
         
     | 
| 
       26 
     | 
    
         
            -
                <%- association = klass.generic_field_associations[attribute_name] if is_association -%>
         
     | 
| 
      
 17 
     | 
    
         
            +
              <%- klass.generic_fields(:action => :form).each do |field| -%>
         
     | 
| 
      
 18 
     | 
    
         
            +
                <%- is_association = klass.generic_field_associations[field[:name]].present? -%>
         
     | 
| 
      
 19 
     | 
    
         
            +
                <%- association = klass.generic_field_associations[field[:name]] if is_association -%>
         
     | 
| 
       27 
20 
     | 
    
         
             
                <%- is_writable = (not is_association or (is_association and not association[:readonly])) -%>
         
     | 
| 
       28 
21 
     | 
    
         
             
                <%- if is_writable -%>
         
     | 
| 
       29 
22 
     | 
    
         
             
                  <%- if is_association -%>
         
     | 
| 
       30 
     | 
    
         
            -
                    <%- if klass.generic_field_associations[ 
     | 
| 
       31 
     | 
    
         
            -
                      <%- is_accessible = klass.attr_accessible.include?("#{ 
     | 
| 
       32 
     | 
    
         
            -
                    <%- elsif klass.generic_field_associations[ 
     | 
| 
      
 23 
     | 
    
         
            +
                    <%- if klass.generic_field_associations[field[:name]][:kind] == :has_many or klass.generic_field_associations[field[:name]][:kind] == :has_and_belongs_to_many -%>
         
     | 
| 
      
 24 
     | 
    
         
            +
                      <%- is_accessible = klass.attr_accessible.include?("#{field[:name].to_s.singularize}_ids") -%>
         
     | 
| 
      
 25 
     | 
    
         
            +
                    <%- elsif klass.generic_field_associations[field[:name]][:kind] == :belongs_to -%>
         
     | 
| 
       33 
26 
     | 
    
         
             
                      <%- is_accessible = klass.attr_accessible.include?(association[:foreign_key].to_s) -%>
         
     | 
| 
       34 
27 
     | 
    
         
             
                    <%- end -%>
         
     | 
| 
       35 
28 
     | 
    
         
             
                  <%- else -%>
         
     | 
| 
       36 
     | 
    
         
            -
                    <%- is_accessible = klass.attr_accessible.include?( 
     | 
| 
      
 29 
     | 
    
         
            +
                    <%- is_accessible = klass.attr_accessible.include?(field[:name].to_s) -%>
         
     | 
| 
       37 
30 
     | 
    
         
             
                  <%- end -%>
         
     | 
| 
       38 
31 
     | 
    
         
             
                <%- end -%>
         
     | 
| 
       39 
32 
     | 
    
         | 
| 
       40 
33 
     | 
    
         | 
| 
       41 
34 
     | 
    
         
             
                <%- if is_accessible -%>
         
     | 
| 
       42 
35 
     | 
    
         
             
                  <li>
         
     | 
| 
       43 
     | 
    
         
            -
                    <%= f.label  
     | 
| 
      
 36 
     | 
    
         
            +
                    <%= f.label field[:name] %>
         
     | 
| 
       44 
37 
     | 
    
         | 
| 
       45 
38 
     | 
    
         
             
                    <%- if field.is_a?(Hash) and field.values.first == :enum -%>
         
     | 
| 
       46 
     | 
    
         
            -
                      <%= f.select  
     | 
| 
      
 39 
     | 
    
         
            +
                      <%= f.select field[:name], t("activerecord.enums.#{table_name}.#{field[:name]}").collect{|k,v| [v, k.to_s] }.sort{|x,y| x.last.to_i <=> y.last.to_i }, { :selected => params[table_name] ? params[table_name][field[:name]].to_s : f.object.send(field[:name]).to_s }  %>
         
     | 
| 
       47 
40 
     | 
    
         | 
| 
       48 
     | 
    
         
            -
                    <%- elsif klass.generic_field_associations[ 
     | 
| 
       49 
     | 
    
         
            -
                      <%- if klass.generic_field_associations[ 
     | 
| 
      
 41 
     | 
    
         
            +
                    <%- elsif klass.generic_field_associations[field[:name]] -%>
         
     | 
| 
      
 42 
     | 
    
         
            +
                      <%- if klass.generic_field_associations[field[:name]][:kind] == :belongs_to -%>
         
     | 
| 
       50 
43 
     | 
    
         
             
                        <%= multiple_select :kind => :radio, :field => field, :record => record %>
         
     | 
| 
       51 
44 
     | 
    
         | 
| 
       52 
     | 
    
         
            -
                      <%- elsif klass.generic_field_associations[ 
     | 
| 
      
 45 
     | 
    
         
            +
                      <%- elsif klass.generic_field_associations[field[:name]][:kind] == :has_and_belongs_to_many or klass.generic_field_associations[field[:name]][:kind] == :has_many-%>
         
     | 
| 
       53 
46 
     | 
    
         
             
                        <%= multiple_select :kind => :check, :field => field, :record => record  %>
         
     | 
| 
       54 
47 
     | 
    
         | 
| 
       55 
48 
     | 
    
         
             
                      <%- end -%>
         
     | 
| 
       56 
49 
     | 
    
         | 
| 
       57 
50 
     | 
    
         
             
                    <%- else -%> 
         
     | 
| 
       58 
     | 
    
         
            -
                      <%- case record.column_for_attribute( 
     | 
| 
      
 51 
     | 
    
         
            +
                      <%- case record.column_for_attribute(field[:name]).type -%>
         
     | 
| 
       59 
52 
     | 
    
         
             
                        <%- when :text -%>
         
     | 
| 
       60 
     | 
    
         
            -
                          <%= f.text_area  
     | 
| 
      
 53 
     | 
    
         
            +
                          <%= f.text_area field[:name], :rows => 5, :cols => 60 %>
         
     | 
| 
       61 
54 
     | 
    
         
             
                        <%- when :date, :datetime -%>
         
     | 
| 
       62 
     | 
    
         
            -
                          <%= f.calendar_date_select  
     | 
| 
      
 55 
     | 
    
         
            +
                          <%= f.calendar_date_select field[:name] %>
         
     | 
| 
       63 
56 
     | 
    
         
             
                        <%- when :boolean -%>
         
     | 
| 
       64 
57 
     | 
    
         
             
                          <span class="boolean">
         
     | 
| 
       65 
     | 
    
         
            -
                            <%= f.radio_button  
     | 
| 
       66 
     | 
    
         
            -
                            <%= f.radio_button  
     | 
| 
      
 58 
     | 
    
         
            +
                            <%= f.radio_button field[:name], "1", { :checked => params[table_name] && params[table_name].has_key?(field[:name]) ? params[table_name][field[:name]] == "1" : f.object.send(field[:name]) == true } %><%= f.label field[:name], t(:"genericController.yesAsBooleanOption"), { :for => "#{f.object.class.to_s.tableize.singularize}_#{field[:name]}_1" } %>
         
     | 
| 
      
 59 
     | 
    
         
            +
                            <%= f.radio_button field[:name], "0", { :checked => params[table_name] && params[table_name].has_key?(field[:name]) ? params[table_name][field[:name]] == "0" : f.object.send(field[:name]) == false } %><%= f.label field[:name], t(:"genericController.noAsBooleanOption"), { :for => "#{f.object.class.to_s.tableize.singularize}_#{field[:name]}_0" } %>
         
     | 
| 
       67 
60 
     | 
    
         
             
                          </span>
         
     | 
| 
       68 
61 
     | 
    
         | 
| 
       69 
62 
     | 
    
         
             
                        <%- else -%>
         
     | 
| 
       70 
63 
     | 
    
         | 
| 
       71 
     | 
    
         
            -
                          <%- if record.respond_to?( 
     | 
| 
       72 
     | 
    
         
            -
                            <%= f.file_field  
     | 
| 
      
 64 
     | 
    
         
            +
                          <%- if record.respond_to?(field[:name]) and record.respond_to?("#{field[:name]}_file_name") and record.respond_to?("#{field[:name]}_content_type") -%>
         
     | 
| 
      
 65 
     | 
    
         
            +
                            <%= f.file_field field[:name] %>
         
     | 
| 
       73 
66 
     | 
    
         | 
| 
       74 
67 
     | 
    
         
             
                          <%- else -%>
         
     | 
| 
       75 
     | 
    
         
            -
                            <%= f.text_field  
     | 
| 
      
 68 
     | 
    
         
            +
                            <%= f.text_field field[:name] %>
         
     | 
| 
       76 
69 
     | 
    
         
             
                          <%- end -%>
         
     | 
| 
       77 
70 
     | 
    
         
             
                      <%- end -%>
         
     | 
| 
       78 
71 
     | 
    
         
             
                    <%- end -%>
         
     | 
| 
         @@ -17,7 +17,7 @@ 
     | 
|
| 
       17 
17 
     | 
    
         
             
              <%- content_tag(:div, :class => "index_scopes") do -%>
         
     | 
| 
       18 
18 
     | 
    
         
             
                <%- form_tag params, :method => :get do  -%>
         
     | 
| 
       19 
19 
     | 
    
         
             
                  <%- class_name.named_scopes.each do |identifier, options| -%>
         
     | 
| 
       20 
     | 
    
         
            -
                    <%- if options.has_key?(:generic) and options[:generic] == true -%>
         
     | 
| 
      
 20 
     | 
    
         
            +
                    <%- if options.is_a?(Hash) and options.has_key?(:generic) and options[:generic] == true -%>
         
     | 
| 
       21 
21 
     | 
    
         
             
                      <%= check_box_tag "scopes[]", identifier, params[:scopes] && params[:scopes].include?(identifier.to_s), :id => "scope_#{class_name}_#{identifier}" %>
         
     | 
| 
       22 
22 
     | 
    
         
             
                      <%= label_tag "scope_#{class_name}_#{identifier}", t(:"#{section}.scopes.#{class_name.to_s.tableize.singularize}.#{identifier}") %>
         
     | 
| 
       23 
23 
     | 
    
         
             
                    <%- end -%>
         
     | 
| 
         @@ -13,16 +13,16 @@ 
     | 
|
| 
       13 
13 
     | 
    
         | 
| 
       14 
14 
     | 
    
         
             
            <%- description = capture do -%>
         
     | 
| 
       15 
15 
     | 
    
         
             
              <dl>
         
     | 
| 
       16 
     | 
    
         
            -
                <%- klass.generic_fields.each do |field| -%>
         
     | 
| 
       17 
     | 
    
         
            -
                   
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
                   
     | 
| 
       20 
     | 
    
         
            -
                    <%-  
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
                   
     | 
| 
      
 16 
     | 
    
         
            +
                <%- klass.generic_fields(:action => :show).each do |field| -%>
         
     | 
| 
      
 17 
     | 
    
         
            +
                  <dt><%= h klass.human_attribute_name field[:name] %></dt>
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                  <dd>
         
     | 
| 
      
 20 
     | 
    
         
            +
                    <%- if field[:options].has_key? :renderer -%>
         
     | 
| 
      
 21 
     | 
    
         
            +
                      <%= send(field[:options][:renderer], { :record => record, :field => field, :action => :show }) %>
         
     | 
| 
      
 22 
     | 
    
         
            +
                    <%- else -%>
         
     | 
| 
      
 23 
     | 
    
         
            +
                      <%= generic_renderer(:show, { :record => record, :field => field }) %>
         
     | 
| 
      
 24 
     | 
    
         
            +
                    <%- end -%>      
         
     | 
| 
      
 25 
     | 
    
         
            +
                  </dd>
         
     | 
| 
       26 
26 
     | 
    
         
             
                <%- end -%>
         
     | 
| 
       27 
27 
     | 
    
         
             
              </dl>
         
     | 
| 
       28 
28 
     | 
    
         
             
            <%- end -%>
         
     | 
| 
         @@ -8,7 +8,7 @@ module QM 
     | 
|
| 
       8 
8 
     | 
    
         | 
| 
       9 
9 
     | 
    
         
             
                  module ClassMethods
         
     | 
| 
       10 
10 
     | 
    
         
             
                    def generic_field_associations
         
     | 
| 
       11 
     | 
    
         
            -
                      @generic_field_associations 
     | 
| 
      
 11 
     | 
    
         
            +
                      @generic_field_associations || {}
         
     | 
| 
       12 
12 
     | 
    
         
             
                    end
         
     | 
| 
       13 
13 
     | 
    
         | 
| 
       14 
14 
     | 
    
         
             
                    def has_many(association_id, options = {}, &extension)
         
     | 
| 
         @@ -46,7 +46,7 @@ module QM 
     | 
|
| 
       46 
46 
     | 
    
         | 
| 
       47 
47 
     | 
    
         
             
                    def generic_named_scopes
         
     | 
| 
       48 
48 
     | 
    
         
             
                      scopes = {}
         
     | 
| 
       49 
     | 
    
         
            -
                      named_scopes.each{ |i, o| scopes[i] = o if o.has_key?(:generic) and o[:generic] }
         
     | 
| 
      
 49 
     | 
    
         
            +
                      named_scopes.each{ |i, o| scopes[i] = o if o.is_a? Hash and o.has_key?(:generic) and o[:generic] } # TODO creating generic named_scopes with lambdas
         
     | 
| 
       50 
50 
     | 
    
         
             
                      scopes
         
     | 
| 
       51 
51 
     | 
    
         
             
                    end
         
     | 
| 
       52 
52 
     | 
    
         | 
| 
         @@ -65,16 +65,34 @@ module QM 
     | 
|
| 
       65 
65 
     | 
    
         | 
| 
       66 
66 
     | 
    
         | 
| 
       67 
67 
     | 
    
         | 
| 
       68 
     | 
    
         
            -
                    def generic_fields
         
     | 
| 
       69 
     | 
    
         
            -
                      @generic_fields  
     | 
| 
      
 68 
     | 
    
         
            +
                    def generic_fields(options = {})
         
     | 
| 
      
 69 
     | 
    
         
            +
                      @generic_fields ||= {}
         
     | 
| 
      
 70 
     | 
    
         
            +
                      if options.has_key? :action
         
     | 
| 
      
 71 
     | 
    
         
            +
                        @generic_fields[options[:action]] || []
         
     | 
| 
      
 72 
     | 
    
         
            +
                      else
         
     | 
| 
      
 73 
     | 
    
         
            +
                        @generic_fields || []
         
     | 
| 
      
 74 
     | 
    
         
            +
                      end
         
     | 
| 
       70 
75 
     | 
    
         
             
                    end
         
     | 
| 
       71 
76 
     | 
    
         | 
| 
       72 
77 
     | 
    
         
             
                    def generic_form_fieldsets
         
     | 
| 
       73 
78 
     | 
    
         
             
                      @generic_form_fieldsets
         
     | 
| 
       74 
79 
     | 
    
         
             
                    end
         
     | 
| 
       75 
     | 
    
         
            -
             
     | 
| 
       76 
     | 
    
         
            -
                    def  
     | 
| 
       77 
     | 
    
         
            -
                       
     | 
| 
      
 80 
     | 
    
         
            +
             
     | 
| 
      
 81 
     | 
    
         
            +
                    def has_generic_field_for(actions, name, options = {})
         
     | 
| 
      
 82 
     | 
    
         
            +
                      options = options.symbolize_keys!
         
     | 
| 
      
 83 
     | 
    
         
            +
                      @generic_fields ||= {}
         
     | 
| 
      
 84 
     | 
    
         
            +
                      
         
     | 
| 
      
 85 
     | 
    
         
            +
                      if actions.is_a? Array
         
     | 
| 
      
 86 
     | 
    
         
            +
                        actions.each do |action|
         
     | 
| 
      
 87 
     | 
    
         
            +
                          raise ArgumentError, "action must be one of :index, :show, :form" unless [ :index, :show, :form ].include? action.to_sym
         
     | 
| 
      
 88 
     | 
    
         
            +
                          @generic_fields[action.to_sym] ||= []
         
     | 
| 
      
 89 
     | 
    
         
            +
                          @generic_fields[action.to_sym] << { :name => name.to_sym, :options => options }
         
     | 
| 
      
 90 
     | 
    
         
            +
                        end
         
     | 
| 
      
 91 
     | 
    
         
            +
                      else
         
     | 
| 
      
 92 
     | 
    
         
            +
                        raise ArgumentError, "action must be one of :index, :show, :form" unless [ :index, :show, :form ].include? actions.to_sym
         
     | 
| 
      
 93 
     | 
    
         
            +
                        @generic_fields[actions.to_sym] ||= []
         
     | 
| 
      
 94 
     | 
    
         
            +
                        @generic_fields[actions.to_sym] << { :name => name.to_sym, :options => options }
         
     | 
| 
      
 95 
     | 
    
         
            +
                      end
         
     | 
| 
       78 
96 
     | 
    
         
             
                    end
         
     | 
| 
       79 
97 
     | 
    
         | 
| 
       80 
98 
     | 
    
         
             
                    def has_generic_form_fieldsets(*fieldsets)
         
     | 
| 
         @@ -1,6 +1,33 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module QM
         
     | 
| 
       2 
2 
     | 
    
         
             
              module ActsAsGenericController
         
     | 
| 
       3 
3 
     | 
    
         
             
                module ViewIncludes
         
     | 
| 
      
 4 
     | 
    
         
            +
                  def generic_renderer(action, options = {})
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
                    data = options[:record].send options[:field][:name]
         
     | 
| 
      
 7 
     | 
    
         
            +
                    
         
     | 
| 
      
 8 
     | 
    
         
            +
                    result = ""
         
     | 
| 
      
 9 
     | 
    
         
            +
                    
         
     | 
| 
      
 10 
     | 
    
         
            +
                    if data.is_a?(ActiveRecord::Base)
         
     | 
| 
      
 11 
     | 
    
         
            +
                      result = link_to_object options[:record].send(options[:field][:name])
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                    elsif data.is_a?(Array) and data.first.is_a?(ActiveRecord::Base)
         
     | 
| 
      
 14 
     | 
    
         
            +
                      result = data.collect{ |x| link_to_object(x) }.sort_alphabetical.join(", ")
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                    elsif defined?(RFC822) and data.is_a?(String) and data =~ RFC822::EMAIL_REGEXP_WHOLE
         
     | 
| 
      
 17 
     | 
    
         
            +
                      result = link_to data, "mailto:#{data}"
         
     | 
| 
      
 18 
     | 
    
         
            +
                      
         
     | 
| 
      
 19 
     | 
    
         
            +
                    else
         
     | 
| 
      
 20 
     | 
    
         
            +
                      result = h data
         
     | 
| 
      
 21 
     | 
    
         
            +
                    end
         
     | 
| 
      
 22 
     | 
    
         
            +
                    
         
     | 
| 
      
 23 
     | 
    
         
            +
                    
         
     | 
| 
      
 24 
     | 
    
         
            +
                    puts options.inspect
         
     | 
| 
      
 25 
     | 
    
         
            +
                    
         
     | 
| 
      
 26 
     | 
    
         
            +
                    result = link_to_object options[:record], result if options[:field][:options][:link_to] == :show
         
     | 
| 
      
 27 
     | 
    
         
            +
                    
         
     | 
| 
      
 28 
     | 
    
         
            +
                    result
         
     | 
| 
      
 29 
     | 
    
         
            +
                  end
         
     | 
| 
      
 30 
     | 
    
         
            +
                
         
     | 
| 
       4 
31 
     | 
    
         
             
                  def multiple_select(options = {})
         
     | 
| 
       5 
32 
     | 
    
         
             
                    options.symbolize_keys!
         
     | 
| 
       6 
33 
     | 
    
         
             
                    options[:item] ||= {}
         
     | 
| 
         @@ -9,11 +36,7 @@ module QM 
     | 
|
| 
       9 
36 
     | 
    
         
             
                    @multiple_select_count += 1 
         
     | 
| 
       10 
37 
     | 
    
         | 
| 
       11 
38 
     | 
    
         
             
                    if options.has_key?(:field) and not options[:field].nil? and options.has_key?(:record) and options[:record].is_a? ActiveRecord::Base
         
     | 
| 
       12 
     | 
    
         
            -
                       
     | 
| 
       13 
     | 
    
         
            -
                        attribute_name = options[:field].keys.first.to_sym 
         
     | 
| 
       14 
     | 
    
         
            -
                      else 
         
     | 
| 
       15 
     | 
    
         
            -
                        attribute_name = options[:field].to_sym 
         
     | 
| 
       16 
     | 
    
         
            -
                      end 
         
     | 
| 
      
 39 
     | 
    
         
            +
                      attribute_name = options[:field][:name]
         
     | 
| 
       17 
40 
     | 
    
         | 
| 
       18 
41 
     | 
    
         
             
                      klass = options[:record].class 
         
     | 
| 
       19 
42 
     | 
    
         
             
                      table_name = klass.to_s.tableize.singularize 
         
     | 
| 
         @@ -27,7 +50,7 @@ module QM 
     | 
|
| 
       27 
50 
     | 
    
         
             
                        allow_nil ||= options[:record].column_for_attribute(klass.generic_field_associations[attribute_name][:foreign_key]).null 
         
     | 
| 
       28 
51 
     | 
    
         
             
                      end
         
     | 
| 
       29 
52 
     | 
    
         | 
| 
       30 
     | 
    
         
            -
                      if klass.respond_to? :limit_for_user and defined?(current_user)
         
     | 
| 
      
 53 
     | 
    
         
            +
                      if klass.generic_field_associations[attribute_name][:class_name].respond_to? :limit_for_user and defined?(current_user)
         
     | 
| 
       31 
54 
     | 
    
         
             
                        collection = klass.generic_field_associations[attribute_name][:class_name].limit_for_user(current_user)
         
     | 
| 
       32 
55 
     | 
    
         
             
                      else
         
     | 
| 
       33 
56 
     | 
    
         
             
                        collection = klass.generic_field_associations[attribute_name][:class_name].all 
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,13 +1,13 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification 
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: qm-acts-as-generic-controller
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version 
         
     | 
| 
       4 
     | 
    
         
            -
              hash:  
     | 
| 
      
 4 
     | 
    
         
            +
              hash: 27
         
     | 
| 
       5 
5 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       6 
6 
     | 
    
         
             
              segments: 
         
     | 
| 
       7 
7 
     | 
    
         
             
              - 0
         
     | 
| 
      
 8 
     | 
    
         
            +
              - 1
         
     | 
| 
       8 
9 
     | 
    
         
             
              - 0
         
     | 
| 
       9 
     | 
    
         
            -
               
     | 
| 
       10 
     | 
    
         
            -
              version: 0.0.18
         
     | 
| 
      
 10 
     | 
    
         
            +
              version: 0.1.0
         
     | 
| 
       11 
11 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       12 
12 
     | 
    
         
             
            authors: 
         
     | 
| 
       13 
13 
     | 
    
         
             
            - Marcin Lewandowski
         
     | 
| 
         @@ -15,7 +15,7 @@ autorequire: 
     | 
|
| 
       15 
15 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       16 
16 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       17 
17 
     | 
    
         | 
| 
       18 
     | 
    
         
            -
            date: 2010-10- 
     | 
| 
      
 18 
     | 
    
         
            +
            date: 2010-10-19 00:00:00 +02:00
         
     | 
| 
       19 
19 
     | 
    
         
             
            default_executable: 
         
     | 
| 
       20 
20 
     | 
    
         
             
            dependencies: 
         
     | 
| 
       21 
21 
     | 
    
         
             
            - !ruby/object:Gem::Dependency 
         
     | 
| 
         @@ -35,9 +35,25 @@ dependencies: 
     | 
|
| 
       35 
35 
     | 
    
         
             
              type: :runtime
         
     | 
| 
       36 
36 
     | 
    
         
             
              version_requirements: *id001
         
     | 
| 
       37 
37 
     | 
    
         
             
            - !ruby/object:Gem::Dependency 
         
     | 
| 
       38 
     | 
    
         
            -
              name: qui- 
     | 
| 
      
 38 
     | 
    
         
            +
              name: qui-index-table
         
     | 
| 
       39 
39 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       40 
40 
     | 
    
         
             
              requirement: &id002 !ruby/object:Gem::Requirement 
         
     | 
| 
      
 41 
     | 
    
         
            +
                none: false
         
     | 
| 
      
 42 
     | 
    
         
            +
                requirements: 
         
     | 
| 
      
 43 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 44 
     | 
    
         
            +
                  - !ruby/object:Gem::Version 
         
     | 
| 
      
 45 
     | 
    
         
            +
                    hash: 15
         
     | 
| 
      
 46 
     | 
    
         
            +
                    segments: 
         
     | 
| 
      
 47 
     | 
    
         
            +
                    - 0
         
     | 
| 
      
 48 
     | 
    
         
            +
                    - 0
         
     | 
| 
      
 49 
     | 
    
         
            +
                    - 8
         
     | 
| 
      
 50 
     | 
    
         
            +
                    version: 0.0.8
         
     | 
| 
      
 51 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 52 
     | 
    
         
            +
              version_requirements: *id002
         
     | 
| 
      
 53 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency 
         
     | 
| 
      
 54 
     | 
    
         
            +
              name: qui-tabs
         
     | 
| 
      
 55 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 56 
     | 
    
         
            +
              requirement: &id003 !ruby/object:Gem::Requirement 
         
     | 
| 
       41 
57 
     | 
    
         
             
                none: false
         
     | 
| 
       42 
58 
     | 
    
         
             
                requirements: 
         
     | 
| 
       43 
59 
     | 
    
         
             
                - - ">="
         
     | 
| 
         @@ -49,11 +65,11 @@ dependencies: 
     | 
|
| 
       49 
65 
     | 
    
         
             
                    - 3
         
     | 
| 
       50 
66 
     | 
    
         
             
                    version: 0.0.3
         
     | 
| 
       51 
67 
     | 
    
         
             
              type: :runtime
         
     | 
| 
       52 
     | 
    
         
            -
              version_requirements: * 
     | 
| 
      
 68 
     | 
    
         
            +
              version_requirements: *id003
         
     | 
| 
       53 
69 
     | 
    
         
             
            - !ruby/object:Gem::Dependency 
         
     | 
| 
       54 
70 
     | 
    
         
             
              name: qui-toolbar
         
     | 
| 
       55 
71 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       56 
     | 
    
         
            -
              requirement: & 
     | 
| 
      
 72 
     | 
    
         
            +
              requirement: &id004 !ruby/object:Gem::Requirement 
         
     | 
| 
       57 
73 
     | 
    
         
             
                none: false
         
     | 
| 
       58 
74 
     | 
    
         
             
                requirements: 
         
     | 
| 
       59 
75 
     | 
    
         
             
                - - ">="
         
     | 
| 
         @@ -65,11 +81,11 @@ dependencies: 
     | 
|
| 
       65 
81 
     | 
    
         
             
                    - 4
         
     | 
| 
       66 
82 
     | 
    
         
             
                    version: 0.0.4
         
     | 
| 
       67 
83 
     | 
    
         
             
              type: :runtime
         
     | 
| 
       68 
     | 
    
         
            -
              version_requirements: * 
     | 
| 
      
 84 
     | 
    
         
            +
              version_requirements: *id004
         
     | 
| 
       69 
85 
     | 
    
         
             
            - !ruby/object:Gem::Dependency 
         
     | 
| 
       70 
86 
     | 
    
         
             
              name: rfc822
         
     | 
| 
       71 
87 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       72 
     | 
    
         
            -
              requirement: & 
     | 
| 
      
 88 
     | 
    
         
            +
              requirement: &id005 !ruby/object:Gem::Requirement 
         
     | 
| 
       73 
89 
     | 
    
         
             
                none: false
         
     | 
| 
       74 
90 
     | 
    
         
             
                requirements: 
         
     | 
| 
       75 
91 
     | 
    
         
             
                - - ">="
         
     | 
| 
         @@ -79,11 +95,11 @@ dependencies: 
     | 
|
| 
       79 
95 
     | 
    
         
             
                    - 0
         
     | 
| 
       80 
96 
     | 
    
         
             
                    version: "0"
         
     | 
| 
       81 
97 
     | 
    
         
             
              type: :runtime
         
     | 
| 
       82 
     | 
    
         
            -
              version_requirements: * 
     | 
| 
      
 98 
     | 
    
         
            +
              version_requirements: *id005
         
     | 
| 
       83 
99 
     | 
    
         
             
            - !ruby/object:Gem::Dependency 
         
     | 
| 
       84 
100 
     | 
    
         
             
              name: sort_alphabetical
         
     | 
| 
       85 
101 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       86 
     | 
    
         
            -
              requirement: & 
     | 
| 
      
 102 
     | 
    
         
            +
              requirement: &id006 !ruby/object:Gem::Requirement 
         
     | 
| 
       87 
103 
     | 
    
         
             
                none: false
         
     | 
| 
       88 
104 
     | 
    
         
             
                requirements: 
         
     | 
| 
       89 
105 
     | 
    
         
             
                - - ">="
         
     | 
| 
         @@ -93,11 +109,11 @@ dependencies: 
     | 
|
| 
       93 
109 
     | 
    
         
             
                    - 0
         
     | 
| 
       94 
110 
     | 
    
         
             
                    version: "0"
         
     | 
| 
       95 
111 
     | 
    
         
             
              type: :runtime
         
     | 
| 
       96 
     | 
    
         
            -
              version_requirements: * 
     | 
| 
      
 112 
     | 
    
         
            +
              version_requirements: *id006
         
     | 
| 
       97 
113 
     | 
    
         
             
            - !ruby/object:Gem::Dependency 
         
     | 
| 
       98 
114 
     | 
    
         
             
              name: calendar_date_select
         
     | 
| 
       99 
115 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       100 
     | 
    
         
            -
              requirement: & 
     | 
| 
      
 116 
     | 
    
         
            +
              requirement: &id007 !ruby/object:Gem::Requirement 
         
     | 
| 
       101 
117 
     | 
    
         
             
                none: false
         
     | 
| 
       102 
118 
     | 
    
         
             
                requirements: 
         
     | 
| 
       103 
119 
     | 
    
         
             
                - - ">="
         
     | 
| 
         @@ -107,7 +123,7 @@ dependencies: 
     | 
|
| 
       107 
123 
     | 
    
         
             
                    - 0
         
     | 
| 
       108 
124 
     | 
    
         
             
                    version: "0"
         
     | 
| 
       109 
125 
     | 
    
         
             
              type: :runtime
         
     | 
| 
       110 
     | 
    
         
            -
              version_requirements: * 
     | 
| 
      
 126 
     | 
    
         
            +
              version_requirements: *id007
         
     | 
| 
       111 
127 
     | 
    
         
             
            description: "qM: generates generic controller actions and views"
         
     | 
| 
       112 
128 
     | 
    
         
             
            email: marcin@saepia.net
         
     | 
| 
       113 
129 
     | 
    
         
             
            executables: []
         
     | 
| 
         @@ -119,7 +135,6 @@ extra_rdoc_files: 
     | 
|
| 
       119 
135 
     | 
    
         
             
            files: 
         
     | 
| 
       120 
136 
     | 
    
         
             
            - MIT-LICENSE
         
     | 
| 
       121 
137 
     | 
    
         
             
            - Rakefile
         
     | 
| 
       122 
     | 
    
         
            -
            - app/views/generic_controller/_data.erb
         
     | 
| 
       123 
138 
     | 
    
         
             
            - app/views/generic_controller/_index_table.erb
         
     | 
| 
       124 
139 
     | 
    
         
             
            - app/views/generic_controller/_multiple_select.erb
         
     | 
| 
       125 
140 
     | 
    
         
             
            - app/views/generic_controller/form.erb
         
     | 
| 
         @@ -1,26 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            <%- if field.is_a? Hash -%>
         
     | 
| 
       2 
     | 
    
         
            -
              <%- attribute_name = field.keys.first.to_sym -%>
         
     | 
| 
       3 
     | 
    
         
            -
            <%- else -%>
         
     | 
| 
       4 
     | 
    
         
            -
              <%- attribute_name = field.to_sym -%>
         
     | 
| 
       5 
     | 
    
         
            -
            <%- end -%>
         
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
            <%- data = record.send attribute_name -%>
         
     | 
| 
       8 
     | 
    
         
            -
                
         
     | 
| 
       9 
     | 
    
         
            -
            <%- if data.is_a?(ActiveRecord::Base) -%>
         
     | 
| 
       10 
     | 
    
         
            -
              <%= link_to_object record.send(field) %>
         
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
            <%- elsif data.is_a?(Array) and data.first.is_a?(ActiveRecord::Base) -%>
         
     | 
| 
       13 
     | 
    
         
            -
              <%= data.collect{ |x| link_to_object(x) }.sort_alphabetical.join(", ") %>
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
            <%- elsif field.is_a?(Hash) and field.values.first == :link_to_show -%>
         
     | 
| 
       16 
     | 
    
         
            -
              <%= link_to_object record, data %>
         
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
            <%- elsif field.is_a?(Hash) and field.values.first == :enum -%>
         
     | 
| 
       19 
     | 
    
         
            -
              <%= h record.enum_human_value attribute_name  %>
         
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
       21 
     | 
    
         
            -
            <%- elsif data.is_a?(String) and data =~ RFC822::EMAIL_REGEXP_WHOLE -%>
         
     | 
| 
       22 
     | 
    
         
            -
              <%= link_to data, "mailto:#{data}" %>
         
     | 
| 
       23 
     | 
    
         
            -
              
         
     | 
| 
       24 
     | 
    
         
            -
            <%- else -%>
         
     | 
| 
       25 
     | 
    
         
            -
              <%= h data %>
         
     | 
| 
       26 
     | 
    
         
            -
            <%- end -%>
         
     |