qm-acts-as-generic-controller 0.1.21 → 0.2.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 -2
 - data/app/views/generic_controller/index.erb +1 -1
 - data/app/views/generic_controller/show.erb +1 -1
 - data/lib/qm-acts-as-generic-controller-controller.rb +1 -1
 - data/lib/qm-acts-as-generic-controller-model.rb +55 -11
 - data/lib/qm-acts-as-generic-controller-view.rb +79 -0
 - metadata +10 -10
 
    
        data/Rakefile
    CHANGED
    
    | 
         @@ -10,10 +10,10 @@ begin 
     | 
|
| 
       10 
10 
     | 
    
         
             
                gemspec.email = "marcin@saepia.net"
         
     | 
| 
       11 
11 
     | 
    
         
             
                gemspec.homepage = "http://q.saepia.net"
         
     | 
| 
       12 
12 
     | 
    
         
             
                gemspec.authors = ["Marcin Lewandowski"]
         
     | 
| 
       13 
     | 
    
         
            -
                gemspec.version = "0. 
     | 
| 
      
 13 
     | 
    
         
            +
                gemspec.version = "0.2.0"
         
     | 
| 
       14 
14 
     | 
    
         
             
                gemspec.files = Rake::FileList.new [ "MIT-LICENSE", "Rakefile", "lib/*", "app/views/generic_controller/*" ]
         
     | 
| 
       15 
15 
     | 
    
         
             
                gemspec.add_dependency "qui-common-helpers", ">= 0.0.8"
         
     | 
| 
       16 
     | 
    
         
            -
                gemspec.add_dependency "qui-index-table", ">= 0.0. 
     | 
| 
      
 16 
     | 
    
         
            +
                gemspec.add_dependency "qui-index-table", ">= 0.0.9"
         
     | 
| 
       17 
17 
     | 
    
         
             
                gemspec.add_dependency "qui-tabs", ">= 0.0.3"
         
     | 
| 
       18 
18 
     | 
    
         
             
                gemspec.add_dependency "qui-toolbar", ">= 0.0.5"
         
     | 
| 
       19 
19 
     | 
    
         
             
                gemspec.add_dependency "rfc822"
         
     | 
| 
         @@ -81,7 +81,7 @@ 
     | 
|
| 
       81 
81 
     | 
    
         
             
                      <%= link_to t(:"toolbar.create"), polymorphic_path([ "new", section, v[:class_name].table_name.singularize ], { association_attribute => record.id, :association_attribute => association_attribute }), :class => "create" %>
         
     | 
| 
       82 
82 
     | 
    
         
             
                    <%- end -%>
         
     | 
| 
       83 
83 
     | 
    
         | 
| 
       84 
     | 
    
         
            -
                    <%=  
     | 
| 
      
 84 
     | 
    
         
            +
                    <%= generic_index_table :records => record.send(k).limit_with_security_scheme(:user => current_user), :class_name => v[:class_name] %>
         
     | 
| 
       85 
85 
     | 
    
         
             
                    <%- tab_headers[k] = t(:"#{section_prefix}tabs.#{table_name}.#{k}") + " (#{record.send(k).limit_with_security_scheme(:user => current_user).size})" %>
         
     | 
| 
       86 
86 
     | 
    
         
             
                  <%- end -%>
         
     | 
| 
       87 
87 
     | 
    
         | 
| 
         @@ -36,7 +36,7 @@ module QM 
     | 
|
| 
       36 
36 
     | 
    
         
             
                  module InstanceMethods
         
     | 
| 
       37 
37 
     | 
    
         
             
                    def index
         
     | 
| 
       38 
38 
     | 
    
         
             
                      unless instance_variable_defined?(plural_variable)
         
     | 
| 
       39 
     | 
    
         
            -
                        instance_variable_set(plural_variable, model.limit_with_security_scheme(:user => current_user)) 
         
     | 
| 
      
 39 
     | 
    
         
            +
                        instance_variable_set(plural_variable, model.limit_with_security_scheme(:user => current_user, :paginate => true, :paginate_page => params[:page] || 1, :paginate_per_page => params[:per_page] || 100, :sort_by => params[:sort_by], :sort_order => params[:sort_order])) 
         
     | 
| 
       40 
40 
     | 
    
         
             
                      end
         
     | 
| 
       41 
41 
     | 
    
         | 
| 
       42 
42 
     | 
    
         
             
                      respond_to do |format|
         
     | 
