caster 0.9.1 → 0.9.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.
@@ -0,0 +1,33 @@
|
|
1
|
+
module Caster
|
2
|
+
|
3
|
+
# provides means to easily access nested values from hash
|
4
|
+
# doc['a']['b']['c'] can be accessed as 'a.b.c'
|
5
|
+
class Accessor
|
6
|
+
|
7
|
+
def get doc, accessor
|
8
|
+
return doc if accessor == nil
|
9
|
+
value = eval(access('doc', accessor))
|
10
|
+
(value.is_a? Fixnum)? value : value.clone
|
11
|
+
end
|
12
|
+
|
13
|
+
def set doc, accessor, value
|
14
|
+
sub_doc = doc
|
15
|
+
accessor.split('.').each do |sub_field|
|
16
|
+
sub_doc[sub_field] = {} if sub_doc[sub_field] == nil
|
17
|
+
sub_doc = sub_doc[sub_field]
|
18
|
+
end
|
19
|
+
eval("#{access('doc', accessor)} = value")
|
20
|
+
end
|
21
|
+
|
22
|
+
def delete doc, accessor
|
23
|
+
sub_fields = accessor.split('.')
|
24
|
+
field_to_delete = sub_fields.pop
|
25
|
+
eval("#{access('doc', sub_fields.join('.'))}.delete('#{field_to_delete}')")
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
def access doc_var, accessor
|
30
|
+
doc_var << accessor.split('.').map { |field| "['#{field}']" }.join
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
data/lib/caster/execution.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'caster/accessor'
|
2
|
+
|
1
3
|
module Caster
|
2
4
|
class Reference
|
3
5
|
|
@@ -8,8 +10,9 @@ module Caster
|
|
8
10
|
|
9
11
|
def initialize db_handle, view, query
|
10
12
|
rdocs = db_handle.view(view, query)['rows']
|
11
|
-
@docs = rdocs.map { |rdoc| rdoc['value'] }
|
13
|
+
@docs = rdocs.map { |rdoc| rdoc['doc'] or rdoc['value'] }
|
12
14
|
@post_eval_calls = []
|
15
|
+
@accessor = Accessor.new
|
13
16
|
end
|
14
17
|
|
15
18
|
def where &predicate
|
@@ -25,7 +28,7 @@ module Caster
|
|
25
28
|
def evaluate target_doc
|
26
29
|
@docs.each do |doc|
|
27
30
|
if @predicate.call doc
|
28
|
-
value =
|
31
|
+
value = @accessor.get doc, @value_field
|
29
32
|
@post_eval_calls.each do |args|
|
30
33
|
value = value.send args[0], *args[1]
|
31
34
|
end
|
@@ -34,12 +37,5 @@ module Caster
|
|
34
37
|
end
|
35
38
|
nil
|
36
39
|
end
|
37
|
-
|
38
|
-
private
|
39
|
-
def deref doc, accessor
|
40
|
-
return doc if accessor == nil
|
41
|
-
value = eval 'doc' << accessor.split('.').map { |field| "['#{field}']" }.join
|
42
|
-
(value.is_a? Fixnum)? value : value.clone
|
43
|
-
end
|
44
40
|
end
|
45
41
|
end
|
data/lib/caster/transform/add.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'couchrest'
|
2
|
+
require 'caster/accessor'
|
2
3
|
|
3
4
|
module Caster
|
4
5
|
class Add
|
@@ -6,10 +7,11 @@ module Caster
|
|
6
7
|
def initialize field, value
|
7
8
|
@field = field
|
8
9
|
@value = value
|
10
|
+
@accessor = Accessor.new
|
9
11
|
end
|
10
12
|
|
11
13
|
def execute doc
|
12
|
-
doc
|
14
|
+
@accessor.set doc, @field, evaluate(@value, doc)
|
13
15
|
doc
|
14
16
|
end
|
15
17
|
|
@@ -1,14 +1,18 @@
|
|
1
|
+
require 'caster/accessor'
|
2
|
+
|
1
3
|
module Caster
|
2
4
|
class Rename
|
3
5
|
|
4
6
|
def initialize old_name, new_name
|
5
7
|
@old_name = old_name
|
6
8
|
@new_name = new_name
|
9
|
+
@accessor = Accessor.new
|
7
10
|
end
|
8
11
|
|
9
12
|
def execute doc
|
10
13
|
doc[@new_name] = doc[@old_name]
|
11
|
-
doc.
|
14
|
+
@accessor.set(doc, @new_name, @accessor.get(doc, @old_name))
|
15
|
+
@accessor.delete doc, @old_name
|
12
16
|
doc
|
13
17
|
end
|
14
18
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: caster
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 63
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 9
|
9
|
-
-
|
10
|
-
version: 0.9.
|
9
|
+
- 2
|
10
|
+
version: 0.9.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Manohar Akula
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-
|
18
|
+
date: 2012-09-06 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: couchrest
|
@@ -55,11 +55,12 @@ extra_rdoc_files: []
|
|
55
55
|
|
56
56
|
files:
|
57
57
|
- lib/caster.rb
|
58
|
+
- lib/caster/accessor.rb
|
58
59
|
- lib/caster/execution.rb
|
59
60
|
- lib/caster/migration.rb
|
60
61
|
- lib/caster/migrator.rb
|
61
62
|
- lib/caster/operation.rb
|
62
|
-
- lib/caster/
|
63
|
+
- lib/caster/reference.rb
|
63
64
|
- lib/caster/transform/add.rb
|
64
65
|
- lib/caster/transform/clone.rb
|
65
66
|
- lib/caster/transform/create.rb
|