couchbase-model 0.5.3 → 0.5.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/HISTORY.markdown +5 -0
- data/couchbase-model.gemspec +2 -1
- data/lib/couchbase/active_model.rb +70 -0
- data/lib/couchbase/model.rb +24 -26
- data/lib/couchbase/model/version.rb +1 -5
- data/tasks/test.rake +1 -1
- data/test/setup.rb +4 -1
- data/test/test_active_model_integration.rb +146 -0
- data/test/test_model.rb +36 -1
- metadata +89 -93
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: ca53bd57fa7de8fb80866fb9aef809ff7c6e929a
|
4
|
+
data.tar.gz: adbaa8e5683b998e26bb3f15f102e049b50178d4
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 65d95c35108dec976cd76f5c3f528b43a64b9753e96ab4a1be67c8ee7fb99c49008c14c5dc794a1ac3858d276d96abc5bf140f98037ef3bf6c40efaa561c038e
|
7
|
+
data.tar.gz: 8072842e1586925101d9515690036c58da7cec5fc1de46dc3aa23ff8ea80185d97cf9bbe3e2b8045f5a952ffa54201f47e86ad7d4d0eee2a3ce4236701ed7ebe
|
data/HISTORY.markdown
CHANGED
data/couchbase-model.gemspec
CHANGED
@@ -16,7 +16,8 @@ Gem::Specification.new do |s|
|
|
16
16
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
17
17
|
s.require_paths = ['lib']
|
18
18
|
|
19
|
-
s.add_runtime_dependency 'couchbase', '~> 1.3.
|
19
|
+
s.add_runtime_dependency 'couchbase', '~> 1.3.3'
|
20
|
+
s.add_runtime_dependency 'activemodel'
|
20
21
|
|
21
22
|
s.add_development_dependency 'rake'
|
22
23
|
s.add_development_dependency 'minitest'
|
@@ -0,0 +1,70 @@
|
|
1
|
+
module Couchbase
|
2
|
+
module ActiveModel
|
3
|
+
|
4
|
+
def self.included(base)
|
5
|
+
base.class_eval do
|
6
|
+
extend ::ActiveModel::Callbacks
|
7
|
+
extend ::ActiveModel::Naming
|
8
|
+
include ::ActiveModel::Conversion
|
9
|
+
include ::ActiveModel::Validations
|
10
|
+
include ::ActiveModel::Validations::Callbacks
|
11
|
+
include ::ActiveModel::Dirty
|
12
|
+
|
13
|
+
define_model_callbacks :create, :update, :delete, :save, :initialize
|
14
|
+
[:save, :create, :update, :delete, :initialize].each do |meth|
|
15
|
+
class_eval <<-EOC
|
16
|
+
alias #{meth}_without_callbacks #{meth}
|
17
|
+
def #{meth}(*args, &block)
|
18
|
+
run_callbacks(:#{meth}) do
|
19
|
+
#{meth}_without_callbacks(*args, &block)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
EOC
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
# Public: Allows for access to ActiveModel functionality.
|
28
|
+
#
|
29
|
+
# Returns self.
|
30
|
+
def to_model
|
31
|
+
self
|
32
|
+
end
|
33
|
+
|
34
|
+
# Public: Hashes our unique key instead of the entire object.
|
35
|
+
# Ruby normally hashes an object to be used in comparisons. In our case
|
36
|
+
# we may have two techincally different objects referencing the same entity id,
|
37
|
+
# so we will hash just the class and id (via to_key) to compare so we get the
|
38
|
+
# expected result
|
39
|
+
#
|
40
|
+
# Returns a string representing the unique key.
|
41
|
+
def hash
|
42
|
+
to_param.hash
|
43
|
+
end
|
44
|
+
|
45
|
+
# Public: Overrides eql? to use == in the comparison.
|
46
|
+
#
|
47
|
+
# other - Another object to compare to
|
48
|
+
#
|
49
|
+
# Returns a boolean.
|
50
|
+
def eql?(other)
|
51
|
+
self == other
|
52
|
+
end
|
53
|
+
|
54
|
+
# Public: Overrides == to compare via class and entity id.
|
55
|
+
#
|
56
|
+
# other - Another object to compare to
|
57
|
+
#
|
58
|
+
# Example
|
59
|
+
#
|
60
|
+
# movie = Movie.find(1234)
|
61
|
+
# movie.to_key
|
62
|
+
# # => 'movie-1234'
|
63
|
+
#
|
64
|
+
# Returns a string representing the unique key.
|
65
|
+
def ==(other)
|
66
|
+
hash == other.hash
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
end
|
data/lib/couchbase/model.rb
CHANGED
@@ -18,9 +18,11 @@
|
|
18
18
|
require 'digest/md5'
|
19
19
|
|
20
20
|
require 'couchbase'
|
21
|
+
require 'couchbase/active_model'
|
21
22
|
require 'couchbase/model/version'
|
22
23
|
require 'couchbase/model/uuid'
|
23
24
|
require 'couchbase/model/configuration'
|
25
|
+
require 'active_model'
|
24
26
|
|
25
27
|
unless Object.respond_to?(:singleton_class)
|
26
28
|
require 'couchbase/model/ext/singleton_class'
|
@@ -100,6 +102,7 @@ module Couchbase
|
|
100
102
|
# connect :port => 80, :bucket => 'blog'
|
101
103
|
# end
|
102
104
|
class Model
|
105
|
+
|
103
106
|
# Each model must have identifier
|
104
107
|
#
|
105
108
|
# @since 0.0.1
|
@@ -217,7 +220,7 @@ module Couchbase
|
|
217
220
|
# | | `- reduce.js
|
218
221
|
#
|
219
222
|
# The directory structure above demonstrate layout for design document
|
220
|
-
# with id +_design/link+ and three views: +
|
223
|
+
# with id +_design/link+ and three views: +by_created_at+,
|
221
224
|
# +by_session_id` and `total_views`.
|
222
225
|
def self.ensure_design_document!
|
223
226
|
unless Configuration.design_documents_paths
|
@@ -288,10 +291,13 @@ module Couchbase
|
|
288
291
|
def read_attribute(attr_name)
|
289
292
|
@_attributes[attr_name]
|
290
293
|
end
|
294
|
+
alias :[] :read_attribute
|
291
295
|
|
292
296
|
def write_attribute(attr_name, value)
|
297
|
+
attribute_will_change!(attr_name) unless @_attributes[attr_name] == value
|
293
298
|
@_attributes[attr_name] = value
|
294
299
|
end
|
300
|
+
alias :[]= :write_attribute
|
295
301
|
|
296
302
|
# Defines an attribute for the model
|
297
303
|
#
|
@@ -383,7 +389,7 @@ module Couchbase
|
|
383
389
|
def self.belongs_to(name, options = {})
|
384
390
|
ref = "#{name}_id"
|
385
391
|
attribute(ref)
|
386
|
-
assoc = name.to_s.camelize.constantize
|
392
|
+
assoc = (options[:class_name] || name).to_s.camelize.constantize
|
387
393
|
define_method(name) do
|
388
394
|
assoc.find(self.send(ref))
|
389
395
|
end
|
@@ -482,7 +488,9 @@ module Couchbase
|
|
482
488
|
case attrs
|
483
489
|
when Hash
|
484
490
|
if defined?(HashWithIndifferentAccess) && !attrs.is_a?(HashWithIndifferentAccess)
|
485
|
-
|
491
|
+
if attrs.respond_to?(:with_indifferent_access)
|
492
|
+
attrs = attrs.with_indifferent_access
|
493
|
+
end
|
486
494
|
end
|
487
495
|
@id = attrs.delete(:id)
|
488
496
|
@key = attrs.delete(:key)
|
@@ -491,6 +499,8 @@ module Couchbase
|
|
491
499
|
@meta = attrs.delete(:meta)
|
492
500
|
@raw = attrs.delete(:raw)
|
493
501
|
update_attributes(@doc || attrs)
|
502
|
+
@previously_changed = nil
|
503
|
+
@changed_attributes.clear unless @changed_attributes.nil?
|
494
504
|
else
|
495
505
|
@raw = attrs
|
496
506
|
end
|
@@ -563,6 +573,8 @@ module Couchbase
|
|
563
573
|
options = model.defaults.merge(options)
|
564
574
|
value = (options[:format] == :plain) ? @raw : attributes_with_values
|
565
575
|
@meta['cas'] = model.bucket.replace(@id, value, options)
|
576
|
+
@previously_changed = changes
|
577
|
+
@changed_attributes.clear unless @changed_attributes.nil?
|
566
578
|
self
|
567
579
|
end
|
568
580
|
|
@@ -695,7 +707,7 @@ module Couchbase
|
|
695
707
|
#
|
696
708
|
# @return [Hash]
|
697
709
|
def attributes
|
698
|
-
@_attributes
|
710
|
+
@_attributes || {}
|
699
711
|
end
|
700
712
|
|
701
713
|
# Update all attributes without persisting the changes.
|
@@ -723,8 +735,9 @@ module Couchbase
|
|
723
735
|
# attribute
|
724
736
|
def reload
|
725
737
|
raise Couchbase::Error::MissingId, 'missing id attribute' unless @id
|
726
|
-
|
727
|
-
update_attributes(
|
738
|
+
pristine = model.find(@id)
|
739
|
+
update_attributes(pristine.attributes)
|
740
|
+
@meta[:cas] = pristine.meta[:cas]
|
728
741
|
self
|
729
742
|
end
|
730
743
|
|
@@ -827,26 +840,7 @@ module Couchbase
|
|
827
840
|
ret
|
828
841
|
end
|
829
842
|
|
830
|
-
|
831
|
-
|
832
|
-
if defined?(::ActiveModel)
|
833
|
-
extend ActiveModel::Callbacks
|
834
|
-
extend ActiveModel::Naming
|
835
|
-
include ActiveModel::Conversion
|
836
|
-
include ActiveModel::Validations
|
837
|
-
|
838
|
-
define_model_callbacks :create, :update, :delete, :save
|
839
|
-
[:save, :create, :update, :delete].each do |meth|
|
840
|
-
class_eval <<-EOC
|
841
|
-
alias #{meth}_without_callbacks #{meth}
|
842
|
-
def #{meth}(*args, &block)
|
843
|
-
run_callbacks(:#{meth}) do
|
844
|
-
#{meth}_without_callbacks(*args, &block)
|
845
|
-
end
|
846
|
-
end
|
847
|
-
EOC
|
848
|
-
end
|
849
|
-
end
|
843
|
+
private :attributes_with_values
|
850
844
|
|
851
845
|
# Redefine (if exists) #to_key to use #key if #id is missing
|
852
846
|
def to_key
|
@@ -860,6 +854,10 @@ module Couchbase
|
|
860
854
|
keys.join('-')
|
861
855
|
end
|
862
856
|
end
|
857
|
+
|
858
|
+
include Couchbase::ActiveModel
|
859
|
+
ActiveSupport.run_load_hooks :couchbase_model, self
|
863
860
|
end
|
864
861
|
|
865
862
|
end
|
863
|
+
|
data/tasks/test.rake
CHANGED
@@ -19,7 +19,7 @@ require 'rake/testtask'
|
|
19
19
|
require 'rake/clean'
|
20
20
|
|
21
21
|
rule 'test/CouchbaseMock.jar' do |task|
|
22
|
-
jar_path = "0.
|
22
|
+
jar_path = "0.8-SNAPSHOT/CouchbaseMock-0.8-20140621.030439-1.jar"
|
23
23
|
sh %{wget -q -O test/CouchbaseMock.jar http://files.couchbase.com/maven2/org/couchbase/mock/CouchbaseMock/#{jar_path}}
|
24
24
|
end
|
25
25
|
|
data/test/setup.rb
CHANGED
@@ -163,6 +163,9 @@ class MiniTest::Unit::TestCase
|
|
163
163
|
end
|
164
164
|
|
165
165
|
def uniq_id(*suffixes)
|
166
|
-
[caller.first[/.*[` ](.*)'/, 1], suffixes].join('_')
|
166
|
+
test_id = [caller.first[/.*[` ](.*)'/, 1], suffixes].compact.join('_')
|
167
|
+
@ids ||= {}
|
168
|
+
@ids[test_id] ||= Time.now.to_f
|
169
|
+
[test_id, @ids[test_id]].join('_')
|
167
170
|
end
|
168
171
|
end
|
@@ -0,0 +1,146 @@
|
|
1
|
+
# Author:: Couchbase <info@couchbase.com>
|
2
|
+
# Copyright:: 2011, 2012 Couchbase, Inc.
|
3
|
+
# License:: Apache License, Version 2.0
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
#
|
17
|
+
|
18
|
+
require File.join(File.dirname(__FILE__), 'setup')
|
19
|
+
|
20
|
+
class ActiveUser < Couchbase::Model
|
21
|
+
attribute :name
|
22
|
+
attribute :email
|
23
|
+
attribute :role
|
24
|
+
attribute :created_at, :updated_at, :default => lambda { Time.now.utc }
|
25
|
+
|
26
|
+
validates_presence_of :email
|
27
|
+
validates :role, :presence => true, :inclusion => { :in => %w(admin editor) }
|
28
|
+
|
29
|
+
before_create :upcase_name
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def upcase_name
|
34
|
+
self.name = self.name.upcase unless self.name.nil?
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
class ActiveObj < Couchbase::Model
|
39
|
+
end
|
40
|
+
|
41
|
+
class TestActiveModelIntegration < MiniTest::Unit::TestCase
|
42
|
+
|
43
|
+
include ActiveModel::Lint::Tests
|
44
|
+
|
45
|
+
def setup
|
46
|
+
@model = ActiveUser.new # used by ActiveModel::Lint::Tests
|
47
|
+
@mock = start_mock
|
48
|
+
bucket = Couchbase.connect(:hostname => @mock.host, :port => @mock.port)
|
49
|
+
ActiveObj.bucket = ActiveUser.bucket = bucket
|
50
|
+
end
|
51
|
+
|
52
|
+
def teardown
|
53
|
+
stop_mock(@mock)
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_active_model_includes
|
57
|
+
[
|
58
|
+
ActiveModel::Conversion,
|
59
|
+
ActiveModel::Validations,
|
60
|
+
ActiveModel::Validations::Callbacks,
|
61
|
+
ActiveModel::Validations::HelperMethods
|
62
|
+
].each do |mod|
|
63
|
+
assert ActiveUser.ancestors.include?(mod), "Model not including #{mod}"
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_callbacks
|
68
|
+
[
|
69
|
+
:before_validation, :after_validation,
|
70
|
+
:after_initialize, :before_create, :around_create,
|
71
|
+
:after_create, :before_delete, :around_delete,
|
72
|
+
:after_delete, :before_save, :around_save, :after_save,
|
73
|
+
:before_update, :around_update, :after_update
|
74
|
+
].each do |callback|
|
75
|
+
assert ActiveObj.respond_to?(callback), "Model doesn't support callback: #{callback}"
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def test_active_model_validations
|
80
|
+
no_role = ActiveUser.new(:email => 'joe@example.com', :role => nil)
|
81
|
+
bad_role = ActiveUser.new(:email => 'joe@example.com', :role => 'bad')
|
82
|
+
good_role = ActiveUser.new(:email => 'joe@example.com', :role => 'admin')
|
83
|
+
|
84
|
+
refute no_role.valid?
|
85
|
+
refute bad_role.valid?
|
86
|
+
assert good_role.valid?
|
87
|
+
end
|
88
|
+
|
89
|
+
def test_active_model_validation_helpers
|
90
|
+
valid = ActiveUser.new(:email => 'joe@example.com', :role => 'editor')
|
91
|
+
invalid = ActiveUser.new(:name => 'Joe', :role => 'editor')
|
92
|
+
|
93
|
+
assert valid.valid?
|
94
|
+
refute invalid.valid?
|
95
|
+
end
|
96
|
+
|
97
|
+
def test_before_save_callback
|
98
|
+
assert user = ActiveUser.create(:name => 'joe', :role => 'admin', :email => 'joe@example.com')
|
99
|
+
assert_equal 'JOE', user.name
|
100
|
+
end
|
101
|
+
|
102
|
+
def test_model_name_exposes_singular_and_human_name
|
103
|
+
assert_equal 'active_user', @model.class.model_name.singular
|
104
|
+
assert_equal 'Active user', @model.class.model_name.human
|
105
|
+
end
|
106
|
+
|
107
|
+
def test_model_equality
|
108
|
+
obj1 = ActiveObj.create
|
109
|
+
obj2 = ActiveObj.find(obj1.id)
|
110
|
+
|
111
|
+
assert_equal obj1, obj2
|
112
|
+
end
|
113
|
+
|
114
|
+
def test_to_key
|
115
|
+
assert_equal ['the-id'], ActiveObj.new(:id => 'the-id').to_key
|
116
|
+
assert_equal ['the-key'], ActiveObj.new(:key => 'the-key').to_key
|
117
|
+
end
|
118
|
+
|
119
|
+
def test_to_param
|
120
|
+
assert_equal 'the-id', ActiveObj.new(:id => 'the-id').to_param
|
121
|
+
assert_equal 'the-key', ActiveObj.new(:key => ['the', 'key']).to_param
|
122
|
+
end
|
123
|
+
|
124
|
+
def test_dirty_tracking_on_attribute
|
125
|
+
tester = ActiveUser.create(:email => 'joe@example.com', :role => 'admin')
|
126
|
+
tester.email = 'bob@example.com'
|
127
|
+
assert tester.changed?
|
128
|
+
assert_equal tester.changed, ["email"]
|
129
|
+
end
|
130
|
+
|
131
|
+
def test_dirty_tracking_reset_on_save
|
132
|
+
tester = ActiveUser.create(:email => 'joe@example.com', :role => 'admin')
|
133
|
+
tester.email = 'bob@example.com'
|
134
|
+
assert tester.changed?
|
135
|
+
tester.save
|
136
|
+
refute tester.changed?
|
137
|
+
end
|
138
|
+
|
139
|
+
def test_dirty_tracking_previous_values
|
140
|
+
tester = ActiveUser.create(:email => 'joe@example.com', :role => 'admin')
|
141
|
+
tester.email = 'bob@example.com'
|
142
|
+
tester.save
|
143
|
+
assert_equal tester.previous_changes[:email], ['joe@example.com', 'bob@example.com']
|
144
|
+
end
|
145
|
+
|
146
|
+
end
|
data/test/test_model.rb
CHANGED
@@ -41,6 +41,11 @@ class Beer < Couchbase::Model
|
|
41
41
|
belongs_to :brewery
|
42
42
|
end
|
43
43
|
|
44
|
+
class Wine < Couchbase::Model
|
45
|
+
attribute :name
|
46
|
+
belongs_to :winery, :class_name => :Brewery
|
47
|
+
end
|
48
|
+
|
44
49
|
class Attachment < Couchbase::Model
|
45
50
|
defaults :format => :plain
|
46
51
|
end
|
@@ -59,7 +64,7 @@ class TestModel < MiniTest::Unit::TestCase
|
|
59
64
|
def setup
|
60
65
|
@mock = start_mock
|
61
66
|
bucket = Couchbase.connect(:hostname => @mock.host, :port => @mock.port)
|
62
|
-
[Post, ValidPost, Brewery, Beer, Attachment].each do |model|
|
67
|
+
[Post, ValidPost, Brewery, Beer, Attachment, Wine].each do |model|
|
63
68
|
model.bucket = bucket
|
64
69
|
end
|
65
70
|
end
|
@@ -100,6 +105,17 @@ class TestModel < MiniTest::Unit::TestCase
|
|
100
105
|
assert_equal 'foo', post.title
|
101
106
|
end
|
102
107
|
|
108
|
+
def test_access_attribute_by_key
|
109
|
+
post = Post.new(:title => 'Hello, world')
|
110
|
+
assert_equal 'Hello, world', post[:title]
|
111
|
+
end
|
112
|
+
|
113
|
+
def test_update_attribute_by_key
|
114
|
+
post = Post.new(:title => 'Hello, world')
|
115
|
+
post[:title] = 'world, Hello'
|
116
|
+
assert_equal 'world, Hello', post.title
|
117
|
+
end
|
118
|
+
|
103
119
|
def test_assigns_attributes_from_the_hash
|
104
120
|
post = Post.new(:title => 'Hello, world')
|
105
121
|
assert_equal 'Hello, world', post.title
|
@@ -140,6 +156,15 @@ class TestModel < MiniTest::Unit::TestCase
|
|
140
156
|
assert_equal 'Good bye, world', orig.title
|
141
157
|
end
|
142
158
|
|
159
|
+
def test_reloads_cas_value_with_reload_method
|
160
|
+
orig = Post.create(:title => "Hello, world")
|
161
|
+
double = Post.find(orig.id)
|
162
|
+
orig.update(:title => "Good bye, world")
|
163
|
+
double.reload
|
164
|
+
|
165
|
+
assert_equal orig.meta[:cas], double.meta[:cas]
|
166
|
+
end
|
167
|
+
|
143
168
|
def test_it_raises_not_found_exception
|
144
169
|
assert_raises Couchbase::Error::NotFound do
|
145
170
|
Post.find('missing_key')
|
@@ -208,6 +233,16 @@ class TestModel < MiniTest::Unit::TestCase
|
|
208
233
|
end
|
209
234
|
end
|
210
235
|
|
236
|
+
def test_belongs_to_with_class_name_assoc
|
237
|
+
brewery = Brewery.create(:name => "R Wines")
|
238
|
+
assert_includes Wine.attributes.keys, :winery_id
|
239
|
+
wine = Wine.create(:name => "Classy", :winery_id => brewery.id)
|
240
|
+
assert_respond_to wine, :winery
|
241
|
+
assoc = wine.winery
|
242
|
+
assert_instance_of Brewery, assoc
|
243
|
+
assert_equal "R Wines", assoc.name
|
244
|
+
end
|
245
|
+
|
211
246
|
def test_fails_to_delete_model_without_id
|
212
247
|
post = Post.new(:title => 'Hello')
|
213
248
|
refute post.id
|
metadata
CHANGED
@@ -1,93 +1,94 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: couchbase-model
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 5
|
9
|
-
- 3
|
10
|
-
version: 0.5.3
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.5.4
|
11
5
|
platform: ruby
|
12
|
-
authors:
|
6
|
+
authors:
|
13
7
|
- Couchbase
|
14
8
|
autorequire:
|
15
9
|
bindir: bin
|
16
10
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
dependencies:
|
21
|
-
- !ruby/object:Gem::Dependency
|
22
|
-
type: :runtime
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
-
none: false
|
25
|
-
requirements:
|
26
|
-
- - ~>
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
hash: 27
|
29
|
-
segments:
|
30
|
-
- 1
|
31
|
-
- 3
|
32
|
-
- 0
|
33
|
-
version: 1.3.0
|
11
|
+
date: 2014-08-29 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
34
14
|
name: couchbase
|
35
|
-
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.3.3
|
20
|
+
type: :runtime
|
36
21
|
prerelease: false
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.3.3
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: activemodel
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
42
31
|
- - ">="
|
43
|
-
- !ruby/object:Gem::Version
|
44
|
-
|
45
|
-
|
46
|
-
- 0
|
47
|
-
version: "0"
|
48
|
-
name: rake
|
49
|
-
version_requirements: *id002
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
50
35
|
prerelease: false
|
51
|
-
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
52
48
|
type: :development
|
53
|
-
|
54
|
-
|
55
|
-
requirements:
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
56
52
|
- - ">="
|
57
|
-
- !ruby/object:Gem::Version
|
58
|
-
|
59
|
-
|
60
|
-
- 0
|
61
|
-
version: "0"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
62
56
|
name: minitest
|
63
|
-
|
64
|
-
|
65
|
-
-
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
66
62
|
type: :development
|
67
|
-
|
68
|
-
|
69
|
-
requirements:
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
70
66
|
- - ">="
|
71
|
-
- !ruby/object:Gem::Version
|
72
|
-
|
73
|
-
|
74
|
-
- 0
|
75
|
-
version: "0"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
76
70
|
name: activesupport
|
77
|
-
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
78
77
|
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
79
83
|
description: ORM-like interface allows you to persist your models to Couchbase
|
80
84
|
email: support@couchbase.com
|
81
85
|
executables: []
|
82
|
-
|
83
86
|
extensions: []
|
84
|
-
|
85
87
|
extra_rdoc_files: []
|
86
|
-
|
87
|
-
|
88
|
-
- .
|
89
|
-
- .
|
90
|
-
- .yardopts
|
88
|
+
files:
|
89
|
+
- ".gitignore"
|
90
|
+
- ".travis.yml"
|
91
|
+
- ".yardopts"
|
91
92
|
- CONTRIBUTING.markdown
|
92
93
|
- Gemfile
|
93
94
|
- HISTORY.markdown
|
@@ -95,6 +96,7 @@ files:
|
|
95
96
|
- Rakefile
|
96
97
|
- couchbase-model.gemspec
|
97
98
|
- lib/couchbase-model.rb
|
99
|
+
- lib/couchbase/active_model.rb
|
98
100
|
- lib/couchbase/model.rb
|
99
101
|
- lib/couchbase/model/configuration.rb
|
100
102
|
- lib/couchbase/model/ext/camelize.rb
|
@@ -113,42 +115,36 @@ files:
|
|
113
115
|
- tasks/test.rake
|
114
116
|
- tasks/util.rake
|
115
117
|
- test/setup.rb
|
118
|
+
- test/test_active_model_integration.rb
|
116
119
|
- test/test_model.rb
|
117
120
|
- test/test_model_rails_integration.rb
|
118
121
|
- test/test_uuid.rb
|
119
|
-
has_rdoc: true
|
120
122
|
homepage: https://github.com/couchbase/couchbase-ruby-model
|
121
123
|
licenses: []
|
122
|
-
|
124
|
+
metadata: {}
|
123
125
|
post_install_message:
|
124
126
|
rdoc_options: []
|
125
|
-
|
126
|
-
require_paths:
|
127
|
+
require_paths:
|
127
128
|
- lib
|
128
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
129
|
-
|
130
|
-
requirements:
|
129
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
130
|
+
requirements:
|
131
131
|
- - ">="
|
132
|
-
- !ruby/object:Gem::Version
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
version: "0"
|
137
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
138
|
-
none: false
|
139
|
-
requirements:
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: '0'
|
134
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
140
136
|
- - ">="
|
141
|
-
- !ruby/object:Gem::Version
|
142
|
-
|
143
|
-
segments:
|
144
|
-
- 0
|
145
|
-
version: "0"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
146
139
|
requirements: []
|
147
|
-
|
148
140
|
rubyforge_project:
|
149
|
-
rubygems_version:
|
141
|
+
rubygems_version: 2.3.0
|
150
142
|
signing_key:
|
151
|
-
specification_version:
|
143
|
+
specification_version: 4
|
152
144
|
summary: Declarative interface to Couchbase
|
153
|
-
test_files:
|
154
|
-
|
145
|
+
test_files:
|
146
|
+
- test/setup.rb
|
147
|
+
- test/test_active_model_integration.rb
|
148
|
+
- test/test_model.rb
|
149
|
+
- test/test_model_rails_integration.rb
|
150
|
+
- test/test_uuid.rb
|