Module: Exegesis::Design::DesignDocs::ClassMethods
- Defined in:
- lib/exegesis/design/design_docs.rb
Instance Method Summary collapse
- #declared_views ⇒ Object
- #design_doc ⇒ Object
- #design_doc_hash ⇒ Object
- #design_doc_path ⇒ Object
- #designs_directory(dir = nil) ⇒ Object
- #hash_for_design(design) ⇒ Object
- #view_by(*keys) ⇒ Object
Instance Method Details
#declared_views ⇒ Object
40 41 42 |
# File 'lib/exegesis/design/design_docs.rb', line 40 def declared_views @declared_views ||= {} end |
#design_doc ⇒ Object
25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/exegesis/design/design_docs.rb', line 25 def design_doc js_doc = Johnson.evaluate("v = #{File.read(design_doc_path)}"); views = js_doc['views'].entries.inject({}) do |memo, (name, mapreduce)| memo[name] = mapreduce.entries.inject({}) do |view, (role, func)| view.update role => func.toString end memo end composite_views = declared_views.dup.update(views) { '_id' => "_design/#{design_doc_name}", 'language' => 'javascript', 'views' => composite_views } end |
#design_doc_hash ⇒ Object
59 60 61 |
# File 'lib/exegesis/design/design_docs.rb', line 59 def design_doc_hash hash_for_design design_doc end |
#design_doc_path ⇒ Object
21 22 23 |
# File 'lib/exegesis/design/design_docs.rb', line 21 def design_doc_path designs_directory + "#{design_doc_name}.js" end |
#designs_directory(dir = nil) ⇒ Object
13 14 15 16 17 18 19 |
# File 'lib/exegesis/design/design_docs.rb', line 13 def designs_directory dir=nil if dir @designs_directory = Pathname.new(dir) else @designs_directory || Exegesis.designs_directory end end |
#hash_for_design(design) ⇒ Object
63 64 65 66 67 68 |
# File 'lib/exegesis/design/design_docs.rb', line 63 def hash_for_design design funcs = design['views'].map do |name, view| "//view/#{name}/#{view['map']}/#{view['reduce']}" end Digest::MD5.hexdigest(funcs.sort.join) end |
#view_by(*keys) ⇒ Object
44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/exegesis/design/design_docs.rb', line 44 def view_by *keys view_name = "by_#{keys.join('_and_')}" doc_keys = keys.map {|k| "doc['#{k}']" } declared_views[view_name] = { 'map' => %|function(doc) { if (doc['.kind'] == '#{name.sub(/Design$/,'')}' && #{doc_keys.join(' && ')}) { emit(#{keys.length == 1 ? doc_keys.first : "[#{doc_keys.join(', ')}]" }, null); } }| } define_method view_name do |*args| docs_for view_name, *args end end |