couch 0.0.4 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{couch}
8
- s.version = "0.0.4"
8
+ s.version = "0.1.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Johannes J. Schmidt"]
12
- s.date = %q{2010-03-08}
12
+ s.date = %q{2010-03-09}
13
13
  s.default_executable = %q{couch}
14
14
  s.description = %q{With Couch you can easy build a standalone CouchDB application.}
15
15
  s.email = %q{schmidt@netzmerk.com}
@@ -27,13 +27,16 @@ Gem::Specification.new do |s|
27
27
  "couch.gemspec",
28
28
  "lib/couch.rb",
29
29
  "lib/couch/actions/base.rb",
30
+ "lib/couch/actions/net_base.rb",
30
31
  "lib/couch/actions/pull.rb",
31
32
  "lib/couch/actions/push.rb",
33
+ "lib/couch/actions/routes.rb",
32
34
  "lib/couch/commands.rb",
33
35
  "lib/couch/commands/destroy.rb",
34
36
  "lib/couch/commands/generate.rb",
35
37
  "lib/couch/commands/pull.rb",
36
38
  "lib/couch/commands/push.rb",
39
+ "lib/couch/commands/routes.rb",
37
40
  "lib/couch/generators.rb",
38
41
  "lib/couch/generators/application/USAGE",
39
42
  "lib/couch/generators/application/application_generator.rb",
@@ -55,6 +58,7 @@ Gem::Specification.new do |s|
55
58
  "lib/couch/generators/show/show_generator.rb",
56
59
  "lib/couch/generators/show/templates/show.js",
57
60
  "lib/couch/generators/validation/USAGE",
61
+ "lib/couch/generators/validation/templates/validate_doc_update.js",
58
62
  "lib/couch/generators/validation/validation_generator.rb",
59
63
  "lib/couch/generators/view/USAGE",
60
64
  "lib/couch/generators/view/templates/map.js",
@@ -1,26 +1,16 @@
1
1
  require 'couch'
2
- require 'couch/mapper'
3
2
 
4
3
  require 'rubygems'
5
- require "rest_client"
6
- require 'json'
7
4
  require 'thor/group'
8
- require 'active_support/core_ext/string/inflections'
5
+ require 'active_support/inflector'
9
6
 
10
7
  module Couch
11
8
  module Actions
12
9
  class Base < Thor::Group
13
- attr_reader :mapper
14
-
15
10
  include Thor::Actions
16
11
 
17
12
  class_option :database, :type => :string
18
13
 
19
- def initialize(*args)
20
- super
21
- @mapper = Mapper.new(destination_root)
22
- end
23
-
24
14
  def self.banner
25
15
  "couch #{to_s.split('::').last.underscore}"
26
16
  end
@@ -0,0 +1,21 @@
1
+ require 'couch'
2
+ require 'couch/mapper'
3
+ require 'couch/actions/base'
4
+
5
+ require 'rubygems'
6
+ require "rest_client"
7
+ require 'json'
8
+
9
+ module Couch
10
+ module Actions
11
+ class NetBase < Base
12
+ attr_reader :mapper
13
+
14
+ def initialize(*args)
15
+ super
16
+ @mapper = Mapper.new(destination_root)
17
+ end
18
+ end
19
+ end
20
+ end
21
+
@@ -1,8 +1,8 @@
1
- require 'couch/actions/base'
1
+ require 'couch/actions/net_base'
2
2
 
3
3
  module Couch
4
4
  module Actions
5
- class Pull < Base
5
+ class Pull < NetBase
6
6
  add_runtime_options!
7
7
 
8
8
  def pull
@@ -1,8 +1,8 @@
1
- require 'couch/actions/base'
1
+ require 'couch/actions/net_base'
2
2
 
3
3
  module Couch
4
4
  module Actions
5
- class Push < Base
5
+ class Push < NetBase
6
6
  def create_database_unless_exists
7
7
  RestClient.put database, nil
8
8
  say "Created database %s" % database
@@ -0,0 +1,41 @@
1
+ require 'couch/actions/base'
2
+
3
+ module Couch
4
+ module Actions
5
+ class Routes < Base
6
+ def routes
7
+ say 'Static:'
8
+ Dir.glob(File.join(destination_root, "_attachments/*.html")).each do |file|
9
+ say ' %s' % attachment_url(file)
10
+ end
11
+
12
+ say 'Lists:'
13
+ Dir.glob(File.join(destination_root, "lists/*.js")).each do |list|
14
+ Dir.glob(File.join(destination_root, "views/*")).each do |view|
15
+ say ' %s' % list_url(list, view)
16
+ end
17
+ end
18
+
19
+ say 'Shows:'
20
+ Dir.glob(File.join(destination_root, "shows/*.js")).each do |show|
21
+ say ' %s' % show_url(show)
22
+ say ' %s' % show_url(show, '/:id')
23
+ end
24
+ end
25
+
26
+ protected
27
+
28
+ def attachment_url(file)
29
+ File.join(database, '_design', File.basename(database), File.basename(file))
30
+ end
31
+
32
+ def list_url(list, view)
33
+ File.join(database, '_design', File.basename(database), '_list', File.basename(view), File.basename(list, '.js'))
34
+ end
35
+
36
+ def show_url(show, id = '/')
37
+ File.join(database, '_design', File.basename(database), '_show', File.basename(show, '.js'), id)
38
+ end
39
+ end
40
+ end
41
+ end
@@ -9,6 +9,7 @@ The most common couch commands are:
9
9
  generate Generate new code (short-cut alias: "g")
