Class: Exegesis::Design
- Inherits:
-
Object
- Object
- Exegesis::Design
- Includes:
- Document
- Defined in:
- lib/exegesis/design.rb
Class Method Summary collapse
- .canonical_design ⇒ Object
- .compose_canonical ⇒ Object
- .design_directory ⇒ Object
- .design_directory=(dir) ⇒ Object
- .design_name ⇒ Object
- .design_name=(n) ⇒ Object
- .docs(name, default_options = {}) ⇒ Object
- .hash(name, default_options = {}) ⇒ Object
- .view(name, default_options = {}) ⇒ Object
Instance Method Summary collapse
- #call_view(name, opts = {}) ⇒ Object
- #design_name ⇒ Object
-
#initialize(db) ⇒ Design
constructor
A new instance of Design.
- #parse_opts(key, opts = {}, defaults = {}) ⇒ Object
- #view(name, key = nil, opts = {}) ⇒ Object
Methods included from Document
Constructor Details
#initialize(db) ⇒ Design
Returns a new instance of Design.
85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/exegesis/design.rb', line 85 def initialize db begin super db.get("_design/#{design_name}"), db rescue RestClient::ResourceNotFound db.put("_design/#{design_name}", self.class.canonical_design) retry end unless self['views'] == self.class.canonical_design['views'] self['views'].update(self.class.canonical_design['views']) save end end |
Class Method Details
.canonical_design ⇒ Object
32 33 34 35 36 37 |
# File 'lib/exegesis/design.rb', line 32 def self.canonical_design @canonical_design ||= { '_id' => "_design/#{design_name}", 'views' => {} } end |
.compose_canonical ⇒ Object
22 23 24 25 26 27 28 29 30 |
# File 'lib/exegesis/design.rb', line 22 def self.compose_canonical Dir[design_directory + 'views' + '**/*.js'].each do |view_func| path = view_func.split('/') func = path.pop.sub(/\.js$/,'') name = path.pop canonical_design['views'][name] ||= {} canonical_design['views'][name][func] = File.read(view_func) end end |
.design_directory ⇒ Object
10 11 12 |
# File 'lib/exegesis/design.rb', line 10 def self.design_directory @design_directory ||= Pathname.new("designs/#{design_name}") end |
.design_directory=(dir) ⇒ Object
6 7 8 |
# File 'lib/exegesis/design.rb', line 6 def self.design_directory= dir @design_directory = Pathname.new(dir) end |
.design_name ⇒ Object
18 19 20 |
# File 'lib/exegesis/design.rb', line 18 def self.design_name @design_name ||= name.scan(/^(?:[A-Za-z0-9\:]+::)([A-Za-z0-9]+)Design$/).first.first.downcase end |
.design_name=(n) ⇒ Object
14 15 16 |
# File 'lib/exegesis/design.rb', line 14 def self.design_name= n @design_name = n.to_s end |
.docs(name, default_options = {}) ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/exegesis/design.rb', line 45 def self.docs name, ={} = {:include_docs => true, :reduce => false}.merge() define_method name do |*opts| key = opts.shift = parse_opts key, opts.first, response = call_view name, ids = [] response.inject([]) do |memo, doc| unless ids.include?(doc['id']) ids << doc['id'] memo << Exegesis.instantiate(doc['doc'], database) end memo end end end |
.hash(name, default_options = {}) ⇒ Object
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/exegesis/design.rb', line 62 def self.hash name, ={} = {:group => true}.merge() view_name = .delete(:view) || name define_method name do |*opts| key = opts.shift = parse_opts key, opts.first, .delete(:group) if [:key] response = call_view view_name, if response.size == 1 && response.first['key'].nil? response.first['value'] else response.inject({}) do |memo, row| if ! memo.has_key?(row['key']) memo[row['key']] = row['value'] end memo end end end end |
.view(name, default_options = {}) ⇒ Object
39 40 41 42 43 |
# File 'lib/exegesis/design.rb', line 39 def self.view name, ={} define_method name do |key, *opts| view name, key, opts.first, end end |
Instance Method Details
#call_view(name, opts = {}) ⇒ Object
102 103 104 105 |
# File 'lib/exegesis/design.rb', line 102 def call_view name, opts={} url = "_design/#{design_name}/_view/#{name}" database.raw_get(url, opts)['rows'] end |
#design_name ⇒ Object
107 108 109 |
# File 'lib/exegesis/design.rb', line 107 def design_name self.class.design_name end |
#parse_opts(key, opts = {}, defaults = {}) ⇒ Object
111 112 113 114 115 116 117 |
# File 'lib/exegesis/design.rb', line 111 def parse_opts key, opts={}, defaults={} opts = straighten_args key, opts, defaults parse_key opts parse_keys opts parse_range opts opts end |
#view(name, key = nil, opts = {}) ⇒ Object
98 99 100 |
# File 'lib/exegesis/design.rb', line 98 def view name, key=nil, opts={} call_view name, parse_opts(key, opts) end |