rufus-doric 0.1.17 → 0.1.18

Sign up to get free protection for your applications and to get access to all the features.
@@ -2,6 +2,13 @@
2
2
  = rufus-doric CHANGELOG.txt
3
3
 
4
4
 
5
+ == rufus-doric - 0.1.18 released 2010/11/09
6
+
7
+ - made sure to do a deep clone of model default values. Thanks Claudio.
8
+ - views : :raw => true option
9
+ - pointing to rufus-jig 0.1.23
10
+
11
+
5
12
  == rufus-doric - 0.1.17 released 2010/09/30
6
13
 
7
14
  - basic auth thanks to rufus-jig 0.1.22
@@ -186,7 +186,7 @@ will load the documents (and their attachements) into http://127.0.0.1:5984/dori
186
186
 
187
187
  == credits
188
188
 
189
- Claudio Petasecca Donati - for his help about attachments
189
+ Claudio Petasecca Donati - for all his help.
190
190
 
191
191
 
192
192
  == license
data/Rakefile CHANGED
@@ -36,7 +36,7 @@ something at the intersection of Rails3, CouchDB and rufus-jig
36
36
  gem.test_file = 'test/test.rb'
37
37
 
38
38
  gem.add_dependency 'activerecord', '~> 3.0.0'
39
- gem.add_dependency 'rufus-jig', '>= 0.1.22'
39
+ gem.add_dependency 'rufus-jig', '>= 0.1.23'
40
40
  gem.add_dependency 'mime-types', '>= 1.16'
41
41
  gem.add_development_dependency 'rake'
42
42
  gem.add_development_dependency 'jeweler'
@@ -225,7 +225,9 @@ module Doric
225
225
 
226
226
  def initialize (doc={})
227
227
 
228
- @h = doc.inject(self.class.defaults.dup) { |h, (k, v)| h[k.to_s] = v; h }
228
+ @h = doc.inject(Rufus::Json.dup(self.class.defaults)) { |h, (k, v)|
229
+ h[k.to_s] = v; h
230
+ }
229
231
  @h['doric_type'] = self.class.doric_type
230
232
  end
231
233
 
@@ -760,6 +762,8 @@ module Doric
760
762
 
761
763
  #p [ key, val, opts ]
762
764
 
765
+ raw = opts.delete(:raw)
766
+
763
767
  reduce = key.is_a?(Hash) && key[:reduce]
764
768
 
765
769
  qs = reduce ? [] : [ 'include_docs=true' ]
@@ -789,13 +793,14 @@ module Doric
789
793
 
790
794
  result = get_result(path, key, opts)
791
795
 
792
- row = result['rows']
796
+ rows = result['rows']
797
+
798
+ return rows if raw
793
799
 
794
800
  if reduce
795
- r = result['rows'].first
796
- r ? r['value'] : []
801
+ rows.first ? rows.first['value'] : []
797
802
  else
798
- result['rows'].collect { |r| self.new(r['doc']) }.uniq
803
+ rows.collect { |r| self.new(r['doc']) }.uniq
799
804
  end
800
805
  end
801
806
 
@@ -54,7 +54,9 @@ module Doric
54
54
 
55
55
  def initialize (h, doc=nil)
56
56
 
57
- @h = h.inject(self.class.defaults.dup) { |hh, (k, v)| hh[k.to_s] = v; hh }
57
+ @h = h.inject(Rufus::Json.dup(self.class.defaults)) { |hh, (k, v)|
58
+ hh[k.to_s] = v; hh
59
+ }
58
60
 
59
61
  if doc && atts = doc['_attachments']
60
62
 
@@ -1,7 +1,7 @@
1
1
 
2
2
  module Rufus
3
3
  module Doric
4
- VERSION = '0.1.17'
4
+ VERSION = '0.1.18'
5
5
  end
6
6
  end
7
7
 
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{rufus-doric}
8
- s.version = "0.1.17"
8
+ s.version = "0.1.18"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["John Mettraux"]
12
- s.date = %q{2010-09-30}
12
+ s.date = %q{2010-11-09}
13
13
  s.description = %q{
14
14
  something at the intersection of Rails3, CouchDB and rufus-jig
15
15
  }
@@ -85,20 +85,20 @@ something at the intersection of Rails3, CouchDB and rufus-jig
85
85
 
86
86
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
87
87
  s.add_runtime_dependency(%q<activerecord>, ["~> 3.0.0"])
88
- s.add_runtime_dependency(%q<rufus-jig>, [">= 0.1.22"])
88
+ s.add_runtime_dependency(%q<rufus-jig>, [">= 0.1.23"])
89
89
  s.add_runtime_dependency(%q<mime-types>, [">= 1.16"])
90
90
  s.add_development_dependency(%q<rake>, [">= 0"])
91
91
  s.add_development_dependency(%q<jeweler>, [">= 0"])
92
92
  else
93
93
  s.add_dependency(%q<activerecord>, ["~> 3.0.0"])
94
- s.add_dependency(%q<rufus-jig>, [">= 0.1.22"])
94
+ s.add_dependency(%q<rufus-jig>, [">= 0.1.23"])
95
95
  s.add_dependency(%q<mime-types>, [">= 1.16"])
96
96
  s.add_dependency(%q<rake>, [">= 0"])
97
97
  s.add_dependency(%q<jeweler>, [">= 0"])
98
98
  end
99
99
  else
100
100
  s.add_dependency(%q<activerecord>, ["~> 3.0.0"])