10
10
  push Push application code to CouchDB
11
11
  pull Pull latest application code from CouchDB
12
+ routes List application urls
12
13
 
13
14
  In addition to those, there are:
14
15
  destroy Undo code generated with "generate"
@@ -26,6 +27,8 @@ when 'push'
26
27
  require 'couch/commands/push'
27
28
  when 'pull'
28
29
  require 'couch/commands/pull'
30
+ when 'routes'
31
+ require 'couch/commands/routes'
29
32
 
30
33
  when '--help', '-h'
31
34
  puts HELP_TEXT
@@ -0,0 +1,4 @@
1
+ require 'couch'
2
+ require 'couch/actions/routes'
3
+
4
+ Couch::Actions::Routes.start ARGV, :destination_root => Couch.root
@@ -8,7 +8,4 @@
8
8
  <body>
9
9
  <h1>Welcome to <%= app_title %>!</h1>
10
10
  </body>
11
- <script src="/_utils/script/json2.js"></script>
12
- <script src="/_utils/script/jquery.js?1.3.2"></script>
13
- <script src="/_utils/script/jquery.couch.js?0.10.0"></script>
14
11
  </html>
@@ -1,18 +1,24 @@
1
1
  function(head, req) {
2
2
  provides("html", function() {
3
- var header = '<html><head><link rel="stylesheet" href="../../stylesheets/application.css" type="text/css" media="screen" charset="utf-8"></head><body><h1>Listing <%= pluralized_model_name.humanize %></h1><table><tr>';
4
- <% attributes.each do |attribute| %>
5
- header += '<th><%= attribute.humanize %></th>';
6
- <% end %>
3
+ var header = '<html><head><link rel="stylesheet" href="../../stylesheets/application.css" type="text/css" media="screen" charset="utf-8"></head><body><h1>Listing <%= pluralized_model_name.humanize %></h1>';
4
+
5
+ header += '<p><a href="../../_show/<%= model_name %>/">New <%= model_name.humanize %></a></p>';
6
+
7
+ header += '<table><tr>';
8
+ <% attributes.each do |attribute| -%>
9
+ header += '<th><%= attribute.humanize %></th>';
10
+ <% end -%>
11
+ header += '<th></th>';
7
12
  header += '</tr>';
8
13
  send(header);
9
14
 
10
15
  var row;
11
16
  while (row = getRow()) {
12
17
  var body = '<tr>';
13
- <% attributes.each do |attribute| %>
14
- body += '<td>' + row.value['<%= attribute %>'] + '</td>';
15
- <% end %>
18
+ <% attributes.each do |attribute| -%>
19
+ body += '<td>' + row.value['<%= attribute %>'] + '</td>';
20
+ <% end -%>
21
+ body += '<td><a href="../../_show/<%= model_name %>/' + row.id + '" alt="Show <%= model_name.humanize %>">Show</a></td>';
16
22
  body += '</tr>';
17
23
  send(body);
18
24
  }
@@ -3,19 +3,26 @@ require 'couch/generators/named_base'
3
3
  module Couch::Generators
4
4
  class ScaffoldGenerator < NamedBase
5
5
  def create_view_function
6
- Couch::Generators.invoke :view, name, :behavior => behavior
6
+ Couch::Generators.invoke :view, *invokation_options
7
7
  end
8
8
 
9
9
  def inject_validations
10
- Couch::Generators.invoke :validation, [name] + attributes, :behavior => behavior
10
+ Couch::Generators.invoke :validation, *invokation_options
11
11
  end
12
12
 
13
13
  def create_list_function
14
- Couch::Generators.invoke :list, [name] + attributes, :behavior => behavior
14
+ Couch::Generators.invoke :list, *invokation_options
15
15
  end
16
16
 
17
17
  def create_show_function
18
- Couch::Generators.invoke :show, [name] + attributes, :behavior => behavior
18
+ Couch::Generators.invoke :show, *invokation_options
19
+ end
20
+
21
+ protected
22
+
23
+ # TODO: add default options, like --help, --force etc
24
+ def invokation_options
25
+ [[name] + attributes, { :behavior => behavior }]
19
26
  end
20
27
  end
21
28
  end
@@ -3,17 +3,18 @@ function(doc, req) {
3
3
  var body = '';
4
4
  var tail = '</body></html>';
5
5
  if(doc) {
6
- <% attributes.each do |attribute| %>
6
+ body += '<p><a href="../../_list/<%= pluralized_model_name %>/<%= pluralized_model_name %>">List <%= pluralized_model_name.humanize %></a></p>';
7
+ <% attributes.each do |attribute| -%>
7
8
  if(doc['<%= attribute %>']) {
8
- body += '<p><strong><%= attribute.humanize %></strong>: ' + doc['<%= attribute %>'] + '</p>'
9
+ body += '<p><strong><%= attribute.humanize %></strong>: ' + doc['<%= attribute %>'] + '</p>';
9
10
  }
10
- <% end %>
11
+ <% end -%>
11
12
  return head + '<h1>Showing <%= model_name.humanize %></h1>' + body + tail;
12
13
  } else {
13
- <% attributes.each do |attribute| %>
14
- body += '<p><label><%= attribute.humanize %></label>: <input type="text" name="<%= model_name %>[<%= attribute %>]" id="<%= model_name %>_<%= attribute %>" /></p>'
15
- <% end %>
16
- body += '<p><input type="submit" /></p>'
14
+ <% attributes.each do |attribute| -%>
15
+ body += '<p><label><%= attribute.humanize %></label>: <input type="text" name="<%= model_name %>[<%= attribute %>]" id="<%= model_name %>_<%= attribute %>" /></p>';
16
+ <% end -%>
17
+ body += '<p><input type="submit" /> <a href="../../_list/<%= pluralized_model_name %>/<%= pluralized_model_name %>">Cancel</a></p>';
17
18
  return head + '<h1>New <%= model_name.humanize %></h1>' + body + tail;
18
19
  }
19
20
  }
@@ -0,0 +1,3 @@
1
+ function (newDoc, oldDoc, userCtx) {
2
+ // your validation code goes here
3
+ }
@@ -2,6 +2,11 @@ require 'couch/generators/named_base'
2
2
 
3
3
  module Couch::Generators
4
4
  class ValidationGenerator < NamedBase
5
+ def create_validate_doc_update
6
+ return if File.exists?(File.join(destination_root, "validate_doc_update.js"))
7
+ template "validate_doc_update.js"
8
+ end
9
+
5
10
  def inject_validations
6
11
  inject_into_file "validate_doc_update.js", model_validations, :after => "function (newDoc, oldDoc, userCtx) {\n"
7
12
  end
@@ -1,5 +1,5 @@
1
1
  function(doc) {
2
2
  if(doc.type && doc.type == '<%= model_name %>') {
3
- emit(doc._id, null);
3
+ emit(doc._id, <%= mydoc %>);
4
4
  }
5
5
  }
@@ -7,5 +7,11 @@ module Couch::Generators
7
7
  empty_directory path
8
8
  template "map.js", "#{path}/map.js"
9
9
  end
10
+
11
+ protected
12
+
13
+ def mydoc
14
+ "{ %s }" % attributes.map { |a| '"%s": doc["%s"]' % [a,a] }.join(", ")
15
+ end
10
16
  end
11
17
  end
@@ -1,3 +1,3 @@
1
1
  module Couch
2
- VERSION = "0.0.4"
2
+ VERSION = "0.1.0"
3
3
  end
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
+ - 1
7
8
  - 0
8
- - 4
9
- version: 0.0.4
9
+ version: 0.1.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Johannes J. Schmidt
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-03-08 00:00:00 +01:00
17
+ date: 2010-03-09 00:00:00 +01:00
18
18
  default_executable: couch
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -106,13 +106,16 @@ files:
106
106
  - couch.gemspec
107
107
  - lib/couch.rb
108
108
  - lib/couch/actions/base.rb
109
+ - lib/couch/actions/net_base.rb
109
110
  - lib/couch/actions/pull.rb
110
111
  - lib/couch/actions/push.rb
112
+ - lib/couch/actions/routes.rb
111
113
  - lib/couch/commands.rb
112
114
  - lib/couch/commands/destroy.rb
113
115
  - lib/couch/commands/generate.rb
114
116
  - lib/couch/commands/pull.rb
115
117
  - lib/couch/commands/push.rb
118
+ - lib/couch/commands/routes.rb
116
119
  - lib/couch/generators.rb
117
120
  - lib/couch/generators/application/USAGE
118
121
  - lib/couch/generators/application/application_generator.rb
@@ -134,6 +137,7 @@ files:
134
137
  - lib/couch/generators/show/show_generator.rb
135
138
  - lib/couch/generators/show/templates/show.js
136
139
  - lib/couch/generators/validation/USAGE
140
+ - lib/couch/generators/validation/templates/validate_doc_update.js
137
141
  - lib/couch/generators/validation/validation_generator.rb
138
142
  - lib/couch/generators/view/USAGE
139
143
  - lib/couch/generators/view/templates/map.js