sr-couchy 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. data/README.textile +77 -0
  2. data/Rakefile +46 -0
  3. data/bin/couchy +80 -0
  4. data/couchy.gemspec +58 -0
  5. data/lib/couchy.rb +21 -0
  6. data/lib/couchy/database.rb +129 -0
  7. data/lib/couchy/server.rb +89 -0
  8. data/spec/couchy_spec.rb +71 -0
  9. data/spec/database_spec.rb +417 -0
  10. data/spec/fixtures/attachments/test.html +11 -0
  11. data/spec/fixtures/views/lib.js +3 -0
  12. data/spec/fixtures/views/test_view/lib.js +3 -0
  13. data/spec/fixtures/views/test_view/only-map.js +4 -0
  14. data/spec/fixtures/views/test_view/test-map.js +3 -0
  15. data/spec/fixtures/views/test_view/test-reduce.js +3 -0
  16. data/spec/spec.opts +6 -0
  17. data/spec/spec_helper.rb +5 -0
  18. data/test/couchy_test.rb +13 -0
  19. data/test/database_test.rb +193 -0
  20. data/test/server_test.rb +211 -0
  21. data/test/test_helper.rb +10 -0
  22. data/vendor/addressable/.gitignore +7 -0
  23. data/vendor/addressable/CHANGELOG +51 -0
  24. data/vendor/addressable/LICENSE +20 -0
  25. data/vendor/addressable/README +24 -0
  26. data/vendor/addressable/Rakefile +51 -0
  27. data/vendor/addressable/lib/addressable/idna.rb +4867 -0
  28. data/vendor/addressable/lib/addressable/uri.rb +2212 -0
  29. data/vendor/addressable/lib/addressable/version.rb +35 -0
  30. data/vendor/addressable/spec/addressable/idna_spec.rb +196 -0
  31. data/vendor/addressable/spec/addressable/uri_spec.rb +3827 -0
  32. data/vendor/addressable/spec/data/rfc3986.txt +3419 -0
  33. data/vendor/addressable/tasks/clobber.rake +2 -0
  34. data/vendor/addressable/tasks/gem.rake +62 -0
  35. data/vendor/addressable/tasks/git.rake +40 -0
  36. data/vendor/addressable/tasks/metrics.rake +22 -0
  37. data/vendor/addressable/tasks/rdoc.rake +29 -0
  38. data/vendor/addressable/tasks/rubyforge.rake +89 -0
  39. data/vendor/addressable/tasks/spec.rake +107 -0
  40. data/vendor/addressable/website/index.html +107 -0
  41. metadata +113 -0
