hobo 2.1.1 → 2.1.2
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.
- checksums.yaml +4 -4
- data/Gemfile +4 -1
- data/Rakefile +4 -0
- data/VERSION +1 -1
- data/app/helpers/hobo_permissions_helper.rb +10 -3
- data/hobo.gemspec +2 -2
- data/lib/generators/hobo/i18n/templates/hobo.en.yml +1 -0
- data/lib/generators/hobo/setup_wizard/setup_wizard_generator.rb +1 -1
- data/lib/generators/hobo/user_model/templates/model_injection.rb.erb +5 -0
- data/lib/hobo/controller/model.rb +1 -1
- data/lib/hobo/extensions/active_record/permissions.rb +11 -3
- data/lib/hobo/model.rb +20 -4
- data/lib/hobo/model/accessible_associations.rb +18 -11
- data/lib/hobo/model/lifecycles/creator.rb +1 -0
- data/lib/hobo/model/permissions.rb +6 -6
- data/lib/hobo/model/scopes/apply_scopes.rb +2 -2
- data/lib/hobo/model/scopes/automatic_scopes.rb +8 -3
- data/lib/hobo/model/user_base.rb +11 -1
- data/test/irt/generators/front_controller.irt +2 -1
- data/test/irt/generators/test_framework.irt +4 -4
- metadata +10 -24
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 12fc9a9fb6626d3e125ab54d4357c98f4ffec9b6
         | 
| 4 | 
            +
              data.tar.gz: bd705d3d658a46e93373599305f85476616911cb
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: f43ce9b0b3b8f70fa5f702de7b7ad11d0e5b1e347fd49718582ffdd63a23bfe6e1821ca36fd046b43f86850046d17448146fdd62b49bdcb0a376cfcc958172f9
         | 
| 7 | 
            +
              data.tar.gz: 61186300408c90cc1dbc6c24a0257fd027fd299a424e0ba3a59237d924b6ea282431ae78222be644fec1af91402e60ad73d6f647922e9ea0be0f430166f853a1
         | 
    
        data/Gemfile
    CHANGED
    
    | @@ -1,7 +1,8 @@ | |
| 1 1 | 
             
            source "http://rubygems.org"
         | 
| 2 2 |  | 
| 3 3 | 
             
            gem 'rubydoctest', :git => 'git://github.com/bryanlarsen/rubydoctest.git'
         | 
| 4 | 
            -
            gem 'rails', ' | 
| 4 | 
            +
            gem 'rails', '4.0.8'
         | 
| 5 | 
            +
            gem 'protected_attributes'
         | 
| 5 6 | 
             
            gemspec :path => "../dryml"
         | 
| 6 7 | 
             
            gemspec :path => "../hobo_support"
         | 
| 7 8 | 
             
            gemspec :path => "../hobo_fields"
         | 
| @@ -13,3 +14,5 @@ end | |
| 13 14 | 
             
            platform :jruby do
         | 
| 14 15 | 
             
              gem 'activerecord-jdbcsqlite3-adapter'
         | 
| 15 16 | 
             
            end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            gem "irt"
         | 
    
        data/Rakefile
    CHANGED
    
    | @@ -4,6 +4,10 @@ require 'rake/testtask' | |
| 4 4 | 
             
            require 'tmpdir'
         | 
| 5 5 |  | 
| 6 6 | 
             
            require 'active_record'
         | 
| 7 | 
            +
            require 'action_view'
         | 
| 8 | 
            +
            require 'action_controller'
         | 
| 9 | 
            +
            require 'action_mailer'
         | 
| 10 | 
            +
             | 
| 7 11 | 
             
            ActiveRecord::ActiveRecordError # hack for https://rails.lighthouseapp.com/projects/8994/tickets/2577-when-using-activerecordassociations-outside-of-rails-a-nameerror-is-thrown
         | 
| 8 12 | 
             
            $:.unshift File.expand_path('../lib', __FILE__)
         | 
