convenient_scopes 0.7.1 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.rdoc +1 -1
 - data/VERSION +1 -1
 - data/convenient_scopes.gemspec +2 -2
 - data/lib/convenient_scopes.rb +23 -28
 - data/test/test_conditions.rb +14 -0
 - metadata +5 -5
 
    
        data/README.rdoc
    CHANGED
    
    
    
        data/VERSION
    CHANGED
    
    | 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            0. 
     | 
| 
      
 1 
     | 
    
         
            +
            0.8.0
         
     | 
    
        data/convenient_scopes.gemspec
    CHANGED
    
    | 
         @@ -5,11 +5,11 @@ 
     | 
|
| 
       5 
5 
     | 
    
         | 
| 
       6 
6 
     | 
    
         
             
            Gem::Specification.new do |s|
         
     | 
| 
       7 
7 
     | 
    
         
             
              s.name = %q{convenient_scopes}
         
     | 
| 
       8 
     | 
    
         
            -
              s.version = "0. 
     | 
| 
      
 8 
     | 
    
         
            +
              s.version = "0.8.0"
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         
             
              s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
         
     | 
| 
       11 
11 
     | 
    
         
             
              s.authors = ["Ivan Schneider"]
         
     | 
| 
       12 
     | 
    
         
            -
              s.date = %q{2011-07- 
     | 
| 
      
 12 
     | 
    
         
            +
              s.date = %q{2011-07-12}
         
     | 
| 
       13 
13 
     | 
    
         
             
              s.description = %q{Dynamic scopes by convention for ActiveRecord 3}
         
     | 
| 
       14 
14 
     | 
    
         
             
              s.email = %q{isc@massivebraingames.com}
         
     | 
| 
       15 
15 
     | 
    
         
             
              s.extra_rdoc_files = [
         
     | 
    
        data/lib/convenient_scopes.rb
    CHANGED
    
    | 
         @@ -10,7 +10,7 @@ module ConvenientScopes 
     | 
|
| 
       10 
10 
     | 
    
         
             
              end
         
     | 
| 
       11 
11 
     | 
    
         | 
| 
       12 
12 
     | 
    
         
             
              def define_scope name
         
     | 
| 
       13 
     | 
    
         
            -
                ( 
     | 
| 
      
 13 
     | 
    
         
            +
                (ScopeDefinitions.instance_methods.inject nil do |memo, scope_type|
         
     | 
| 
       14 
14 
     | 
    
         
             
                  memo ||= send scope_type.to_sym, name
         
     | 
| 
       15 
15 
     | 
    
         
             
                end) || (association_scope name)
         
     | 
| 
       16 
16 
     | 
    
         
             
              end
         
     | 
| 
         @@ -41,7 +41,7 @@ module ConvenientScopes 
     | 
|
| 
       41 
41 
     | 
    
         | 
| 
       42 
42 
     | 
    
         
             
              class InvalidScopes < Exception ; end
         
     | 
| 
       43 
43 
     | 
    
         | 
| 
       44 
     | 
    
         
            -
              module  
     | 
| 
      
 44 
     | 
    
         
            +
              module ScopeDefinitions
         
     | 
| 
       45 
45 
     | 
    
         | 
| 
       46 
46 
     | 
    
         
             
                SCOPE_DEFINITIONS = [ 
         
     | 
| 
       47 
47 
     | 
    
         
             
                  [%w(does_not_equal doesnt_equal ne is_not), "%s != ?"],
         
     | 
| 
         @@ -60,7 +60,14 @@ module ConvenientScopes 
     | 
|
| 
       60 
60 
     | 
    
         | 
| 
       61 
61 
     | 
    
         
             
                SCOPE_WITHOUT_VALUE_DEFINITIONS = [
         
     | 
| 
       62 
62 
     | 
    
         
             
                  [%w(null nil missing), "%s is null"],
         
     | 
| 
       63 
     | 
    
         
            -
                  [%w(not_null not_nil not_missing), "%s is not null"]
         
     | 
| 
      
 63 
     | 
    
         
            +
                  [%w(not_null not_nil not_missing), "%s is not null"],
         
     | 
| 
      
 64 
     | 
    
         
            +
                  [%w(blank not_present), "%s is null OR %s = ''"],
         
     | 
| 
      
 65 
     | 
    
         
            +
                  [%w(not_blank present), "%s is not null AND %s <> ''"]
         
     | 
| 
      
 66 
     | 
    
         
            +
                ]
         
     | 
| 
      
 67 
     | 
    
         
            +
                
         
     | 
| 
      
 68 
     | 
    
         
            +
                ORDERING_SCOPE_DEFINITIONS = [
         
     | 
| 
      
 69 
     | 
    
         
            +
                  [/^ascend_by_/, 'asc'],
         
     | 
| 
      
 70 
     | 
    
         
            +
                  [/^descend_by_/, 'desc']
         
     | 
| 
       64 
71 
     | 
    
         
             
                ]
         
     | 
| 
       65 
72 
     | 
    
         | 
| 
       66 
73 
     | 
    
         
             
                def scopes_with_value name
         
     | 
| 
         @@ -75,45 +82,33 @@ module ConvenientScopes 
     | 
|
| 
       75 
82 
     | 
    
         
             
                  end
         
     | 
| 
       76 
83 
     | 
    
         
             
                end
         
     | 
| 
       77 
84 
     | 
    
         | 
| 
      
 85 
     | 
    
         
            +
                def ordering_scopes name
         
     | 
| 
      
 86 
     | 
    
         
            +
                  ORDERING_SCOPE_DEFINITIONS.inject nil do |memo, definition|
         
     | 
| 
      
 87 
     | 
    
         
            +
                    memo ||= match_ordering_scope name, *definition
         
     | 
| 
      
 88 
     | 
    
         
            +
                  end
         
     | 
| 
      
 89 
     | 
    
         
            +
                end
         
     | 
| 
      
 90 
     | 
    
         
            +
             
     | 
| 
       78 
91 
     | 
    
         
             
                def equals_scope name
         
     | 
| 
       79 
92 
     | 
    
         
             
                  return unless (column = match_suffix_and_column_name name, %w(equals eq is))
         
     | 
| 
       80 
93 
     | 
    
         
             
                  lambda {|value| unscoped.where(column => value)}
         
     | 
| 
       81 
94 
     | 
    
         
             
                end
         
     | 
| 
       82 
95 
     | 
    
         | 
| 
       83 
     | 
    
         
            -
                def  
     | 
| 
       84 
     | 
    
         
            -
                  return unless boolean_column? name
         
     | 
| 
       85 
     | 
    
         
            -
                  unscoped.where(name => true)
         
     | 
| 
       86 
     | 
    
         
            -
                end
         
     | 
| 
       87 
     | 
    
         
            -
             
     | 
| 
       88 
     | 
    
         
            -
                def negative_boolean_column_scope name
         
     | 
| 
      
 96 
     | 
    
         
            +
                def boolean_column_scopes name
         
     | 
| 
       89 
97 
     | 
    
         
             
                  str_name = name.to_s
         
     | 
| 
       90 
     | 
    
         
            -
                   
     | 
| 
       91 
     | 
    
         
            -
                  unscoped.where(str_name =>  
     | 
| 
       92 
     | 
    
         
            -
                end
         
     | 
| 
       93 
     | 
    
         
            -
              end
         
     | 
| 
       94 
     | 
    
         
            -
             
     | 
| 
       95 
     | 
    
         
            -
              include Conditions
         
     | 
| 
       96 
     | 
    
         
            -
             
     | 
| 
       97 
     | 
    
         
            -
              module Ordering
         
     | 
| 
       98 
     | 
    
         
            -
             
     | 
| 
       99 
     | 
    
         
            -
                def ascend_by_scope name
         
     | 
| 
       100 
     | 
    
         
            -
                  ordering_scope name, /^ascend_by_/, 'asc'
         
     | 
| 
       101 
     | 
    
         
            -
                end
         
     | 
| 
       102 
     | 
    
         
            -
             
     | 
| 
       103 
     | 
    
         
            -
                def descend_by_scope name
         
     | 
| 
       104 
     | 
    
         
            -
                  ordering_scope name, /^descend_by_/, 'desc'
         
     | 
| 
      
 98 
     | 
    
         
            +
                  value = !str_name.gsub!(/^not_/, '')
         
     | 
| 
      
 99 
     | 
    
         
            +
                  unscoped.where(str_name => value) if boolean_column? str_name
         
     | 
| 
       105 
100 
     | 
    
         
             
                end
         
     | 
| 
       106 
101 
     | 
    
         | 
| 
       107 
102 
     | 
    
         
             
              end
         
     | 
| 
       108 
103 
     | 
    
         | 
| 
       109 
     | 
    
         
            -
               
     | 
| 
      
 104 
     | 
    
         
            +
              include ScopeDefinitions
         
     | 
| 
      
 105 
     | 
    
         
            +
             
     | 
| 
      
 106 
     | 
    
         
            +
              def match_ordering_scope name, prefix, direction
         
     | 
| 
       110 
107 
     | 
    
         
             
                str_name = name.to_s
         
     | 
| 
       111 
108 
     | 
    
         
             
                return unless str_name.gsub!(prefix, '')
         
     | 
| 
       112 
109 
     | 
    
         
             
                determine_order_scope_data str_name, direction
         
     | 
| 
       113 
110 
     | 
    
         
             
              end
         
     | 
| 
       114 
111 
     | 
    
         | 
| 
       115 
     | 
    
         
            -
              include Ordering
         
     | 
| 
       116 
     | 
    
         
            -
             
     | 
| 
       117 
112 
     | 
    
         
             
              def association_scope name
         
     | 
| 
       118 
113 
     | 
    
         
             
                return unless assoc = (possible_association_for_scope name)
         
     | 
| 
       119 
114 
     | 
    
         
             
                next_scope = extract_next_scope name, assoc
         
     | 
| 
         @@ -145,7 +140,7 @@ module ConvenientScopes 
     | 
|
| 
       145 
140 
     | 
    
         
             
              end
         
     | 
| 
       146 
141 
     | 
    
         | 
| 
       147 
142 
     | 
    
         
             
              def match_suffix_and_column_name name, suffixes
         
     | 
| 
       148 
     | 
    
         
            -
                str_name = name.to_s
         
     | 
| 
      
 143 
     | 
    
         
            +
                str_name = name.to_s.dup
         
     | 
| 
       149 
144 
     | 
    
         
             
                regexp_str = suffixes.map {|suffix| "(_#{suffix})"}.join('|') + '$'
         
     | 
| 
       150 
145 
     | 
    
         
             
                return unless str_name.gsub!(Regexp.new(regexp_str), '')
         
     | 
| 
       151 
146 
     | 
    
         
             
                return unless column_names.include? str_name
         
     | 
    
        data/test/test_conditions.rb
    CHANGED
    
    | 
         @@ -73,6 +73,20 @@ class TestConditions < Test::Unit::TestCase 
     | 
|
| 
       73 
73 
     | 
    
         
             
                  end
         
     | 
| 
       74 
74 
     | 
    
         
             
                end
         
     | 
| 
       75 
75 
     | 
    
         | 
| 
      
 76 
     | 
    
         
            +
                should "blank and present scopes" do
         
     | 
| 
      
 77 
     | 
    
         
            +
                  u = User.create :pseudo => ''
         
     | 
| 
      
 78 
     | 
    
         
            +
                  assert_equal [u], User.pseudo_blank
         
     | 
| 
      
 79 
     | 
    
         
            +
                  assert_equal [u], User.pseudo_not_present
         
     | 
| 
      
 80 
     | 
    
         
            +
                  u.update_attribute :pseudo, nil
         
     | 
| 
      
 81 
     | 
    
         
            +
                  assert_equal [u], User.pseudo_blank
         
     | 
| 
      
 82 
     | 
    
         
            +
                  assert_equal [u], User.pseudo_not_present
         
     | 
| 
      
 83 
     | 
    
         
            +
                  assert_equal 2, User.pseudo_not_blank.count
         
     | 
| 
      
 84 
     | 
    
         
            +
                  assert_equal 2, User.pseudo_present.count
         
     | 
| 
      
 85 
     | 
    
         
            +
                  u.update_attribute :pseudo, ''
         
     | 
| 
      
 86 
     | 
    
         
            +
                  assert_equal 2, User.pseudo_not_blank.count
         
     | 
| 
      
 87 
     | 
    
         
            +
                  assert_equal 2, User.pseudo_present.count
         
     | 
| 
      
 88 
     | 
    
         
            +
                end
         
     | 
| 
      
 89 
     | 
    
         
            +
             
     | 
| 
       76 
90 
     | 
    
         
             
                should "not mix up scopes" do
         
     | 
| 
       77 
91 
     | 
    
         
             
                  User.age_gt(0).pseudo_null
         
     | 
| 
       78 
92 
     | 
    
         
             
                  sql = User.pseudo_null.to_sql
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,13 +1,13 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification 
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: convenient_scopes
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version 
         
     | 
| 
       4 
     | 
    
         
            -
              hash:  
     | 
| 
      
 4 
     | 
    
         
            +
              hash: 63
         
     | 
| 
       5 
5 
     | 
    
         
             
              prerelease: 
         
     | 
| 
       6 
6 
     | 
    
         
             
              segments: 
         
     | 
| 
       7 
7 
     | 
    
         
             
              - 0
         
     | 
| 
       8 
     | 
    
         
            -
              -  
     | 
| 
       9 
     | 
    
         
            -
              -  
     | 
| 
       10 
     | 
    
         
            -
              version: 0. 
     | 
| 
      
 8 
     | 
    
         
            +
              - 8
         
     | 
| 
      
 9 
     | 
    
         
            +
              - 0
         
     | 
| 
      
 10 
     | 
    
         
            +
              version: 0.8.0
         
     | 
| 
       11 
11 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       12 
12 
     | 
    
         
             
            authors: 
         
     | 
| 
       13 
13 
     | 
    
         
             
            - Ivan Schneider
         
     | 
| 
         @@ -15,7 +15,7 @@ autorequire: 
     | 
|
| 
       15 
15 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       16 
16 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       17 
17 
     | 
    
         | 
| 
       18 
     | 
    
         
            -
            date: 2011-07- 
     | 
| 
      
 18 
     | 
    
         
            +
            date: 2011-07-12 00:00:00 +02:00
         
     | 
| 
       19 
19 
     | 
    
         
             
            default_executable: 
         
     | 
| 
       20 
20 
     | 
    
         
             
            dependencies: 
         
     | 
| 
       21 
21 
     | 
    
         
             
            - !ruby/object:Gem::Dependency 
         
     |