| 
         @@ -8,37 +8,81 @@ module QM 
     | 
|
| 
       8 
8 
     | 
    
         
             
                  module ClassMethods
         
     | 
| 
       9 
9 
     | 
    
         
             
                    def limit_with_security_scheme(options)
         
     | 
| 
       10 
10 
     | 
    
         
             
                      # options[:user] - current user that performs the query
         
     | 
| 
      
 11 
     | 
    
         
            +
                      # options[:paginate] - set to true if you want to enable pagination, not applicable for the ExternalSystem request
         
     | 
| 
      
 12 
     | 
    
         
            +
                      # options[:paginate_page] - set to integer
         
     | 
| 
      
 13 
     | 
    
         
            +
                      # options[:sort_by] - field to sort by
         
     | 
| 
      
 14 
     | 
    
         
            +
                      # options[:sort_order] - "A" or "D"
         
     | 
| 
       11 
15 
     | 
    
         | 
| 
       12 
16 
     | 
    
         
             
                      raise ArgumentError, "You must pass options[:user] to limit_with_security_scheme" unless options.has_key? :user
         
     | 
| 
       13 
17 
     | 
    
         | 
| 
       14 
18 
     | 
    
         
             
                      return all if options[:user].is_a? ExternalSystem
         
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
       16 
20 
     | 
    
         
             
                      # Return empty set if user has no privileges at all (nor index_any and index_created)
         
     | 
| 
       17 
21 
     | 
    
         
             
                      unless options[:user].has_privileges?(:class_name => self, :generic_action => :index_any) or options[:user].has_privileges?(:class_name => self, :generic_action => :index_created)
         
     | 
| 
       18 
     | 
    
         
            -
            #            puts ":("
         
     | 
| 
       19 
     | 
    
         
            -
            #            puts options[:user].inspect
         
     | 
| 
       20 
     | 
    
         
            -
            #            puts self
         
     | 
| 
       21 
     | 
    
         
            -
            #            puts options[:user].has_privileges?(:class_name => self, :generic_action => :index_any)
         
     | 
| 
       22 
     | 
    
         
            -
            #            puts options[:user].has_privileges?(:class_name => self, :generic_action => :index_created)
         
     | 
| 
       23 
     | 
    
         
            -
            #            puts options[:user].has_privileges?(:class_name => self, :generic_action => :index_any) or options[:user].has_privileges?(:class_name => self, :generic_action => :index_created)
         
     | 
| 
       24 
22 
     | 
    
         
             
                        return []
         
     | 
| 
       25 
23 
     | 
    
         
             
                      end
         
     | 
| 
       26 
24 
     | 
    
         | 
| 
       27 
25 
     | 
    
         
             
                      creator_column = "creator_#{options[:user].class.to_s.tableize.singularize}_id"
         
     | 
| 
       28 
26 
     | 
    
         
             
                      should_limit_index_for_created = columns_hash.has_key?(creator_column) && options[:user].respond_to?(:has_privileges?) && !options[:user].has_privileges?(:class_name => self, :generic_action => :index_any) && options[:user].has_privileges?(:class_name => self, :generic_action => :index_created)
         
     | 
| 
       29 
27 
     | 
    
         | 
| 
      
 28 
     | 
    
         
            +
                      universal_find_params = {}
         
     | 
| 
      
 29 
     | 
    
         
            +
                      
         
     | 
| 
      
 30 
     | 
    
         
            +
                      if options.has_key? :sort_by and not options[:sort_by].nil?
         
     | 
| 
      
 31 
     | 
    
         
            +
                        # Sorting
         
     | 
| 
      
 32 
     | 
    
         
            +
                        if options[:sort_order] == "A"
         
     | 
| 
      
 33 
     | 
    
         
            +
                          sort_direction = "ASC"
         
     | 
| 
      
 34 
     | 
    
         
            +
                          sort_opposite_direction = "DESC"
         
     | 
| 
      
 35 
     | 
    
         
            +
                        else
         
     | 
| 
      
 36 
     | 
    
         
            +
                          sort_direction = "DESC"
         
     | 
| 
      
 37 
     | 
    
         
            +
                          sort_opposite_direction = "ASC"
         
     | 
| 
      
 38 
     | 
    
         
            +
                        end
         
     | 
| 
      
 39 
     | 
    
         
            +
                        
         
     | 
| 
      
 40 
     | 
    
         
            +
                        # FIXME what if this is not index?
         
     | 
