beanbag 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/lib/beanbag.rb +61 -0
  2. metadata +64 -0
data/lib/beanbag.rb ADDED
@@ -0,0 +1,61 @@
1
+ require 'couchrest'
2
+
3
+ class BeanBag
4
+
5
+ def initialize(args)
6
+ @data = args
7
+ end
8
+
9
+ def self.found_by(criteria)
10
+
11
+ @@criteria = {} # initialize criteria
12
+
13
+ if criteria.is_a? Hash
14
+ @@criteria = criteria
15
+ elsif criteria.is_a? Array
16
+ criteria.each do |key|
17
+ @@criteria[key] = nil
18
+ end
19
+ elsif criteria.is_a? String
20
+ @@criteria[criteria] = nil
21
+ end
22
+ end
23
+
24
+ def self.all
25
+ begin
26
+ view sprintf('%s/all_%ss', self.name.downcase, self.name.downcase)
27
+ rescue
28
+ # debugger
29
+ doc = database.get("_design/#{self.name.downcase}")
30
+ doc['views']["all_#{self.name.downcase}s"] = {}
31
+
32
+ view_string = "function(doc){"
33
+ if not @@criteria.empty?
34
+ view_string << "if("
35
+ conditions = []
36
+ @@criteria.each_pair do |name, value|
37
+ conditions << "doc.#{name.to_s}"
38
+ conditions << "doc.#{name.to_s} === '#{value.to_s}'" if defined? value
39
+ end
40
+ view_string << conditions.join(" && ")
41
+ view_string << ")"
42
+ end
43
+ view_string << "emit(doc['_id'], doc);}"
44
+
45
+ doc['views']["all_#{self.name.downcase}s"]['map'] = view_string
46
+ database.save_doc(doc)
47
+ retry
48
+ end
49
+ end
50
+
51
+ def self.database
52
+ if not defined? @@database
53
+ @@database = CouchRest.new.database('artifacts')
54
+ end
55
+ @@database
56
+ end
57
+
58
+ def self.view(view_name)
59
+ database.view view_name
60
+ end
61
+ end
metadata ADDED
@@ -0,0 +1,64 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: beanbag
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 1
8
+ - 0
9
+ version: 0.1.0
10
+ platform: ruby
11
+ authors:
12
+ - Ryan Mitchell
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2011-03-31 00:00:00 -07:00
18
+ default_executable:
19
+ dependencies: []
20
+
21
+ description: BeanBag is a flexible wrapper around CouchRest that pads the metal just a little bit.
22
+ email: mitchellryanj@gmail.com
23
+ executables: []
24
+
25
+ extensions: []
26
+
27
+ extra_rdoc_files: []
28
+
29
+ files:
30
+ - lib/beanbag.rb
31
+ has_rdoc: true
32
+ homepage: http://ryanjmitchell.net
33
+ licenses: []
34
+
35
+ post_install_message:
36
+ rdoc_options: []
37
+
38
+ require_paths:
39
+ - lib
40
+ required_ruby_version: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ segments:
46
+ - 0
47
+ version: "0"
48
+ required_rubygems_version: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ segments:
54
+ - 0
55
+ version: "0"
56
+ requirements: []
57
+
58
+ rubyforge_project:
59
+ rubygems_version: 1.3.7
60
+ signing_key:
61
+ specification_version: 3
62
+ summary: BeanBag is a flexible wrapper around CouchRest that pads the metal just a little bit.
63
+ test_files: []
64
+