microscope 0.6.1 → 0.6.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/.rubocop.yml +50 -0
- data/.travis.yml +1 -3
- data/README.md +20 -7
- data/gemfiles/{Gemfile.activerecord-3.2.x → Gemfile.activerecord-4.1} +1 -1
- data/lib/microscope.rb +11 -9
- data/lib/microscope/instance_method.rb +1 -24
- data/lib/microscope/instance_method/boolean_instance_method.rb +1 -1
- data/lib/microscope/instance_method/datetime_instance_method.rb +39 -25
- data/lib/microscope/scope.rb +1 -4
- data/lib/microscope/scope/date_scope.rb +2 -0
- data/lib/microscope/scope/datetime_scope.rb +10 -25
- data/lib/microscope/utils.rb +23 -0
- data/lib/microscope/version.rb +1 -1
- data/microscope.gemspec +8 -6
- data/spec/microscope/instance_method/date_instance_method_spec.rb +2 -2
- data/spec/microscope/instance_method/datetime_instance_method_spec.rb +2 -2
- data/spec/microscope/scope/boolean_scope_spec.rb +2 -2
- data/spec/microscope/scope/date_scope_spec.rb +50 -0
- data/spec/microscope/scope/datetime_scope_spec.rb +50 -0
- data/spec/microscope/{instance_method_spec.rb → utils_spec.rb} +4 -4
- data/spec/spec_helper.rb +6 -1
- data/spec/support/macros/database_macros.rb +1 -1
- data/spec/support/macros/model_macros.rb +1 -1
- metadata +39 -10
- data/gemfiles/Gemfile.activerecord-4.0 +0 -5
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 33dac82bbfb0ee0add9e83ad93ebea6525f4f427
         | 
| 4 | 
            +
              data.tar.gz: bbdc35dd0547369edac2fbb0877b42c970042584
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 3ec8faf2b9878a7fef29fce73a13720b54a6befff22580959252506240851549f05e79bd009c4487cf29b200f43825c9f1f44ae9c77f93a1db29423fc4aa8f1b
         | 
| 7 | 
            +
              data.tar.gz: 5e36fb8f4f6819d721cb442cec88ec4ceffb7e430df68631f0cb59e8bc6069d9fb1d5975bdae1bd812f684b294fa1b3416e2f65fa7433c65bd9add25829dec2f
         | 
    
        data/.rubocop.yml
    ADDED
    
    | @@ -0,0 +1,50 @@ | |
| 1 | 
            +
            AllCops:
         | 
| 2 | 
            +
              Include:
         | 
| 3 | 
            +
                - microscope.gemspec
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            Documentation:
         | 
| 6 | 
            +
              Enabled: false
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            Encoding:
         | 
| 9 | 
            +
              Enabled: false
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            LineLength:
         | 
| 12 | 
            +
              Max: 200
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            ClassLength:
         | 
| 15 | 
            +
              Max: 200
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            AccessModifierIndentation:
         | 
| 18 | 
            +
              EnforcedStyle: outdent
         | 
| 19 | 
            +
             | 
| 20 | 
            +
            IfUnlessModifier:
         | 
| 21 | 
            +
              Enabled: false
         | 
| 22 | 
            +
             | 
| 23 | 
            +
            CaseIndentation:
         | 
| 24 | 
            +
              IndentWhenRelativeTo: case
         | 
| 25 | 
            +
              IndentOneStep: true
         | 
| 26 | 
            +
             | 
| 27 | 
            +
            MethodLength:
         | 
| 28 | 
            +
              CountComments: false
         | 
| 29 | 
            +
              Max: 20
         | 
| 30 | 
            +
             | 
| 31 | 
            +
            SignalException:
         | 
| 32 | 
            +
              Enabled: false
         | 
| 33 | 
            +
             | 
| 34 | 
            +
            ColonMethodCall:
         | 
| 35 | 
            +
              Enabled: false
         | 
| 36 | 
            +
             | 
| 37 | 
            +
            AsciiComments:
         | 
| 38 | 
            +
              Enabled: false
         | 
| 39 | 
            +
             | 
| 40 | 
            +
            Lambda:
         | 
| 41 | 
            +
              Enabled: false
         | 
| 42 | 
            +
             | 
| 43 | 
            +
            RegexpLiteral:
         | 
| 44 | 
            +
              Enabled: false
         | 
| 45 | 
            +
             | 
| 46 | 
            +
            AssignmentInCondition:
         | 
| 47 | 
            +
              Enabled: false
         | 
| 48 | 
            +
             | 
| 49 | 
            +
            ClassAndModuleChildren:
         | 
| 50 | 
            +
              Enabled: false
         | 
    
        data/.travis.yml
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | @@ -5,11 +5,11 @@ | |
| 5 5 | 
             
              <br />
         | 
| 6 6 | 
             
              Microscope adds useful scopes targeting ActiveRecord <code>boolean</code>, <code>date</code> and <code>datetime</code> fields.
         | 
| 7 7 | 
             
              <br /><br />
         | 
| 8 | 
            -
              <a href="https://rubygems.org/gems/microscope"><img src=" | 
| 9 | 
            -
              <a href="https://codeclimate.com/github/mirego/microscope"><img src=" | 
| 10 | 
            -
              <a href='https://coveralls.io/r/mirego/microscope?branch=master'><img src= | 
| 11 | 
            -
              <a href='https://gemnasium.com/mirego/microscope'><img src=" | 
| 12 | 
            -
              <a href="https://travis-ci.org/mirego/microscope"><img src=" | 
| 8 | 
            +
              <a href="https://rubygems.org/gems/microscope"><img src="http://img.shields.io/gem/v/microscope.svg" /></a>
         | 
| 9 | 
            +
              <a href="https://codeclimate.com/github/mirego/microscope"><img src="http://img.shields.io/codeclimate/github/mirego/microscope.svg" /></a>
         | 
| 10 | 
            +
              <a href='https://coveralls.io/r/mirego/microscope?branch=master'><img src="http://img.shields.io/coveralls/mirego/microscope.svg" /></a>
         | 
| 11 | 
            +
              <a href='https://gemnasium.com/mirego/microscope'><img src="http://img.shields.io/gemnasium/mirego/microscope.svg" /></a>
         | 
| 12 | 
            +
              <a href="https://travis-ci.org/mirego/microscope"><img src="http://img.shields.io/travis/mirego/microscope.svg" /></a>
         | 