| 9 13 | 
             
            $:.unshift File.expand_path('../../hobo_support/lib', __FILE__)
         | 
    
        data/VERSION
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
            2.1. | 
| 1 | 
            +
            2.1.2
         | 
| @@ -21,13 +21,20 @@ module HoboPermissionsHelper | |
| 21 21 | 
             
                    object = object.new
         | 
| 22 22 | 
             
                  elsif (refl = object.try.proxy_association._?.reflection) && refl.macro == :has_many
         | 
| 23 23 | 
             
                    if Hobo.simple_has_many_association?(object)
         | 
| 24 | 
            -
                       | 
| 25 | 
            -
                       | 
| 24 | 
            +
                      new_object = object.build
         | 
| 25 | 
            +
                      new_object.set_creator(current_user)
         | 
| 26 26 | 
             
                    else
         | 
| 27 27 | 
             
                      return false
         | 
| 28 28 | 
             
                    end
         | 
| 29 29 | 
             
                  end
         | 
| 30 | 
            -
                   | 
| 30 | 
            +
                  # When running `can_create?(@something.children)`, a new object is instantiated to check if we can create
         | 
| 31 | 
            +
                  # After the check we need to remove it from memory
         | 
| 32 | 
            +
                  if new_object
         | 
| 33 | 
            +
                    new_object.creatable_by?(current_user)
         | 
| 34 | 
            +
                    object.delete(new_object)
         | 
| 35 | 
            +
                  else
         | 
| 36 | 
            +
                    object.creatable_by?(current_user)
         | 
| 37 | 
            +
                  end
         | 
| 31 38 | 
             
                end
         | 
| 32 39 |  | 
| 33 40 |  | 
    
        data/hobo.gemspec
    CHANGED
    
    | @@ -16,9 +16,9 @@ Gem::Specification.new do |s| | |
| 16 16 | 
             
              s.add_runtime_dependency('dryml', ["= #{version}"])
         | 
| 17 17 | 
             
              s.add_runtime_dependency('hobo_will_paginate')
         | 
| 18 18 |  | 
| 19 | 
            -
              s.add_development_dependency('rubydoctest', [">= 1.1.3"])
         | 
| 19 | 
            +
              # s.add_development_dependency('rubydoctest', [">= 1.1.3"])
         | 
| 20 20 | 
             
              s.add_development_dependency('shoulda', [">= 0"])
         | 