| 
      
 41 
     | 
    
         
            +
                        generic_field = self.generic_fields[:index].detect{ |f| f[:name] == options[:sort_by].to_sym }
         
     | 
| 
      
 42 
     | 
    
         
            +
                        if generic_field and generic_field[:options].has_key? :sort_sql
         
     | 
| 
      
 43 
     | 
    
         
            +
                          universal_find_params[:order] = generic_field[:options][:sort_sql].gsub("%{DIRECTION}", sort_direction).gsub("%{OPPOSITE_DIRECTION}", sort_opposite_direction) 
         
     | 
| 
      
 44 
     | 
    
         
            +
                          
         
     | 
| 
      
 45 
     | 
    
         
            +
                        elsif self.columns_hash.has_key? options[:sort_by].to_s
         
     | 
| 
      
 46 
     | 
    
         
            +
                          universal_find_params[:order] = "#{options[:sort_by]} #{sort_direction}"
         
     | 
| 
      
 47 
     | 
    
         
            +
                        end
         
     | 
| 
      
 48 
     | 
    
         
            +
                      end
         
     | 
| 
      
 49 
     | 
    
         
            +
                            
         
     | 
| 
       30 
50 
     | 
    
         | 
| 
       31 
51 
     | 
    
         
             
                      if respond_to? :limit_for_user
         
     | 
| 
       32 
52 
     | 
    
         
             
                        if should_limit_index_for_created
         
     | 
| 
       33 
     | 
    
         
            -
                           
     | 
| 
      
 53 
     | 
    
         
            +
                          if defined? WillPaginate
         
     | 
| 
      
 54 
     | 
    
         
            +
                            logger.info "#{self}.limit_with_security_scheme: limit_for_user & limit_index_for_created & will_paginate(page = #{options[:paginate_page]}, per_page = #{options[:paginate_per_page]})"
         
     | 
| 
      
 55 
     | 
    
         
            +
                            limit_for_user(options[:user]).find(:all, universal_find_params).find(:all, :conditions => { creator_column => options[:user].id }).paginate(:page => options[:paginate_page], :per_page => options[:paginate_per_page])
         
     | 
| 
      
 56 
     | 
    
         
            +
                          else
         
     | 
| 
      
 57 
     | 
    
         
            +
                            logger.info "#{self}.limit_with_security_scheme: limit_for_user & limit_index_for_created"
         
     | 
| 
      
 58 
     | 
    
         
            +
                            limit_for_user(options[:user]).find(:all, universal_find_params).find(:all, :conditions => { creator_column => options[:user].id })
         
     | 
| 
      
 59 
     | 
    
         
            +
                          end
         
     | 
| 
       34 
60 
     | 
    
         
             
                        else
         
     | 
| 
       35 
     | 
    
         
            -
                           
     | 
| 
      
 61 
     | 
    
         
            +
                          if defined? WillPaginate
         
     | 
| 
      
 62 
     | 
    
         
            +
                            logger.info "#{self}.limit_with_security_scheme: limit_for_user & will_paginate(page = #{options[:paginate_page]}, per_page = #{options[:paginate_per_page]})"
         
     | 
| 
      
 63 
     | 
    
         
            +
                            limit_for_user(options[:user]).find(:all, universal_find_params).paginate(:page => options[:paginate_page], :per_page => options[:paginate_per_page])
         
     | 
| 
      
 64 
     | 
    
         
            +
                          else
         
     | 
| 
      
 65 
     | 
    
         
            +
                            logger.info "#{self}.limit_with_security_scheme: limit_for_user"
         
     | 
| 
      
 66 
     | 
    
         
            +
                            limit_for_user(options[:user]).find(:all, universal_find_params)
         
     | 
| 
      
 67 
     | 
    
         
            +
                          end
         
     | 
| 
       36 
68 
     | 
    
         
             
                        end
         
     | 
| 
       37 
69 
     | 
    
         
             
                      else
         
     | 
| 
       38 
70 
     | 
    
         
             
                        if should_limit_index_for_created
         
     | 
| 
       39 
     | 
    
         
            -
                           
     | 
| 
      
 71 
     | 
    
         
            +
                          if defined? WillPaginate
         
     | 
| 
      
 72 
     | 
    
         
            +
                            logger.info "#{self}.limit_with_security_scheme: limit_index_for_created & will_paginate(page = #{options[:paginate_page]}, per_page = #{options[:paginate_per_page]})"
         
     | 
