riagent 0.0.1

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.
Files changed (40) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +19 -0
  3. data/Gemfile +24 -0
  4. data/Gemfile.lock +73 -0
  5. data/LICENSE +202 -0
  6. data/README.md +230 -0
  7. data/Rakefile +47 -0
  8. data/lib/rails/generators/riagent/install/install_generator.rb +35 -0
  9. data/lib/rails/generators/riagent/install/templates/riak.yml +16 -0
  10. data/lib/riagent/active_document.rb +53 -0
  11. data/lib/riagent/associations.rb +119 -0
  12. data/lib/riagent/configuration.rb +73 -0
  13. data/lib/riagent/conversion.rb +83 -0
  14. data/lib/riagent/errors.rb +33 -0
  15. data/lib/riagent/persistence/riak_json_strategy.rb +62 -0
  16. data/lib/riagent/persistence.rb +166 -0
  17. data/lib/riagent/railtie.rb +35 -0
  18. data/lib/riagent/search_schema.rb +58 -0
  19. data/lib/riagent/version.rb +23 -0
  20. data/lib/riagent.rb +29 -0
  21. data/riagent.gemspec +51 -0
  22. data/test/config/riak.yml.example +19 -0
  23. data/test/examples/models/address_book.rb +32 -0
  24. data/test/examples/models/blog_post.rb +31 -0
  25. data/test/examples/models/contact.rb +29 -0
  26. data/test/examples/models/user.rb +41 -0
  27. data/test/integration/persistence_integration_test.rb +76 -0
  28. data/test/seeds.rb +30 -0
  29. data/test/test_helper.rb +33 -0
  30. data/test/unit/active_document_test.rb +41 -0
  31. data/test/unit/active_model_lint_test.rb +33 -0
  32. data/test/unit/associations_has_many_test.rb +32 -0
  33. data/test/unit/associations_has_one_test.rb +85 -0
  34. data/test/unit/config_test.rb +37 -0
  35. data/test/unit/embedded_test.rb +38 -0
  36. data/test/unit/persistence_riak_json_test.rb +118 -0
  37. data/test/unit/persistence_test.rb +57 -0
  38. data/test/unit/search_schema_test.rb +26 -0
  39. data/test/unit/validation_test.rb +39 -0
  40. metadata +227 -0
