couch_potato 0.2.15 → 0.2.16

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/CHANGES.md CHANGED
@@ -1,5 +1,9 @@
1
1
  ## Changes
2
2
 
3
+ ### 0.2.16
4
+ * fixed problem with classes being not loaded in rails development mode (langalex)
5
+ * fixed persist boolean false value (bernd)
6
+
3
7
  ### 0.2.15
4
8
  * ability to change the name of the attribute that stores the ruby class in the documents by setting JSON.create_id (lennart)
5
9
  * fixed double loading issue with bundler (jweiss)
data/VERSION.yml CHANGED
@@ -1,5 +1,4 @@
1
1
  ---
2
- :build:
3
- :minor: 2
4
- :patch: 15
5
2
  :major: 0
3
+ :minor: 2
4
+ :patch: 16
@@ -65,7 +65,7 @@ module CouchPotato
65
65
 
66
66
  def clean_hash(hash)
67
67
  hash.each do |k,v|
68
- hash.delete k unless v
68
+ hash.delete k if v.nil?
69
69
  end
70
70
  end
71
71
 
@@ -62,7 +62,7 @@ module CouchPotato
62
62
  instance
63
63
  end
64
64
 
65
- # Declare a proprty on a model class. properties are not typed by default. You can use any of the basic types by JSON (String, Integer, Fixnum, Array, Hash). If you want a property to be of a custom class you have to define it using the :class option.
65
+ # Declare a property on a model class. properties are not typed by default. You can use any of the basic types by JSON (String, Integer, Fixnum, Array, Hash). If you want a property to be of a custom class you have to define it using the :class option.
66
66
  #
67
67
  # example:
68
68
  # class Book
@@ -78,4 +78,4 @@ module CouchPotato
78
78
  end
79
79
  end
80
80
  end
81
- end
81
+ end
@@ -11,7 +11,7 @@ module CouchPotato
11
11
  end
12
12
 
13
13
  def build(object, json)
14
- value = json[name.to_s] || json[name.to_sym]
14
+ value = json[name.to_s].nil? ? json[name.to_sym] : json[name.to_s]
15
15
  typecast_value = if type && !value.instance_of?(type)
16
16
  type.json_create value
17
17
  else
data/rails/init.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  # this is for rails only
2
2
 
3
3
  require File.expand_path(File.dirname(__FILE__) + '/../lib/couch_potato')
4
+ require File.expand_path(File.dirname(__FILE__) + '/reload_classes')
4
5
 
5
6
  CouchPotato::Config.database_name = YAML::load(File.read(Rails.root.to_s + '/config/couchdb.yml'))[RAILS_ENV]
6
7
 
@@ -0,0 +1,37 @@
1
+ module CouchPotato
2
+ module Persistence
3
+
4
+ def self.persistent_classes #:nodoc:
5
+ @persistent_classes ||= []
6
+ end
7
+
8
+ def self.reload_persistent_classes #:nodoc:
9
+ persistent_classes.each do |clazz|
10
+ eval clazz.name
11
+ end
12
+ end
13
+
14
+
15
+ def self.included_with_class_reloading(base) #:nodoc:
16
+ persistent_classes << base
17
+ included_without_class_reloading(base)
18
+ end
19
+
20
+ class << self
21
+ alias_method :included_without_class_reloading, :included
22
+ alias_method :included, :included_with_class_reloading
23
+ end
24
+ end
25
+
26
+ Database.class_eval do
27
+ def load_document_with_class_reloading(id)
28
+ Persistence.reload_persistent_classes
29
+ load_document_without_class_reloading id
30
+ end
31
+
32
+ alias_method :load_document_without_class_reloading, :load_document
33
+ alias_method :load_document, :load_document_with_class_reloading
34
+ alias_method :load, :load_document
35
+ end
36
+ end
37
+
@@ -107,7 +107,7 @@ describe 'properties' do
107
107
  end
108
108
 
109
109
  it "should persist an object" do
110
- p = Person.new :name => 'Bob'
110
+ p = Person.new
111
111
  a = Address.new :city => 'Denver'