| 21 | 
            -
              s.add_development_dependency('irt', ["= 1.2 | 
| 21 | 
            +
              s.add_development_dependency('irt', ["= 1.3.2"])
         | 
| 22 22 | 
             
              s.add_development_dependency('mocha')
         | 
| 23 23 | 
             
              s.add_development_dependency('yard')
         | 
| 24 24 |  | 
| @@ -109,7 +109,7 @@ NOTE: You might want to sign up as the administrator before adding this! | |
| 109 109 | 
             
                    @invite_only = invite_only?
         | 
| 110 110 | 
             
                    private_site = options[:private_site]
         | 
| 111 111 | 
             
                  end
         | 
| 112 | 
            -
                  inject_into_file 'app/controllers/application_controller.rb', <<EOI, :after => "protect_from_forgery\n" if private_site
         | 
| 112 | 
            +
                  inject_into_file 'app/controllers/application_controller.rb', <<EOI, :after => "protect_from_forgery with: :exception\n" if private_site
         | 
| 113 113 | 
             
              include Hobo::Controller::AuthenticationSupport
         | 
| 114 114 | 
             
              before_filter :except => [:login, :forgot_password, :accept_invitation, :do_accept_invitation, :reset_password,
         | 
| 115 115 | 
             
            :do_reset_password] do
         | 
| @@ -2,6 +2,11 @@ | |
| 2 2 | 
             
              hobo_user_model # Don't put anything above this
         | 
| 3 3 |  | 
| 4 4 | 
             
              fields do
         | 
| 5 | 
            +
             | 
| 6 | 
            +
                # NOTE: If you add fields here, you may need to include them in both the attr_accessible list, and
         | 
| 7 | 
            +
                # the list of fields passed to 'only_changed?' in the update_permitted? method for them to appear 
         | 
| 8 | 
            +
                # on the user#edit form.
         | 
| 9 | 
            +
             | 
| 5 10 | 
             
                name          :string, :required, :unique
         | 
| 6 11 | 
             
                email_address :email_address, :login => true
         | 
| 7 12 | 
             
                administrator :boolean, :default => false
         | 
| @@ -335,7 +335,7 @@ module Hobo | |
| 335 335 |  | 
| 336 336 |  | 
| 337 337 | 
             
                def parse_sort_param(*args)
         | 
| 338 | 
            -
                  _, desc, field = *params[:sort]._?.match(/^(-)?([a- | 
| 338 | 
            +
                  _, desc, field = *params[:sort]._?.match(/^(-)?([a-z0-9_]+(?:\.[a-z0-9_]+)?)$/)
         | 
| 339 339 |  | 
| 340 340 | 
             
                  if field
         | 
| 341 341 | 
             
                    hash = args.extract_options!
         | 
| @@ -103,13 +103,21 @@ ActiveRecord::Associations::HasManyThroughAssociation.class_eval do | |
| 103 103 |  | 
| 104 104 | 
             
              # TODO - add dependent option support
         | 
| 105 105 | 
             
              def delete_records_with_hobo_permission_check(records, method)
         | 
| 106 | 
            -
                klass  = @reflection.through_reflection.klass
         | 
| 107 106 | 
             
                user = acting_user
         | 
| 107 | 
            +
             | 
| 108 | 
            +
                problem_joiner=nil
         | 
| 109 | 
            +
                association = self.respond_to?(:proxy_association) ? proxy_association : self
         | 
| 110 | 
            +
                through_assoc_name = association.send(:through_reflection).name
         | 
| 108 111 | 
             
                if user && records.any? { |r|
         | 
| 109 | 
            -
                     | 
| 112 | 
            +
                    ja = construct_join_attributes(r)
         | 
| 113 | 
            +
                    problem_joiner = joiner = association.owner.send(through_assoc_name).where(ja).first
         | 
| 110 114 | 
             
                    joiner.is_a?(Hobo::Model) && !joiner.destroyable_by?(user)
         | 
| 111 115 | 
             
                  }
         | 
| 112 | 
            -
                   | 
| 116 | 
            +
                  message =  "#{@owner.class}##{association.reflection.name}.destroy "
         | 
| 117 | 
            +
                  if 'development' == Rails.env
         | 
| 118 | 
            +
                    message += " because of #{problem_joiner.class.name}(#{problem_joiner.to_json})"
         | 
| 119 | 
            +
                  end
         | 
| 120 | 
            +
                  raise Hobo::PermissionDeniedError, message
         | 
| 113 121 | 
             
                end
         | 
| 114 122 | 
             
                delete_records_without_hobo_permission_check(records, method)
         | 
| 115 123 | 
             
              end
         | 
    
        data/lib/hobo/model.rb
    CHANGED
    
    | @@ -132,13 +132,29 @@ module Hobo | |
| 132 132 | 
             
                    names += public_instance_methods.*.to_s
         | 
| 133 133 | 
             
                  end
         | 
| 134 134 |  | 
| 135 | 
            -
                  def belongs_to_with_creator_metadata(name,  | 
| 135 | 
            +
                  def belongs_to_with_creator_metadata(name, *args, &block)
         | 
| 136 | 
            +
                    if args.size == 0 || (args.size == 1 && args[0].kind_of?(Proc))
         | 
| 137 | 
            +
                        options = {}
         | 
| 138 | 
            +
                        args.push(options)
         | 
| 139 | 
            +
                    elsif args.size == 1
         | 
| 140 | 
            +
                        options = args[0]
         | 
| 141 | 
            +
                    else
         | 
| 142 | 
            +
                        options = args[1]
         | 
| 143 | 
            +
                    end
         | 
| 136 144 | 
             
                    self.creator_attribute = name.to_sym if options.delete(:creator)
         | 
| 137 | 
            -
                    belongs_to_without_creator_metadata(name,  | 
| 145 | 
            +
                    belongs_to_without_creator_metadata(name, *args, &block)
         | 
| 138 146 | 
             
                  end
         | 
| 139 147 |  | 
| 140 | 
            -
                  def belongs_to_with_test_methods(name,  | 
| 141 | 
            -
                     | 
| 148 | 
            +
                  def belongs_to_with_test_methods(name, *args, &block)
         | 
| 149 | 
            +
                    if args.size == 0 || (args.size == 1 && args[0].kind_of?(Proc))
         | 
| 150 | 
            +
                        options = {}
         | 
| 151 | 
            +
                        args.push(options)
         | 
| 152 | 
            +
                    elsif args.size == 1
         | 
| 153 | 
            +
                        options = args[0]
         | 
| 154 | 
            +
                    else
         | 
| 155 | 
            +
                        options = args[1]
         | 
| 156 | 
            +
                    end
         | 
| 157 | 
            +
                    belongs_to_without_test_methods(name, *args, &block)
         | 
| 142 158 | 
             
                    refl = reflections[name]
         | 
| 143 159 | 
             
                    id_method = refl.options[:primary_key] || refl.klass.primary_key
         | 
| 144 160 | 
             
                    if options[:polymorphic]
         | 
| @@ -103,21 +103,20 @@ module Hobo | |
| 103 103 |  | 
| 104 104 | 
             
                  # --- has_many mass assignment support --- #
         | 
| 105 105 |  | 
| 106 | 
            -
                  def self.has_many_with_accessible(name,  | 
| 106 | 
            +
                  def self.has_many_with_accessible(name, *args, &block)
         | 
| 107 107 | 
             
                    # Rails 4 supports a lambda as the second argument in a has_many association
         | 
| 108 108 | 
             
                    # We need to support it too (required for gems like papertrail)
         | 
| 109 109 | 
             
                    # The problem is that when it is not used, the options hash is taken as the scope
         | 
| 110 110 | 
             
                    # To fix this, we make a small hack checking the second argument's class
         | 
| 111 | 
            -
                    if  | 
| 112 | 
            -
                      has_many_without_accessible(name, received_scope, options, &block)
         | 
| 113 | 
            -
                    else
         | 
| 114 | 
            -
                      if received_scope == nil
         | 
| 111 | 
            +
                    if args.size == 0 || (args.size == 1 && args[0].kind_of?(Proc))
         | 
| 115 112 | 
             
                        options = {}
         | 
| 116 | 
            -
             | 
| 117 | 
            -
             | 
| 118 | 
            -
             | 
| 119 | 
            -
             | 
| 113 | 
            +
                        args.push(options)
         | 
| 114 | 
            +
                    elsif args.size == 1
         | 
| 115 | 
            +
                        options = args[0]
         | 
| 116 | 
            +
                    else
         | 
| 117 | 
            +
                        options = args[1]
         | 
| 120 118 | 
             
                    end
         | 
| 119 | 
            +
                    has_many_without_accessible(name, *args, &block)
         | 
| 121 120 | 
             
                    # End of the received_scope hack
         | 
| 122 121 |  | 
| 123 122 | 
             
                    if options[:accessible]
         | 
| @@ -138,8 +137,16 @@ module Hobo | |
| 138 137 |  | 
| 139 138 | 
             
                  # --- belongs_to assignment support --- #
         | 
| 140 139 |  | 
| 141 | 
            -
                  def self.belongs_to_with_accessible(name,  | 
| 142 | 
            -
                     | 
| 140 | 
            +
                  def self.belongs_to_with_accessible(name,*args, &block)
         | 
| 141 | 
            +
                    if args.size == 0 || (args.size == 1 && args[0].kind_of?(Proc))
         | 
| 142 | 
            +
                        options = {}
         | 
| 143 | 
            +
                        args.push(options)
         | 
| 144 | 
            +
                    elsif args.size == 1
         | 
| 145 | 
            +
                        options = args[0]
         | 
| 146 | 
            +
                    else
         | 
| 147 | 
            +
                        options = args[1]
         | 
| 148 | 
            +
                    end
         | 
| 149 | 
            +
                    belongs_to_without_accessible(name,*args, &block)
         | 
| 143 150 |  | 
| 144 151 | 
             
                    if options[:accessible]
         | 
| 145 152 | 
             
                      class_eval %{
         | 
| @@ -79,8 +79,8 @@ module Hobo | |
| 79 79 | 
             
                    #  ensure active_user gets passed down to :dependent => destroy
         | 
| 80 80 | 
             
                    #  associations  (Ticket #528)
         | 
| 81 81 |  | 
| 82 | 
            -
                    def has_many_with_hobo_permission_check(association_id,  | 
| 83 | 
            -
                      has_many_without_hobo_permission_check(association_id,  | 
| 82 | 
            +
                    def has_many_with_hobo_permission_check(association_id, *args, &extension)
         | 
| 83 | 
            +
                      has_many_without_hobo_permission_check(association_id, *args, &extension)
         | 
| 84 84 | 
             
                      reflection = reflections[association_id]
         | 
| 85 85 | 
             
                      if reflection.options[:dependent]==:destroy
         | 
| 86 86 | 
             
                        #overriding dynamic method created in ActiveRecord::Associations#configure_dependency_for_has_many
         | 
| @@ -91,8 +91,8 @@ module Hobo | |
| 91 91 | 
             
                      end
         | 
| 92 92 | 
             
                    end
         | 
| 93 93 |  | 
| 94 | 
            -
                    def has_one_with_hobo_permission_check(association_id,  | 
| 95 | 
            -
                      has_one_without_hobo_permission_check(association_id,  | 
| 94 | 
            +
                    def has_one_with_hobo_permission_check(association_id, *args, &extension)
         | 
| 95 | 
            +
                      has_one_without_hobo_permission_check(association_id, *args, &extension)
         | 
| 96 96 | 
             
                      reflection = reflections[association_id]
         | 
| 97 97 | 
             
                      if reflection.options[:dependent]==:destroy
         | 
| 98 98 | 
             
                        #overriding dynamic method created in ActiveRecord::Associations#configure_dependency_for_has_one
         | 
| @@ -106,8 +106,8 @@ module Hobo | |
| 106 106 | 
             
                      end
         | 
| 107 107 | 
             
                    end
         | 
| 108 108 |  | 
| 109 | 
            -
                    def belongs_to_with_hobo_permission_check(association_id,  | 
| 110 | 
            -
                      belongs_to_without_hobo_permission_check(association_id,  | 
| 109 | 
            +
                    def belongs_to_with_hobo_permission_check(association_id, *args, &extension)
         | 
| 110 | 
            +
                      belongs_to_without_hobo_permission_check(association_id, *args, &extension)
         | 
| 111 111 | 
             
                      reflection = reflections[association_id]
         | 
| 112 112 | 
             
                      if reflection.options[:dependent]==:destroy
         | 
| 113 113 | 
             
                        #overriding dynamic method created in ActiveRecord::Associations#configure_dependency_for_belongs_to
         | 
| @@ -7,9 +7,9 @@ module Hobo | |
| 7 7 | 
             
                      result = self
         | 
| 8 8 | 
             
                      scopes.each_pair do |scope, arg|
         | 
| 9 9 | 
             
                        if arg.is_a?(Array)
         | 
| 10 | 
            -
                          result =  | 
| 10 | 
            +
                          result = result.send(scope, *arg) unless arg.first.blank?
         | 
| 11 11 | 
             
                        else
         | 
| 12 | 
            -
                          result =  | 
| 12 | 
            +
                          result = result.send(scope, arg) unless arg.blank?
         | 
| 13 13 | 
             
                        end
         | 
| 14 14 | 
             
                      end
         | 
| 15 15 | 
             
                      result
         | 
| @@ -322,13 +322,18 @@ module Hobo | |
| 322 322 | 
             
                        return true if check_only
         | 
| 323 323 |  | 
| 324 324 | 
             
                        def_scope do |query, *fields|
         | 
| 325 | 
            -
                           | 
| 326 | 
            -
             | 
| 325 | 
            +
                          using_postgresql = %w(PostgreSQL PostGIS).include?(::ActiveRecord::Base.connection.adapter_name)
         | 
| 326 | 
            +
                          match_keyword = using_postgresql ? "ILIKE" : "LIKE"
         | 
| 327 327 | 
             
                          words = (query || "").split
         | 
| 328 328 | 
             
                          args = []
         | 
| 329 329 | 
             
                          word_queries = words.map do |word|
         | 
| 330 330 | 
             
                            field_query = '(' + fields.map { |field|
         | 
| 331 | 
            -
                               | 
| 331 | 
            +
                              if using_postgresql
         | 
| 332 | 
            +
                                casted_field = "CAST(#{@klass.table_name}.#{field} AS TEXT)"
         | 
| 333 | 
            +
                              else
         | 
| 334 | 
            +
                                casted_field = "#{@klass.table_name}.#{field}"
         | 
| 335 | 
            +
                              end
         | 
| 336 | 
            +
                              field = "#{casted_field}" unless field =~ /\./
         | 
| 332 337 | 
             
                              "(#{field} #{match_keyword} ?)"
         | 
| 333 338 | 
             
                            }.join(" OR ") + ')'
         | 
| 334 339 | 
             
                            args += ["%#{word}%"] * fields.length
         | 
    
        data/lib/hobo/model/user_base.rb
    CHANGED
    
    | @@ -42,7 +42,7 @@ module Hobo | |
| 42 42 | 
             
                      # https://hobo.lighthouseapp.com/projects/8324-hobo/tickets/530
         | 
| 43 43 | 
             
                      attr_accessor :current_password, :password, :password_confirmation, :type => :password
         | 
| 44 44 |  | 
| 45 | 
            -
                      before_save :encrypt_password
         | 
| 45 | 
            +
                      before_save :encrypt_password, :downcase_email
         | 
| 46 46 | 
             
                      after_save :stash_current_password
         | 
| 47 47 |  | 
| 48 48 | 
             
                      never_show *AUTHENTICATION_FIELDS
         | 
| @@ -75,6 +75,9 @@ module Hobo | |
| 75 75 |  | 
| 76 76 | 
             
                    # Authenticates a user by their login name and unencrypted password.  Returns the user or nil.
         | 
| 77 77 | 
             
                    def authenticate(login, password)
         | 
| 78 | 
            +
                      # Downcase emails before logging in
         | 
| 79 | 
            +
                      login = login.downcase if attr_type(@login_attribute) == HoboFields::Types::EmailAddress
         | 
| 80 | 
            +
             | 
| 78 81 | 
             
                      u = where("#{@login_attribute} = ?", login).first # need to get the salt
         | 
| 79 82 |  | 
| 80 83 | 
             
                      if u && u.authenticated?(password)
         | 
| @@ -179,6 +182,13 @@ module Hobo | |
| 179 182 | 
             
                      if changing_password? && !authenticated?(current_password)
         | 
| 180 183 | 
             
                  end
         | 
| 181 184 |  | 
| 185 | 
            +
                  # Downcase emails used for logging in before saving them to the database
         | 
| 186 | 
            +
                  def downcase_email
         | 
| 187 | 
            +
                    if self.login.class == HoboFields::Types::EmailAddress
         | 
| 188 | 
            +
                      self.login = self.login.downcase
         | 
| 189 | 
            +
                    end
         | 
| 190 | 
            +
                  end
         | 
| 191 | 
            +
             | 
| 182 192 | 
             
                end
         | 
| 183 193 | 
             
              end
         | 
| 184 194 | 
             
            end
         | 
| @@ -18,6 +18,7 @@ test_value_eql? true | |
| 18 18 |  | 
| 19 19 | 
             
            desc "Routes added"
         | 
| 20 20 | 
             
            file_include? 'config/routes.rb',
         | 
| 21 | 
            -
                          %( | 
| 21 | 
            +
                          %(post 'search' => 'front#search', :as => 'site_search_post'),
         | 
| 22 | 
            +
                          %(get 'search' => 'front#search', :as => 'site_search'),
         | 
| 22 23 | 
             
                          %(root :to => 'front#index')
         | 
| 23 24 | 
             
            test_value_eql? true
         | 
| @@ -24,7 +24,7 @@ file_include? 'config/application.rb', | |
| 24 24 | 
             
            test_value_eql? true
         | 
| 25 25 |  | 
| 26 26 | 
             
            desc "shoulda Gemfile injection"
         | 
| 27 | 
            -
            file_include? 'Gemfile', %(gem "shoulda", : | 
| 27 | 
            +
            file_include? 'Gemfile', %(gem "shoulda", group: :test)
         | 
| 28 28 | 
             
            test_value_eql? true
         | 
| 29 29 |  | 
| 30 30 | 
             
            git_reset_app
         | 
| @@ -38,7 +38,7 @@ file_include? 'config/application.rb', | |
| 38 38 | 
             
            test_value_eql? true
         | 
| 39 39 |  | 
| 40 40 | 
             
            desc "rspec Gemfile injection"
         | 
| 41 | 
            -
            file_include? 'Gemfile',  %(gem "rspec-rails", ">= 2.5.0", : | 
| 41 | 
            +
            file_include? 'Gemfile',  %(gem "rspec-rails", ">= 2.5.0", group: [:test, :development])
         | 
| 42 42 | 
             
            test_value_eql? true
         | 
| 43 43 |  | 
| 44 44 | 
             
            git_reset_app
         | 
| @@ -52,8 +52,8 @@ file_include? 'config/application.rb', | |
| 52 52 | 
             
            test_value_eql? true
         | 
| 53 53 |  | 
| 54 54 | 
             
            desc "rspec_with_shoulda Gemfile injection"
         | 
| 55 | 
            -
            file_include? 'Gemfile', %(gem "rspec-rails", ">= 2.5.0", : | 
| 56 | 
            -
                                   %(gem "shoulda", : | 
| 55 | 
            +
            file_include? 'Gemfile', %(gem "rspec-rails", ">= 2.5.0", group: [:test, :development]),
         | 
| 56 | 
            +
                                   %(gem "shoulda", group: :test)
         | 
| 57 57 | 
             
            test_value_eql? true
         | 
| 58 58 |  | 
| 59 59 |  | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: hobo
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 2.1. | 
| 4 | 
            +
              version: 2.1.2
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Tom Locke
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 11 | 
            +
            date: 2015-09-13 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: hobo_support
         | 
| @@ -16,42 +16,42 @@ dependencies: | |
| 16 16 | 
             
                requirements:
         | 
| 17 17 | 
             
                - - '='
         | 
| 18 18 | 
             
                  - !ruby/object:Gem::Version
         | 
| 19 | 
            -
                    version: 2.1. | 
| 19 | 
            +
                    version: 2.1.2
         | 
| 20 20 | 
             
              type: :runtime
         | 
| 21 21 | 
             
              prerelease: false
         | 
| 22 22 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 23 23 | 
             
                requirements:
         | 
| 24 24 | 
             
                - - '='
         | 
| 25 25 | 
             
                  - !ruby/object:Gem::Version
         | 
| 26 | 
            -
                    version: 2.1. | 
| 26 | 
            +
                    version: 2.1.2
         | 
| 27 27 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 28 28 | 
             
              name: hobo_fields
         | 
| 29 29 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 30 30 | 
             
                requirements:
         | 
| 31 31 | 
             
                - - '='
         | 
| 32 32 | 
             
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            -
                    version: 2.1. | 
| 33 | 
            +
                    version: 2.1.2
         | 
| 34 34 | 
             
              type: :runtime
         | 
| 35 35 | 
             
              prerelease: false
         | 
| 36 36 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 37 37 | 
             
                requirements:
         | 
| 38 38 | 
             
                - - '='
         | 
| 39 39 | 
             
                  - !ruby/object:Gem::Version
         | 
| 40 | 
            -
                    version: 2.1. | 
| 40 | 
            +
                    version: 2.1.2
         | 
| 41 41 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 42 42 | 
             
              name: dryml
         | 
| 43 43 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 44 44 | 
             
                requirements:
         | 
| 45 45 | 
             
                - - '='
         | 
| 46 46 | 
             
                  - !ruby/object:Gem::Version
         | 
| 47 | 
            -
                    version: 2.1. | 
| 47 | 
            +
                    version: 2.1.2
         | 
| 48 48 | 
             
              type: :runtime
         | 
| 49 49 | 
             
              prerelease: false
         | 
| 50 50 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 51 51 | 
             
                requirements:
         | 
| 52 52 | 
             
                - - '='
         | 
| 53 53 | 
             
                  - !ruby/object:Gem::Version
         | 
| 54 | 
            -
                    version: 2.1. | 
| 54 | 
            +
                    version: 2.1.2
         | 
| 55 55 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 56 56 | 
             
              name: hobo_will_paginate
         | 
| 57 57 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -66,20 +66,6 @@ dependencies: | |
| 66 66 | 
             
                - - ">="
         | 
| 67 67 | 
             
                  - !ruby/object:Gem::Version
         | 
| 68 68 | 
             
                    version: '0'
         | 
| 69 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 70 | 
            -
              name: rubydoctest
         | 
| 71 | 
            -
              requirement: !ruby/object:Gem::Requirement
         | 
| 72 | 
            -
                requirements:
         | 
| 73 | 
            -
                - - ">="
         | 
| 74 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 75 | 
            -
                    version: 1.1.3
         | 
| 76 | 
            -
              type: :development
         | 
| 77 | 
            -
              prerelease: false
         | 
| 78 | 
            -
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 79 | 
            -
                requirements:
         | 
| 80 | 
            -
                - - ">="
         | 
| 81 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 82 | 
            -
                    version: 1.1.3
         | 
| 83 69 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 84 70 | 
             
              name: shoulda
         | 
| 85 71 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -100,14 +86,14 @@ dependencies: | |
| 100 86 | 
             
                requirements:
         | 
| 101 87 | 
             
                - - '='
         | 
| 102 88 | 
             
                  - !ruby/object:Gem::Version
         | 
| 103 | 
            -
                    version: 1.2 | 
| 89 | 
            +
                    version: 1.3.2
         | 
| 104 90 | 
             
              type: :development
         | 
| 105 91 | 
             
              prerelease: false
         | 
| 106 92 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 107 93 | 
             
                requirements:
         | 
| 108 94 | 
             
                - - '='
         | 
| 109 95 | 
             
                  - !ruby/object:Gem::Version
         | 
| 110 | 
            -
                    version: 1.2 | 
| 96 | 
            +
                    version: 1.3.2
         | 
| 111 97 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 112 98 | 
             
              name: mocha
         | 
| 113 99 | 
             
              requirement: !ruby/object:Gem::Requirement
         |