dmichael-set-notation-helper 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.
data/MIT-LICENSE.txt ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2008 Matt Darby
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.markdown ADDED
@@ -0,0 +1,36 @@
1
+ SetNotationHelper
2
+ =================
3
+
4
+ A library providing set notation support for ActiveRecord models. Include this module in the models you want to support set notation finders and you are all set.
5
+
6
+ To use:
7
+
8
+ sound = Sound.in_set("{1,2,3}")
9
+
10
+
11
+ Installation
12
+ ------------
13
+
14
+ sudo gem install set-notation-helper -s http://gems.github.com
15
+
16
+ Add the gem to your environment.rb file
17
+
18
+ config.gem "set-notation-helper", :lib => 'set_notation_helper'
19
+
20
+
21
+ Matching for sets in your routes
22
+ ---------------------------
23
+
24
+ If you are interested in matching for sets in the routes you can do something like this
25
+
26
+ regexes = [
27
+ /%7B\s*([\d\-,(%20)*]*)\s*%7D/,
28
+ /\{\s*([\d\-,\s*]*)\s*\}/
29
+ ]
30
+
31
+ set_regexes.each do |regex|
32
+ map.with_options( :controller => 'sounds', :action => 'index', :id => regex, :conditions => { :method => :get }) do |r|
33
+ r.connect "/#{resource}/:id.:format"
34
+ r.connect "/#{resource}/:id"
35
+ end
36
+ end
data/init.rb ADDED
@@ -0,0 +1 @@
1
+ require File.dirname(__FILE__) + "/rails/init"
data/install.rb ADDED
@@ -0,0 +1 @@
1
+ # Install hook code here
@@ -0,0 +1,91 @@
1
+ module SetNotationHelper
2
+
3
+ def self.included(base)
4
+ base.class_eval do
5
+ extend SetNotationHelper::ClassMethods
6
+
7
+ # This scope accepts either a String in the form "{1,2,3}" **OR** an Integer
8
+ named_scope :in_set, lambda { |*args|
9
+ value = args.first
10
+
11
+ # A string input is either a set or an integer in disguise
12
+ unless value.is_a?(String) || value.is_a?(Integer)
13
+ logger.error "[SetNotationHelper] You have given the helper something it cant use: #{value.class}. No filter applied!"
14
+ return {}
15
+ end
16
+
17
+ if is_set?(value)
18
+ { :conditions => "#{table_name}.id IN (#{ parse_set(value).to_a.join(',') })" }
19
+ else
20
+ { :conditions => "#{table_name}.id = #{ value.to_i }" }
21
+ end
22
+ }
23
+
24
+ end
25
+ end
26
+
27
+ def set_limit
28
+ 100000
29
+ end
30
+
31
+ module ClassMethods
32
+
33
+ def is_set_or_range?(input)
34
+ if is_set?(input) or is_range?(input)
35
+ return true
36
+ end
37
+ return false
38
+ end
39
+
40
+ def is_range?(range)
41
+ if range && range.is_a?(String) && range.split('-').size > 1 && !match_set(range)
42
+ return true
43
+ end
44
+ return false
45
+ end
46
+
47
+ def match_set(set)
48
+ return if set.blank? || !set.is_a?(String)
49
+ set.match( /\{\s*(.*)\s*\}/ )
50
+ end
51
+
52
+ def is_set?(set)
53
+ if match_set(set)
54
+ return true
55
+ end
56
+ return false
57
+ end
58
+
59
+ def parse_set(set)
60
+ match = match_set(set)
61
+ if !match then return Set.new(set) end
62
+
63
+ set = match[1].split(',')
64
+ set.each_with_index{|element, i|
65
+ if is_range?(element)
66
+ set[i] = element.to_range.collect
67
+ set.flatten!
68
+ end
69
+ }
70
+ if set.size > set_limit
71
+ @messages[:info] = "Your resultset has been truncated to #{set_limit} results"
72
+ end
73
+ set = Set.new(set[0..set_limit-1])
74
+ return set
75
+ end
76
+
77
+
78
+ def convert_range_to_limits(input)
79
+ if !is_range?(input) then return false end
80
+
81
+ # turn this String into a Range
82
+ range = input.to_range
83
+ limit = range.collect.size
84
+ offset = range.first - 1
85
+
86
+ return limit, offset
87
+ end
88
+
89
+ end # ClassMethods
90
+
91
+ end
data/rails/init.rb ADDED
@@ -0,0 +1,5 @@
1
+ require 'set_notation_helper'
2
+
3
+ ActiveRecord::Base.send :include, SetNotationHelper
4
+
5
+ RAILS_DEFAULT_LOGGER.debug "** [SetNotationHelper] loaded. Let's say that our universe contains the numbers 1, 2, 3, and 4. Let A be the set containing the numbers 1 and 2; that is, A = {1, 2}"
data/uninstall.rb ADDED
@@ -0,0 +1 @@
1
+ # Uninstall hook code here
metadata ADDED
@@ -0,0 +1,59 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dmichael-set-notation-helper
3
+ version: !ruby/object:Gem::Version
4
+ version: "0.2"
5
+ platform: ruby
6
+ authors:
7
+ - David Michael
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-05-26 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: A library providing set notation support for ActiveRecord models
17
+ email: david.michael@gmail.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files: []
23
+
24
+ files:
25
+ - MIT-LICENSE.txt
26
+ - README.markdown
27
+ - init.rb
28
+ - install.rb
29
+ - lib/set_notation_helper.rb
30
+ - rails/init.rb
31
+ - uninstall.rb
32
+ has_rdoc: false
33
+ homepage: http://github.com/dmichael/set-notation-helper
34
+ post_install_message:
35
+ rdoc_options: []
36
+
37
+ require_paths:
38
+ - lib
39
+ required_ruby_version: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: "0"
44
+ version:
45
+ required_rubygems_version: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: "0"
50
+ version:
51
+ requirements: []
52
+
53
+ rubyforge_project:
54
+ rubygems_version: 1.2.0
55
+ signing_key:
56
+ specification_version: 2
57
+ summary: Find by set notation in Active Record
58
+ test_files: []
59
+