@@ -0,0 +1,118 @@
1
+ ## -------------------------------------------------------------------
2
+ ##
3
+ ## Copyright (c) "2014" Dmitri Zagidulin and Basho Technologies, Inc.
4
+ ##
5
+ ## This file is provided to you under the Apache License,
6
+ ## Version 2.0 (the "License"); you may not use this file
7
+ ## except in compliance with the License. You may obtain
8
+ ## a copy of the License at
9
+ ##
10
+ ## http://www.apache.org/licenses/LICENSE-2.0
11
+ ##
12
+ ## Unless required by applicable law or agreed to in writing,
13
+ ## software distributed under the License is distributed on an
14
+ ## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
+ ## KIND, either express or implied. See the License for the
16
+ ## specific language governing permissions and limitations
17
+ ## under the License.
18
+ ##
19
+ ## -------------------------------------------------------------------
20
+
21
+ require 'test_helper'
22
+
23
+ describe "a Riagent::ActiveDocument that persists to RiakJson" do
24
+ it "saves via collection.insert()" do
25
+ user = User.new
26
+ User.collection = MiniTest::Mock.new
27
+ User.collection.expect :insert, nil, [user]
28
+
29
+ # Calling model.save() should result in a collection.insert() call
30
+ user.save({:validate => false})
31
+ User.collection.verify
32
+
33
+ # Reset
34
+ User.collection = nil
35
+ end
36
+
37
+ it "updates via collection.update()" do
38
+ user = User.new username: 'TestUserInitial'
39
+ User.collection = MiniTest::Mock.new
40
+ User.collection.expect :insert, nil, [user]
41
+
42
+ # model.update() is implemented as a save() call (with updated attributes)
43
+ user.update({ username: 'TestUserNewName'} )
44
+ User.collection.verify
45
+
46
+ # Reset
47
+ User.collection = nil
48
+ end
49
+
50
+ it "destroys via collection.remove()" do
51
+ user = User.new
52
+ User.collection = MiniTest::Mock.new
53
+ User.collection.expect :remove, nil, [user]
54
+
55
+ # Calling model.destroy() should result in a collection.remove() call
56
+ user.destroy
57
+ User.collection.verify
58
+
59
+ # Reset
60
+ User.collection = nil
61
+ end
62
+
63
+ it "returns nil when doing a find() for nil or empty key" do
64
+ User.find(nil).must_be_nil
65
+ User.find('').must_be_nil
66
+ end
67
+
68
+ it "performs a find() via collection.find_by_key()" do
69
+ test_key = 'user123'
70
+ User.collection = MiniTest::Mock.new
71
+ User.collection.expect :find_by_key, nil, [test_key]
72
+
73
+ # Calling Model class find() should result in a collection.find_by_key()
74
+ User.find(test_key)
75
+ User.collection.verify
76
+
77
+ # Reset
78
+ User.collection = nil
79
+ end
80
+
81
+ it "performs a where() via collection.find_all()" do
82
+ User.collection = MiniTest::Mock.new
83
+ query = { country: 'USA' }
84
+ User.collection.expect :find_all, [], [query.to_json]
85
+
86
+ # Calling Model class where() should result in a collection.find_all()
87
+ User.where(query)
88
+ User.collection.verify
89
+
90
+ # Reset
91
+ User.collection = nil
92
+ end
93
+
94
+ it "performs a find_one() via collection.find_one()" do
95
+ User.collection = MiniTest::Mock.new
96
+ query = { username: 'TestUser' }
97
+ User.collection.expect :find_one, [], [query.to_json]
98
+
99
+ # Calling Model class find_one() should result in a collection.find_one()
100
+ User.find_one(query)
101
+ User.collection.verify
102
+
103
+ # Reset
104
+ User.collection = nil
105
+ end
106
+
107
+ it "performs an all_for_field() via collection.find_all()" do
108
+ User.collection = MiniTest::Mock.new
109
+ User.collection.expect :find_all, [], [String]
110
+
111
+ # Calling Model class all_for_field() should result in a collection.find_all()
112
+ User.all_for_field(:username)
113
+ User.collection.verify
114
+
115
+ # Reset
116
+ User.collection = nil
117
+ end
118
+ end
@@ -0,0 +1,57 @@
1
+ ## -------------------------------------------------------------------
2
+ ##
3
+ ## Copyright (c) "2014" Dmitri Zagidulin and Basho Technologies, Inc.
4
+ ##
5
+ ## This file is provided to you under the Apache License,
6
+ ## Version 2.0 (the "License"); you may not use this file
7
+ ## except in compliance with the License. You may obtain
8
+ ## a copy of the License at
9
+ ##
10
+ ## http://www.apache.org/licenses/LICENSE-2.0
11
+ ##
12
+ ## Unless required by applicable law or agreed to in writing,
13
+ ## software distributed under the License is distributed on an
14
+ ## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
+ ## KIND, either express or implied. See the License for the
16
+ ## specific language governing permissions and limitations
17
+ ## under the License.
18
+ ##
19
+ ## -------------------------------------------------------------------
20
+
21
+ require 'test_helper'
22
+
23
+ describe "a Riagent::ActiveDocument has Persistence options" do
24
+ context "via collection_type :riak_json" do
25
+ it "#model class methods" do
26
+ # Adding the line +collection_type :riak_json+ to a model
27
+ # means that it will be persisted to a RiakJson::Collection
28
+ User.get_collection_type.must_equal :riak_json
29
+ User.persistence_strategy.must_equal :riak_json
30
+
31
+ # It also grants access to a RiakJson::Client instance, to the model class
32
+ User.client.must_be_kind_of RiakJson::Client
33
+
34
+ User.collection.must_be_kind_of RiakJson::Collection
35
+ User.collection_name.must_equal 'users'
36
+ end
37
+
38
+ it "#model persistence instance methods" do
39
+ user = User.new
40
+
41
+ # Adding the line +collection_type :riak_json+ to a model
42
+ # exposes the usual array of persistence methods
43
+ user.must_respond_to :save
44
+ user.must_respond_to :save!
45
+ user.must_respond_to :update
46
+ user.must_respond_to :update_attributes # alias for update()
47
+ user.must_respond_to :update!
48
+ user.must_respond_to :destroy
49
+ end
50
+
51
+ it "#model persistence class methods" do
52
+ User.must_respond_to :find
53
+ User.must_respond_to :find_one
54
+ User.must_respond_to :where
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,26 @@
1
+ require 'test_helper'
2
+
3
+ describe "an Active Document" do
4
+ it "can build a RiakJson schema from the annotated attributes" do
5
+ schema = User.schema
6
+ schema.must_be_kind_of RiakJson::CollectionSchema
7
+ schema.fields.wont_be_empty
8
+ schema.fields.count.must_equal 2
9
+ schema.fields[0][:name].to_s.must_equal 'username'
10
+ schema.fields[0][:type].must_equal 'text'
11
+ schema.fields[0][:require].must_equal true
12
+ schema.fields[1][:name].to_s.must_equal 'email'
13
+ schema.fields[1][:type].must_equal 'string'
14
+ schema.fields[1][:require].must_equal true
15
+ end
16
+
17
+ it "can save the Solr indexing schema to RiakJson" do
18
+ schema = User.schema
19
+ User.collection = MiniTest::Mock.new
20
+
21
+ # Ensure that calling User.save_solr_schema() results in a call to collection.set_schema()
22
+ User.collection.expect :set_schema, nil, [RiakJson::CollectionSchema]
23
+ User.save_solr_schema
24
+ User.collection.verify
25
+ end
26
+ end
@@ -0,0 +1,39 @@
1
+ ## -------------------------------------------------------------------
2
+ ##
3
+ ## Copyright (c) "2014" Dmitri Zagidulin and Basho Technologies, Inc.
4
+ ##
5
+ ## This file is provided to you under the Apache License,
6
+ ## Version 2.0 (the "License"); you may not use this file
7
+ ## except in compliance with the License. You may obtain
8
+ ## a copy of the License at
9
+ ##
10
+ ## http://www.apache.org/licenses/LICENSE-2.0
11
+ ##
12
+ ## Unless required by applicable law or agreed to in writing,
13
+ ## software distributed under the License is distributed on an
14
+ ## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
+ ## KIND, either express or implied. See the License for the
16
+ ## specific language governing permissions and limitations
17
+ ## under the License.
18
+ ##
19
+ ## -------------------------------------------------------------------
20
+
21
+ require 'test_helper'
22
+
23
+ describe "a Riagent::ActiveDocument" do
24
+ it "supports ActiveModel validations" do
25
+ @new_user = User.new
26
+ refute @new_user.valid?, "User requires a username to be present"
27
+ assert @new_user.errors.messages.include?(:username), "Missing username validation error when saving"
28
+
29
+ @new_user.username = "TestUser"
30
+ assert @new_user.valid?, "User should now be valid, after setting a username"
31
+ end
32
+
33
+ it "raises InvalidDocumentError on save!()" do
34
+ @new_user = User.new
35
+ refute @new_user.valid?, "User requires a username to be present"
36
+ refute @new_user.save, "User requires a username, save should fail"
37
+ lambda { @new_user.save! }.must_raise Riagent::InvalidDocumentError # save! should raise an exception
38
+ end
39
+ end
metadata ADDED
@@ -0,0 +1,227 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: riagent
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Dmitri Zagidulin
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-06-01 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: riak_json
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: riak-client
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
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: riagent-document
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: activemodel
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '4.0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '4.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: activesupport
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '4.0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '4.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: bundler
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rake
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: minitest
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '4.2'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '4.2'
125
+ - !ruby/object:Gem::Dependency
126
+ name: minitest-spec-context
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ description: Provides Ruby on Rails integration for RiakJson (Riak + Solr document
140
+ store API)
141
+ email:
142
+ - dzagidulin@gmail.com
143
+ executables: []
144
+ extensions: []
145
+ extra_rdoc_files: []
146
+ files:
147
+ - ".gitignore"
148
+ - Gemfile
149
+ - Gemfile.lock
150
+ - LICENSE
151
+ - README.md
152
+ - Rakefile
153
+ - lib/rails/generators/riagent/install/install_generator.rb
154
+ - lib/rails/generators/riagent/install/templates/riak.yml
155
+ - lib/riagent.rb
156
+ - lib/riagent/active_document.rb
157
+ - lib/riagent/associations.rb
158
+ - lib/riagent/configuration.rb
159
+ - lib/riagent/conversion.rb
160
+ - lib/riagent/errors.rb
161
+ - lib/riagent/persistence.rb
162
+ - lib/riagent/persistence/riak_json_strategy.rb
163
+ - lib/riagent/railtie.rb
164
+ - lib/riagent/search_schema.rb
165
+ - lib/riagent/version.rb
166
+ - riagent.gemspec
167
+ - test/config/riak.yml.example
168
+ - test/examples/models/address_book.rb
169
+ - test/examples/models/blog_post.rb
170
+ - test/examples/models/contact.rb
171
+ - test/examples/models/user.rb
172
+ - test/integration/persistence_integration_test.rb
173
+ - test/seeds.rb
174
+ - test/test_helper.rb
175
+ - test/unit/active_document_test.rb
176
+ - test/unit/active_model_lint_test.rb
177
+ - test/unit/associations_has_many_test.rb
178
+ - test/unit/associations_has_one_test.rb
179
+ - test/unit/config_test.rb
180
+ - test/unit/embedded_test.rb
181
+ - test/unit/persistence_riak_json_test.rb
182
+ - test/unit/persistence_test.rb
183
+ - test/unit/search_schema_test.rb
184
+ - test/unit/validation_test.rb
185
+ homepage: https://github.com/dmitrizagidulin/riagent
186
+ licenses:
187
+ - Apache 2.0
188
+ metadata: {}
189
+ post_install_message:
190
+ rdoc_options: []
191
+ require_paths:
192
+ - lib
193
+ required_ruby_version: !ruby/object:Gem::Requirement
194
+ requirements:
195
+ - - ">="
196
+ - !ruby/object:Gem::Version
197
+ version: '0'
198
+ required_rubygems_version: !ruby/object:Gem::Requirement
199
+ requirements:
200
+ - - ">="
201
+ - !ruby/object:Gem::Version
202
+ version: '0'
203
+ requirements: []
204
+ rubyforge_project:
205
+ rubygems_version: 2.2.1
206
+ signing_key:
207
+ specification_version: 4
208
+ summary: Rails integration for RiakJson document store
209
+ test_files:
210
+ - test/config/riak.yml.example
211
+ - test/examples/models/address_book.rb
212
+ - test/examples/models/blog_post.rb
213
+ - test/examples/models/contact.rb
214
+ - test/examples/models/user.rb
215
+ - test/integration/persistence_integration_test.rb
216
+ - test/seeds.rb
217
+ - test/test_helper.rb
218
+ - test/unit/active_document_test.rb
219
+ - test/unit/active_model_lint_test.rb
220
+ - test/unit/associations_has_many_test.rb
221
+ - test/unit/associations_has_one_test.rb
222
+ - test/unit/config_test.rb
223
+ - test/unit/embedded_test.rb
224
+ - test/unit/persistence_riak_json_test.rb
225
+ - test/unit/persistence_test.rb
226
+ - test/unit/search_schema_test.rb
227
+ - test/unit/validation_test.rb