wildcard_scopes 0.0.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.
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "http://rubygems.org"
2
+
3
+ gemspec
@@ -0,0 +1,29 @@
1
+ = WildcardScopes
2
+
3
+ Use ActiveRecord scopes with dynamic names.
4
+
5
+ = Example
6
+
7
+ # config/initializers/wildcard_scopes.rb
8
+
9
+ # Global scopes
10
+ Avers::Application.config.wildcard_scopes = proc {
11
+ # Wildcard scope should be wrapped in a proc. a is array of matches.
12
+ wildcard_scope /descend_by_(.*)/, proc { |a| order("#{table_name}.#{a.first} DESC") }
13
+ }
14
+
15
+ # app/models/user.rb
16
+ class User < ActiveRecord::Base
17
+ wildcard_scope /ascend_by_(.*)/, proc { |a| order("#{table_name}.#{a.first} ASC") }
18
+ end
19
+
20
+ User.ascend_by_name.to_sql # SELECT "users".* FROM "users" ORDER BY users.name ASC
21
+ User.ascend_by_position.to_sql # SELECT "users".* FROM "users" ORDER BY users.position ASC
22
+ User.descend_by_name.to_sql # SELECT "users".* FROM "users" ORDER BY users.name DESC
23
+
24
+ = Notes
25
+
26
+ 1. This gem is created to simplify migration from SearchLogic to Ransack.
27
+ 2. Use of global scopes is not a good idea at all.
28
+ 3. Association extensions are not yet allowed.
29
+ 4. Tested with Rails 3.1, Ruby 1.8.7 and 1.9.3.
@@ -0,0 +1,7 @@
1
+ require "bundler/gem_tasks"
2
+ require 'rspec/core/rake_task'
3
+
4
+ Bundler::GemHelper.install_tasks
5
+ RSpec::Core::RakeTask.new(:spec)
6
+
7
+ task :default => :spec
@@ -0,0 +1,10 @@
1
+ require 'active_record'
2
+ require 'active_support/concern'
3
+ require 'active_support/core_ext/class/attribute'
4
+ require 'rails/railtie'
5
+
6
+ module WildcardScopes
7
+ require 'wildcard_scopes/version'
8
+ require 'wildcard_scopes/base'
9
+ require 'wildcard_scopes/railtie' if defined?(Rails)
10
+ end
@@ -0,0 +1,30 @@
1
+ module WildcardScopes
2
+ module Base
3
+ extend ::ActiveSupport::Concern
4
+
5
+ included do
6
+ class_attribute :wildcard_scopes
7
+ end
8
+
9
+ module ClassMethods
10
+ def wildcard_scope(name_regex, *args)
11
+ self.wildcard_scopes ||= {}
12
+ self.wildcard_scopes[name_regex] = args
13
+ end
14
+
15
+ def method_missing(method, *args, &block)
16
+ super if self.wildcard_scopes.blank?
17
+ self.wildcard_scopes.each do |name, scope_params|
18
+ matchdata = name.match(method.to_s)
19
+ if matchdata
20
+ self.class_eval do
21
+ scope method.to_sym, self.instance_exec(matchdata.to_a.slice(1..-1), &scope_params.first)
22
+ end
23
+ return self.send(method)
24
+ end
25
+ end
26
+ super
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,10 @@
1
+ module WildcardScopes
2
+ class Railtie < ::Rails::Railtie
3
+ config.wildcard_scopes = proc { }
4
+
5
+ ActiveSupport.on_load :active_record do
6
+ ActiveRecord::Base.send(:include, WildcardScopes::Base)
7
+ ActiveRecord::Base.instance_exec(&WildcardScopes::Railtie.config.wildcard_scopes)
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,3 @@
1
+ module WildcardScopes
2
+ VERSION = "0.0.2"
3
+ end
@@ -0,0 +1,26 @@
1
+ $LOAD_PATH << "." unless $LOAD_PATH.include?(".")
2
+
3
+ require 'rubygems'
4
+ require 'bundler/setup'
5
+ require 'wildcard_scopes'
6
+
7
+ WildcardScopes::Railtie.config.wildcard_scopes = proc {
8
+ ActiveRecord::Base.wildcard_scope /ascend_by_(.*)/, proc { |a| order("#{table_name}.#{a.first} ASC") }
9
+ }
10
+
11
+ ActiveRecord::Base.establish_connection(
12
+ "adapter" => "sqlite3",
13
+ "database" => ":memory:"
14
+ )
15
+
16
+ ActiveRecord::Schema.define :version => 0 do
17
+ create_table "users", :force => true do |t|
18
+ t.datetime :created_at
19
+ end
20
+ end
21
+
22
+ class User < ActiveRecord::Base
23
+ wildcard_scope /descend_by_(.*)/, proc { |a| order("#{table_name}.#{a.first} DESC") }
24
+ end
25
+
26
+ $: << File.join(File.dirname(__FILE__), '..', 'lib')
@@ -0,0 +1,8 @@
1
+ require 'spec_helper'
2
+
3
+ describe WildcardScopes do
4
+ it "local & global wildcard scopes works" do
5
+ User.ascend_by_created_at.to_sql.should == 'SELECT "users".* FROM "users" ORDER BY users.created_at ASC'
6
+ User.descend_by_created_at.to_sql.should == 'SELECT "users".* FROM "users" ORDER BY users.created_at DESC'
7
+ end
8
+ end
@@ -0,0 +1,27 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "wildcard_scopes/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "wildcard_scopes"
7
+ s.version = WildcardScopes::VERSION
8
+ s.authors = ["Victor Sokolov"]
9
+ s.email = ["gzigzigzeo@gmail.com"]
10
+ s.homepage = ""
11
+ s.summary = %q{ActiveRecord scopes with dynamic names}
12
+ s.description = %q{ActiveRecord scopes with dynamic names}
13
+
14
+ s.rubyforge_project = "wildcard_scopes"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ s.add_development_dependency "rspec"
22
+ s.add_development_dependency "rake"
23
+ s.add_development_dependency "sqlite3"
24
+ s.add_dependency "activerecord", "~> 3.0"
25
+ s.add_dependency "activesupport", "~> 3.0"
26
+ s.add_dependency "railties", "~> 3.0"
27
+ end
metadata ADDED
@@ -0,0 +1,163 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: wildcard_scopes
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 2
10
+ version: 0.0.2
11
+ platform: ruby
12
+ authors:
13
+ - Victor Sokolov
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2012-01-09 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: rspec
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ hash: 3
29
+ segments:
30
+ - 0
31
+ version: "0"
32
+ type: :development
33
+ version_requirements: *id001
34
+ - !ruby/object:Gem::Dependency
35
+ name: rake
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ none: false
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ hash: 3
43
+ segments:
44
+ - 0
45
+ version: "0"
46
+ type: :development
47
+ version_requirements: *id002
48
+ - !ruby/object:Gem::Dependency
49
+ name: sqlite3
50
+ prerelease: false
51
+ requirement: &id003 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ hash: 3
57
+ segments:
58
+ - 0
59
+ version: "0"
60
+ type: :development
61
+ version_requirements: *id003
62
+ - !ruby/object:Gem::Dependency
63
+ name: activerecord
64
+ prerelease: false
65
+ requirement: &id004 !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ~>
69
+ - !ruby/object:Gem::Version
70
+ hash: 7
71
+ segments:
72
+ - 3
73
+ - 0
74
+ version: "3.0"
75
+ type: :runtime
76
+ version_requirements: *id004
77
+ - !ruby/object:Gem::Dependency
78
+ name: activesupport
79
+ prerelease: false
80
+ requirement: &id005 !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ~>
84
+ - !ruby/object:Gem::Version
85
+ hash: 7
86
+ segments:
87
+ - 3
88
+ - 0
89
+ version: "3.0"
90
+ type: :runtime
91
+ version_requirements: *id005
92
+ - !ruby/object:Gem::Dependency
93
+ name: railties
94
+ prerelease: false
95
+ requirement: &id006 !ruby/object:Gem::Requirement
96
+ none: false
97
+ requirements:
98
+ - - ~>
99
+ - !ruby/object:Gem::Version
100
+ hash: 7
101
+ segments:
102
+ - 3
103
+ - 0
104
+ version: "3.0"
105
+ type: :runtime
106
+ version_requirements: *id006
107
+ description: ActiveRecord scopes with dynamic names
108
+ email:
109
+ - gzigzigzeo@gmail.com
110
+ executables: []
111
+
112
+ extensions: []
113
+
114
+ extra_rdoc_files: []
115
+
116
+ files:
117
+ - .gitignore
118
+ - Gemfile
119
+ - README.rdoc
120
+ - Rakefile
121
+ - lib/wildcard_scopes.rb
122
+ - lib/wildcard_scopes/base.rb
123
+ - lib/wildcard_scopes/railtie.rb
124
+ - lib/wildcard_scopes/version.rb
125
+ - spec/spec_helper.rb
126
+ - spec/wildcard_scopes/wildcard_scopes_spec.rb
127
+ - wildcard_scopes.gemspec
128
+ homepage: ""
129
+ licenses: []
130
+
131
+ post_install_message:
132
+ rdoc_options: []
133
+
134
+ require_paths:
135
+ - lib
136
+ required_ruby_version: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ">="
140
+ - !ruby/object:Gem::Version
141
+ hash: 3
142
+ segments:
143
+ - 0
144
+ version: "0"
145
+ required_rubygems_version: !ruby/object:Gem::Requirement
146
+ none: false
147
+ requirements:
148
+ - - ">="
149
+ - !ruby/object:Gem::Version
150
+ hash: 3
151
+ segments:
152
+ - 0
153
+ version: "0"
154
+ requirements: []
155
+
156
+ rubyforge_project: wildcard_scopes
157
+ rubygems_version: 1.8.10
158
+ signing_key:
159
+ specification_version: 3
160
+ summary: ActiveRecord scopes with dynamic names
161
+ test_files:
162
+ - spec/spec_helper.rb
163
+ - spec/wildcard_scopes/wildcard_scopes_spec.rb