mongomapper_ext 0.3.0 → 0.4.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/Rakefile +1 -1
- data/TODO +2 -0
- data/VERSION +1 -1
- data/lib/mongomapper_ext.rb +2 -0
- data/lib/mongomapper_ext/file.rb +1 -1
- data/lib/mongomapper_ext/filter.rb +13 -5
- data/lib/mongomapper_ext/paginator.rb +69 -0
- data/mongomapper_ext.gemspec +8 -6
- metadata +8 -5
data/Rakefile
CHANGED
@@ -11,7 +11,7 @@ begin
|
|
11
11
|
gem.homepage = "http://github.com/dcu/mongomapper_ext"
|
12
12
|
gem.authors = ["David A. Cuadrado"]
|
13
13
|
|
14
|
-
gem.add_dependency('mongo_mapper', '~> 0.
|
14
|
+
gem.add_dependency('mongo_mapper', '~> 0.8')
|
15
15
|
gem.add_dependency('uuidtools', '>= 2.0.0')
|
16
16
|
|
17
17
|
gem.add_development_dependency("shoulda", ">= 2.10.2")
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.4.0
|
data/lib/mongomapper_ext.rb
CHANGED
data/lib/mongomapper_ext/file.rb
CHANGED
@@ -24,7 +24,7 @@ module MongoMapperExt
|
|
24
24
|
io = StringIO.new(io)
|
25
25
|
end
|
26
26
|
|
27
|
-
if defined?(Magic)
|
27
|
+
if defined?(Magic) && Magic.respond_to?(:guess_string_mime_type)
|
28
28
|
data = io.read(256) # be nice with memory usage
|
29
29
|
self.content_type = options[:content_type] = Magic.guess_string_mime_type(data.to_s)
|
30
30
|
self.extension ||= options[:content_type].to_s.split("/").last.split("-").last
|
@@ -38,7 +38,7 @@ module MongoMapperExt
|
|
38
38
|
|
39
39
|
stemmed = []
|
40
40
|
if defined?(Lingua)
|
41
|
-
stemmer =
|
41
|
+
stemmer = MongoMapperExt::Filter.build_stemmer(language)
|
42
42
|
original_words.each do |word|
|
43
43
|
stemmed_word = stemmer.stem(word)
|
44
44
|
stemmed << stemmed_word unless original_words.include?(stemmed_word)
|
@@ -54,11 +54,11 @@ module MongoMapperExt
|
|
54
54
|
page = opts.delete(:page) || 1
|
55
55
|
select = opts.delete(:select) || self.keys.keys
|
56
56
|
|
57
|
-
|
57
|
+
query = Plucky::Query.new(self.collection, opts)
|
58
58
|
|
59
|
-
results = self.database.eval("function(collection, q, config) { return filter(collection, q, config); }", self.collection_name, criteria.merge({"_keywords" => {:$in => regex}}), {:words => original_words.to_a, :stemmed => stemmed.to_a, :limit => limit, :min_score => min_score, :select => select })
|
59
|
+
results = self.database.eval("function(collection, q, config) { return filter(collection, q, config); }", self.collection_name, query.criteria.source.merge({"_keywords" => {:$in => regex}}), {:words => original_words.to_a, :stemmed => stemmed.to_a, :limit => limit, :min_score => min_score, :select => select })
|
60
60
|
|
61
|
-
pagination =
|
61
|
+
pagination = Paginator.new(results["total_entries"], page, limit)
|
62
62
|
|
63
63
|
pagination.subject = results['results'].map do |result|
|
64
64
|
item = self.new(result['doc'])
|
@@ -82,7 +82,7 @@ module MongoMapperExt
|
|
82
82
|
|
83
83
|
stemmer = nil
|
84
84
|
if defined?(Lingua)
|
85
|
-
stemmer =
|
85
|
+
stemmer = MongoMapperExt::Filter.build_stemmer(lang)
|
86
86
|
end
|
87
87
|
|
88
88
|
stop_words = []
|
@@ -142,6 +142,14 @@ module MongoMapperExt
|
|
142
142
|
end
|
143
143
|
end
|
144
144
|
|
145
|
+
def self.build_stemmer(language)
|
146
|
+
begin
|
147
|
+
return Lingua::Stemmer.new(:language => language)
|
148
|
+
rescue Lingua::StemmerError
|
149
|
+
return nil
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
145
153
|
def en_stop_words
|
146
154
|
["a", "about", "above", "after", "again", "against", "all", "am", "an",
|
147
155
|
"and", "any", "are", "aren't", "as", "at", "be", "because", "been",
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
module MongoMapperExt
|
3
|
+
class Paginator
|
4
|
+
instance_methods.each { |m| undef_method m unless m =~ /(^__|^nil\?$|^send$|respond_to\?|proxy_|^object_id$)/ }
|
5
|
+
|
6
|
+
attr_accessor :subject
|
7
|
+
attr_reader :total_entries, :per_page, :current_page
|
8
|
+
alias limit per_page
|
9
|
+
|
10
|
+
def initialize(total_entries, current_page, per_page=nil)
|
11
|
+
@total_entries = total_entries.to_i
|
12
|
+
self.per_page = per_page
|
13
|
+
self.current_page = current_page
|
14
|
+
end
|
15
|
+
|
16
|
+
def total_pages
|
17
|
+
(total_entries / per_page.to_f).ceil
|
18
|
+
end
|
19
|
+
|
20
|
+
def out_of_bounds?
|
21
|
+
current_page > total_pages
|
22
|
+
end
|
23
|
+
|
24
|
+
def previous_page
|
25
|
+
current_page > 1 ? (current_page - 1) : nil
|
26
|
+
end
|
27
|
+
|
28
|
+
def next_page
|
29
|
+
current_page < total_pages ? (current_page + 1) : nil
|
30
|
+
end
|
31
|
+
|
32
|
+
def skip
|
33
|
+
(current_page - 1) * per_page
|
34
|
+
end
|
35
|
+
alias offset skip # for will paginate support
|
36
|
+
|
37
|
+
def send(method, *args, &block)
|
38
|
+
if respond_to?(method)
|
39
|
+
super
|
40
|
+
else
|
41
|
+
subject.send(method, *args, &block)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def ===(other)
|
46
|
+
other === subject
|
47
|
+
end
|
48
|
+
|
49
|
+
def method_missing(name, *args, &block)
|
50
|
+
@subject.send(name, *args, &block)
|
51
|
+
end
|
52
|
+
|
53
|
+
def respond_to?(name, *args, &block)
|
54
|
+
super || @subject.respond_to?(name, *args, &block)
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
def per_page=(value)
|
59
|
+
value = 25 if value.blank?
|
60
|
+
@per_page = value.to_i
|
61
|
+
end
|
62
|
+
|
63
|
+
def current_page=(value)
|
64
|
+
value = value.to_i
|
65
|
+
value = 1 if value < 1
|
66
|
+
@current_page = value
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
data/mongomapper_ext.gemspec
CHANGED
@@ -5,16 +5,17 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{mongomapper_ext}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.4.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["David A. Cuadrado"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-06-20}
|
13
13
|
s.description = %q{MongoMapper extensions}
|
14
14
|
s.email = %q{krawek@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
16
16
|
"LICENSE",
|
17
|
-
"README.rdoc"
|
17
|
+
"README.rdoc",
|
18
|
+
"TODO"
|
18
19
|
]
|
19
20
|
s.files = [
|
20
21
|
".document",
|
@@ -38,6 +39,7 @@ Gem::Specification.new do |s|
|
|
38
39
|
"lib/mongomapper_ext/js/filter.js",
|
39
40
|
"lib/mongomapper_ext/js/find_tags.js",
|
40
41
|
"lib/mongomapper_ext/js/tag_cloud.js",
|
42
|
+
"lib/mongomapper_ext/paginator.rb",
|
41
43
|
"lib/mongomapper_ext/slugizer.rb",
|
42
44
|
"lib/mongomapper_ext/storage.rb",
|
43
45
|
"lib/mongomapper_ext/tags.rb",
|
@@ -90,20 +92,20 @@ Gem::Specification.new do |s|
|
|
90
92
|
s.specification_version = 3
|
91
93
|
|
92
94
|
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
93
|
-
s.add_runtime_dependency(%q<mongo_mapper>, ["~> 0.
|
95
|
+
s.add_runtime_dependency(%q<mongo_mapper>, ["~> 0.8"])
|
94
96
|
s.add_runtime_dependency(%q<uuidtools>, [">= 2.0.0"])
|
95
97
|
s.add_development_dependency(%q<shoulda>, [">= 2.10.2"])
|
96
98
|
s.add_development_dependency(%q<jnunemaker-matchy>, ["= 0.4.0"])
|
97
99
|
s.add_development_dependency(%q<mocha>, [">= 0.9.4"])
|
98
100
|
else
|
99
|
-
s.add_dependency(%q<mongo_mapper>, ["~> 0.
|
101
|
+
s.add_dependency(%q<mongo_mapper>, ["~> 0.8"])
|
100
102
|
s.add_dependency(%q<uuidtools>, [">= 2.0.0"])
|
101
103
|
s.add_dependency(%q<shoulda>, [">= 2.10.2"])
|
102
104
|
s.add_dependency(%q<jnunemaker-matchy>, ["= 0.4.0"])
|
103
105
|
s.add_dependency(%q<mocha>, [">= 0.9.4"])
|
104
106
|
end
|
105
107
|
else
|
106
|
-
s.add_dependency(%q<mongo_mapper>, ["~> 0.
|
108
|
+
s.add_dependency(%q<mongo_mapper>, ["~> 0.8"])
|
107
109
|
s.add_dependency(%q<uuidtools>, [">= 2.0.0"])
|
108
110
|
s.add_dependency(%q<shoulda>, [">= 2.10.2"])
|
109
111
|
s.add_dependency(%q<jnunemaker-matchy>, ["= 0.4.0"])
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
7
|
+
- 4
|
8
8
|
- 0
|
9
|
-
version: 0.
|
9
|
+
version: 0.4.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- David A. Cuadrado
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-
|
17
|
+
date: 2010-06-20 00:00:00 -05:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -26,8 +26,8 @@ dependencies:
|
|
26
26
|
- !ruby/object:Gem::Version
|
27
27
|
segments:
|
28
28
|
- 0
|
29
|
-
-
|
30
|
-
version: "0.
|
29
|
+
- 8
|
30
|
+
version: "0.8"
|
31
31
|
type: :runtime
|
32
32
|
version_requirements: *id001
|
33
33
|
- !ruby/object:Gem::Dependency
|
@@ -95,6 +95,7 @@ extensions: []
|
|
95
95
|
extra_rdoc_files:
|
96
96
|
- LICENSE
|
97
97
|
- README.rdoc
|
98
|
+
- TODO
|
98
99
|
files:
|
99
100
|
- .document
|
100
101
|
- .gitignore
|
@@ -117,6 +118,7 @@ files:
|
|
117
118
|
- lib/mongomapper_ext/js/filter.js
|
118
119
|
- lib/mongomapper_ext/js/find_tags.js
|
119
120
|
- lib/mongomapper_ext/js/tag_cloud.js
|
121
|
+
- lib/mongomapper_ext/paginator.rb
|
120
122
|
- lib/mongomapper_ext/slugizer.rb
|
121
123
|
- lib/mongomapper_ext/storage.rb
|
122
124
|
- lib/mongomapper_ext/tags.rb
|
@@ -136,6 +138,7 @@ files:
|
|
136
138
|
- test/types/test_open_struct.rb
|
137
139
|
- test/types/test_set.rb
|
138
140
|
- test/types/test_timestamp.rb
|
141
|
+
- TODO
|
139
142
|
has_rdoc: true
|
140
143
|
homepage: http://github.com/dcu/mongomapper_ext
|
141
144
|
licenses: []
|