112
112
  p.ship_address = a
113
113
  CouchPotato.database.save_document! p
@@ -116,13 +116,21 @@ describe 'properties' do
116
116
  end
117
117
 
118
118
  it "should persist null for a null " do
119
- p = Person.new :name => 'Bob'
119
+ p = Person.new
120
120
  p.ship_address = nil
121
121
  CouchPotato.database.save_document! p
122
122
  p = CouchPotato.database.load_document p.id
123
123
  p.ship_address.should be_nil
124
124
  end
125
-
125
+
126
+ it "should persist false for a false" do
127
+ p = Person.new
128
+ p.ship_address = false
129
+ CouchPotato.database.save_document! p
130
+ p = CouchPotato.database.load_document p.id
131
+ p.ship_address.should be_false
132
+ end
133
+
126
134
  describe "predicate" do
127
135
  it "should return true if property set" do
128
136
  Comment.new(:title => 'title').title?.should be_true
@@ -0,0 +1,22 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+ require File.dirname(__FILE__) + '/../rails/reload_classes'
3
+
4
+ class Autoloader
5
+ def self.const_missing(name)
6
+ eval("#{name} = Class.new; #{name}.send(:include, CouchPotato::Persistence)")
7
+ end
8
+ end
9
+
10
+
11
+ describe CouchPotato::Database, 'rails specific behavior' do
12
+
13
+ it "should load load models whose constants are currently uninitialized (like with rails in development mode)" do
14
+ Autoloader::Uninitialized
15
+ Autoloader.send :remove_const, 'Uninitialized'
16
+ recreate_db
17
+ CouchPotato.couchrest_database.save_doc(JSON.create_id => 'Autoloader::Uninitialized', '_id' => '1')
18
+ CouchPotato.database.load('1').class.name.should == 'Autoloader::Uninitialized'
19
+ end
20
+
21
+ end
22
+
@@ -43,7 +43,6 @@ describe CouchPotato::Database, 'full_url_to_database' do
43
43
  end
44
44
  end
45
45
 
46
-
47
46
  describe CouchPotato::Database, 'load' do
48
47
  it "should raise an exception if nil given" do
49
48
  db = CouchPotato::Database.new(stub('couchrest db', :info => nil))
@@ -64,6 +63,7 @@ describe CouchPotato::Database, 'load' do
64
63
  db = CouchPotato::Database.new(stub('couchrest db', :info => nil, :get => Parent::Child.json_create({JSON.create_id => 'Parent::Child'})))
65
64
  db.load('1').class.should == Parent::Child
66
65
  end
66
+
67
67
  end
68
68
 
69
69
  describe CouchPotato::Database, 'save_document' do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: couch_potato
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.15
4
+ version: 0.2.16
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexander Lang
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-11-09 00:00:00 +01:00
12
+ date: 2009-11-22 00:00:00 +01:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -85,6 +85,7 @@ files:
85
85
  - lib/couch_potato/view/raw_view_spec.rb
86
86
  - lib/couch_potato/view/view_query.rb
87
87
  - rails/init.rb
88
+ - rails/reload_classes.rb
88
89
  - spec/attachments_spec.rb
89
90
  - spec/callbacks_spec.rb
90
91
  - spec/create_spec.rb
@@ -94,6 +95,7 @@ files:
94
95
  - spec/fixtures/address.rb
95
96
  - spec/fixtures/person.rb
96
97
  - spec/property_spec.rb
98
+ - spec/rails_spec.rb
97
99
  - spec/spec.opts
98
100
  - spec/spec_helper.rb
99
101
  - spec/unit/attributes_spec.rb
@@ -146,6 +148,7 @@ test_files:
146
148
  - spec/fixtures/address.rb
147
149
  - spec/fixtures/person.rb
148
150
  - spec/property_spec.rb
151
+ - spec/rails_spec.rb
149
152
  - spec/spec_helper.rb
150
153
  - spec/unit/attributes_spec.rb
151
154
  - spec/unit/callbacks_spec.rb