@@ -0,0 +1,2 @@
1
+ desc "Remove all build products"
2
+ task "clobber"
@@ -0,0 +1,62 @@
1
+ require "rake/gempackagetask"
2
+
3
+ namespace :gem do
4
+ GEM_SPEC = Gem::Specification.new do |s|
5
+ s.name = PKG_NAME
6
+ s.version = PKG_VERSION
7
+ s.summary = PKG_SUMMARY
8
+ s.description = PKG_DESCRIPTION
9
+
10
+ s.files = PKG_FILES.to_a
11
+
12
+ s.has_rdoc = true
13
+ s.extra_rdoc_files = %w( README )
14
+ s.rdoc_options.concat ["--main", "README"]
15
+
16
+ s.add_dependency("rake", ">= 0.7.3")
17
+ s.add_dependency("rspec", ">= 1.0.8")
18
+
19
+ s.require_path = "lib"
20
+
21
+ s.author = "Bob Aman"
22
+ s.email = "bob@sporkmonger.com"
23
+ s.homepage = RUBY_FORGE_URL
24
+ s.rubyforge_project = RUBY_FORGE_PROJECT
25
+ end
26
+
27
+ Rake::GemPackageTask.new(GEM_SPEC) do |p|
28
+ p.gem_spec = GEM_SPEC
29
+ p.need_tar = true
30
+ p.need_zip = true
31
+ end
32
+
33
+ desc "Show information about the gem"
34
+ task :debug do
35
+ puts GEM_SPEC.to_ruby
36
+ end
37
+
38
+ desc "Install the gem"
39
+ task :install => ["clobber", "gem:package"] do
40
+ sh "#{SUDO} gem install --local pkg/#{GEM_SPEC.full_name}"
41
+ end
42
+
43
+ desc "Uninstall the gem"
44
+ task :uninstall do
45
+ installed_list = Gem.source_index.find_name(PKG_NAME)
46
+ if installed_list &&
47
+ (installed_list.collect { |s| s.version.to_s}.include?(PKG_VERSION))
48
+ sh(
49
+ "#{SUDO} gem uninstall --version '#{PKG_VERSION}' " +
50
+ "--ignore-dependencies --executables #{PKG_NAME}"
51
+ )
52
+ end
53
+ end
54
+
55
+ desc "Reinstall the gem"
56
+ task :reinstall => [:uninstall, :install]
57
+ end
58
+
59
+ desc "Alias to gem:package"
60
+ task "gem" => "gem:package"
61
+
62
+ task "clobber" => ["gem:clobber_package"]
@@ -0,0 +1,40 @@
1
+ namespace :git do
2
+ namespace :tag do
3
+ desc "List tags from the Git repository"
4
+ task :list do
5
+ tags = `git tag -l`
6
+ tags.gsub!("\r", "")
7
+ tags = tags.split("\n").sort {|a, b| b <=> a }
8
+ puts tags.join("\n")
9
+ end
10
+
11
+ desc "Create a new tag in the Git repository"
12
+ task :create do
13
+ changelog = File.open("CHANGELOG", "r") { |file| file.read }
14
+ puts "-" * 80
15
+ puts changelog
16
+ puts "-" * 80
17
+ puts
18
+
19
+ v = ENV["VERSION"] or abort "Must supply VERSION=x.y.z"
20
+ abort "Versions don't match #{v} vs #{PKG_VERSION}" if v != PKG_VERSION
21
+
22
+ tag = "#{PKG_NAME}-#{PKG_VERSION}"
23
+ msg = "Release #{PKG_NAME}-#{PKG_VERSION}"
24
+
25
+ existing_tags = `git tag -l instrument-*`.split("\n")
26
+ if existing_tags.include?(tag)
27
+ warn("Tag already exists, deleting...")
28
+ unless system "git tag -d #{tag}"
29
+ abort "Tag deletion failed."
30
+ end
31
+ end
32
+ puts "Creating git tag '#{tag}'..."
33
+ unless system "git tag -a -m \"#{msg}\" #{tag}"
34
+ abort "Tag creation failed."
35
+ end
36
+ end
37
+ end
38
+ end
39
+
40
+ task "gem:release" => "git:tag:create"
@@ -0,0 +1,22 @@
1
+ namespace :metrics do
2
+ task :lines do
3
+ lines, codelines, total_lines, total_codelines = 0, 0, 0, 0
4
+ for file_name in FileList["lib/**/*.rb"]
5
+ f = File.open(file_name)
6
+ while line = f.gets
7
+ lines += 1
8
+ next if line =~ /^\s*$/
9
+ next if line =~ /^\s*#/
10
+ codelines += 1
11
+ end
12
+ puts "L: #{sprintf("%4d", lines)}, " +
13
+ "LOC #{sprintf("%4d", codelines)} | #{file_name}"
14
+ total_lines += lines
15
+ total_codelines += codelines
16
+
17
+ lines, codelines = 0, 0
18
+ end
19
+
20
+ puts "Total: Lines #{total_lines}, LOC #{total_codelines}"
21
+ end
22
+ end
@@ -0,0 +1,29 @@
1
+ require "rake/rdoctask"
2
+
3
+ namespace :doc do
4
+ desc "Generate RDoc documentation"
5
+ Rake::RDocTask.new do |rdoc|
6
+ rdoc.rdoc_dir = "doc"
7
+ rdoc.title = "#{PKG_NAME}-#{PKG_VERSION} Documentation"
8
+ rdoc.options << "--line-numbers" << "--inline-source" <<
9
+ "--accessor" << "cattr_accessor=object" << "--charset" << "utf-8"
10
+ rdoc.template = "#{ENV["template"]}.rb" if ENV["template"]
11
+ rdoc.rdoc_files.include("README", "CHANGELOG", "LICENSE")
12
+ rdoc.rdoc_files.include("lib/**/*.rb")
13
+ end
14
+
15
+ desc "Generate ri locally for testing"
16
+ task :ri do
17
+ sh "rdoc --ri -o ri ."
18
+ end
19
+
20
+ desc "Remove ri products"
21
+ task :clobber_ri do
22
+ rm_r "ri" rescue nil
23
+ end
24
+ end
25
+
26
+ desc "Alias to doc:rdoc"
27
+ task "doc" => "doc:rdoc"
28
+
29
+ task "clobber" => ["doc:clobber_rdoc", "doc:clobber_ri"]
@@ -0,0 +1,89 @@
1
+ namespace :gem do
2
+ desc 'Package and upload to RubyForge'
3
+ task :release => ["gem:package"] do |t|
4
+ require 'rubyforge'
5
+
6
+ v = ENV['VERSION'] or abort 'Must supply VERSION=x.y.z'
7
+ abort "Versions don't match #{v} vs #{PROJ.version}" if v != PKG_VERSION
8
+ pkg = "pkg/#{GEM_SPEC.full_name}"
9
+
10
+ rf = RubyForge.new
11
+ rf.configure
12
+ puts 'Logging in...'
13
+ rf.login
14
+
15
+ c = rf.userconfig
16
+ changelog = File.open("CHANGELOG") { |file| file.read }
17
+ c['release_changes'] = changelog
18
+ c['preformatted'] = true
19
+
20
+ files = ["#{pkg}.tgz", "#{pkg}.zip", "#{pkg}.gem"]
21
+
22
+ puts "Releasing #{PKG_NAME} v. #{PKG_VERSION}"
23
+ rf.add_release RUBY_FORGE_PROJECT, PKG_NAME, PKG_VERSION, *files
24
+ end
25
+ end
26
+
27
+ namespace :doc do
28
+ desc "Publish RDoc to RubyForge"
29
+ task :release => ["doc:rdoc"] do
30
+ require "rake/contrib/sshpublisher"
31
+ require "yaml"
32
+
33
+ config = YAML.load(
34
+ File.read(File.expand_path('~/.rubyforge/user-config.yml'))
35
+ )
36
+ host = "#{config['username']}@rubyforge.org"
37
+ remote_dir = RUBY_FORGE_PATH + "/api"
38
+ local_dir = "doc"
39
+ Rake::SshDirPublisher.new(host, remote_dir, local_dir).upload
40
+ end
41
+ end
42
+
43
+ namespace :spec do
44
+ desc "Publish specdoc to RubyForge"
45
+ task :release => ["spec:specdoc"] do
46
+ require "rake/contrib/sshpublisher"
47
+ require "yaml"
48
+
49
+ config = YAML.load(
50
+ File.read(File.expand_path('~/.rubyforge/user-config.yml'))
51
+ )
52
+ host = "#{config['username']}@rubyforge.org"
53
+ remote_dir = RUBY_FORGE_PATH + "/specdoc"
54
+ local_dir = "specdoc"
55
+ Rake::SshDirPublisher.new(host, remote_dir, local_dir).upload
56
+ end
57
+
58
+ namespace :rcov do
59
+ desc "Publish coverage report to RubyForge"
60
+ task :release => ["spec:rcov"] do
61
+ require "rake/contrib/sshpublisher"
62
+ require "yaml"
63
+
64
+ config = YAML.load(
65
+ File.read(File.expand_path('~/.rubyforge/user-config.yml'))
66
+ )
67
+ host = "#{config['username']}@rubyforge.org"
68
+ remote_dir = RUBY_FORGE_PATH + "/coverage"
69
+ local_dir = "coverage"
70
+ Rake::SshDirPublisher.new(host, remote_dir, local_dir).upload
71
+ end
72
+ end
73
+ end
74
+
75
+ namespace :website do
76
+ desc "Publish website to RubyForge"
77
+ task :release => ["doc:release", "spec:release", "spec:rcov:release"] do
78
+ require "rake/contrib/sshpublisher"
79
+ require "yaml"
80
+
81
+ config = YAML.load(
82
+ File.read(File.expand_path('~/.rubyforge/user-config.yml'))
83
+ )
84
+ host = "#{config['username']}@rubyforge.org"
85
+ remote_dir = RUBY_FORGE_PATH
86
+ local_dir = "website"
87
+ Rake::SshDirPublisher.new(host, remote_dir, local_dir).upload
88
+ end
89
+ end
@@ -0,0 +1,107 @@
1
+ require 'spec/rake/verify_rcov'
2
+
3
+ namespace :spec do
4
+ Spec::Rake::SpecTask.new(:rcov) do |t|
5
+ t.spec_files = FileList['spec/**/*_spec.rb']
6
+ t.spec_opts = ['--color', '--format', 'specdoc']
7
+ if RCOV_ENABLED
8
+ t.rcov = true
9
+ else
10
+ t.rcov = false
11
+ end
12
+ t.rcov_opts = [
13
+ '--exclude', 'spec',
14
+ '--exclude', '1\\.8\\/gems',
15
+ '--exclude', '1\\.9\\/gems',
16
+ '--exclude', 'addressable\\/idna\\.rb', # unicode tables too big
17
+ ]
18
+ end
19
+
20
+ Spec::Rake::SpecTask.new(:normal) do |t|
21
+ t.spec_files = FileList['spec/**/*_spec.rb']
22
+ t.spec_opts = ['--color', '--format', 'specdoc']
23
+ t.rcov = false
24
+ end
25
+
26
+ if RCOV_ENABLED
27
+ RCov::VerifyTask.new(:verify) do |t|
28
+ t.threshold = 100.0
29
+ t.index_html = 'coverage/index.html'
30
+ end
31
+
32
+ task :verify => :rcov
33
+ end
34
+
35
+ desc "Generate HTML Specdocs for all specs"
36
+ Spec::Rake::SpecTask.new(:specdoc) do |t|
37
+ specdoc_path = File.expand_path(
38
+ File.join(File.dirname(__FILE__), '../specdoc/'))
39
+ Dir.mkdir(specdoc_path) if !File.exist?(specdoc_path)
40
+
41
+ output_file = File.join(specdoc_path, 'index.html')
42
+ t.spec_files = FileList['spec/**/*_spec.rb']
43
+ t.spec_opts = ["--format", "\"html:#{output_file}\"", "--diff"]
44
+ t.fail_on_error = false
45
+ end
46
+
47
+ namespace :rcov do
48
+ desc "Browse the code coverage report."
49
+ task :browse => "spec:rcov" do
50
+ Rake.browse("coverage/index.html")
51
+ end
52
+ end
53
+ end
54
+
55
+ if RCOV_ENABLED
56
+ desc "Alias to spec:verify"
57
+ task "spec" => "spec:verify"
58
+ else
59
+ desc "Alias to spec:normal"
60
+ task "spec" => "spec:normal"
61
+ end
62
+
63
+ task "clobber" => ["spec:clobber_rcov"]
64
+
65
+ module Rake
66
+ def self.browse(filepath)
67
+ if RUBY_PLATFORM =~ /mswin/
68
+ system(filepath)
69
+ else
70
+ try_browsers = lambda do
71
+ result = true
72
+ if !(`which firefox 2>&1` =~ /no firefox/)
73
+ system("firefox #{filepath}")
74
+ elsif !(`which mozilla 2>&1` =~ /no mozilla/)
75
+ system("mozilla #{filepath}")
76
+ elsif !(`which netscape 2>&1` =~ /no netscape/)
77
+ system("netscape #{filepath}")
78
+ elsif !(`which links 2>&1` =~ /no links/)
79
+ system("links #{filepath}")
80
+ elsif !(`which lynx 2>&1` =~ /no lynx/)
81
+ system("lynx #{filepath}")
82
+ else
83
+ result = false
84
+ end
85
+ result
86
+ end
87
+ opened = false
88
+ if RUBY_PLATFORM =~ /darwin/
89
+ opened = true
90
+ system("open #{filepath}")
91
+ elsif !(`which gnome-open 2>&1` =~ /no gnome-open/)
92
+ success =
93
+ !(`gnome-open #{filepath} 2>&1` =~ /There is no default action/)
94
+ if !success
95
+ opened = try_browsers.call()
96
+ else
97
+ opened = true
98
+ end
99
+ else
100
+ opened = try_browsers.call()
101
+ end
102
+ if !opened
103
+ puts "Don't know how to browse to location."
104
+ end
105
+ end
106
+ end
107
+ end
@@ -0,0 +1,107 @@
1
+ <!DOCTYPE html>
2
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
3
+ <head>
4
+ <meta charset="utf-8"/>
5
+ <title>Addressable</title>
6
+ <style type="text/css">
7
+ * {
8
+ font-size: 100%;
9
+ margin: 0;
10
+ padding: 0;
11
+ }
12
+
13
+ body {
14
+ font-family: lucida grande, verdana, sans-serif;
15
+ margin: 1em;
16
+ }
17
+
18
+ a {
19
+ color: #880000;
20
+ }
21
+
22
+ a:visited {
23
+ color: #333333;
24
+ }
25
+
26
+ h1 {
27
+ font-size: 2em;
28
+ margin: 0 0 0.8em 0;
29
+ text-align: center;
30
+ }
31
+
32
+ h2 {
33
+ font-size: 1em;
34
+ margin: 0.8em 0;
35
+ }
36
+
37
+ p {
38
+ margin: 0.8em 0;
39
+ }
40
+
41
+ ul {
42
+ font-size: 0.9em;
43
+ margin: 0 0 0 1.5em;
44
+ }
45
+
46
+ div {
47
+ width: 50%;
48
+ margin: 0 auto;
49
+ padding: 0.8em;
50
+ background-color: #AA5852;
51
+ border: 2px solid #C2645D;
52
+ }
53
+
54
+ @media print {
55
+ body {
56
+ font-size: 0.9em;
57
+ }
58
+
59
+ a {
60
+ text-decoration: none;
61
+ color: #000;
62
+ }
63
+ }
64
+ </style>
65
+ </head>
66
+ <body>
67
+ <h1>Addressable</h1>
68
+ <div>
69
+ <p>
70
+ Addressable is a replacement for the URI implementation that is part
71
+ of Ruby's standard library. It more closely conforms to the relevant
72
+ RFCs and adds support for IRIs and URI templates.
73
+ </p>
74
+ <ul>
75
+ <li>
76
+ <a href="http://rubyforge.org/projects/addressable/">
77
+ Project Page
78
+ </a>
79
+ </li>
80
+ <li>
81
+ <a href="http://github.com/sporkmonger/addressable/tree/">
82
+ GitHub Page
83
+ </a>
84
+ </li>
85
+ <li><a href="/api/">API</a></li>
86
+ <li><a href="/specdoc/">Specifications</a></li>
87
+ <li><a href="/coverage/">Code Coverage</a></li>
88
+ </ul>
89
+ <p>
90
+ You know what to do:
91
+ </p>
92
+ <p>
93
+ <code>sudo gem install addressable</code>
94
+ </p>
95
+ <p>
96
+ Alternatively, you can:
97
+ </p>
98
+ <p>
99
+ <code>
100
+ git submodule add
101
+ git://github.com/sporkmonger/addressable.git
102
+ vendor/gems/addressable
103
+ </code>
104
+ </p>
105
+ </div>
106
+ </body>
107
+ </html>