jmoses-couchbase-model 0.5.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,5 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+ test/CouchbaseMock.jar
@@ -0,0 +1,11 @@
1
+ before_install:
2
+ - wget -O- http://packages.couchbase.com/ubuntu/couchbase.key | sudo apt-key add -
3
+ - echo deb http://packages.couchbase.com/preview/ubuntu lucid lucid/main | sudo tee /etc/apt/sources.list.d/couchbase.list
4
+ - sudo apt-get update
5
+ - sudo apt-get -y install libevent-dev libvbucket-dev libcouchbase-dev
6
+
7
+ rvm:
8
+ - 1.8.7
9
+ - 1.9.2
10
+ - 1.9.3
11
+ - ree
@@ -0,0 +1,5 @@
1
+ --protected
2
+ --no-private
3
+ -
4
+ README.markdown
5
+ HISTORY.markdown
@@ -0,0 +1,75 @@
1
+ We've decided to use "gerrit" for our code review system, making it
2
+ easier for all of us to contribute with code and comments.
3
+
4
+ 1. Visit http://review.couchbase.org and "Register" for an account
5
+ 2. Review http://review.couchbase.org/static/individual_agreement.html
6
+ 3. Agree to agreement by visiting http://review.couchbase.org/#/settings/agreements
7
+ 4. If you do not receive an email, please contact us
8
+ 5. Check out the `couchbase-ruby-model` area http://review.couchbase.org/#/q/status:open+project:couchbase-ruby-model,n,z
9
+ 6. Join us on IRC at #libcouchbase on Freenode :-)
10
+
11
+ We normally don't go looking for stuff in gerrit, so you should add at
12
+ least me `"Sergey Avseyev" <sergey.avseyev@gmail.com>` as a reviewer
13
+ for your patch (and I'll know who else to add and add them for you).
14
+
15
+ ## Contributing Using Repo Tool
16
+
17
+ Follow ["Uploading Changes" guide][1] on the site if you have some code to contribute.
18
+
19
+ All you should need to set up your development environment should be:
20
+
21
+ ~ % mkdir couchbase-ruby
22
+ ~ % cd couchbase-ruby
23
+ ~/couchbase-ruby % repo init -u git://github.com/trondn/manifests.git -m ruby.xml
24
+ ~/couchbase-ruby % repo sync
25
+ ~/couchbase-ruby % repo start my-branch-name --all
26
+ ~/couchbase-ruby % make
27
+
28
+ This will build the latest version of `libcouchbase`,
29
+ `couchbase-ruby-client` and `couchbase-ruby-model` libraries. You must
30
+ have a C and C++ compiler installed, automake, autoconf.
31
+
32
+ If you have to make any changes just commit them before you upload
33
+ them to gerrit with the following command:
34
+
35
+ ~/couchbase-ruby/model % repo upload
36
+
37
+ You might experience a problem trying to upload the patches if you've
38
+ selected a different login name at http://review.couchbase.org than
39
+ your login name. Don't worry, all you need to do is to add the
40
+ following to your ~/.gitconfig file:
41
+
42
+ [review "review.couchbase.org"]
43
+ username = YOURNAME
44
+
45
+ ## Contributing Using Plain Git
46
+
47
+ If you not so familiar with repo tool and its workflow there is
48
+ alternative way to do the same job. Lets assume you have installed
49
+ couchbase gem and libcouchbase from official packages and would you to
50
+ contribute to couchbase-model gem only. Then you just need to complete
51
+ gerrit registration steps above and clone the source repository
52
+ (remember the repository on github.com is just a mirror):
53
+
54
+ ~ % git clone ssh://YOURNAME@review.couchbase.org:29418/couchbase-ruby-model.git
55
+
56
+ Install [`commit-msg` hook][2]:
57
+
58
+ ~/couchbase-ruby-model % scp -p -P 29418 YOURNAME@review.couchbase.org:hooks/commit-msg .git/hooks/
59
+
60
+ Make your changes and upload them for review:
61
+
62
+ ~/couchbase-ruby-model % git commit
63
+ ~/couchbase-ruby-model % git push origin HEAD:refs/for/master
64
+
65
+ If you need to fix or add something to your patch, do it and re-upload
66
+ the changes (all you need is to keep `Change-Id:` line the same to
67
+ allow gerrit to track the patch.
68
+
69
+ ~/couchbase-ruby-model % git commit --amend
70
+ ~/couchbase-ruby-model % git push origin HEAD:refs/for/master
71
+
72
+ Happy hacking!
73
+
74
+ [1]: http://review.couchbase.org/Documentation/user-upload.html
75
+ [2]: http://review.couchbase.org/Documentation/user-changeid.html
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in couchbase-model.gemspec
4
+ gemspec
@@ -0,0 +1,112 @@
1
+ ## 0.5.3 / 2013-06-06
2
+
3
+ * Prefer single-quoted strings (Andrey Koleshko)
4
+ * Test for Model.design_document (Andrey Koleshko)
5
+ * Support for batch finding multiple objects by id (Jon Moses)
6
+ * Test for activemodel instead of rails for activemodel validations
7
+ * Update couchbase dependency to 1.3.0
8
+
9
+ ## 0.5.2 / 2013-02-25
10
+
11
+ * Fix attribute inheritance when subclassing (Mike Evans)
12
+ * Added as_json method for rails JSON responses (Stephen von Takach)
13
+ * Add contributing document
14
+ * Fix test hiding
15
+ * Remove comments from the javascript sources
16
+ * Reduce development dependencies and update jar version
17
+
18
+ ## 0.5.1 / 2012-11-29
19
+
20
+ * Introduce save! and create! methods and raise RecordInvalid only from them
21
+
22
+ ## 0.5.0 / 2012-11-21
23
+
24
+ * Update template for map function
25
+ * Use extended get for #find_by_id
26
+ * Do not use HashWithIndifferentAccess class unless it defined
27
+ * Pass options to #create method
28
+ * Ensure validness on create
29
+ * Fix storing raw data
30
+ * Define read_attribute and write_attribute methods
31
+ * Support couchbase 1.2.0.z.beta4
32
+
33
+ ## 0.4.4 / 2012-10-17
34
+
35
+ * Make #to_param aware about keys
36
+
37
+ ## 0.4.2 / 2012-10-17
38
+
39
+ * Update CAS value after mutation
40
+ * Added ability to pass options to mutators. Thanks to @kierangraham
41
+ * Always try to include Rails stuff into model
42
+ * Use key if id is nil (makes sense for some view results)
43
+
44
+ ## 0.4.1 / 2012-09-26
45
+
46
+ * Put support notes in README
47
+ * Add note about validations in the README
48
+ * Update repo URL
49
+ * RCBC-85 Fix typo in `save' method
50
+
51
+ ## 0.4.0 / 2012-09-25
52
+
53
+ * Add validation hooks for Rails application
54
+ * Check meta presence as more robust indicator of key presence
55
+
56
+ ## 0.3.1 / 2012-09-22
57
+
58
+ * Allow to specify default storage options
59
+
60
+ ## 0.3.0 / 2012-09-22
61
+
62
+ * Implement belongs_to asscociation
63
+ * Use ActiveModel naming and conversion
64
+ * Define persisted? method
65
+ * Allow optional CAS value for mutators
66
+ * Use replace in save method. Thanks to @scalabl3
67
+ * Add callbacks for :save, :create, :update and :delete methods
68
+
69
+ ## 0.2.0 / 2012-09-18
70
+
71
+ * Add Rails 3 configuration possibilities, allow configuring
72
+ ensure_design_documents to disable/enable the auto view upgrade
73
+ (thanks to David Rice)
74
+ * Ensure views directory is always set (thanks to David Rice)
75
+ * Fix tests for ruby 1.8.7
76
+ * Reword header in README
77
+ * Merge pull request #3 from davidjrice/master
78
+ * Use debugger gem
79
+ * Update Model wrapper to match latest API changes
80
+ * Strip contents of the JS file
81
+ * Do not submit empty views
82
+ * Allow to specify default view options
83
+ * Display only non-nil values
84
+ * Rename underscored methods
85
+ * Load spatial views into design document
86
+
87
+ ## 0.1.0 / 2012-04-10
88
+
89
+ * Allows to define several attributes at once
90
+ * Allow to specify default value
91
+ * Add missing @since and @return tags
92
+ * Add railtie
93
+ * Add config generator
94
+ * Use verbose mode by default for GET operation
95
+ * Add views generators
96
+ * Update document wrapper
97
+ * Add code to upgrade design docs automatically
98
+ * Cache design document signature in memory
99
+ * Use symbols for attribute hash
100
+ * Skip connection errors during start up
101
+ * Don't show config warning for config generator
102
+ * Calculate mtime of the design document
103
+ * Assign current_doc after creation
104
+ * Update readme file
105
+ * Use preview repository for travis
106
+ * Do not make zipball
107
+ * Show model attributes with model class
108
+ * Update test. The couchbase gem is using new defaults
109
+
110
+ ## 0.0.1/ 2012-03-17
111
+
112
+ * Initial version
@@ -0,0 +1,160 @@
1
+ # Couchbase Model
2
+
3
+ This library allows to declare models for [couchbase gem][1].
4
+
5
+ ## SUPPORT
6
+
7
+ If you found an issue, please file it in our [JIRA][3]. Also you are
8
+ always welcome on `#libcouchbase` channel at [freenode.net IRC servers][4].
9
+
10
+ Documentation: [http://rdoc.info/gems/couchbase-model](http://rdoc.info/gems/couchbase-model)
11
+
12
+ ## Rails integration
13
+
14
+ To generate config you can use `rails generate couchbase:config`:
15
+
16
+ $ rails generate couchbase:config
17
+ create config/couchbase.yml
18
+
19
+ It will generate this `config/couchbase.yml` for you:
20
+
21
+ common: &common
22
+ hostname: localhost
23
+ port: 8091
24
+ username:
25
+ password:
26
+ pool: default
27
+
28
+ development:
29
+ <<: *common
30
+ bucket: couchbase_tinyurl_development
31
+
32
+ test:
33
+ <<: *common
34
+ bucket: couchbase_tinyurl_test
35
+
36
+ # set these environment variables on your production server
37
+ production:
38
+ hostname: <%= ENV['COUCHBASE_HOST'] %>
39
+ port: <%= ENV['COUCHBASE_PORT'] %>
40
+ username: <%= ENV['COUCHBASE_USERNAME'] %>
41
+ password: <%= ENV['COUCHBASE_PASSWORD'] %>
42
+ pool: <%= ENV['COUCHBASE_POOL'] %>
43
+ bucket: <%= ENV['COUCHBASE_BUCKET'] %>
44
+
45
+ ## Examples
46
+
47
+ require 'couchbase/model'
48
+
49
+ class Post < Couchbase::Model
50
+ attribute :title
51
+ attribute :body
52
+ attribute :draft
53
+ end
54
+
55
+ p = Post.new(:id => 'hello-world',
56
+ :title => 'Hello world',
57
+ :draft => true)
58
+ p.save
59
+ p = Post.find('hello-world')
60
+ p.body = "Once upon the times...."
61
+ p.save
62
+ p.update(:draft => false)
63
+ Post.bucket.get('hello-world') #=> {"title"=>"Hello world", "draft"=>false,
64
+ # "body"=>"Once upon the times...."}
65
+
66
+ You can also let the library generate the unique identifier for you:
67
+
68
+ p = Post.create(:title => 'How to generate ID',
69
+ :body => 'Open up the editor...')
70
+ p.id #=> "74f43c3116e788d09853226603000809"
71
+
72
+ There are several algorithms available. By default it use `:sequential`
73
+ algorithm, but you can change it to more suitable one for you:
74
+
75
+ class Post < Couchbase::Model
76
+ attribute :title
77
+ attribute :body
78
+ attribute :draft
79
+
80
+ uuid_algorithm :random
81
+ end
82
+
83
+ You can define connection options on per model basis:
84
+
85
+ class Post < Couchbase::Model
86
+ attribute :title
87
+ attribute :body
88
+ attribute :draft
89
+
90
+ connect :port => 80, :bucket => 'blog'
91
+ end
92
+
93
+ ## Validations
94
+
95
+ There are all methods from ActiveModel::Validations accessible in
96
+ context of rails application:
97
+
98
+ class Comment < Couchbase::Model
99
+ attribute :author, :body
100
+
101
+ validates_presence_of :author, :body
102
+ end
103
+
104
+ ## Views (aka Map/Reduce indexes)
105
+
106
+ Views are stored in models directory in subdirectory named after the
107
+ model (to be precious `design_document` attribute of the model class).
108
+ Here is an example of directory layout for `Link` model with three
109
+ views.
110
+
111
+ .
112
+ └── app
113
+ └── models
114
+ ├── link
115
+ │   ├── total_count
116
+ │   │   ├── map.js
117
+ │   │   └── reduce.js
118
+ │   ├── by_created_at
119
+ │   │   └── map.js
120
+ │   └── by_view_count
121
+ │   └── map.js
122
+ └── link.rb
123
+
124
+ To generate view you can use yet another generator `rails generate
125
+ couchbase:view DESIGNDOCNAME VIEWNAME`. For example how `total_count`
126
+ view could be generated:
127
+
128
+ $ rails generate couchbase:view link total_count
129
+
130
+ The generated files contains useful info and links about how to write
131
+ map and reduce functions, you can take a look at them in the [templates
132
+ directory][2].
133
+
134
+ In the model class you should declare accessible views:
135
+
136
+ class Post < Couchbase::Model
137
+ attribute :title
138
+ attribute :body
139
+ attribute :draft
140
+ attribute :view_count
141
+ attribute :created_at, :default => lambda { Time.now }
142
+
143
+ view :total_count, :by_created_at, :by_view_count
144
+ end
145
+
146
+ And request them later:
147
+
148
+ Post.by_created_at(:include_docs => true).each do |post|
149
+ puts post.title
150
+ end
151
+
152
+ Post.by_view_count(:include_docs => true).group_by(&:view_count) do |count, posts|
153
+ p "#{count} -> #{posts.map{|pp| pp.inspect}.join(', ')}"
154
+ end
155
+
156
+
157
+ [1]: https://github.com/couchbase/couchbase-ruby-client/
158
+ [2]: https://github.com/couchbase/couchbase-ruby-model/blob/master/lib/rails/generators/couchbase/view/templates/
159
+ [3]: http://couchbase.com/issues/browse/RCBC
160
+ [4]: http://freenode.net/irc_servers.shtml
@@ -0,0 +1,22 @@
1
+ # Author:: Couchbase <info@couchbase.com>
2
+ # Copyright:: 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 'bundler/gem_tasks'
19
+
20
+ Dir['tasks/*.rake'].sort.each { |f| load f }
21
+
22
+ task :default => :test
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path('../lib', __FILE__)
3
+ require 'couchbase/model/version'
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = 'jmoses-couchbase-model'
7
+ s.version = Couchbase::Model::VERSION
8
+ s.author = ['Couchbase', 'Jon Moses']
9
+ s.email = ['support@couchbase.com', 'jon@burningbush.us']
10
+ s.homepage = 'https://github.com/couchbase/couchbase-ruby-model'
11
+ s.summary = %q{Declarative interface to Couchbase. (Fork for connection-pool 2.0)}
12
+ s.description = %q{ORM-like interface allows you to persist your models to Couchbase. This fork requires my forked couchbase client, which uses connection-pool 2.0 instead of 1.0}
13
+
14
+ s.files = `git ls-files`.split("\n")
15
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
16
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
17
+ s.require_paths = ['lib']
18
+
19
+ s.add_runtime_dependency 'jmoses-couchbase', '~> 1.3.0'
20
+
21
+ s.add_development_dependency 'rake'
22
+ s.add_development_dependency 'minitest'
23
+ s.add_development_dependency 'activesupport'
24
+ end
@@ -0,0 +1,23 @@
1
+ # Author:: Couchbase <info@couchbase.com>
2
+ # Copyright:: 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 'couchbase/model'
19
+
20
+ # If we are using Rails then we will include the Couchbase railtie.
21
+ if defined?(Rails)
22
+ require 'couchbase/railtie'
23
+ end