convenient_scopes 0.7.0 → 0.7.1

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.7.0
1
+ 0.7.1
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{convenient_scopes}
8
- s.version = "0.7.0"
8
+ s.version = "0.7.1"
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"]
@@ -3,11 +3,17 @@ module ConvenientScopes
3
3
  def method_missing(name, *args, &block)
4
4
  if scope_data = (define_scope name)
5
5
  scope name, convert_to_scope_arg(scope_data)
6
- return send name, *args, &block
6
+ send name, *args, &block
7
7
  else
8
8
  super
9
9
  end
10
10
  end
11
+
12
+ def define_scope name
13
+ ([Conditions, Ordering].map(&:instance_methods).flatten.inject nil do |memo, scope_type|
14
+ memo ||= send scope_type.to_sym, name
15
+ end) || (association_scope name)
16
+ end
11
17
 
12
18
  def search search_scopes
13
19
  res = unscoped
@@ -21,16 +27,22 @@ module ConvenientScopes
21
27
  res
22
28
  end
23
29
 
24
- class InvalidScopes < Exception
30
+ def determine_order_scope_data name, direction
31
+ if column_names.include? name.to_s
32
+ unscoped.order("#{quoted_table_name}.#{name} #{direction}")
33
+ elsif assoc = (possible_association_for_scope name)
34
+ next_scope = extract_next_scope name, assoc
35
+ scope_arg = assoc.klass.determine_order_scope_data next_scope, direction
36
+ scope_arg.is_a?(Array) ? [assoc.name] + scope_arg : [assoc.name, scope_arg] if scope_arg
37
+ end
25
38
  end
39
+
40
+ private
41
+
42
+ class InvalidScopes < Exception ; end
26
43
 
27
44
  module Conditions
28
45
 
29
- def equals_scope name
30
- return unless (column = match_suffix_and_column_name name, %w(equals eq is))
31
- lambda {|value| unscoped.where(column => value)}
32
- end
33
-
34
46
  SCOPE_DEFINITIONS = [
35
47
  [%w(does_not_equal doesnt_equal ne is_not), "%s != ?"],
36
48
  [%w(less_than lt before), "%s < ?"],
@@ -45,22 +57,27 @@ module ConvenientScopes
45
57
  [%w(not_end_with does_not_end_with doesnt_end_with), "%s not like ?", "%%%s"],
46
58
  [%w(between), "%s >= ? AND %s < ?"]
47
59
  ]
48
-
49
- def scopes_with_values name
50
- SCOPE_DEFINITIONS.each do |definition|
51
- if scope_arg = (match_and_define_scope name, *definition)
52
- return scope_arg
53
- end
60
+
61
+ SCOPE_WITHOUT_VALUE_DEFINITIONS = [
62
+ [%w(null nil missing), "%s is null"],
63
+ [%w(not_null not_nil not_missing), "%s is not null"]
64
+ ]
65
+
66
+ def scopes_with_value name
67
+ SCOPE_DEFINITIONS.inject nil do |memo, definition|
68
+ memo ||= match_and_define_scope name, *definition
54
69
  end
55
- nil
56
70
  end
57
71
 
58
- def null_scope name
59
- match_and_define_scope_without_value name, %w(null nil missing), "%s is null"
72
+ def scopes_without_value name
73
+ SCOPE_WITHOUT_VALUE_DEFINITIONS.inject nil do |memo, definition|
74
+ memo ||= match_and_define_scope_without_value name, *definition
75
+ end
60
76
  end
61
77
 
62
- def not_null_scope name
63
- match_and_define_scope_without_value name, %w(not_null not_nil not_missing), "%s is not null"
78
+ def equals_scope name
79
+ return unless (column = match_suffix_and_column_name name, %w(equals eq is))
80
+ lambda {|value| unscoped.where(column => value)}
64
81
  end
65
82
 
66
83
  def boolean_column_scope name
@@ -70,8 +87,7 @@ module ConvenientScopes
70
87
 
71
88
  def negative_boolean_column_scope name
72
89
  str_name = name.to_s
73
- return unless str_name.gsub!(/^not_/, '')
74
- return unless boolean_column? str_name
90
+ return unless str_name.gsub!(/^not_/, '') && boolean_column?(str_name)
75
91
  unscoped.where(str_name => false)
76
92
  end
77
93
  end
@@ -96,16 +112,6 @@ module ConvenientScopes
96
112
  determine_order_scope_data str_name, direction
97
113
  end
98
114
 
99
- def determine_order_scope_data name, direction
100
- if column_names.include? name.to_s
101
- unscoped.order("#{quoted_table_name}.#{name} #{direction}")
102
- elsif assoc = (possible_association_for_scope name)
103
- next_scope = extract_next_scope name, assoc
104
- scope_arg = assoc.klass.determine_order_scope_data next_scope, direction
105
- scope_arg.is_a?(Array) ? [assoc.name] + scope_arg : [assoc.name, scope_arg] if scope_arg
106
- end
107
- end
108
-
109
115
  include Ordering
110
116
 
111
117
  def association_scope name
@@ -123,15 +129,6 @@ module ConvenientScopes
123
129
  name.to_s.split(/^#{assoc.name}_/).last.to_sym
124
130
  end
125
131
 
126
- def define_scope name
127
- [Conditions, Ordering].map(&:instance_methods).flatten.each do |scope_type|
128
- if scope_arg = (send scope_type.to_sym, name)
129
- return scope_arg
130
- end
131
- end
132
- association_scope name
133
- end
134
-
135
132
  def match_and_define_scope name, suffixes, sql_format, value_format = nil
136
133
  return unless (column = match_suffix_and_column_name name, suffixes)
137
134
  sql = formatted_sql column, sql_format
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: 3
4
+ hash: 1
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 7
9
- - 0
10
- version: 0.7.0
9
+ - 1
10
+ version: 0.7.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Ivan Schneider