beanbag 0.1.0 → 0.1.1

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.
Files changed (2) hide show
  1. data/lib/beanbag.rb +37 -20
  2. metadata +2 -2
data/lib/beanbag.rb CHANGED
@@ -2,40 +2,57 @@ require 'couchrest'
2
2
 
3
3
  class BeanBag
4
4
 
5
+ @db_name = ''
6
+ @database = nil
7
+
5
8
  def initialize(args)
6
9
  @data = args
7
10
  end
8
11
 
9
- def self.found_by(criteria)
12
+ def self.in_database(db_name)
13
+ @db_name = db_name
14
+ end
15
+
16
+ def self.found_by(*identifiers)
10
17
 
11
- @@criteria = {} # initialize criteria
18
+ @identifiers = {}
12
19
 
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
20
+ identifiers.each do |id|
21
+ if id.is_a? Hash
22
+ @identifiers = @identifiers.merge id
23
+ elsif id.is_a? String or id.is_a? Symbol
24
+ @identifiers[id] = nil
25
+ end
26
+ end
22
27
  end
23
28
 
29
+ def self.design_doc
30
+ design_doc_name = "_design/#{self.name.downcase}"
31
+ begin
32
+ doc = database.get(design_doc_name)
33
+ rescue RestClient::ResourceNotFound
34
+ doc = CouchRest::Document.new("views" => {})
35
+ doc.id = design_doc_name
36
+ database.save_doc(doc)
37
+ retry
38
+ end
39
+ doc
40
+ end
41
+
24
42
  def self.all
25
43
  begin
26
44
  view sprintf('%s/all_%ss', self.name.downcase, self.name.downcase)
27
- rescue
28
- # debugger
29
- doc = database.get("_design/#{self.name.downcase}")
45
+ rescue RestClient::ResourceNotFound
46
+ doc = design_doc
30
47
  doc['views']["all_#{self.name.downcase}s"] = {}
31
48
 
32
49
  view_string = "function(doc){"
33
- if not @@criteria.empty?
50
+ if not @identifiers.empty?
34
51
  view_string << "if("
35
52
  conditions = []
36
- @@criteria.each_pair do |name, value|
53
+ @identifiers.each_pair do |name, value|
37
54
  conditions << "doc.#{name.to_s}"
38
- conditions << "doc.#{name.to_s} === '#{value.to_s}'" if defined? value
55
+ conditions << "doc.#{name.to_s} === '#{value.to_s}'" if not value.nil?
39
56
  end
40
57
  view_string << conditions.join(" && ")
41
58
  view_string << ")"
@@ -49,10 +66,10 @@ class BeanBag
49
66
  end
50
67
 
51
68
  def self.database
52
- if not defined? @@database
53
- @@database = CouchRest.new.database('artifacts')
69
+ if not defined? @database
70
+ @database = CouchRest.new.database(@db_name)
54
71
  end
55
- @@database
72
+ @database
56
73
  end
57
74
 
58
75
  def self.view(view_name)
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 1
8
- - 0
9
- version: 0.1.0
8
+ - 1
9
+ version: 0.1.1
10
10
  platform: ruby
11
11
  authors:
12
12
  - Ryan Mitchell