whereable_scope 0.1.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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: d1cf0708f36df263b91424fbdc023e946578bb59e1270e756662be54494ce4d6
4
+ data.tar.gz: fd7073d96bba498dcea3e91a7d11adaa51c07f32912985da25a3d5686170d1db
5
+ SHA512:
6
+ metadata.gz: d1c7eb41ddab669d1fbe17c1e76ba1c44065dc4148400f08622960d2d313a540f646b968d3eb984742558e17e73e36648d61bed3cc3e328819129c73ef711e55
7
+ data.tar.gz: c42989ca312323b68d9fc119ff0f9b5ae0d399fcae3e10b5048d4393b9e95c73cf7c76c4d85f597dbd423d1717f96670be1d27987cfae986304a6f3f366cd3ff
@@ -0,0 +1,20 @@
1
+ module WhereableScope
2
+ module Mixin
3
+ def whereable_scope scope_name, as: nil
4
+ as_value = as || scope_name
5
+ own_whereable_scopes[as_value] = scope_name
6
+ end
7
+
8
+ def whereable_scopes
9
+ if superclass.respond_to?(:whereable_scopes)
10
+ superclass.whereable_scopes.merge(own_whereable_scopes)
11
+ else
12
+ own_whereable_scopes
13
+ end
14
+ end
15
+
16
+ def own_whereable_scopes
17
+ @whereable_scopes ||= {}
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,15 @@
1
+ module WhereableScope
2
+ module QueryMethods
3
+ include ScopeHandler
4
+
5
+ def where!(opts, *rest)
6
+ case opts
7
+ when Hash
8
+ extract_whereable_scopes(opts, model) { |scope| merge!(scope) }
9
+ opts.empty? ? self : super
10
+ else
11
+ super
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,18 @@
1
+ module WhereableScope
2
+ module ScopeHandler
3
+ # Extracts whereable scope parameters from opts hash and applies them.
4
+ # Yields each resolved scope to the block for custom handling.
5
+ #
6
+ # @param opts [Hash] the options hash to extract from (mutated)
7
+ # @param model [Class] the ActiveRecord model class
8
+ # @yield [scope] yields each resolved scope for custom merge logic
9
+ def extract_whereable_scopes(opts, model)
10
+ model.whereable_scopes.each do |key, scope_name|
11
+ value = opts.delete(key.to_sym)
12
+ if value
13
+ yield model.public_send(scope_name, value)
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,3 @@
1
+ module WhereableScope
2
+ VERSION = '0.1.0'
3
+ end
@@ -0,0 +1,15 @@
1
+ module WhereableScope
2
+ module WhereChainExtension
3
+ include ScopeHandler
4
+
5
+ def not(opts, *rest)
6
+ case opts
7
+ when Hash
8
+ extract_whereable_scopes(opts, @scope.model) { |scope| @scope.merge!(scope.invert_where) }
9
+ opts.empty? ? @scope : super
10
+ else
11
+ super
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,13 @@
1
+ require 'active_record'
2
+ require 'active_record/relation'
3
+ require_relative './whereable_scope/version'
4
+ require_relative './whereable_scope/scope_handler'
5
+ require_relative './whereable_scope/query_methods'
6
+ require_relative './whereable_scope/mixin'
7
+ require_relative './whereable_scope/where_chain_extension'
8
+
9
+ module WhereableScope
10
+ ActiveRecord::Base.singleton_class.prepend WhereableScope::Mixin
11
+ ActiveRecord::QueryMethods.prepend WhereableScope::QueryMethods
12
+ ActiveRecord::QueryMethods::WhereChain.prepend WhereableScope::WhereChainExtension
13
+ end
metadata ADDED
@@ -0,0 +1,122 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: whereable_scope
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - merely
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: activerecord
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '7.2'
19
+ - - "<"
20
+ - !ruby/object:Gem::Version
21
+ version: '8.1'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ version: '7.2'
29
+ - - "<"
30
+ - !ruby/object:Gem::Version
31
+ version: '8.1'
32
+ - !ruby/object:Gem::Dependency
33
+ name: pry
34
+ requirement: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ">="
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ type: :development
40
+ prerelease: false
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: sqlite3
48
+ requirement: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: '0'
53
+ type: :development
54
+ prerelease: false
55
+ version_requirements: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: '0'
60
+ - !ruby/object:Gem::Dependency
61
+ name: database_cleaner-active_record
62
+ requirement: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ type: :development
68
+ prerelease: false
69
+ version_requirements: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
74
+ - !ruby/object:Gem::Dependency
75
+ name: rake
76
+ requirement: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: '0'
81
+ type: :development
82
+ prerelease: false
83
+ version_requirements: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ description: ''
89
+ email:
90
+ - git@merely.ca
91
+ executables: []
92
+ extensions: []
93
+ extra_rdoc_files: []
94
+ files:
95
+ - lib/whereable_scope.rb
96
+ - lib/whereable_scope/mixin.rb
97
+ - lib/whereable_scope/query_methods.rb
98
+ - lib/whereable_scope/scope_handler.rb
99
+ - lib/whereable_scope/version.rb
100
+ - lib/whereable_scope/where_chain_extension.rb
101
+ homepage: https://github.com/onyxblade/whereable_scope
102
+ licenses:
103
+ - MIT
104
+ metadata: {}
105
+ rdoc_options: []
106
+ require_paths:
107
+ - lib
108
+ required_ruby_version: !ruby/object:Gem::Requirement
109
+ requirements:
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ version: '0'
113
+ required_rubygems_version: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ requirements: []
119
+ rubygems_version: 4.0.3
120
+ specification_version: 4
121
+ summary: Use ActiveRecord scopes as parameters in where clauses
122
+ test_files: []