| 13 13 | 
             
            </p>
         | 
| 14 14 |  | 
| 15 15 | 
             
            ---
         | 
| @@ -51,6 +51,9 @@ Event.expired_before(2.months.ago) | |
| 51 51 | 
             
            Event.expired_before_now
         | 
| 52 52 | 
             
            # SELECT * FROM `events` where `events`.`expired_at` < '2013-07-05 15:43:42'
         | 
| 53 53 |  | 
| 54 | 
            +
            Event.expired_after_or_now
         | 
| 55 | 
            +
            # SELECT * FROM `events` where `events`.`expired_at` >= '2013-07-05 15:43:42'
         | 
| 56 | 
            +
             | 
| 54 57 | 
             
            Event.expired_after_or_at(2.months.from_now)
         | 
| 55 58 | 
             
            # SELECT * FROM `events` where `events`.`expired_at` >= '2013-09-05 15:43:42'
         | 
| 56 59 |  | 
| @@ -82,9 +85,19 @@ event.not_archived? # => false | |
| 82 85 | 
             
            event = Event.unarchived.first
         | 
| 83 86 | 
             
            event.archived? # => false
         | 
| 84 87 |  | 
| 85 | 
            -
            event. | 
| 88 | 
            +
            event.mark_as_archived
         | 
| 89 | 
            +
            event.archived? # => true
         | 
| 90 | 
            +
            event.archived_at # => 2013-07-05 15:43:42
         | 
| 91 | 
            +
            event.reload
         | 
| 92 | 
            +
            event.archived? # => false
         | 
| 93 | 
            +
            event.archived_at # => nil
         | 
| 94 | 
            +
             | 
| 95 | 
            +
            event.archive! # (same as #mark_as_archived but save the record immediately)
         | 
| 96 | 
            +
            event.archived? # => true
         | 
| 97 | 
            +
            event.archived_at # => 2013-07-05 15:43:42
         | 
| 98 | 
            +
            event.reload
         | 
| 86 99 | 
             
            event.archived? # => true
         | 
| 87 | 
            -
            event.archived_at # => 2013-07-05 15:43: | 
| 100 | 
            +
            event.archived_at # => 2013-07-05 15:43:42
         | 