| 
      
 73 
     | 
    
         
            +
                            find(:all, :conditions => { creator_column => options[:user].id }).find(:all, universal_find_params).paginate(:page => options[:paginate_page], :per_page => options[:paginate_per_page])
         
     | 
| 
      
 74 
     | 
    
         
            +
                          else
         
     | 
| 
      
 75 
     | 
    
         
            +
                            logger.info "#{self}.limit_with_security_scheme: limit_index_for_created"
         
     | 
| 
      
 76 
     | 
    
         
            +
                            find(:all, :conditions => { creator_column => options[:user].id }).find(:all, universal_find_params)
         
     | 
| 
      
 77 
     | 
    
         
            +
                          end
         
     | 
| 
       40 
78 
     | 
    
         
             
                        else
         
     | 
| 
       41 
     | 
    
         
            -
                           
     | 
| 
      
 79 
     | 
    
         
            +
                          if defined? WillPaginate
         
     | 
| 
      
 80 
     | 
    
         
            +
                            logger.info "#{self}.limit_with_security_scheme: will_paginate(page = #{options[:paginate_page]}, per_page = #{options[:paginate_per_page]})"
         
     | 
| 
      
 81 
     | 
    
         
            +
                            find(:all, universal_find_params).paginate(:page => options[:paginate_page], :per_page => options[:paginate_per_page])
         
     | 
| 
      
 82 
     | 
    
         
            +
                          else
         
     | 
| 
      
 83 
     | 
    
         
            +
                            logger.info "#{self}.limit_with_security_scheme: (all)"
         
     | 
| 
      
 84 
     | 
    
         
            +
                            find(:all, universal_find_params)
         
     | 
| 
      
 85 
     | 
    
         
            +
                          end
         
     | 
| 
       42 
86 
     | 
    
         
             
                        end
         
     | 
| 
       43 
87 
     | 
    
         
             
                      end          
         
     | 
| 
       44 
88 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -36,6 +36,85 @@ module QM 
     | 
|
| 
       36 
36 
     | 
    
         | 
| 
       37 
37 
     | 
    
         
             
                    result
         
     | 
| 
       38 
38 
     | 
    
         
             
                  end
         
     | 
| 
      
 39 
     | 
    
         
            +
                  
         
     | 
| 
      
 40 
     | 
    
         
            +
                  def generic_index_table(options = {})
         
     | 
| 
      
 41 
     | 
    
         
            +
                    records    = options[:records]    || instance_variable_get("@#{@controller.class.to_s.demodulize.gsub("Controller", "").tableize}")
         
     | 
| 
      
 42 
     | 
    
         
            +
                    class_name = options[:class_name] || @controller.class.to_s.demodulize.gsub("Controller", "").singularize.constantize
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
                    privileged_fields = class_name.generic_fields(:action => :index).collect{|field| field if not current_user.respond_to? "has_privileges?" or (class_name.generic_field_associations.has_key?(field[:name]) and current_user.has_privileges?(:class_name => class_name.generic_field_associations[field[:name]][:class_name])) or (current_user.has_privileges?(:class_name => class_name, :attribute => field[:name], :mode => :read)) }.compact
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
                    headers = privileged_fields.collect{ |x| x[:options][:index_header] || ".#{x[:name]}".to_sym }
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
                    controller_name = "#{defined?(section) ? "#{section.to_s.camelize}::" : ""}#{class_name.to_s.pluralize}".tableize
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
                    has_edit = ActionController::Routing::Routes.routes.collect{|x| x if x.matches_controller_and_action?(controller_name, "edit") }.compact.size > 0
         
     | 
| 
      
 51 
     | 
    
         
            +
                    has_delete = ActionController::Routing::Routes.routes.collect{|x| x if x.matches_controller_and_action?(controller_name, "destroy") }.compact.size > 0
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
                    if current_user.respond_to? "has_privileges?"
         
     | 
| 
      
 54 
     | 
    
         
            +
                      has_edit = has_edit && current_user.has_privileges?(:class_name => class_name, :generic_action => :update_any)
         
     | 
| 
      
 55 
     | 
    
         
            +
                      has_delete = has_edit && current_user.has_privileges?(:class_name => class_name, :generic_action => :delete_any)
         
     | 
| 
      
 56 
     | 
    
         
            +
                    end
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
                    class_name.generic_actions(:action => :index).size.times{ headers << :oneicon }
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
                    headers << :oneicon if has_edit
         
     | 
| 
      
 61 
     | 
    
         
            +
                    headers << :oneicon if has_delete
         
     | 
