Class: CouchModel::Design
- Inherits:
-
Object
- Object
- CouchModel::Design
- Defined in:
- lib/couch_model/design.rb
Overview
The Design class acts as a wrapper for CouchDB design documents.
Instance Attribute Summary collapse
-
#database ⇒ Object
readonly
Returns the value of attribute database.
-
#id ⇒ Object
Returns the value of attribute id.
-
#language ⇒ Object
Returns the value of attribute language.
-
#model_class ⇒ Object
readonly
Returns the value of attribute model_class.
-
#rev ⇒ Object
readonly
Returns the value of attribute rev.
-
#views ⇒ Object
Returns the value of attribute views.
Instance Method Summary collapse
- #exists? ⇒ Boolean
- #filename ⇒ Object
- #generate_view(name, options = { }) ⇒ Object
-
#initialize(database, model_class, attributes = { }) ⇒ Design
constructor
A new instance of Design.
- #load_file ⇒ Object
- #push ⇒ Object
- #to_hash ⇒ Object
- #url ⇒ Object
Constructor Details
#initialize(database, model_class, attributes = { }) ⇒ Design
Returns a new instance of Design.
19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/couch_model/design.rb', line 19 def initialize(database, model_class, attributes = { }) @database = database @model_class = model_class @language = "javascript" @views = [ ] load_file self.id = attributes[:id] if attributes.has_key?(:id) self.language = attributes[:language] if attributes.has_key?(:language) self.views = attributes[:views] if attributes.has_key?(:views) end |
Instance Attribute Details
#database ⇒ Object (readonly)
Returns the value of attribute database.
12 13 14 |
# File 'lib/couch_model/design.rb', line 12 def database @database end |
#id ⇒ Object
Returns the value of attribute id.
14 15 16 |
# File 'lib/couch_model/design.rb', line 14 def id @id end |
#language ⇒ Object
Returns the value of attribute language.
16 17 18 |
# File 'lib/couch_model/design.rb', line 16 def language @language end |
#model_class ⇒ Object (readonly)
Returns the value of attribute model_class.
13 14 15 |
# File 'lib/couch_model/design.rb', line 13 def model_class @model_class end |
#rev ⇒ Object
Returns the value of attribute rev.
15 16 17 |
# File 'lib/couch_model/design.rb', line 15 def rev @rev end |
#views ⇒ Object
Returns the value of attribute views.
17 18 19 |
# File 'lib/couch_model/design.rb', line 17 def views @views end |
Instance Method Details
#exists? ⇒ Boolean
69 70 71 72 73 74 |
# File 'lib/couch_model/design.rb', line 69 def exists? Transport::JSON.request :get, self.url, :expected_status_code => 200 true rescue Transport::JSON::UnexpectedStatusCodeError false end |
#filename ⇒ Object
31 32 33 |
# File 'lib/couch_model/design.rb', line 31 def filename @filename ||= File.join(CouchModel::Configuration.design_directory, "#{@model_class.to_s.underscore}.design") end |
#generate_view(name, options = { }) ⇒ Object
51 52 53 54 55 |
# File 'lib/couch_model/design.rb', line 51 def generate_view(name, = { }) view = View.new self, .merge(:name => name.to_s) @views.insert 0, view view end |
#load_file ⇒ Object
35 36 37 38 39 40 41 42 |
# File 'lib/couch_model/design.rb', line 35 def load_file hash = YAML::load_file self.filename self.class.symbolize_hash_keys hash self.id, self.language, self.views = hash.values_at(:id, :language, :views) true rescue Errno::ENOENT false end |
#push ⇒ Object
76 77 78 79 80 81 82 |
# File 'lib/couch_model/design.rb', line 76 def push url = self.url evaluate Transport::JSON.request(:get, url) Transport::JSON.request :put, url, :body => self.to_hash, :expected_status_code => 201 true end |
#to_hash ⇒ Object
57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/couch_model/design.rb', line 57 def to_hash rev = self.rev hash = { "_id" => "_design/#{self.id}", "language" => self.language, "views" => { } } hash.merge! "_rev" => rev if rev @views.each { |view| hash["views"].merge! view.to_hash } hash end |
#url ⇒ Object
84 85 86 |
# File 'lib/couch_model/design.rb', line 84 def url "#{@database.url}/_design/#{self.id}" end |