101
- s.add_dependency(%q<rufus-jig>, [">= 0.1.22"])
101
+ s.add_dependency(%q<rufus-jig>, [">= 0.1.23"])
102
102
  s.add_dependency(%q<mime-types>, [">= 1.16"])
103
103
  s.add_dependency(%q<rake>, [">= 0"])
104
104
  s.add_dependency(%q<jeweler>, [">= 0"])
@@ -20,6 +20,7 @@ class Can < Rufus::Doric::Model
20
20
  h_accessor :content, :default => 'tuna'
21
21
  h_accessor :colour
22
22
  property :sold, :default => false
23
+ property :customers, :default => []
23
24
  end
24
25
 
25
26
 
@@ -43,12 +44,29 @@ class UtModelDefaultTest < Test::Unit::TestCase
43
44
  Can.new(:serial => 'abcd', :content => 'anchovy').save!
44
45
  Can.new(:serial => 'efgh').save!
45
46
 
46
- assert_equal({ 'content' => 'tuna', 'sold' => false }, Can.defaults)
47
+ assert_equal(
48
+ { 'content' => 'tuna', 'sold' => false, 'customers' => [] },
49
+ Can.defaults)
47
50
 
48
51
  assert_equal 'anchovy', Can.find('abcd').content
49
52
  assert_equal 'tuna', Can.find('efgh').content
50
53
  assert_equal nil, Can.find('abcd').colour
51
54
  assert_equal false, Can.find('abcd').sold
52
55
  end
56
+
57
+ def test_default_is_not_shared_among_all_instances
58
+
59
+ anchovy = Can.new(:serial => 'anchovy', :content => 'anchovy')
60
+ tuna = Can.new(:serial => 'tuna', :content => 'tuna')
61
+
62
+ anchovy.customers << 'alice'
63
+ anchovy.customers << 'bob'
64
+
65
+ anchovy.save!
66
+ tuna.save!
67
+
68
+ assert_equal %w[ alice bob ], Can.find('anchovy').customers
69
+ assert_equal [], Can.find('tuna').customers
70
+ end
53
71
  end
54
72
 
@@ -18,6 +18,7 @@ class Place < Rufus::Doric::OneDocModel
18
18
  h_accessor :name
19
19
  h_accessor :zip
20
20
  h_accessor :country, :default => 'UK'
21
+ h_accessor :neighbours, :default => []
21
22
  end
22
23
 
23
24
 
@@ -32,7 +33,9 @@ class UtOneDocModelDefaultTest < Test::Unit::TestCase
32
33
 
33
34
  def test_defaults
34
35
 
35
- assert_equal({ 'country' => 'UK' }, Place.defaults)
36
+ assert_equal(
37
+ { 'country' => 'UK', 'neighbours' => [] },
38
+ Place.defaults)
36
39
  end
37
40
 
38
41
  def test_default
@@ -43,5 +46,15 @@ class UtOneDocModelDefaultTest < Test::Unit::TestCase
43
46
  assert_equal 'UK', london.country
44
47
  assert_equal 'Germany', berlin.country
45
48
  end
49
+
50
+ def test_default_is_not_shared_among_all_instances
51
+
52
+ tokyo = Place.new(:name => 'Tokyo')
53
+ hiroshima = Place.new(:name => 'Hiroshima')
54
+
55
+ tokyo.neighbours << 'Yokohama'
56
+
57
+ assert_equal [], hiroshima.neighbours
58
+ end
46
59
  end
47
60
 
@@ -33,12 +33,6 @@ class UtModelViewByAndTest < Test::Unit::TestCase
33
33
  Rufus::Doric.db('doric').http.cache.clear
34
34
  # CouchDB feeds the same etags for views, even after a db has
35
35
  # been deleted and put back, so have to do that 'forgetting'
36
- end
37
-
38
- #def teardown
39
- #end
40
-
41
- def test_view_by_and
42
36
 
43
37
  Squad.new(
44
38
  'type' => 'rifle',
@@ -56,9 +50,27 @@ class UtModelViewByAndTest < Test::Unit::TestCase
56
50
  'type' => 'artillery',
57
51
  'ranking' => 'first'
58
52
  ).save!
53
+ end
54
+
55
+ #def teardown
56
+ #end
57
+
58
+ def test_view_by_and
59
59
 
60
60
  assert_equal 2, Squad.by_type_and_ranking([ 'rifle', 'first' ]).size
61
61
  assert_equal 3, Squad.by_ranking('first').size
62
62
  end
63
+
64
+ def test_view_raw
65
+
66
+ br = Squad.by_ranking('first', :raw => true)
67
+ btar = Squad.by_type_and_ranking([ 'rifle', 'first' ], :raw => true)
68
+
69
+ assert_equal 3, br.size
70
+ assert_equal Hash, br.first.class
71
+ assert_equal %w[ doc id key value ], br.first.keys.sort
72
+
73
+ assert_equal 2, btar.size
74
+ end
63
75
  end
64
76
 
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 1
8
- - 17
9
- version: 0.1.17
8
+ - 18
9
+ version: 0.1.18
10
10
  platform: ruby
11
11
  authors:
12
12
  - John Mettraux
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-09-30 00:00:00 +09:00
17
+ date: 2010-11-09 00:00:00 +09:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -41,8 +41,8 @@ dependencies:
41
41
  segments:
42
42
  - 0
43
43
  - 1
44
- - 22
45
- version: 0.1.22
44
+ - 23
45
+ version: 0.1.23
46
46
  type: :runtime
47
47
  version_requirements: *id002
48
48
  - !ruby/object:Gem::Dependency