| 
      
 62 
     | 
    
         
            +
                    
         
     | 
| 
      
 63 
     | 
    
         
            +
                    
         
     | 
| 
      
 64 
     | 
    
         
            +
                    index_table records, :headers => headers, :class_name => class_name do |r|
         
     | 
| 
      
 65 
     | 
    
         
            +
                      row = ""
         
     | 
| 
      
 66 
     | 
    
         
            +
                      
         
     | 
| 
      
 67 
     | 
    
         
            +
                      privileged_fields.each do |field|
         
     | 
| 
      
 68 
     | 
    
         
            +
                        row << content_tag(:td) do
         
     | 
| 
      
 69 
     | 
    
         
            +
                          if field[:options].has_key? :renderer
         
     | 
| 
      
 70 
     | 
    
         
            +
                            send(field[:options][:renderer], { :record => r, :field => field, :action => :index }).to_s
         
     | 
| 
      
 71 
     | 
    
         
            +
                          else
         
     | 
| 
      
 72 
     | 
    
         
            +
                            generic_renderer(:index, { :record => r, :field => field }).to_s
         
     | 
| 
      
 73 
     | 
    
         
            +
                          end
         
     | 
| 
      
 74 
     | 
    
         
            +
                        end
         
     | 
| 
      
 75 
     | 
    
         
            +
                      end
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
      
 77 
     | 
    
         
            +
                      class_name.generic_actions(:action => :index).each do |action|
         
     | 
| 
      
 78 
     | 
    
         
            +
                        row << content_tag(:td, send(action[:options][:renderer], { :action => :index, :record => r, :action => :index, :generic_action => action }), :class => "action #{action[:name]}")
         
     | 
| 
      
 79 
     | 
    
         
            +
                      end
         
     | 
| 
      
 80 
     | 
    
         
            +
             
     | 
| 
      
 81 
     | 
    
         
            +
                      if has_edit
         
     | 
| 
      
 82 
     | 
    
         
            +
                        row << content_tag(:td, :class => "action edit") do
         
     | 
| 
      
 83 
     | 
    
         
            +
                          link_to_edit(r)
         
     | 
| 
      
 84 
     | 
    
         
            +
                        end
         
     | 
| 
      
 85 
     | 
    
         
            +
                      end
         
     | 
| 
      
 86 
     | 
    
         
            +
                      
         
     | 
| 
      
 87 
     | 
    
         
            +
                      if has_delete
         
     | 
| 
      
 88 
     | 
    
         
            +
                        row << content_tag(:td, :class => "action delete") do
         
     | 
| 
      
 89 
     | 
    
         
            +
                          link_to_delete(r)
         
     | 
| 
      
 90 
     | 
    
         
            +
                        end
         
     | 
| 
      
 91 
     | 
    
         
            +
                      end
         
     | 
| 
      
 92 
     | 
    
         
            +
                      
         
     | 
| 
      
 93 
     | 
    
         
            +
                      row
         
     | 
| 
      
 94 
     | 
    
         
            +
                    end
         
     | 
| 
      
 95 
     | 
    
         
            +
                  end
         
     | 
| 
      
 96 
     | 
    
         
            +
                  
         
     | 
| 
      
 97 
     | 
    
         
            +
                  def index_table_th(content, options = {}) 
         
     | 
| 
      
 98 
     | 
    
         
            +
                    if options[:sort_by]
         
     | 
| 
      
 99 
     | 
    
         
            +
                      content_tag(:th, index_table_th_sort(content, options), options)
         
     | 
| 
      
 100 
     | 
    
         
            +
                    else
         
     | 
| 
      
 101 
     | 
    
         
            +
                      content_tag(:th, content, options)
         
     | 
| 
      
 102 
     | 
    
         
            +
                    end
         
     | 
| 
      
 103 
     | 
    
         
            +
                  end
         
     | 
| 
      
 104 
     | 
    
         
            +
                  
         
     | 
| 
      
 105 
     | 
    
         
            +
                  def index_table_th_sort(content, options = {})
         
     | 
| 
      
 106 
     | 
    
         
            +
                    c = ""
         
     | 
| 
      
 107 
     | 
    
         
            +
                    if params[:sort_by] == options[:sort_by]
         
     | 
| 
      
 108 
     | 
    
         
            +
                      if params[:sort_order] == "A"
         
     | 
| 
      
 109 
     | 
    
         
            +
                        c << image_tag("sort-asc.png", :alt => "^", :class => "sort-icon")
         
     | 
