rid 0.5.2 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/LICENSE +1 -1
- data/README +14 -0
- data/Rakefile +18 -33
- data/VERSION +1 -0
- data/bin/rid +3 -6
- data/lib/rid/app.rb +49 -0
- data/lib/rid/attachments.rb +6 -2
- data/lib/rid/commands.rb +61 -39
- data/lib/rid/core_ext/hash.rb +1 -1
- data/lib/rid/database.rb +69 -0
- data/lib/rid/document.rb +99 -0
- data/lib/rid.rb +14 -41
- data/rid.gemspec +49 -78
- data/spec/mock_app/_database +1 -0
- data/spec/rid/app_spec.rb +59 -0
- data/spec/rid/attachments_spec.rb +2 -2
- data/spec/rid/commands_spec.rb +14 -0
- data/spec/rid/database_spec.rb +25 -0
- data/spec/rid/document_spec.rb +36 -0
- data/spec/spec_helper.rb +6 -0
- metadata +127 -86
- data/.gitmodules +0 -3
- data/README.rdoc +0 -92
- data/lib/rid/actions/base.rb +0 -15
- data/lib/rid/actions/pull.rb +0 -28
- data/lib/rid/actions/push.rb +0 -53
- data/lib/rid/actions/routes.rb +0 -44
- data/lib/rid/commands/destroy.rb +0 -9
- data/lib/rid/commands/generate.rb +0 -9
- data/lib/rid/commands/pull.rb +0 -4
- data/lib/rid/commands/push.rb +0 -4
- data/lib/rid/commands/routes.rb +0 -4
- data/lib/rid/design_document.rb +0 -149
- data/lib/rid/generators/application/USAGE +0 -10
- data/lib/rid/generators/application/application_generator.rb +0 -56
- data/lib/rid/generators/application/templates/README +0 -1
- data/lib/rid/generators/application/templates/_attachments/index.html +0 -11
- data/lib/rid/generators/application/templates/_attachments/stylesheets/application.css +0 -25
- data/lib/rid/generators/application/templates/_id +0 -1
- data/lib/rid/generators/application/templates/gitignore +0 -0
- data/lib/rid/generators/application/templates/lib/mustache.js +0 -305
- data/lib/rid/generators/application/templates/lib/path.js +0 -5
- data/lib/rid/generators/application/templates/lib/templates/layout.mustache +0 -14
- data/lib/rid/generators/application/templates/ridrc +0 -1
- data/lib/rid/generators/application/templates/validate_doc_update.js +0 -3
- data/lib/rid/generators/base.rb +0 -66
- data/lib/rid/generators/list/USAGE +0 -8
- data/lib/rid/generators/list/list_generator.rb +0 -10
- data/lib/rid/generators/list/templates/index.mustache +0 -23
- data/lib/rid/generators/list/templates/list.js +0 -34
- data/lib/rid/generators/named_base.rb +0 -22
- data/lib/rid/generators/scaffold/USAGE +0 -10
- data/lib/rid/generators/scaffold/scaffold_generator.rb +0 -32
- data/lib/rid/generators/show/USAGE +0 -8
- data/lib/rid/generators/show/show_generator.rb +0 -13
- data/lib/rid/generators/show/templates/delete.mustache +0 -20
- data/lib/rid/generators/show/templates/deleted.mustache +0 -3
- data/lib/rid/generators/show/templates/form.mustache +0 -22
- data/lib/rid/generators/show/templates/show.js +0 -48
- data/lib/rid/generators/show/templates/show.mustache +0 -13
- data/lib/rid/generators/update/USAGE +0 -8
- data/lib/rid/generators/update/templates/update.js +0 -48
- data/lib/rid/generators/update/update_generator.rb +0 -9
- data/lib/rid/generators/validation/USAGE +0 -9
- data/lib/rid/generators/validation/templates/validate_doc_update.js +0 -3
- data/lib/rid/generators/validation/validation_generator.rb +0 -34
- data/lib/rid/generators/view/USAGE +0 -8
- data/lib/rid/generators/view/templates/map.js +0 -5
- data/lib/rid/generators/view/view_generator.rb +0 -17
- data/lib/rid/generators.rb +0 -63
- data/lib/rid/makros.rb +0 -114
- data/lib/rid/version.rb +0 -3
- data/spec/rid/design_document_spec.rb +0 -220
- data/spec/rid/makros_spec.rb +0 -94
- data/spec/rid_spec.rb +0 -7
@@ -1,13 +0,0 @@
|
|
1
|
-
<p>
|
2
|
-
<a href="{{path}}/_list/<%= pluralized_model_name %>/<%= pluralized_model_name %>">List <%= pluralized_model_name.humanize %></a> |
|
3
|
-
<a href="{{path}}/_show/<%= model_name %>/{{id}}?edit">Edit <%= model_name.humanize %></a> |
|
4
|
-
<a href="{{path}}/_show/<%= model_name %>/{{id}}?delete">Delete <%= model_name.humanize %></a>
|
5
|
-
</p>
|
6
|
-
<dl>
|
7
|
-
<dt>ID</dt>
|
8
|
-
<dd>{{id}}</dd>
|
9
|
-
<% attributes.each do |attribute| -%>
|
10
|
-
<dt><%= attribute.humanize %></dt>
|
11
|
-
<dd>{{<%= attribute %>}}</dd>
|
12
|
-
<% end -%>
|
13
|
-
</dl>
|
@@ -1,48 +0,0 @@
|
|
1
|
-
function(doc, req) {
|
2
|
-
// !code path.js
|
3
|
-
// !code mustache.js
|
4
|
-
// !json templates/layout.mustache
|
5
|
-
// !json templates/<%= pluralized_model_name %>/show.mustache
|
6
|
-
// !json templates/<%= pluralized_model_name %>/deleted.mustache
|
7
|
-
|
8
|
-
var doc = {
|
9
|
-
type: '<%= model_name %>',
|
10
|
-
<% attributes.each do |attribute| -%>
|
11
|
-
'<%= attribute %>': req.form['<%= attribute %>'],
|
12
|
-
<% end -%>
|
13
|
-
_id: req.form.id,
|
14
|
-
_rev: req.form.rev
|
15
|
-
};
|
16
|
-
|
17
|
-
if (req.form['delete'] == 'true') {
|
18
|
-
doc._deleted = true;
|
19
|
-
};
|
20
|
-
|
21
|
-
var view = {
|
22
|
-
path: path(),
|
23
|
-
body: {
|
24
|
-
path: path(),
|
25
|
-
<% attributes.each do |attribute| -%>
|
26
|
-
'<%= attribute %>': doc['<%= attribute %>'],
|
27
|
-
<% end -%>
|
28
|
-
id: doc._id
|
29
|
-
}
|
30
|
-
};
|
31
|
-
var partial;
|
32
|
-
|
33
|
-
if (doc._deleted) {
|
34
|
-
view.title = "Deleted <%= model_name.humanize %>";
|
35
|
-
view.notice = "<%= model_name.humanize %> has been deleted.";
|
36
|
-
partial = 'deleted';
|
37
|
-
} else {
|
38
|
-
view.title = "Showing <%= model_name.humanize %>";
|
39
|
-
if (doc._rev) {
|
40
|
-
view.notice = "<%= model_name.humanize %> has been updated.";
|
41
|
-
} else {
|
42
|
-
view.notice = "<%= model_name.humanize %> has been created.";
|
43
|
-
};
|
44
|
-
partial = 'show';
|
45
|
-
}
|
46
|
-
|
47
|
-
return [doc, Mustache.to_html(templates.layout, view, { body: templates.<%= pluralized_model_name %>[partial] })];
|
48
|
-
}
|
@@ -1,9 +0,0 @@
|
|
1
|
-
Description:
|
2
|
-
The 'validation' generator creates a validation function
|
3
|
-
for the model name and attributes you specify
|
4
|
-
|
5
|
-
Example:
|
6
|
-
rid generate validation post title body
|
7
|
-
|
8
|
-
This generates a skeletal model validation for post
|
9
|
-
with validations of presence for title and body
|
@@ -1,34 +0,0 @@
|
|
1
|
-
require 'rid/generators/named_base'
|
2
|
-
|
3
|
-
module Rid::Generators
|
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
|
-
|
10
|
-
def inject_validations
|
11
|
-
inject_into_file "validate_doc_update.js", model_validations, :after => "function (newDoc, oldDoc, userCtx) {\n"
|
12
|
-
end
|
13
|
-
|
14
|
-
protected
|
15
|
-
|
16
|
-
def model_validations
|
17
|
-
str = <<-STR
|
18
|
-
if(newDoc.type == '#{model_name}') {
|
19
|
-
// validations for #{model_name}
|
20
|
-
STR
|
21
|
-
|
22
|
-
attributes.each do |attribute|
|
23
|
-
str << <<-STR
|
24
|
-
if (typeof(newDoc['#{attribute}']) === 'undefined') {
|
25
|
-
throw({ forbidden: '#{attribute} is required' });
|
26
|
-
}
|
27
|
-
STR
|
28
|
-
end
|
29
|
-
|
30
|
-
str << " }\n"
|
31
|
-
str
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
require 'rid/generators/named_base'
|
2
|
-
|
3
|
-
module Rid::Generators
|
4
|
-
class ViewGenerator < NamedBase
|
5
|
-
def create_view_function
|
6
|
-
path = "views/#{pluralized_model_name}"
|
7
|
-
empty_directory path
|
8
|
-
template "map.js", "#{path}/map.js"
|
9
|
-
end
|
10
|
-
|
11
|
-
protected
|
12
|
-
|
13
|
-
def mydoc
|
14
|
-
"{ %s }" % attributes.map { |a| '"%s": doc["%s"]' % [a,a] }.join(", ")
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
data/lib/rid/generators.rb
DELETED
@@ -1,63 +0,0 @@
|
|
1
|
-
require 'rid'
|
2
|
-
require 'rid/generators/base'
|
3
|
-
|
4
|
-
module Rid
|
5
|
-
module Generators
|
6
|
-
# Receives a name, arguments and the behavior to invoke the generator.
|
7
|
-
# It's used as the default entry point for generate and destroy commands.
|
8
|
-
def self.invoke(name, args = ARGV, config = {})
|
9
|
-
if klass = lookup(name.to_s)
|
10
|
-
args << "--help" if args.empty? && klass.arguments.any? { |a| a.required? }
|
11
|
-
klass.start(args, config)
|
12
|
-
else
|
13
|
-
puts "Could not find generator #{name}."
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
# Show help message with available generators.
|
18
|
-
def self.help(command = 'generate')
|
19
|
-
path = File.expand_path("../generators/*/*_generator.rb", __FILE__)
|
20
|
-
generators = Dir.glob(path)
|
21
|
-
generators.sort!
|
22
|
-
generators.map! { |f| File.basename(f) }
|
23
|
-
generators.map! { |n| n.sub!(/_generator\.rb$/, '') }
|
24
|
-
longest_name_size = generators.map { |g| g.size }.sort.last
|
25
|
-
generators.map! { |g| "%s # %s" % [g.ljust(longest_name_size), lookup(g).info] }
|
26
|
-
|
27
|
-
puts "Usage: rid #{command} GENERATOR [args] [options]"
|
28
|
-
puts
|
29
|
-
puts "General options:"
|
30
|
-
puts " -h, [--help] # Print generators options and usage"
|
31
|
-
puts " -p, [--pretend] # Run but do not make any changes"
|
32
|
-
puts " -f, [--force] # Overwrite files that already exist"
|
33
|
-
puts " -s, [--skip] # Skip files that already exist"
|
34
|
-
puts " -q, [--quiet] # Supress status output"
|
35
|
-
puts
|
36
|
-
puts "Please choose a generator below:"
|
37
|
-
puts
|
38
|
-
puts generators
|
39
|
-
end
|
40
|
-
|
41
|
-
protected
|
42
|
-
|
43
|
-
def self.lookup(name)
|
44
|
-
# real path
|
45
|
-
path = File.expand_path("../generators/#{name}/#{name}_generator.rb", __FILE__)
|
46
|
-
# no matches?
|
47
|
-
unless File.exists?(path)
|
48
|
-
# try to find by prefix
|
49
|
-
found = Dir.glob(File.expand_path("../generators/#{name}*/#{name}*_generator.rb", __FILE__))
|
50
|
-
if found.size == 1
|
51
|
-
path = found.first
|
52
|
-
name = File.basename(path).sub(/_generator\.rb$/, '')
|
53
|
-
end
|
54
|
-
end
|
55
|
-
require path
|
56
|
-
const_get "#{name.classify}Generator"
|
57
|
-
rescue LoadError => e
|
58
|
-
raise unless e.message =~ /#{Regexp.escape(path)}$/
|
59
|
-
rescue Exception => e
|
60
|
-
warn "[WARNING] Could not load generator #{path.inspect}. Error: #{e.message}.\n#{e.backtrace.join("\n")}"
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
data/lib/rid/makros.rb
DELETED
@@ -1,114 +0,0 @@
|
|
1
|
-
module Rid
|
2
|
-
module Makros
|
3
|
-
# inject makros, that is:
|
4
|
-
# replace makro with content from libs
|
5
|
-
#
|
6
|
-
def inject_makros!
|
7
|
-
inject_makro! "code" do |filename|
|
8
|
-
value = libs.at(filename)
|
9
|
-
raise "code makro injection failed!\nNo lib available for %s" % filename unless value
|
10
|
-
|
11
|
-
value
|
12
|
-
end
|
13
|
-
|
14
|
-
inject_makro! "json" do |filename|
|
15
|
-
value = libs.at(filename)
|
16
|
-
raise "json makro injection failed!\nNo lib available for %s" % filename unless value
|
17
|
-
|
18
|
-
expand_json_makro filename, value
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
# reject makros, that is:
|
23
|
-
# replace makro generated content with makro
|
24
|
-
#
|
25
|
-
def reject_makros!
|
26
|
-
return if injections.empty?
|
27
|
-
|
28
|
-
injections.reverse.each do |inj|
|
29
|
-
makro, target, lib, start, size = inj["makro"], inj["target"], inj["lib"], inj["start"], inj["size"]
|
30
|
-
|
31
|
-
value = hash.at(target)
|
32
|
-
value[start, size] = "// !#{makro} #{lib}"
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
|
37
|
-
private
|
38
|
-
|
39
|
-
# provide access to lib hash
|
40
|
-
#
|
41
|
-
def libs
|
42
|
-
hash["lib"] || {}
|
43
|
-
end
|
44
|
-
|
45
|
-
# provide access to injections array
|
46
|
-
#
|
47
|
-
def injections
|
48
|
-
hash["injections"] || []
|
49
|
-
end
|
50
|
-
|
51
|
-
|
52
|
-
# builds a javascript variable assignment line for filename with value
|
53
|
-
# 'var %s = %s;' % [filename.split(/[\.\/]/).join('_'), value.to_json]
|
54
|
-
def expand_json_makro(filename, value)
|
55
|
-
name = filename.sub(/\..*$/, '')
|
56
|
-
parts = name.split('/')
|
57
|
-
|
58
|
-
if parts.size > 1
|
59
|
-
var = "var #{parts.first};"
|
60
|
-
0.upto(parts.size - 2) do |i|
|
61
|
-
v = parts[0..i].join('.')
|
62
|
-
var << " if (!#{v}) #{v} = {};"
|
63
|
-
end
|
64
|
-
var << "\n"
|
65
|
-
var << "#{parts.join('.')} = %s;"
|
66
|
-
else
|
67
|
-
var = "var #{name} = %s;"
|
68
|
-
end
|
69
|
-
|
70
|
-
var % value.to_json
|
71
|
-
end
|
72
|
-
|
73
|
-
# injects a makro and yields block with the filenames for found makros
|
74
|
-
#
|
75
|
-
def inject_makro!(makro, &block)
|
76
|
-
matcher = /\/\/\s*!#{makro}\s+[\S]+$/
|
77
|
-
|
78
|
-
hash.flatten.each do |key, value|
|
79
|
-
next unless value.is_a?(String)
|
80
|
-
|
81
|
-
# do not try to inject makros in attachments, libs and injections array
|
82
|
-
next if key =~ /^_attachments|libs|injections/
|
83
|
-
|
84
|
-
while value =~ matcher do
|
85
|
-
value = value.sub(matcher) do |match|
|
86
|
-
start = Regexp.last_match.begin(0)
|
87
|
-
filename = match.sub(/^.*!#{makro}\s*(\S+).*$/, '\1')
|
88
|
-
|
89
|
-
value = block.call(filename)
|
90
|
-
|
91
|
-
store_injection makro, key, filename, start, value.size
|
92
|
-
|
93
|
-
value
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
self.hash.update_at key, value
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
# Store injection values in injections array
|
102
|
-
#
|
103
|
-
def store_injection(makro, target, lib, start, size)
|
104
|
-
hash["injections"] ||= []
|
105
|
-
hash["injections"] << {
|
106
|
-
"makro" => makro,
|
107
|
-
"target" => target,
|
108
|
-
"lib" => lib,
|
109
|
-
"start" => start,
|
110
|
-
"size" => size
|
111
|
-
}
|
112
|
-
end
|
113
|
-
end
|
114
|
-
end
|
data/lib/rid/version.rb
DELETED
@@ -1,220 +0,0 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
-
require 'rid/design_document'
|
3
|
-
|
4
|
-
describe "DesignDocument" do
|
5
|
-
before do
|
6
|
-
@doc = Rid::DesignDocument.new
|
7
|
-
end
|
8
|
-
|
9
|
-
|
10
|
-
describe "read" do
|
11
|
-
it "should assign key-value pair" do
|
12
|
-
@doc.read("key") do |filename|
|
13
|
-
"value"
|
14
|
-
end
|
15
|
-
@doc.hash.should == { "key" => "value" }
|
16
|
-
end
|
17
|
-
|
18
|
-
it "should assign two key-value pairs" do
|
19
|
-
@doc.read("key1", "key2") do |filename|
|
20
|
-
"value"
|
21
|
-
end
|
22
|
-
@doc.hash.should == { "key1" => "value", "key2" => "value" }
|
23
|
-
end
|
24
|
-
|
25
|
-
it "should assign an array of two key-value pairs" do
|
26
|
-
@doc.read(["key1", "key2"]) do |filename|
|
27
|
-
"value"
|
28
|
-
end
|
29
|
-
@doc.hash.should == { "key1" => "value", "key2" => "value" }
|
30
|
-
end
|
31
|
-
|
32
|
-
it "should assign nested hash" do
|
33
|
-
@doc.read("hash/key") do |filename|
|
34
|
-
"value"
|
35
|
-
end
|
36
|
-
@doc.hash.should == { "hash" => { "key" => "value" } }
|
37
|
-
end
|
38
|
-
|
39
|
-
it "should assign deep nested hash" do
|
40
|
-
@doc.read("hash/hash/key") do |filename|
|
41
|
-
"value"
|
42
|
-
end
|
43
|
-
@doc.hash.should == { "hash" => { "hash" => { "key" => "value" } } }
|
44
|
-
end
|
45
|
-
|
46
|
-
|
47
|
-
describe "exclude files should not be mapped" do
|
48
|
-
it "should not map README" do
|
49
|
-
@doc.read("README") do |filename|
|
50
|
-
"value"
|
51
|
-
end
|
52
|
-
@doc.hash.should == {}
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
describe "javascript files should be stripped off extension" do
|
57
|
-
it "should strip validate_doc_update extension" do
|
58
|
-
@doc.read("validate_doc_update.js") do |filename|
|
59
|
-
"value"
|
60
|
-
end
|
61
|
-
@doc.hash.should == { "validate_doc_update" => "value" }
|
62
|
-
end
|
63
|
-
|
64
|
-
it "should strip lists/my_list.js" do
|
65
|
-
@doc.read("lists/my_list.js") do |filename|
|
66
|
-
"value"
|
67
|
-
end
|
68
|
-
@doc.hash.should == { "lists" => { "my_list" => "value" } }
|
69
|
-
end
|
70
|
-
|
71
|
-
it "should strip views/my_view/map.js" do
|
72
|
-
@doc.read("views/my_view/map.js") do |filename|
|
73
|
-
"value"
|
74
|
-
end
|
75
|
-
@doc.hash.should == { "views" => { "my_view" => { "map" => "value" } } }
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
|
81
|
-
describe "write" do
|
82
|
-
it "should return key-value pair" do
|
83
|
-
@doc.hash = { "key" => "value" }
|
84
|
-
@doc.write do |key, value|
|
85
|
-
key.should == "key"
|
86
|
-
value.should == "value"
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
it "should return subdirectory for nested hash" do
|
91
|
-
@doc.hash = { "hash" => { "key" => "value" } }
|
92
|
-
@doc.write do |key, value|
|
93
|
-
key.should == "hash/key"
|
94
|
-
value.should == "value"
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
it "should return subdirectory for nested hash" do
|
99
|
-
@doc.hash = { "hash" => { "hash" => { "key" => "value" } } }
|
100
|
-
@doc.write do |key, value|
|
101
|
-
key.should == "hash/hash/key"
|
102
|
-
value.should == "value"
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
|
-
describe "javascript extensions" do
|
107
|
-
it "should append validate_doc_update" do
|
108
|
-
@doc.hash = { "validate_doc_update" => "value" }
|
109
|
-
@doc.write do |key, value|
|
110
|
-
key.should == "validate_doc_update.js"
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
114
|
-
it "should append lists/my_list" do
|
115
|
-
@doc.hash = { "lists" => { "my_list" => "value" } }
|
116
|
-
@doc.write do |key, value|
|
117
|
-
key.should == "lists/my_list.js"
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
|
-
it "should append views/my_view/map" do
|
122
|
-
@doc.hash = { "views" => { "my_view" => { "map" => "value" } } }
|
123
|
-
@doc.write do |key, value|
|
124
|
-
key.should == "views/my_view/map.js"
|
125
|
-
end
|
126
|
-
end
|
127
|
-
end
|
128
|
-
end
|
129
|
-
|
130
|
-
|
131
|
-
describe "json" do
|
132
|
-
it "should convert key-value pair" do
|
133
|
-
@doc.hash = { "key" => "value" }
|
134
|
-
@doc.json.should == '{"key":"value"}'
|
135
|
-
end
|
136
|
-
|
137
|
-
it "should convert nested hash" do
|
138
|
-
@doc.hash = { "hash" => { "key" => "value" } }
|
139
|
-
@doc.json.should == '{"hash":{"key":"value"}}'
|
140
|
-
end
|
141
|
-
end
|
142
|
-
|
143
|
-
describe "json=" do
|
144
|
-
it "should read key-value pair" do
|
145
|
-
@doc.json = '{"key":"value"}'
|
146
|
-
@doc.hash.should == { "key" => "value" }
|
147
|
-
end
|
148
|
-
|
149
|
-
it "should read nested hash" do
|
150
|
-
@doc.json = '{"hash":{"key":"value"}}'
|
151
|
-
@doc.hash.should == { "hash" => { "key" => "value" } }
|
152
|
-
end
|
153
|
-
end
|
154
|
-
|
155
|
-
|
156
|
-
describe "id accessor" do
|
157
|
-
it "should return id from hash" do
|
158
|
-
@doc.hash = { "_id" => "my_id" }
|
159
|
-
@doc.id.should == "my_id"
|
160
|
-
end
|
161
|
-
|
162
|
-
it "should return id from rid" do
|
163
|
-
Rid.stub!(:id).and_return("my_id")
|
164
|
-
@doc.hash = {}
|
165
|
-
@doc.id.should == "my_id"
|
166
|
-
end
|
167
|
-
end
|
168
|
-
|
169
|
-
describe "rev accessor" do
|
170
|
-
it "should return rev from hash" do
|
171
|
-
@doc.hash = { "_rev" => "my_rev" }
|
172
|
-
@doc.rev.should == "my_rev"
|
173
|
-
end
|
174
|
-
|
175
|
-
it "should return rev from rid" do
|
176
|
-
Rid.stub!(:rev).and_return("my_rev")
|
177
|
-
@doc.hash = {}
|
178
|
-
@doc.rev.should == "my_rev"
|
179
|
-
end
|
180
|
-
|
181
|
-
it "should update rev in hash" do
|
182
|
-
@doc.hash = {}
|
183
|
-
@doc.rev = "my_rev"
|
184
|
-
@doc.hash.should == { "_rev" => "my_rev" }
|
185
|
-
end
|
186
|
-
end
|
187
|
-
|
188
|
-
describe "database accessor" do
|
189
|
-
it "should return database rid" do
|
190
|
-
Rid.stub!(:database).and_return("my_db")
|
191
|
-
@doc.database.should == "my_db"
|
192
|
-
end
|
193
|
-
end
|
194
|
-
|
195
|
-
|
196
|
-
describe "base url" do
|
197
|
-
it "should combine database and id" do
|
198
|
-
@doc.should_receive(:id).and_return("my_id")
|
199
|
-
@doc.should_receive(:database).and_return("my_db")
|
200
|
-
@doc.base_url.should == "my_db/my_id"
|
201
|
-
end
|
202
|
-
end
|
203
|
-
|
204
|
-
describe "url" do
|
205
|
-
it "should return base_url without options" do
|
206
|
-
@doc.should_receive(:base_url).and_return("my_base_url")
|
207
|
-
@doc.url.should == "my_base_url"
|
208
|
-
end
|
209
|
-
|
210
|
-
it "should return base_url with options string" do
|
211
|
-
@doc.should_receive(:base_url).and_return("my_base_url")
|
212
|
-
@doc.url(:key => :value).should == "my_base_url?key=value"
|
213
|
-
end
|
214
|
-
|
215
|
-
it "should return base_url with properly escaped options string" do
|
216
|
-
@doc.should_receive(:base_url).and_return("my_base_url")
|
217
|
-
@doc.url(:key => "value value").should == "my_base_url?key=value%20value"
|
218
|
-
end
|
219
|
-
end
|
220
|
-
end
|
data/spec/rid/makros_spec.rb
DELETED
@@ -1,94 +0,0 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
-
require 'rid/design_document'
|
3
|
-
|
4
|
-
describe "Makros" do
|
5
|
-
before do
|
6
|
-
@doc = Rid::DesignDocument.new
|
7
|
-
end
|
8
|
-
|
9
|
-
describe "inject" do
|
10
|
-
describe "code makro" do
|
11
|
-
it "should expand code" do
|
12
|
-
@doc.hash = { "hash" => { "key" => "// !code code.js" }, "lib" => { "code.js" => "value" } }
|
13
|
-
@doc.inject_makros!
|
14
|
-
@doc.hash["hash"]["key"].should == "value"
|
15
|
-
end
|
16
|
-
|
17
|
-
it "should not remove code that follows" do
|
18
|
-
@doc.hash = { "hash" => { "key" => "// !code code.js\nvalue" }, "lib" => { "code.js" => "value" } }
|
19
|
-
@doc.inject_makros!
|
20
|
-
@doc.hash["hash"]["key"].should == "value\nvalue"
|
21
|
-
end
|
22
|
-
|
23
|
-
it "should store injection" do
|
24
|
-
@doc.hash = { "hash" => { "key" => "// !code code.js" }, "lib" => { "code.js" => "value" } }
|
25
|
-
@doc.inject_makros!
|
26
|
-
@doc.hash["injections"].should == [{ "makro" => "code", "target" => "hash/key", "lib" => "code.js", "start" => 0, "size" => 5 }]
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
describe "json makro" do
|
31
|
-
it "should expand json" do
|
32
|
-
@doc.hash = { "hash" => { "key" => "// !json json.json" }, "lib" => { "json.json" => "value" } }
|
33
|
-
@doc.inject_makros!
|
34
|
-
@doc.hash["hash"]["key"].should == 'var json = "value";'
|
35
|
-
end
|
36
|
-
|
37
|
-
it "should not remove code that follows" do
|
38
|
-
@doc.hash = { "hash" => { "key" => "// !json json.json\nvalue" }, "lib" => { "json.json" => "value" } }
|
39
|
-
@doc.inject_makros!
|
40
|
-
@doc.hash["hash"]["key"].should == "var json = \"value\";\nvalue"
|
41
|
-
end
|
42
|
-
|
43
|
-
it "should store injection" do
|
44
|
-
@doc.hash = { "hash" => { "key" => "// !json json.json" }, "lib" => { "json.json" => "value" } }
|
45
|
-
@doc.inject_makros!
|
46
|
-
@doc.hash["injections"].should == [{ "makro" => "json", "target" => "hash/key", "lib" => "json.json", "start" => 0, "size" => 19 }]
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
describe "reject" do
|
52
|
-
describe "code makro" do
|
53
|
-
it "should reject code" do
|
54
|
-
@doc.hash = { "lib" => { "code.js" => "value" }, "key" => "// !code code.js" }
|
55
|
-
@doc.inject_makros!
|
56
|
-
@doc.reject_makros!
|
57
|
-
@doc.hash["key"].should == "// !code code.js"
|
58
|
-
end
|
59
|
-
|
60
|
-
it "should reject nested code" do
|
61
|
-
@doc.hash = { "lib" => { "hash" => { "code.js" => "value" } }, "key" => "// !code hash/code.js" }
|
62
|
-
@doc.inject_makros!
|
63
|
-
@doc.reject_makros!
|
64
|
-
@doc.hash["key"].should == "// !code hash/code.js"
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
describe "json makro" do
|
69
|
-
it "should reject json" do
|
70
|
-
@doc.hash = { "lib" => { "json.json" => "value" }, "key" => "// !json json.json" }
|
71
|
-
@doc.inject_makros!
|
72
|
-
@doc.reject_makros!
|
73
|
-
@doc.hash["key"].should == "// !json json.json"
|
74
|
-
end
|
75
|
-
|
76
|
-
it "should reject nested json" do
|
77
|
-
@doc.hash = { "lib" => { "hash" => { "json.json" => "value" } }, "key" => "// !json hash/json.json" }
|
78
|
-
@doc.inject_makros!
|
79
|
-
@doc.reject_makros!
|
80
|
-
@doc.hash["key"].should == "// !json hash/json.json"
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
describe "many makros" do
|
85
|
-
it "should reject properly" do
|
86
|
-
@doc.hash = { "lib" => { "code.js" => "value", "other.js" => "value" }, "key" => "// !code code.js\n// !code other.js" }
|
87
|
-
@doc.inject_makros!
|
88
|
-
@doc.hash["injections"].should == [{"makro"=>"code", "size"=>5, "lib"=>"code.js", "start"=>0, "target"=>"key"}, {"makro"=>"code", "size"=>5, "lib"=>"other.js", "start"=>6, "target"=>"key"}]
|
89
|
-
@doc.reject_makros!
|
90
|
-
@doc.hash["key"].should == "// !code code.js\n// !code other.js"
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|