| 88 101 | 
             
            ```
         | 
| 89 102 |  | 
| 90 103 | 
             
            ### Options
         | 
    
        data/lib/microscope.rb
    CHANGED
    
    | @@ -1,18 +1,20 @@ | |
| 1 | 
            -
            require  | 
| 1 | 
            +
            require 'microscope/version'
         | 
| 2 2 |  | 
| 3 3 | 
             
            require 'ostruct'
         | 
| 4 4 | 
             
            require 'active_record'
         | 
| 5 5 | 
             
            require 'active_support'
         | 
| 6 6 |  | 
| 7 | 
            -
            require  | 
| 8 | 
            -
            require "microscope/scope/boolean_scope"
         | 
| 9 | 
            -
            require "microscope/scope/datetime_scope"
         | 
| 10 | 
            -
            require "microscope/scope/date_scope"
         | 
| 7 | 
            +
            require 'microscope/utils'
         | 
| 11 8 |  | 
| 12 | 
            -
            require  | 
| 13 | 
            -
            require  | 
| 14 | 
            -
            require  | 
| 15 | 
            -
            require  | 
| 9 | 
            +
            require 'microscope/scope'
         | 
| 10 | 
            +
            require 'microscope/scope/boolean_scope'
         | 
| 11 | 
            +
            require 'microscope/scope/datetime_scope'
         | 
| 12 | 
            +
            require 'microscope/scope/date_scope'
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            require 'microscope/instance_method'
         | 
| 15 | 
            +
            require 'microscope/instance_method/boolean_instance_method'
         | 
| 16 | 
            +
            require 'microscope/instance_method/datetime_instance_method'
         | 
| 17 | 
            +
            require 'microscope/instance_method/date_instance_method'
         | 
| 16 18 |  | 
| 17 19 | 
             
            module Microscope
         | 
| 18 20 | 
             
              IRREGULAR_VERBS_FILE = File.expand_path('../../data/irregular_verbs.yml', __FILE__)
         | 
| @@ -13,31 +13,8 @@ module Microscope | |
| 13 13 | 
             
                def self.inject_instance_methods(model, fields, options = {})
         | 
| 14 14 | 
             
                  fields.each do |field|
         | 
| 15 15 | 
             
                    scope = "#{field.type.to_s.camelize}InstanceMethod"
         | 
| 16 | 
            -
             | 
| 17 | 
            -
                    if Microscope::InstanceMethod.const_defined?(scope)
         | 
| 18 | 
            -
                      "Microscope::InstanceMethod::#{scope}".constantize.new(model, field).apply
         | 
| 19 | 
            -
                    end
         | 
| 20 | 
            -
                  end
         | 
| 21 | 
            -
                end
         | 
| 22 | 
            -
             | 
| 23 | 
            -
                # Convert a past participle to its infinitive form
         | 
| 24 | 
            -
                def self.past_participle_to_infinitive(key)
         | 
| 25 | 
            -
                  *key, participle = key.split('_')
         | 
| 26 | 
            -
             | 
| 27 | 
            -
                  infinitive = if Microscope.special_verbs.include?(participle)
         | 
| 28 | 
            -
                    Microscope.special_verbs[participle]
         | 
| 29 | 
            -
                  elsif participle =~ /ed$/
         | 
| 30 | 
            -
                    participle.sub(/d$/, '')
         | 
| 31 | 
            -
                  else
         | 
| 32 | 
            -
                    participle
         | 
| 16 | 
            +
                    "Microscope::InstanceMethod::#{scope}".constantize.new(model, field).apply if const_defined?(scope)
         | 
| 33 17 | 
             
                  end
         | 
| 34 | 
            -
             | 
| 35 | 
            -
                  (key << infinitive).join('_')
         | 
| 36 | 
            -
                end
         | 
| 37 | 
            -
             | 
| 38 | 
            -
                # Convert a value to its boolean representation
         | 
| 39 | 
            -
                def self.value_to_boolean(value)
         | 
| 40 | 
            -
                  ![nil, false, 0, '0', 'f', 'F', 'false', 'FALSE'].include?(value.presence)
         | 
| 41 18 | 
             
                end
         | 
| 42 19 | 
             
              end
         | 
| 43 20 | 
             
            end
         | 
| @@ -2,7 +2,7 @@ module Microscope | |
| 2 2 | 
             
              class InstanceMethod
         | 
| 3 3 | 
             
                class BooleanInstanceMethod < InstanceMethod
         | 
| 4 4 | 
             
                  def apply
         | 
| 5 | 
            -
                    infinitive_verb =  | 
| 5 | 
            +
                    infinitive_verb = Microscope::Utils.past_participle_to_infinitive(field.name)
         | 
| 6 6 |  | 
| 7 7 | 
             
                    model.class_eval <<-RUBY, __FILE__, __LINE__ + 1
         | 
| 8 8 | 
             
                      define_method "#{infinitive_verb}!" do
         | 
| @@ -9,49 +9,63 @@ module Microscope | |
| 9 9 | 
             
                  end
         | 
| 10 10 |  | 
| 11 11 | 
             
                  def apply
         | 
| 12 | 
            -
                     | 
| 12 | 
            +
                    @cropped_field = field.name.gsub(@cropped_field_regex, '')
         | 
| 13 | 
            +
                    @infinitive_verb = Microscope::Utils.past_participle_to_infinitive(cropped_field)
         | 
| 13 14 |  | 
| 14 | 
            -
                     | 
| 15 | 
            -
             | 
| 15 | 
            +
                    model.class_eval(apply_methods) if @field_name =~ @cropped_field_regex
         | 
| 16 | 
            +
                  end
         | 
| 16 17 |  | 
| 17 | 
            -
             | 
| 18 | 
            -
                      define_method "#{cropped_field}?" do
         | 
| 19 | 
            -
                        value = send("#{field.name}")
         | 
| 20 | 
            -
                        !value.nil? && value <= #{@now}
         | 
| 21 | 
            -
                      end
         | 
| 18 | 
            +
                protected
         | 
| 22 19 |  | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 20 | 
            +
                  def apply_methods
         | 
| 21 | 
            +
                    apply_assignment_methods + apply_bang_methods + apply_predicate_methods + apply_aliases
         | 
| 22 | 
            +
                  end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                  def apply_assignment_methods
         | 
| 25 | 
            +
                    <<-RUBY
         | 
| 26 | 
            +
                      define_method '#{@cropped_field}=' do |value|
         | 
| 27 | 
            +
                        if Microscope::Utils.value_to_boolean(value)
         | 
| 25 28 | 
             
                          self.#{field.name} ||= #{@now}
         | 
| 26 29 | 
             
                        else
         | 
| 27 30 | 
             
                          self.#{field.name} = nil
         | 
| 28 31 | 
             
                        end
         | 
| 29 32 | 
             
                      end
         | 
| 30 33 |  | 
| 31 | 
            -
                      define_method | 
| 32 | 
            -
             | 
| 33 | 
            -
                       | 
| 34 | 
            -
             | 
| 34 | 
            +
                      define_method('mark_as_#{@cropped_field}') { self.#{@cropped_field}= true }
         | 
| 35 | 
            +
                      define_method('mark_as_not_#{@cropped_field}') { self.#{@cropped_field}= false }
         | 
| 36 | 
            +
                      RUBY
         | 
| 37 | 
            +
                  end
         | 
| 35 38 |  | 
| 36 | 
            -
             | 
| 37 | 
            -
             | 
| 39 | 
            +
                  def apply_bang_methods
         | 
| 40 | 
            +
                    <<-RUBY
         | 
| 41 | 
            +
                      define_method '#{@infinitive_verb}!' do
         | 
| 42 | 
            +
                        send('#{field.name}=', #{@now})
         | 
| 38 43 | 
             
                        save!
         | 
| 39 44 | 
             
                      end
         | 
| 40 45 |  | 
| 41 | 
            -
                      define_method  | 
| 42 | 
            -
                        send( | 
| 46 | 
            +
                      define_method 'not_#{@infinitive_verb}!' do
         | 
| 47 | 
            +
                        send('#{field.name}=', nil)
         | 
| 43 48 | 
             
                        save!
         | 
| 44 49 | 
             
                      end
         | 
| 45 | 
            -
             | 
| 50 | 
            +
                    RUBY
         | 
| 51 | 
            +
                  end
         | 
| 46 52 |  | 
| 47 | 
            -
             | 
| 48 | 
            -
             | 
| 53 | 
            +
                  def apply_predicate_methods
         | 
| 54 | 
            +
                    <<-RUBY
         | 
| 55 | 
            +
                      define_method '#{@cropped_field}?' do
         | 
| 56 | 
            +
                        value = send('#{field.name}')
         | 
| 57 | 
            +
                        !value.nil? && value <= #{@now}
         | 
| 49 58 | 
             
                      end
         | 
| 50 59 |  | 
| 51 | 
            -
                      define_method | 
| 52 | 
            -
             | 
| 53 | 
            -
             | 
| 54 | 
            -
             | 
| 60 | 
            +
                      define_method('not_#{@cropped_field}?') { !#{@cropped_field}? }
         | 
| 61 | 
            +
                    RUBY
         | 
| 62 | 
            +
                  end
         | 
| 63 | 
            +
             | 
| 64 | 
            +
                  def apply_aliases
         | 
| 65 | 
            +
                    <<-RUBY
         | 
| 66 | 
            +
                      alias_method 'un#{@infinitive_verb}!', 'not_#{@infinitive_verb}!'
         | 
| 67 | 
            +
                      alias_method 'mark_as_un#{@cropped_field}', 'mark_as_not_#{@cropped_field}'
         | 
| 68 | 
            +
                      alias_method 'un#{@cropped_field}?', 'not_#{@cropped_field}?'
         | 
| 55 69 | 
             
                    RUBY
         | 
| 56 70 | 
             
                  end
         | 
| 57 71 | 
             
                end
         | 
    
        data/lib/microscope/scope.rb
    CHANGED
    
    | @@ -19,10 +19,7 @@ module Microscope | |
| 19 19 | 
             
                def self.inject_scopes(model, fields, options = {})
         | 
| 20 20 | 
             
                  fields.each do |field|
         | 
| 21 21 | 
             
                    scope = "#{field.type.to_s.camelize}Scope"
         | 
| 22 | 
            -
             | 
| 23 | 
            -
                    if Microscope::Scope.const_defined?(scope)
         | 
| 24 | 
            -
                      "Microscope::Scope::#{scope}".constantize.new(model, field).apply
         | 
| 25 | 
            -
                    end
         | 
| 22 | 
            +
                    "Microscope::Scope::#{scope}".constantize.new(model, field).apply if const_defined?(scope)
         | 
| 26 23 | 
             
                  end
         | 
| 27 24 | 
             
                end
         | 
| 28 25 | 
             
              end
         | 
| @@ -6,46 +6,31 @@ module Microscope | |
| 6 6 |  | 
| 7 7 | 
             
                    @now = 'Time.now'
         | 
| 8 8 | 
             
                    @now_suffix = '_now'
         | 
| 9 | 
            +
                    @specific_suffix = '_at'
         | 
| 9 10 | 
             
                    @cropped_field_regex = /_at$/
         | 
| 11 | 
            +
                    @formatted_time = 'time'
         | 
| 10 12 | 
             
                  end
         | 
| 11 13 |  | 
| 12 14 | 
             
                  def apply
         | 
| 13 | 
            -
                     | 
| 14 | 
            -
             | 
| 15 | 
            -
                    model.class_eval <<-RUBY, __FILE__, __LINE__ + 1
         | 
| 16 | 
            -
                      #{before_scopes}
         | 
| 17 | 
            -
                      #{after_scopes}
         | 
| 18 | 
            -
                      #{between_scopes}
         | 
| 19 | 
            -
                      #{boolean_scopes}
         | 
| 20 | 
            -
                    RUBY
         | 
| 15 | 
            +
                    model.class_eval(apply_scopes) if @field_name =~ @cropped_field_regex
         | 
| 21 16 | 
             
                  end
         | 
| 22 17 |  | 
| 23 18 | 
             
                private
         | 
| 24 19 |  | 
| 25 | 
            -
                  def  | 
| 20 | 
            +
                  def apply_scopes
         | 
| 26 21 | 
             
                    <<-RUBY
         | 
| 27 | 
            -
                      scope "#{cropped_field}_before", lambda { |time| where('#{quoted_field} < ?',  | 
| 28 | 
            -
                      scope "#{cropped_field} | 
| 22 | 
            +
                      scope "#{cropped_field}_before", lambda { |time| where('#{quoted_field} < ?', #{@formatted_time}) }
         | 
| 23 | 
            +
                      scope "#{cropped_field}_before_or#{@specific_suffix}", lambda { |time| where('#{quoted_field} <= ?', #{@formatted_time}) }
         | 
| 29 24 | 
             
                      scope "#{cropped_field}_before#{@now_suffix}", lambda { where('#{quoted_field} < ?', #{@now}) }
         | 
| 30 | 
            -
             | 
| 31 | 
            -
                  end
         | 
| 25 | 
            +
                      scope "#{cropped_field}_before_or#{@now_suffix}", lambda { where('#{quoted_field} <= ?', #{@now}) }
         | 
| 32 26 |  | 
| 33 | 
            -
             | 
| 34 | 
            -
             | 
| 35 | 
            -
                      scope "#{cropped_field}_after", lambda { |time| where('#{quoted_field} > ?', time) }
         | 
| 36 | 
            -
                      scope "#{cropped_field}_after_or_at", lambda { |time| where('#{quoted_field} >= ?', time) }
         | 
| 27 | 
            +
                      scope "#{cropped_field}_after", lambda { |time| where('#{quoted_field} > ?', #{@formatted_time}) }
         | 
| 28 | 
            +
                      scope "#{cropped_field}_after_or#{@specific_suffix}", lambda { |time| where('#{quoted_field} >= ?', #{@formatted_time}) }
         | 
| 37 29 | 
             
                      scope "#{cropped_field}_after#{@now_suffix}", lambda { where('#{quoted_field} > ?', #{@now}) }
         | 
| 38 | 
            -
             | 
| 39 | 
            -
                  end
         | 
| 30 | 
            +
                      scope "#{cropped_field}_after_or#{@now_suffix}", lambda { where('#{quoted_field} >= ?', #{@now}) }
         | 
| 40 31 |  | 
| 41 | 
            -
                  def between_scopes
         | 
| 42 | 
            -
                    <<-RUBY
         | 
| 43 32 | 
             
                      scope "#{cropped_field}_between", lambda { |range| where("#{@field_name}" => range) }
         | 
| 44 | 
            -
                    RUBY
         | 
| 45 | 
            -
                  end
         | 
| 46 33 |  | 
| 47 | 
            -
                  def boolean_scopes
         | 
| 48 | 
            -
                    <<-RUBY
         | 
| 49 34 | 
             
                      scope "#{cropped_field}", lambda { where('#{quoted_field} IS NOT NULL AND #{quoted_field} <= ?', #{@now}) }
         | 
| 50 35 | 
             
                      scope "not_#{cropped_field}", lambda { where('#{quoted_field} IS NULL OR #{quoted_field} > ?', #{@now}) }
         | 
| 51 36 | 
             
                      scope "un#{cropped_field}", lambda { not_#{cropped_field} }
         | 
| @@ -0,0 +1,23 @@ | |
| 1 | 
            +
            module Microscope
         | 
| 2 | 
            +
              module Utils
         | 
| 3 | 
            +
                # Convert a past participle to its infinitive form
         | 
| 4 | 
            +
                def self.past_participle_to_infinitive(key)
         | 
| 5 | 
            +
                  *key, participle = key.split('_')
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                  infinitive = participle
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                  if Microscope.special_verbs.include?(participle)
         | 
| 10 | 
            +
                    infinitive = Microscope.special_verbs[participle]
         | 
| 11 | 
            +
                  elsif participle =~ /ed$/
         | 
| 12 | 
            +
                    infinitive = participle.sub(/d$/, '')
         | 
| 13 | 
            +
                  end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                  (key << infinitive).join('_')
         | 
| 16 | 
            +
                end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                # Convert a value to its boolean representation
         | 
| 19 | 
            +
                def self.value_to_boolean(value)
         | 
| 20 | 
            +
                  ![nil, false, 0, '0', 'f', 'F', 'false', 'FALSE'].include?(value.presence)
         | 
| 21 | 
            +
                end
         | 
| 22 | 
            +
              end
         | 
| 23 | 
            +
            end
         | 
    
        data/lib/microscope/version.rb
    CHANGED
    
    
    
        data/microscope.gemspec
    CHANGED
    
    | @@ -6,26 +6,28 @@ require 'microscope/version' | |
| 6 6 | 
             
            Gem::Specification.new do |spec|
         | 
| 7 7 | 
             
              spec.name          = 'microscope'
         | 
| 8 8 | 
             
              spec.version       = Microscope::VERSION
         | 
| 9 | 
            -
              spec.authors       = [ | 
| 10 | 
            -
              spec.email         = [ | 
| 9 | 
            +
              spec.authors       = ['Simon Prévost', 'Rémi Prévost']
         | 
| 10 | 
            +
              spec.email         = ['sprevost@mirego.com', 'rprevost@mirego.com']
         | 
| 11 11 | 
             
              spec.description   = 'Microscope adds useful scopes targeting ActiveRecord boolean and datetime fields.'
         | 
| 12 | 
            -
              spec.summary       =  | 
| 12 | 
            +
              spec.summary       = spec.description
         | 
| 13 13 | 
             
              spec.homepage      = 'https://github.com/mirego/microscope'
         | 
| 14 14 | 
             
              spec.license       = 'BSD 3-Clause'
         | 
| 15 15 |  | 
| 16 | 
            -
              spec.files         = `git ls-files`.split( | 
| 16 | 
            +
              spec.files         = `git ls-files`.split($RS)
         | 
| 17 17 | 
             
              spec.executables   = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
         | 
| 18 18 | 
             
              spec.test_files    = spec.files.grep(%r{^(test|spec|features)/})
         | 
| 19 | 
            -
              spec.require_paths = [ | 
| 19 | 
            +
              spec.require_paths = ['lib']
         | 
| 20 20 |  | 
| 21 21 | 
             
              spec.add_dependency 'activesupport', '>= 3.0.0'
         | 
| 22 22 | 
             
              spec.add_dependency 'activerecord', '>= 3.0.0'
         | 
| 23 23 |  | 
| 24 24 | 
             
              spec.add_development_dependency 'bundler', '~> 1.3'
         | 
| 25 25 | 
             
              spec.add_development_dependency 'rake'
         | 
| 26 | 
            -
              spec.add_development_dependency 'rspec'
         | 
| 26 | 
            +
              spec.add_development_dependency 'rspec', '3.0.0.rc1'
         | 
| 27 27 | 
             
              spec.add_development_dependency 'sqlite3'
         | 
| 28 28 | 
             
              spec.add_development_dependency 'pg'
         | 
| 29 29 | 
             
              spec.add_development_dependency 'mysql2', '~> 0.3.13'
         | 
| 30 30 | 
             
              spec.add_development_dependency 'coveralls'
         | 
| 31 | 
            +
              spec.add_development_dependency 'rubocop', '0.20.1'
         | 
| 32 | 
            +
              spec.add_development_dependency 'phare'
         | 
| 31 33 | 
             
            end
         | 
| @@ -79,7 +79,7 @@ describe Microscope::InstanceMethod::DateInstanceMethod do | |
| 79 79 |  | 
| 80 80 | 
             
              describe '#start!' do
         | 
| 81 81 | 
             
                let(:stubbed_date) { Date.parse('2020-03-18 08:00:00') }
         | 
| 82 | 
            -
                before { Date. | 
| 82 | 
            +
                before { allow(Date).to receive(:today).and_return(stubbed_date) }
         | 
| 83 83 |  | 
| 84 84 | 
             
                let(:event) { Event.create(started_on: nil) }
         | 
| 85 85 | 
             
                it { expect { event.start! }.to change { event.reload.started_on }.from(nil).to(stubbed_date) }
         | 
| @@ -95,7 +95,7 @@ describe Microscope::InstanceMethod::DateInstanceMethod do | |
| 95 95 |  | 
| 96 96 | 
             
              describe '#mark_as_started' do
         | 
| 97 97 | 
             
                let(:stubbed_date) { Date.parse('2020-03-18 08:00:00') }
         | 
| 98 | 
            -
                before { Date. | 
| 98 | 
            +
                before { allow(Date).to receive(:today).and_return(stubbed_date) }
         | 
| 99 99 |  | 
| 100 100 | 
             
                let(:event) { Event.create(started_on: nil) }
         | 
| 101 101 | 
             
                it { expect { event.mark_as_started }.to_not change { event.reload.started_on } }
         | 
| @@ -68,7 +68,7 @@ describe Microscope::InstanceMethod::DatetimeInstanceMethod do | |
| 68 68 |  | 
| 69 69 | 
             
              describe '#start!' do
         | 
| 70 70 | 
             
                let(:stubbed_date) { Time.parse('2020-03-18 08:00:00') }
         | 
| 71 | 
            -
                before { Time. | 
| 71 | 
            +
                before { allow(Time).to receive(:now).and_return(stubbed_date) }
         | 
| 72 72 |  | 
| 73 73 | 
             
                let(:event) { Event.create(started_at: nil) }
         | 
| 74 74 | 
             
                it { expect { event.start! }.to change { event.reload.started_at }.from(nil).to(stubbed_date) }
         | 
| @@ -84,7 +84,7 @@ describe Microscope::InstanceMethod::DatetimeInstanceMethod do | |
| 84 84 |  | 
| 85 85 | 
             
              describe '#mark_as_started' do
         | 
| 86 86 | 
             
                let(:stubbed_date) { Time.parse('2020-03-18 08:00:00') }
         | 
| 87 | 
            -
                before { Time. | 
| 87 | 
            +
                before { allow(Time).to receive(:now).and_return(stubbed_date) }
         | 
| 88 88 |  | 
| 89 89 | 
             
                let(:event) { Event.create(started_at: nil) }
         | 
| 90 90 | 
             
                it { expect { event.mark_as_started }.to_not change { event.reload.started_at } }
         | 
| @@ -17,7 +17,7 @@ describe Microscope::Scope::BooleanScope do | |
| 17 17 | 
             
                  @user2 = User.create(active: false)
         | 
| 18 18 | 
             
                end
         | 
| 19 19 |  | 
| 20 | 
            -
                it { expect(User.active).to  | 
| 20 | 
            +
                it { expect(User.active.length).to eql 1 }
         | 
| 21 21 | 
             
                it { expect(User.active).to include(@user1) }
         | 
| 22 22 | 
             
              end
         | 
| 23 23 |  | 
| @@ -27,7 +27,7 @@ describe Microscope::Scope::BooleanScope do | |
| 27 27 | 
             
                  @user2 = User.create(active: true)
         | 
| 28 28 | 
             
                end
         | 
| 29 29 |  | 
| 30 | 
            -
                it { expect(User.not_active).to  | 
| 30 | 
            +
                it { expect(User.not_active.length).to eql 1 }
         | 
| 31 31 | 
             
                it { expect(User.not_active).to include(@user1) }
         | 
| 32 32 | 
             
                it { expect(User.unactive.to_a).to eql User.not_active.to_a }
         | 
| 33 33 | 
             
              end
         | 
| @@ -21,6 +21,31 @@ describe Microscope::Scope::DateScope do | |
| 21 21 | 
             
                it { expect(Event.started_before(1.month.ago).to_a).to eql [@event] }
         | 
| 22 22 | 
             
              end
         | 
| 23 23 |  | 
| 24 | 
            +
              describe 'before_or_on scope' do
         | 
| 25 | 
            +
                let(:date) { 2.months.ago }
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                before do
         | 
| 28 | 
            +
                  @event1 = Event.create(started_on: date)
         | 
| 29 | 
            +
                  @event2 = Event.create(started_on: date - 1.day)
         | 
| 30 | 
            +
                  Event.create(started_on: 1.month.from_now)
         | 
| 31 | 
            +
                end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                it { expect(Event.started_before_or_on(date).to_a).to eql [@event1, @event2] }
         | 
| 34 | 
            +
              end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
              describe 'before_or_now scope' do
         | 
| 37 | 
            +
                let(:stubbed_date) { Date.parse('2020-03-18 08:00:00') }
         | 
| 38 | 
            +
                before { allow(Date).to receive(:today).and_return(stubbed_date) }
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                before do
         | 
| 41 | 
            +
                  @event1 = Event.create(started_on: stubbed_date)
         | 
| 42 | 
            +
                  @event2 = Event.create(started_on: stubbed_date - 1.day)
         | 
| 43 | 
            +
                  Event.create(started_on: stubbed_date + 1.week)
         | 
| 44 | 
            +
                end
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                it { expect(Event.started_before_or_today.to_a).to eql [@event1, @event2] }
         | 
| 47 | 
            +
              end
         | 
| 48 | 
            +
             | 
| 24 49 | 
             
              describe 'before_today scope' do
         | 
| 25 50 | 
             
                before do
         | 
| 26 51 | 
             
                  @event = Event.create(started_on: 2.months.ago)
         | 
| @@ -39,6 +64,31 @@ describe Microscope::Scope::DateScope do | |
| 39 64 | 
             
                it { expect(Event.started_after(1.month.from_now).to_a).to eql [@event] }
         | 
| 40 65 | 
             
              end
         | 
| 41 66 |  | 
| 67 | 
            +
              describe 'after_or_on scope' do
         | 
| 68 | 
            +
                let(:date) { 2.months.from_now }
         | 
| 69 | 
            +
             | 
| 70 | 
            +
                before do
         | 
| 71 | 
            +
                  @event1 = Event.create(started_on: date)
         | 
| 72 | 
            +
                  @event2 = Event.create(started_on: date + 1.day)
         | 
| 73 | 
            +
                  Event.create(started_on: 1.month.ago)
         | 
| 74 | 
            +
                end
         | 
| 75 | 
            +
             | 
| 76 | 
            +
                it { expect(Event.started_after_or_on(date).to_a).to eql [@event1, @event2] }
         | 
| 77 | 
            +
              end
         | 
| 78 | 
            +
             | 
| 79 | 
            +
              describe 'after_or_now scope' do
         | 
| 80 | 
            +
                let(:stubbed_date) { Date.parse('2020-03-18 08:00:00') }
         | 
| 81 | 
            +
                before { allow(Date).to receive(:today).and_return(stubbed_date) }
         | 
| 82 | 
            +
             | 
| 83 | 
            +
                before do
         | 
| 84 | 
            +
                  @event1 = Event.create(started_on: stubbed_date)
         | 
| 85 | 
            +
                  @event2 = Event.create(started_on: stubbed_date + 1.day)
         | 
| 86 | 
            +
                  Event.create(started_on: 1.month.ago)
         | 
| 87 | 
            +
                end
         | 
| 88 | 
            +
             | 
| 89 | 
            +
                it { expect(Event.started_after_or_today.to_a).to eql [@event1, @event2] }
         | 
| 90 | 
            +
              end
         | 
| 91 | 
            +
             | 
| 42 92 | 
             
              describe 'after_today scope' do
         | 
| 43 93 | 
             
                before do
         | 
| 44 94 | 
             
                  @event = Event.create(started_on: 2.months.from_now)
         | 
| @@ -21,6 +21,31 @@ describe Microscope::Scope::DatetimeScope do | |
| 21 21 | 
             
                it { expect(Event.started_before(1.month.ago).to_a).to eql [@event] }
         | 
| 22 22 | 
             
              end
         | 
| 23 23 |  | 
| 24 | 
            +
              describe 'before_or_at scope' do
         | 
| 25 | 
            +
                let(:datetime) { 1.month.ago }
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                before do
         | 
| 28 | 
            +
                  @event1 = Event.create(started_at: datetime)
         | 
| 29 | 
            +
                  @event2 = Event.create(started_at: datetime - 1.second)
         | 
| 30 | 
            +
                  Event.create(started_at: 1.month.from_now)
         | 
| 31 | 
            +
                end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                it { expect(Event.started_before_or_at(datetime).to_a).to eql [@event1, @event2] }
         | 
| 34 | 
            +
              end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
              describe 'before_or_now scope' do
         | 
| 37 | 
            +
                let(:stubbed_date) { Time.parse('2020-03-18 08:00:00') }
         | 
| 38 | 
            +
                before { allow(Time).to receive(:now).and_return(stubbed_date) }
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                before do
         | 
| 41 | 
            +
                  @event1 = Event.create(started_at: stubbed_date)
         | 
| 42 | 
            +
                  @event2 = Event.create(started_at: stubbed_date - 1.second)
         | 
| 43 | 
            +
                  Event.create(started_at: 1.month.from_now)
         | 
| 44 | 
            +
                end
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                it { expect(Event.started_before_or_now.to_a).to eql [@event1, @event2] }
         | 
| 47 | 
            +
              end
         | 
| 48 | 
            +
             | 
| 24 49 | 
             
              describe 'before_now scope' do
         | 
| 25 50 | 
             
                before do
         | 
| 26 51 | 
             
                  @event = Event.create(started_at: 2.months.ago)
         | 
| @@ -39,6 +64,31 @@ describe Microscope::Scope::DatetimeScope do | |
| 39 64 | 
             
                it { expect(Event.started_after(1.month.from_now).to_a).to eql [@event] }
         | 
| 40 65 | 
             
              end
         | 
| 41 66 |  | 
| 67 | 
            +
              describe 'after_or_at scope' do
         | 
| 68 | 
            +
                let(:datetime) { 1.month.from_now }
         | 
| 69 | 
            +
             | 
| 70 | 
            +
                before do
         | 
| 71 | 
            +
                  @event1 = Event.create(started_at: datetime)
         | 
| 72 | 
            +
                  @event2 = Event.create(started_at: datetime + 1.second)
         | 
| 73 | 
            +
                  Event.create(started_at: 1.month.ago)
         | 
| 74 | 
            +
                end
         | 
| 75 | 
            +
             | 
| 76 | 
            +
                it { expect(Event.started_after_or_at(datetime).to_a).to eql [@event1, @event2] }
         | 
| 77 | 
            +
              end
         | 
| 78 | 
            +
             | 
| 79 | 
            +
              describe 'after_or_now scope' do
         | 
| 80 | 
            +
                let(:stubbed_date) { Time.parse('2020-03-18 08:00:00') }
         | 
| 81 | 
            +
                before { allow(Time).to receive(:now).and_return(stubbed_date) }
         | 
| 82 | 
            +
             | 
| 83 | 
            +
                before do
         | 
| 84 | 
            +
                  @event1 = Event.create(started_at: stubbed_date)
         | 
| 85 | 
            +
                  @event2 = Event.create(started_at: stubbed_date + 1.second)
         | 
| 86 | 
            +
                  Event.create(started_at: 1.month.ago)
         | 
| 87 | 
            +
                end
         | 
| 88 | 
            +
             | 
| 89 | 
            +
                it { expect(Event.started_after_or_now.to_a).to eql [@event1, @event2] }
         | 
| 90 | 
            +
              end
         | 
| 91 | 
            +
             | 
| 42 92 | 
             
              describe 'after_now scope' do
         | 
| 43 93 | 
             
                before do
         | 
| 44 94 | 
             
                  @event = Event.create(started_at: 2.months.from_now)
         | 
| @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            require 'spec_helper'
         | 
| 2 2 |  | 
| 3 | 
            -
            describe Microscope:: | 
| 3 | 
            +
            describe Microscope::Utils do
         | 
| 4 4 | 
             
              describe :ClassMethods do
         | 
| 5 5 | 
             
                describe :past_participle_to_infinitive do
         | 
| 6 6 | 
             
                  before do
         | 
| @@ -9,9 +9,9 @@ describe Microscope::InstanceMethod do | |
| 9 9 | 
             
                    end
         | 
| 10 10 | 
             
                  end
         | 
| 11 11 |  | 
| 12 | 
            -
                  let(:past_participles) {  | 
| 13 | 
            -
                  let(:infinitives) {  | 
| 14 | 
            -
                  let(:mapped_past_participles) { past_participles.map { |v| Microscope:: | 
| 12 | 
            +
                  let(:past_participles) { %w(liked loved gateway_canceled started fed foo) }
         | 
| 13 | 
            +
                  let(:infinitives) { %w(like love gateway_cancel start feed bar) }
         | 
| 14 | 
            +
                  let(:mapped_past_participles) { past_participles.map { |v| Microscope::Utils.past_participle_to_infinitive(v) } }
         | 
| 15 15 |  | 
| 16 16 | 
             
                  specify do
         | 
| 17 17 | 
             
                    expect(mapped_past_participles).to eql infinitives
         | 
    
        data/spec/spec_helper.rb
    CHANGED
    
    | @@ -1,4 +1,4 @@ | |
| 1 | 
            -
             | 
| 1 | 
            +
            $LOAD_PATH.unshift File.expand_path('../lib', __FILE__)
         | 
| 2 2 |  | 
| 3 3 | 
             
            require 'coveralls'
         | 
| 4 4 | 
             
            Coveralls.wear!
         | 
| @@ -18,6 +18,11 @@ RSpec.configure do |config| | |
| 18 18 | 
             
              config.include DatabaseMacros
         | 
| 19 19 | 
             
              config.include ModelMacros
         | 
| 20 20 |  | 
| 21 | 
            +
              # Disable `should` syntax
         | 
| 22 | 
            +
              config.expect_with :rspec do |c|
         | 
| 23 | 
            +
                c.syntax = :expect
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
             | 
| 21 26 | 
             
              config.before :each do
         | 
| 22 27 | 
             
                # Establish ActiveRecord database connection
         | 
| 23 28 | 
             
                adapter = ENV['DB_ADAPTER'] || 'sqlite3'
         | 
| @@ -5,7 +5,7 @@ module DatabaseMacros | |
| 5 5 | 
             
                klass = Class.new(ActiveRecord::Migration)
         | 
| 6 6 |  | 
| 7 7 | 
             
                # Create a new `up` that executes the argument
         | 
| 8 | 
            -
                klass.send(:define_method, :up) {  | 
| 8 | 
            +
                klass.send(:define_method, :up) { instance_exec(&block) }
         | 
| 9 9 |  | 
| 10 10 | 
             
                # Create a new instance of it and execute its `up` method
         | 
| 11 11 | 
             
                klass.new.up
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: microscope
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.6. | 
| 4 | 
            +
              version: 0.6.2
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Simon Prévost
         | 
| @@ -9,7 +9,7 @@ authors: | |
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date: 2014- | 
| 12 | 
            +
            date: 2014-08-12 00:00:00.000000000 Z
         | 
| 13 13 | 
             
            dependencies:
         | 
| 14 14 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 15 | 
             
              name: activesupport
         | 
| @@ -71,16 +71,16 @@ dependencies: | |
| 71 71 | 
             
              name: rspec
         | 
| 72 72 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 73 73 | 
             
                requirements:
         | 
| 74 | 
            -
                - -  | 
| 74 | 
            +
                - - '='
         | 
| 75 75 | 
             
                  - !ruby/object:Gem::Version
         | 
| 76 | 
            -
                    version:  | 
| 76 | 
            +
                    version: 3.0.0.rc1
         | 
| 77 77 | 
             
              type: :development
         | 
| 78 78 | 
             
              prerelease: false
         | 
| 79 79 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 80 80 | 
             
                requirements:
         | 
| 81 | 
            -
                - -  | 
| 81 | 
            +
                - - '='
         | 
| 82 82 | 
             
                  - !ruby/object:Gem::Version
         | 
| 83 | 
            -
                    version:  | 
| 83 | 
            +
                    version: 3.0.0.rc1
         | 
| 84 84 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 85 85 | 
             
              name: sqlite3
         | 
| 86 86 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -137,6 +137,34 @@ dependencies: | |
| 137 137 | 
             
                - - ">="
         | 
| 138 138 | 
             
                  - !ruby/object:Gem::Version
         | 
| 139 139 | 
             
                    version: '0'
         | 
| 140 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 141 | 
            +
              name: rubocop
         | 
| 142 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 143 | 
            +
                requirements:
         | 
| 144 | 
            +
                - - '='
         | 
| 145 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 146 | 
            +
                    version: 0.20.1
         | 
| 147 | 
            +
              type: :development
         | 
| 148 | 
            +
              prerelease: false
         | 
| 149 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 150 | 
            +
                requirements:
         | 
| 151 | 
            +
                - - '='
         | 
| 152 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 153 | 
            +
                    version: 0.20.1
         | 
| 154 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 155 | 
            +
              name: phare
         | 
| 156 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 157 | 
            +
                requirements:
         | 
| 158 | 
            +
                - - ">="
         | 
| 159 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 160 | 
            +
                    version: '0'
         | 
| 161 | 
            +
              type: :development
         | 
| 162 | 
            +
              prerelease: false
         | 
| 163 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 164 | 
            +
                requirements:
         | 
| 165 | 
            +
                - - ">="
         | 
| 166 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 167 | 
            +
                    version: '0'
         | 
| 140 168 | 
             
            description: Microscope adds useful scopes targeting ActiveRecord boolean and datetime
         | 
| 141 169 | 
             
              fields.
         | 
| 142 170 | 
             
            email:
         | 
| @@ -148,14 +176,14 @@ extra_rdoc_files: [] | |
| 148 176 | 
             
            files:
         | 
| 149 177 | 
             
            - ".gitignore"
         | 
| 150 178 | 
             
            - ".rspec"
         | 
| 179 | 
            +
            - ".rubocop.yml"
         | 
| 151 180 | 
             
            - ".travis.yml"
         | 
| 152 181 | 
             
            - Gemfile
         | 
| 153 182 | 
             
            - LICENSE.md
         | 
| 154 183 | 
             
            - README.md
         | 
| 155 184 | 
             
            - Rakefile
         | 
| 156 185 | 
             
            - data/irregular_verbs.yml
         | 
| 157 | 
            -
            - gemfiles/Gemfile.activerecord- | 
| 158 | 
            -
            - gemfiles/Gemfile.activerecord-4.0
         | 
| 186 | 
            +
            - gemfiles/Gemfile.activerecord-4.1
         | 
| 159 187 | 
             
            - lib/microscope.rb
         | 
| 160 188 | 
             
            - lib/microscope/instance_method.rb
         | 
| 161 189 | 
             
            - lib/microscope/instance_method/boolean_instance_method.rb
         | 
| @@ -165,15 +193,16 @@ files: | |
| 165 193 | 
             
            - lib/microscope/scope/boolean_scope.rb
         | 
| 166 194 | 
             
            - lib/microscope/scope/date_scope.rb
         | 
| 167 195 | 
             
            - lib/microscope/scope/datetime_scope.rb
         | 
| 196 | 
            +
            - lib/microscope/utils.rb
         | 
| 168 197 | 
             
            - lib/microscope/version.rb
         | 
| 169 198 | 
             
            - microscope.gemspec
         | 
| 170 199 | 
             
            - spec/microscope/instance_method/boolean_instance_method_spec.rb
         | 
| 171 200 | 
             
            - spec/microscope/instance_method/date_instance_method_spec.rb
         | 
| 172 201 | 
             
            - spec/microscope/instance_method/datetime_instance_method_spec.rb
         | 
| 173 | 
            -
            - spec/microscope/instance_method_spec.rb
         | 
| 174 202 | 
             
            - spec/microscope/scope/boolean_scope_spec.rb
         | 
| 175 203 | 
             
            - spec/microscope/scope/date_scope_spec.rb
         | 
| 176 204 | 
             
            - spec/microscope/scope/datetime_scope_spec.rb
         | 
| 205 | 
            +
            - spec/microscope/utils_spec.rb
         | 
| 177 206 | 
             
            - spec/microscope_spec.rb
         | 
| 178 207 | 
             
            - spec/spec_helper.rb
         | 
| 179 208 | 
             
            - spec/support/macros/database/database_adapter.rb
         | 
| @@ -211,10 +240,10 @@ test_files: | |
| 211 240 | 
             
            - spec/microscope/instance_method/boolean_instance_method_spec.rb
         | 
| 212 241 | 
             
            - spec/microscope/instance_method/date_instance_method_spec.rb
         | 
| 213 242 | 
             
            - spec/microscope/instance_method/datetime_instance_method_spec.rb
         | 
| 214 | 
            -
            - spec/microscope/instance_method_spec.rb
         | 
| 215 243 | 
             
            - spec/microscope/scope/boolean_scope_spec.rb
         | 
| 216 244 | 
             
            - spec/microscope/scope/date_scope_spec.rb
         | 
| 217 245 | 
             
            - spec/microscope/scope/datetime_scope_spec.rb
         | 
| 246 | 
            +
            - spec/microscope/utils_spec.rb
         | 
| 218 247 | 
             
            - spec/microscope_spec.rb
         | 
| 219 248 | 
             
            - spec/spec_helper.rb
         | 
| 220 249 | 
             
            - spec/support/macros/database/database_adapter.rb
         |