| 
      
 110 
     | 
    
         
            +
                      else
         
     | 
| 
      
 111 
     | 
    
         
            +
                        c << image_tag("sort-desc.png", :alt => "v", :class => "sort-icon")
         
     | 
| 
      
 112 
     | 
    
         
            +
                      end
         
     | 
| 
      
 113 
     | 
    
         
            +
                    end
         
     | 
| 
      
 114 
     | 
    
         
            +
                    
         
     | 
| 
      
 115 
     | 
    
         
            +
                    link_to(content + c, params.merge({ :sort_by => options[:sort_by], :sort_order => options[:sort_order]}))
         
     | 
| 
      
 116 
     | 
    
         
            +
                  end
         
     | 
| 
      
 117 
     | 
    
         
            +
                  
         
     | 
| 
       39 
118 
     | 
    
         | 
| 
       40 
119 
     | 
    
         
             
                  def multiple_select(options = {})
         
     | 
| 
       41 
120 
     | 
    
         
             
                    options.symbolize_keys!
         
     | 
    
        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: 23
         
     | 
| 
       5 
5 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       6 
6 
     | 
    
         
             
              segments: 
         
     | 
| 
       7 
7 
     | 
    
         
             
              - 0
         
     | 
| 
       8 
     | 
    
         
            -
              -  
     | 
| 
       9 
     | 
    
         
            -
              -  
     | 
| 
       10 
     | 
    
         
            -
              version: 0. 
     | 
| 
      
 8 
     | 
    
         
            +
              - 2
         
     | 
| 
      
 9 
     | 
    
         
            +
              - 0
         
     | 
| 
      
 10 
     | 
    
         
            +
              version: 0.2.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: 2011- 
     | 
| 
      
 18 
     | 
    
         
            +
            date: 2011-02-07 00:00:00 +01:00
         
     | 
| 
       19 
19 
     | 
    
         
             
            default_executable: 
         
     | 
| 
       20 
20 
     | 
    
         
             
            dependencies: 
         
     | 
| 
       21 
21 
     | 
    
         
             
            - !ruby/object:Gem::Dependency 
         
     | 
| 
         @@ -42,12 +42,12 @@ dependencies: 
     | 
|
| 
       42 
42 
     | 
    
         
             
                requirements: 
         
     | 
| 
       43 
43 
     | 
    
         
             
                - - ">="
         
     | 
| 
       44 
44 
     | 
    
         
             
                  - !ruby/object:Gem::Version 
         
     | 
| 
       45 
     | 
    
         
            -
                    hash:  
     | 
| 
      
 45 
     | 
    
         
            +
                    hash: 13
         
     | 
| 
       46 
46 
     | 
    
         
             
                    segments: 
         
     | 
| 
       47 
47 
     | 
    
         
             
                    - 0
         
     | 
| 
       48 
48 
     | 
    
         
             
                    - 0
         
     | 
| 
       49 
     | 
    
         
            -
                    -  
     | 
| 
       50 
     | 
    
         
            -
                    version: 0.0. 
     | 
| 
      
 49 
     | 
    
         
            +
                    - 9
         
     | 
| 
      
 50 
     | 
    
         
            +
                    version: 0.0.9
         
     | 
| 
       51 
51 
     | 
    
         
             
              type: :runtime
         
     | 
| 
       52 
52 
     | 
    
         
             
              version_requirements: *id002
         
     | 
| 
       53 
53 
     | 
    
         
             
            - !ruby/object:Gem::Dependency 
         
     | 
| 
         @@ -150,8 +150,8 @@ homepage: http://q.saepia.net 
     | 
|
| 
       150 
150 
     | 
    
         
             
            licenses: []
         
     | 
| 
       151 
151 
     | 
    
         | 
| 
       152 
152 
     | 
    
         
             
            post_install_message: 
         
     | 
| 
       153 
     | 
    
         
            -
            rdoc_options:  
     | 
| 
       154 
     | 
    
         
            -
             
     | 
| 
      
 153 
     | 
    
         
            +
            rdoc_options: 
         
     | 
| 
      
 154 
     | 
    
         
            +
            - --charset=UTF-8
         
     | 
| 
       155 
155 
     | 
    
         
             
            require_paths: 
         
     | 
| 
       156 
156 
     | 
    
         
             
            - lib
         
     | 
| 
       157 
157 
     | 
    
         
             
            required_ruby_version: !ruby/object:Gem::Requirement 
         
     |