mark_mapper 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE +21 -0
- data/README.rdoc +39 -0
- data/examples/attr_accessible.rb +24 -0
- data/examples/attr_protected.rb +24 -0
- data/examples/cache_key.rb +26 -0
- data/examples/custom_types.rb +26 -0
- data/examples/identity_map.rb +30 -0
- data/examples/identity_map/automatic.rb +2 -0
- data/examples/keys.rb +42 -0
- data/examples/modifiers/set.rb +27 -0
- data/examples/plugins.rb +40 -0
- data/examples/querying.rb +39 -0
- data/examples/sample_app.rb +43 -0
- data/examples/scopes.rb +56 -0
- data/examples/validating/embedded_docs.rb +31 -0
- data/lib/mark_mapper.rb +125 -0
- data/lib/mark_mapper/config.rb +90 -0
- data/lib/mark_mapper/connection.rb +60 -0
- data/lib/mark_mapper/criteria_hash.rb +194 -0
- data/lib/mark_mapper/document.rb +46 -0
- data/lib/mark_mapper/embedded_document.rb +32 -0
- data/lib/mark_mapper/exceptions.rb +33 -0
- data/lib/mark_mapper/extensions/array.rb +27 -0
- data/lib/mark_mapper/extensions/boolean.rb +45 -0
- data/lib/mark_mapper/extensions/date.rb +29 -0
- data/lib/mark_mapper/extensions/duplicable.rb +86 -0
- data/lib/mark_mapper/extensions/float.rb +18 -0
- data/lib/mark_mapper/extensions/hash.rb +26 -0
- data/lib/mark_mapper/extensions/integer.rb +27 -0
- data/lib/mark_mapper/extensions/kernel.rb +11 -0
- data/lib/mark_mapper/extensions/nil_class.rb +18 -0
- data/lib/mark_mapper/extensions/object.rb +30 -0
- data/lib/mark_mapper/extensions/object_id.rb +18 -0
- data/lib/mark_mapper/extensions/set.rb +20 -0
- data/lib/mark_mapper/extensions/string.rb +31 -0
- data/lib/mark_mapper/extensions/symbol.rb +87 -0
- data/lib/mark_mapper/extensions/time.rb +29 -0
- data/lib/mark_mapper/locale/en.yml +5 -0
- data/lib/mark_mapper/middleware/identity_map.rb +41 -0
- data/lib/mark_mapper/normalizers/criteria_hash_key.rb +17 -0
- data/lib/mark_mapper/normalizers/criteria_hash_value.rb +66 -0
- data/lib/mark_mapper/normalizers/fields_value.rb +26 -0
- data/lib/mark_mapper/normalizers/hash_key.rb +19 -0
- data/lib/mark_mapper/normalizers/integer.rb +19 -0
- data/lib/mark_mapper/normalizers/options_hash_value.rb +83 -0
- data/lib/mark_mapper/normalizers/sort_value.rb +55 -0
- data/lib/mark_mapper/options_hash.rb +103 -0
- data/lib/mark_mapper/pagination.rb +6 -0
- data/lib/mark_mapper/pagination/collection.rb +32 -0
- data/lib/mark_mapper/pagination/paginator.rb +46 -0
- data/lib/mark_mapper/plugins.rb +22 -0
- data/lib/mark_mapper/plugins/accessible.rb +61 -0
- data/lib/mark_mapper/plugins/active_model.rb +18 -0
- data/lib/mark_mapper/plugins/associations.rb +96 -0
- data/lib/mark_mapper/plugins/associations/base.rb +98 -0
- data/lib/mark_mapper/plugins/associations/belongs_to_association.rb +63 -0
- data/lib/mark_mapper/plugins/associations/belongs_to_polymorphic_proxy.rb +35 -0
- data/lib/mark_mapper/plugins/associations/belongs_to_proxy.rb +52 -0
- data/lib/mark_mapper/plugins/associations/collection.rb +29 -0
- data/lib/mark_mapper/plugins/associations/embedded_collection.rb +44 -0
- data/lib/mark_mapper/plugins/associations/in_array_proxy.rb +133 -0
- data/lib/mark_mapper/plugins/associations/many_association.rb +63 -0
- data/lib/mark_mapper/plugins/associations/many_documents_as_proxy.rb +28 -0
- data/lib/mark_mapper/plugins/associations/many_documents_proxy.rb +142 -0
- data/lib/mark_mapper/plugins/associations/many_embedded_polymorphic_proxy.rb +32 -0
- data/lib/mark_mapper/plugins/associations/many_embedded_proxy.rb +24 -0
- data/lib/mark_mapper/plugins/associations/many_polymorphic_proxy.rb +14 -0
- data/lib/mark_mapper/plugins/associations/one_as_proxy.rb +22 -0
- data/lib/mark_mapper/plugins/associations/one_association.rb +48 -0
- data/lib/mark_mapper/plugins/associations/one_embedded_polymorphic_proxy.rb +30 -0
- data/lib/mark_mapper/plugins/associations/one_embedded_proxy.rb +44 -0
- data/lib/mark_mapper/plugins/associations/one_proxy.rb +95 -0
- data/lib/mark_mapper/plugins/associations/proxy.rb +138 -0
- data/lib/mark_mapper/plugins/associations/single_association.rb +46 -0
- data/lib/mark_mapper/plugins/caching.rb +21 -0
- data/lib/mark_mapper/plugins/callbacks.rb +42 -0
- data/lib/mark_mapper/plugins/clone.rb +24 -0
- data/lib/mark_mapper/plugins/counter_cache.rb +97 -0
- data/lib/mark_mapper/plugins/dirty.rb +61 -0
- data/lib/mark_mapper/plugins/document.rb +41 -0
- data/lib/mark_mapper/plugins/dumpable.rb +22 -0
- data/lib/mark_mapper/plugins/dynamic_querying.rb +45 -0
- data/lib/mark_mapper/plugins/dynamic_querying/dynamic_finder.rb +44 -0
- data/lib/mark_mapper/plugins/embedded_callbacks.rb +81 -0
- data/lib/mark_mapper/plugins/embedded_document.rb +53 -0
- data/lib/mark_mapper/plugins/equality.rb +23 -0
- data/lib/mark_mapper/plugins/identity_map.rb +144 -0
- data/lib/mark_mapper/plugins/indexable.rb +86 -0
- data/lib/mark_mapper/plugins/inspect.rb +16 -0
- data/lib/mark_mapper/plugins/keys.rb +470 -0
- data/lib/mark_mapper/plugins/keys/key.rb +134 -0
- data/lib/mark_mapper/plugins/keys/static.rb +45 -0
- data/lib/mark_mapper/plugins/logger.rb +18 -0
- data/lib/mark_mapper/plugins/modifiers.rb +140 -0
- data/lib/mark_mapper/plugins/pagination.rb +16 -0
- data/lib/mark_mapper/plugins/partial_updates.rb +77 -0
- data/lib/mark_mapper/plugins/persistence.rb +79 -0
- data/lib/mark_mapper/plugins/protected.rb +45 -0
- data/lib/mark_mapper/plugins/querying.rb +173 -0
- data/lib/mark_mapper/plugins/querying/decorated_markmapper_query.rb +75 -0
- data/lib/mark_mapper/plugins/rails.rb +79 -0
- data/lib/mark_mapper/plugins/rails/active_record_association_adapter.rb +33 -0
- data/lib/mark_mapper/plugins/sci.rb +82 -0
- data/lib/mark_mapper/plugins/scopes.rb +28 -0
- data/lib/mark_mapper/plugins/serialization.rb +109 -0
- data/lib/mark_mapper/plugins/timestamps.rb +29 -0
- data/lib/mark_mapper/plugins/touch.rb +18 -0
- data/lib/mark_mapper/plugins/userstamps.rb +18 -0
- data/lib/mark_mapper/plugins/validations.rb +96 -0
- data/lib/mark_mapper/query.rb +278 -0
- data/lib/mark_mapper/railtie.rb +52 -0
- data/lib/mark_mapper/railtie/database.rake +65 -0
- data/lib/mark_mapper/translation.rb +10 -0
- data/lib/mark_mapper/version.rb +4 -0
- data/lib/rails/generators/mark_mapper/config/config_generator.rb +37 -0
- data/lib/rails/generators/mark_mapper/config/templates/marklogic.yml +19 -0
- data/lib/rails/generators/mark_mapper/model/model_generator.rb +40 -0
- data/lib/rails/generators/mark_mapper/model/templates/model.rb +17 -0
- data/spec/config/mark_mapper.yml +6 -0
- data/spec/examples_spec.rb +25 -0
- data/spec/functional/accessible_spec.rb +198 -0
- data/spec/functional/associations/belongs_to_polymorphic_proxy_spec.rb +64 -0
- data/spec/functional/associations/belongs_to_proxy_spec.rb +255 -0
- data/spec/functional/associations/in_array_proxy_spec.rb +349 -0
- data/spec/functional/associations/many_documents_as_proxy_spec.rb +230 -0
- data/spec/functional/associations/many_documents_proxy_spec.rb +968 -0
- data/spec/functional/associations/many_embedded_polymorphic_proxy_spec.rb +238 -0
- data/spec/functional/associations/many_embedded_proxy_spec.rb +288 -0
- data/spec/functional/associations/many_polymorphic_proxy_spec.rb +302 -0
- data/spec/functional/associations/one_as_proxy_spec.rb +489 -0
- data/spec/functional/associations/one_embedded_polymorphic_proxy_spec.rb +207 -0
- data/spec/functional/associations/one_embedded_proxy_spec.rb +100 -0
- data/spec/functional/associations/one_proxy_spec.rb +406 -0
- data/spec/functional/associations_spec.rb +48 -0
- data/spec/functional/caching_spec.rb +75 -0
- data/spec/functional/callbacks_spec.rb +330 -0
- data/spec/functional/counter_cache_spec.rb +235 -0
- data/spec/functional/dirty_spec.rb +316 -0
- data/spec/functional/document_spec.rb +310 -0
- data/spec/functional/dumpable_spec.rb +24 -0
- data/spec/functional/dynamic_querying_spec.rb +75 -0
- data/spec/functional/embedded_document_spec.rb +316 -0
- data/spec/functional/equality_spec.rb +20 -0
- data/spec/functional/extensions_spec.rb +16 -0
- data/spec/functional/identity_map_spec.rb +483 -0
- data/spec/functional/keys_spec.rb +339 -0
- data/spec/functional/logger_spec.rb +20 -0
- data/spec/functional/modifiers_spec.rb +446 -0
- data/spec/functional/options_hash_spec.rb +41 -0
- data/spec/functional/pagination_spec.rb +89 -0
- data/spec/functional/partial_updates_spec.rb +530 -0
- data/spec/functional/protected_spec.rb +199 -0
- data/spec/functional/querying_spec.rb +984 -0
- data/spec/functional/rails_spec.rb +55 -0
- data/spec/functional/sci_spec.rb +374 -0
- data/spec/functional/scopes_spec.rb +204 -0
- data/spec/functional/static_keys_spec.rb +153 -0
- data/spec/functional/timestamps_spec.rb +97 -0
- data/spec/functional/touch_spec.rb +125 -0
- data/spec/functional/userstamps_spec.rb +46 -0
- data/spec/functional/validations_spec.rb +416 -0
- data/spec/quality_spec.rb +51 -0
- data/spec/spec_helper.rb +150 -0
- data/spec/support/matchers.rb +15 -0
- data/spec/support/models.rb +256 -0
- data/spec/symbol_operator_spec.rb +70 -0
- data/spec/symbol_spec.rb +9 -0
- data/spec/unit/associations/base_spec.rb +146 -0
- data/spec/unit/associations/belongs_to_association_spec.rb +30 -0
- data/spec/unit/associations/many_association_spec.rb +64 -0
- data/spec/unit/associations/one_association_spec.rb +48 -0
- data/spec/unit/associations/proxy_spec.rb +103 -0
- data/spec/unit/clone_spec.rb +79 -0
- data/spec/unit/config_generator_spec.rb +24 -0
- data/spec/unit/criteria_hash_spec.rb +218 -0
- data/spec/unit/document_spec.rb +251 -0
- data/spec/unit/dynamic_finder_spec.rb +125 -0
- data/spec/unit/embedded_document_spec.rb +676 -0
- data/spec/unit/equality_spec.rb +38 -0
- data/spec/unit/exceptions_spec.rb +12 -0
- data/spec/unit/extensions_spec.rb +368 -0
- data/spec/unit/identity_map_middleware_spec.rb +134 -0
- data/spec/unit/inspect_spec.rb +47 -0
- data/spec/unit/key_spec.rb +276 -0
- data/spec/unit/keys_spec.rb +155 -0
- data/spec/unit/mark_mapper_spec.rb +37 -0
- data/spec/unit/model_generator_spec.rb +45 -0
- data/spec/unit/normalizers/criteria_hash_key_spec.rb +37 -0
- data/spec/unit/normalizers/criteria_hash_value_spec.rb +200 -0
- data/spec/unit/normalizers/fields_value_spec.rb +45 -0
- data/spec/unit/normalizers/hash_key_spec.rb +15 -0
- data/spec/unit/normalizers/integer_spec.rb +24 -0
- data/spec/unit/normalizers/options_hash_value_spec.rb +99 -0
- data/spec/unit/normalizers/sort_value_spec.rb +98 -0
- data/spec/unit/options_hash_spec.rb +64 -0
- data/spec/unit/pagination/collection_spec.rb +30 -0
- data/spec/unit/pagination/paginator_spec.rb +118 -0
- data/spec/unit/pagination_spec.rb +11 -0
- data/spec/unit/plugins_spec.rb +89 -0
- data/spec/unit/query_spec.rb +837 -0
- data/spec/unit/rails_compatibility_spec.rb +40 -0
- data/spec/unit/rails_reflect_on_association_spec.rb +118 -0
- data/spec/unit/rails_spec.rb +188 -0
- data/spec/unit/serialization_spec.rb +169 -0
- data/spec/unit/serializers/json_serializer_spec.rb +218 -0
- data/spec/unit/serializers/xml_serializer_spec.rb +198 -0
- data/spec/unit/time_zones_spec.rb +44 -0
- data/spec/unit/translation_spec.rb +27 -0
- data/spec/unit/validations_spec.rb +588 -0
- metadata +307 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: b8da86f713512ffdee54852951d9e1e2f94c0bf5
|
4
|
+
data.tar.gz: 768ad651bee67d55396095b14db35963387fa9bc
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: b78ac1946be9798b7b53f6299d2164cafd6b941b603584b1aa5ce720ce9139ffe85c5ca7ee00a30b41c00d292b4327b44f01e504ceb9f4c2b383e787446a1715
|
7
|
+
data.tar.gz: 5dfb0ecac9c51de0b446d7466d56e7baedd97fe84f79102126aa21b6938fc194dc3c11fed2023a78749672abc3b473ee5a61750b20f30f037c929874948b084f
|
data/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2015 Paxton Hare
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
data/README.rdoc
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
= MarkMapper
|
2
|
+
|
3
|
+
A Ruby Object Mapper for MarkLogic.
|
4
|
+
|
5
|
+
== Install
|
6
|
+
|
7
|
+
$ gem install mark_mapper
|
8
|
+
|
9
|
+
== Documentation
|
10
|
+
|
11
|
+
http://markmapper.com/documentation/
|
12
|
+
|
13
|
+
http://rdoc.info/github/markmapper/markmapper
|
14
|
+
|
15
|
+
== Compatibility
|
16
|
+
|
17
|
+
MarkMapper is tested against:
|
18
|
+
|
19
|
+
* MRI 2.2.0
|
20
|
+
|
21
|
+
Additionally, MarkMapper is tested against:
|
22
|
+
|
23
|
+
* Rails 4.2.x
|
24
|
+
|
25
|
+
== Contributing & Development
|
26
|
+
|
27
|
+
$ git clone https://github.com/paxtonhare/markmapper && cd markmapper
|
28
|
+
$ bundle install
|
29
|
+
$ bundle exec rake
|
30
|
+
|
31
|
+
* Fork the project.
|
32
|
+
* Make your feature addition or bug fix. All specs should pass.
|
33
|
+
* Add specs for your changes. This is important so I don't break it in a future version unintentionally.
|
34
|
+
* Commit, do not mess with Rakefile, version, or history. If you want to have your own version, that is fine but bump version in a commit by itself in another branch so a maintainer ignore it when your pull request is merged.
|
35
|
+
* Send a pull request. Bonus points for topic branches.
|
36
|
+
|
37
|
+
== License & Copyright
|
38
|
+
|
39
|
+
See LICENSE for details.
|
@@ -0,0 +1,24 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.expand_path('../../lib', __FILE__))
|
2
|
+
require_relative './sample_app'
|
3
|
+
|
4
|
+
MarkMapper.application.create
|
5
|
+
|
6
|
+
class User
|
7
|
+
include MarkMapper::Document
|
8
|
+
key :email, String
|
9
|
+
key :admin, Boolean, :default => false
|
10
|
+
|
11
|
+
# Only accessible or protected can be used, they cannot be used together
|
12
|
+
attr_accessible :email
|
13
|
+
end
|
14
|
+
|
15
|
+
# only accessible are set on new/create/etc.
|
16
|
+
user = User.create(:email => 'IDontLowerCaseThings@gmail.com', :admin => true)
|
17
|
+
puts user.admin # false
|
18
|
+
|
19
|
+
# can be set using accessor
|
20
|
+
user.admin = true
|
21
|
+
user.save
|
22
|
+
puts user.admin # true
|
23
|
+
|
24
|
+
MarkMapper.application.drop
|
@@ -0,0 +1,24 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.expand_path('../../lib', __FILE__))
|
2
|
+
require_relative './sample_app'
|
3
|
+
|
4
|
+
MarkMapper.application.create
|
5
|
+
|
6
|
+
class User
|
7
|
+
include MarkMapper::Document
|
8
|
+
key :email, String
|
9
|
+
key :admin, Boolean, :default => false
|
10
|
+
|
11
|
+
# Only accessible or protected can be used, they cannot be used together
|
12
|
+
attr_protected :admin
|
13
|
+
end
|
14
|
+
|
15
|
+
# protected are ignored on new/create/etc.
|
16
|
+
user = User.create(:email => 'IDontLowerCaseThings@gmail.com', :admin => true)
|
17
|
+
puts user.admin # false
|
18
|
+
|
19
|
+
# can be set using accessor
|
20
|
+
user.admin = true
|
21
|
+
user.save
|
22
|
+
puts user.admin # true
|
23
|
+
|
24
|
+
MarkMapper.application.drop
|
@@ -0,0 +1,26 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.expand_path('../../lib', __FILE__))
|
2
|
+
require_relative './sample_app'
|
3
|
+
|
4
|
+
MarkMapper.application.create
|
5
|
+
|
6
|
+
class User
|
7
|
+
include MarkMapper::Document
|
8
|
+
end
|
9
|
+
|
10
|
+
# New Documents
|
11
|
+
puts User.new.cache_key # User/new
|
12
|
+
|
13
|
+
# Created Documents
|
14
|
+
puts User.create.cache_key # User/:id (ie: User/4c7a940cbcd1b3319b000003)
|
15
|
+
|
16
|
+
# With Suffix
|
17
|
+
puts User.create.cache_key(:foo) # User/:id/foo
|
18
|
+
|
19
|
+
# With Multiple Suffixes
|
20
|
+
puts User.create.cache_key(:foo, :bar, :baz) # User/:id/foo/bar/baz
|
21
|
+
|
22
|
+
# When updated_at key exists it will be used
|
23
|
+
User.timestamps!
|
24
|
+
puts User.create.cache_key # User/:id-:updated_at (ie: User/4c7a940cbcd1b3319b000003-20100829170828)
|
25
|
+
|
26
|
+
MarkMapper.application.drop
|
@@ -0,0 +1,26 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.expand_path('../../lib', __FILE__))
|
2
|
+
require_relative './sample_app'
|
3
|
+
require 'pp'
|
4
|
+
|
5
|
+
MarkMapper.application.create
|
6
|
+
|
7
|
+
class DowncasedString
|
8
|
+
# to_marklogic gets called anytime a value is assigned
|
9
|
+
def self.to_marklogic(value)
|
10
|
+
value.nil? ? nil : value.to_s.downcase
|
11
|
+
end
|
12
|
+
|
13
|
+
# from marklogic gets called anytime a value is read
|
14
|
+
def self.from_marklogic(value)
|
15
|
+
value.nil? ? nil : value.to_s.downcase
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
class User
|
20
|
+
include MarkMapper::Document
|
21
|
+
key :email, DowncasedString
|
22
|
+
end
|
23
|
+
|
24
|
+
pp User.create(:email => 'IDontLowerCaseThings@gmail.com')
|
25
|
+
|
26
|
+
MarkMapper.application.drop
|
@@ -0,0 +1,30 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.expand_path('../../lib', __FILE__))
|
2
|
+
require_relative './sample_app'
|
3
|
+
require 'pp'
|
4
|
+
|
5
|
+
MarkMapper.application.create
|
6
|
+
|
7
|
+
MarkMapper::Plugins::IdentityMap.enabled = true
|
8
|
+
|
9
|
+
class User
|
10
|
+
include MarkMapper::Document
|
11
|
+
|
12
|
+
key :name, String
|
13
|
+
end
|
14
|
+
User.delete_all
|
15
|
+
|
16
|
+
# User gets added to map on save
|
17
|
+
user = User.create(:name => 'John')
|
18
|
+
|
19
|
+
# Does not matter how you find user, it is always the same object until the identity map is cleared
|
20
|
+
puts "#{User.find(user.id).object_id} == #{user.object_id}"
|
21
|
+
puts "#{User.all[0].object_id} == #{user.object_id}"
|
22
|
+
|
23
|
+
MarkMapper::Plugins::IdentityMap.clear
|
24
|
+
puts "#{User.find(user.id).object_id} != #{user.object_id}"
|
25
|
+
|
26
|
+
# User gets removed from map on destroy
|
27
|
+
user = User.create
|
28
|
+
user.destroy
|
29
|
+
|
30
|
+
MarkMapper.application.drop
|
data/examples/keys.rb
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.expand_path('../../lib', __FILE__))
|
2
|
+
require_relative './sample_app'
|
3
|
+
require 'pp'
|
4
|
+
|
5
|
+
MarkMapper.application.create
|
6
|
+
|
7
|
+
class User
|
8
|
+
include MarkMapper::Document
|
9
|
+
|
10
|
+
key :first_name, String, :required => true
|
11
|
+
key :last_name, String, :required => true
|
12
|
+
key :token, String, :default => lambda { 'some random string' }
|
13
|
+
key :age, Integer
|
14
|
+
key :skills, Array
|
15
|
+
key :friend_ids, Array, :typecast => 'ObjectId'
|
16
|
+
key :links, Hash
|
17
|
+
timestamps!
|
18
|
+
end
|
19
|
+
User.collection.remove # empties collection
|
20
|
+
|
21
|
+
john = User.create({
|
22
|
+
:first_name => 'John',
|
23
|
+
:last_name => 'Nunemaker',
|
24
|
+
:age => 28,
|
25
|
+
:skills => ['ruby', 'marklogic', 'javascript'],
|
26
|
+
:links => {"Google" => "http://www.google.com"}
|
27
|
+
})
|
28
|
+
|
29
|
+
steve = User.create({
|
30
|
+
:first_name => 'Steve',
|
31
|
+
:last_name => 'Smith',
|
32
|
+
:age => 29,
|
33
|
+
:skills => ['html', 'css', 'javascript', 'design'],
|
34
|
+
})
|
35
|
+
|
36
|
+
john.friend_ids << steve.id.to_s # will get typecast to ObjectId
|
37
|
+
john.links["Ruby on Rails"] = "http://www.rubyonrails.com"
|
38
|
+
john.save
|
39
|
+
|
40
|
+
pp john
|
41
|
+
|
42
|
+
MarkMapper.application.drop
|
@@ -0,0 +1,27 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.expand_path('../../../lib', __FILE__))
|
2
|
+
require_relative '../sample_app'
|
3
|
+
require 'pp'
|
4
|
+
|
5
|
+
MarkMapper.application.create
|
6
|
+
|
7
|
+
class User
|
8
|
+
include MarkMapper::Document
|
9
|
+
|
10
|
+
key :name, String
|
11
|
+
key :tags, Array
|
12
|
+
end
|
13
|
+
User.collection.remove # empties collection
|
14
|
+
|
15
|
+
john = User.create(:name => 'John', :tags => %w[ruby marklogic], :age => 28)
|
16
|
+
bill = User.create(:name => 'Bill', :tags => %w[ruby marklogic], :age => 30)
|
17
|
+
|
18
|
+
User.set({:name => 'John'}, :tags => %[ruby])
|
19
|
+
pp john.reload
|
20
|
+
|
21
|
+
User.set(john.id, :tags => %w[ruby marklogic])
|
22
|
+
pp john.reload
|
23
|
+
|
24
|
+
john.set(:tags => %w[something different])
|
25
|
+
pp john.reload
|
26
|
+
|
27
|
+
MarkMapper.application.drop
|
data/examples/plugins.rb
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.expand_path('../../lib', __FILE__))
|
2
|
+
require_relative './sample_app'
|
3
|
+
require 'pp'
|
4
|
+
|
5
|
+
MarkMapper.application.create
|
6
|
+
|
7
|
+
# To create your own plugin, just create a module that
|
8
|
+
# extends ActiveSupport::Concern.
|
9
|
+
module FooPlugin
|
10
|
+
extend ActiveSupport::Concern
|
11
|
+
|
12
|
+
# ClassMethods module will automatically get extended
|
13
|
+
module ClassMethods
|
14
|
+
def foo
|
15
|
+
'Foo class method!'
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def foo
|
20
|
+
'Foo instance method!'
|
21
|
+
end
|
22
|
+
|
23
|
+
# Any configuration can be done in the #included block, which gets
|
24
|
+
# class evaled. Feel free to add keys, validations, or anything else.
|
25
|
+
included do
|
26
|
+
puts "Configuring #{self}..."
|
27
|
+
key :foo, String
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
class User
|
32
|
+
include MarkMapper::Document
|
33
|
+
plugin FooPlugin
|
34
|
+
end
|
35
|
+
|
36
|
+
puts User.foo
|
37
|
+
puts User.new.foo
|
38
|
+
puts User.key?(:foo)
|
39
|
+
|
40
|
+
MarkMapper.application.drop
|
@@ -0,0 +1,39 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.expand_path('../../lib', __FILE__))
|
2
|
+
require_relative './sample_app'
|
3
|
+
require 'pp'
|
4
|
+
|
5
|
+
MarkMapper.application.tap do |app|
|
6
|
+
app.add_index(MarkLogic::DatabaseSettings::RangeElementIndex.new(:age, :type => 'int'))
|
7
|
+
end.sync
|
8
|
+
|
9
|
+
class User
|
10
|
+
include MarkMapper::Document
|
11
|
+
|
12
|
+
key :name, String
|
13
|
+
key :tags, Array
|
14
|
+
end
|
15
|
+
User.collection.remove # empties collection
|
16
|
+
|
17
|
+
User.create(:name => 'John', :tags => %w[ruby marklogic], :age => 28)
|
18
|
+
User.create(:name => 'Bill', :tags => %w[ruby marklogic], :age => 30)
|
19
|
+
User.create(:name => 'Frank', :tags => %w[marklogic], :age => 35)
|
20
|
+
User.create(:name => 'Steve', :tags => %w[html5 css3], :age => 27)
|
21
|
+
|
22
|
+
[
|
23
|
+
|
24
|
+
User.all(:name => 'John'),
|
25
|
+
User.all(:tags => %w[marklogic]),
|
26
|
+
# User.all(:tags.all => %w[ruby marklogic]),
|
27
|
+
User.all(:age.ge => 30),
|
28
|
+
|
29
|
+
User.where(:age.gt => 27).sort(:age).all,
|
30
|
+
User.where(:age.gt => 27).sort(:age.desc).all,
|
31
|
+
User.where(:age.gt => 27).sort(:age).limit(1).all,
|
32
|
+
User.where(:age.gt => 27).sort(:age).skip(1).limit(1).all,
|
33
|
+
|
34
|
+
].each do |result|
|
35
|
+
pp result
|
36
|
+
puts
|
37
|
+
end
|
38
|
+
|
39
|
+
MarkMapper.application.drop
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'marklogic'
|
2
|
+
require 'mark_mapper'
|
3
|
+
|
4
|
+
# These environment variables can be set if wanting to test against a database
|
5
|
+
# that is not on the local machine.
|
6
|
+
ENV["MARKMAPPER_SPEC_HOST"] ||= "localhost"
|
7
|
+
ENV["MARKMAPPER_SPEC_PORT"] ||= "8009"
|
8
|
+
|
9
|
+
ENV["MARKMAPPER_SPEC_APP_SERVICES_PORT"] ||= "8000"
|
10
|
+
ENV["MARKMAPPER_SPEC_ADMIN_PORT"] ||= "8001"
|
11
|
+
ENV["MARKMAPPER_SPEC_MANAGE_PORT"] ||= "8002"
|
12
|
+
|
13
|
+
ENV["MARKMAPPER_SPEC_USER"] ||= "admin"
|
14
|
+
ENV["MARKMAPPER_SPEC_PASSWORD"] ||= "admin"
|
15
|
+
ENV["MARKMAPPER_SKIP_APP_CREATION"] ||= "false"
|
16
|
+
|
17
|
+
# These are used when creating any connection in the test suite.
|
18
|
+
HOST = ENV["MARKMAPPER_SPEC_HOST"]
|
19
|
+
PORT = ENV["MARKMAPPER_SPEC_PORT"].to_i
|
20
|
+
|
21
|
+
APP_SERVICES_PORT = ENV["MARKMAPPER_SPEC_APP_SERVICES_PORT"]
|
22
|
+
MANAGE_PORT = ENV["MARKMAPPER_SPEC_MANAGE_PORT"]
|
23
|
+
ADMIN_PORT = ENV["MARKMAPPER_SPEC_ADMIN_PORT"]
|
24
|
+
|
25
|
+
USER = ENV["MARKMAPPER_SPEC_USER"]
|
26
|
+
PASSWORD = ENV["MARKMAPPER_SPEC_PASSWORD"]
|
27
|
+
|
28
|
+
ADMIN_USER = ENV["MARKMAPPER_SPEC_ADMIN_USER"]
|
29
|
+
ADMIN_PASSWORD = ENV["MARKMAPPER_SPEC_ADMIN_PASSWORD"]
|
30
|
+
|
31
|
+
MarkLogic::Connection.configure({
|
32
|
+
:host => HOST,
|
33
|
+
:manage_port => MANAGE_PORT,
|
34
|
+
:admin_port => ADMIN_PORT,
|
35
|
+
:app_services_port => APP_SERVICES_PORT,
|
36
|
+
:default_user => ADMIN_USER,
|
37
|
+
:default_password => ADMIN_PASSWORD
|
38
|
+
})
|
39
|
+
|
40
|
+
CONNECTION = MarkLogic::Connection.new(HOST, PORT)
|
41
|
+
|
42
|
+
puts "Configuring application again"
|
43
|
+
MarkMapper.application = MarkLogic::Application.new("sample-app", connection: CONNECTION )
|
data/examples/scopes.rb
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.expand_path('../../lib', __FILE__))
|
2
|
+
require_relative './sample_app'
|
3
|
+
require 'pp'
|
4
|
+
|
5
|
+
MarkMapper.application.tap do |app|
|
6
|
+
app.add_index(MarkLogic::DatabaseSettings::RangeElementIndex.new(:age, :type => 'int'))
|
7
|
+
end.sync
|
8
|
+
|
9
|
+
class User
|
10
|
+
include MarkMapper::Document
|
11
|
+
|
12
|
+
# plain old vanilla scopes with fancy queries
|
13
|
+
scope :johns, where(:name => 'John')
|
14
|
+
|
15
|
+
# plain old vanilla scopes with hashes
|
16
|
+
scope :bills, :name => 'Bill'
|
17
|
+
|
18
|
+
# dynamic scopes with parameters
|
19
|
+
scope :by_name, lambda { |name| where(:name => name) }
|
20
|
+
scope :by_ages, lambda { |low, high| where(:age.ge => low, :age.le => high) }
|
21
|
+
|
22
|
+
# Yep, even plain old methods work as long as they return a query
|
23
|
+
def self.by_tag(tag)
|
24
|
+
where(:tags => tag)
|
25
|
+
end
|
26
|
+
|
27
|
+
# You can even make a method that returns a scope
|
28
|
+
def self.twenties; by_ages(20, 29) end
|
29
|
+
|
30
|
+
key :name, String
|
31
|
+
key :tags, Array
|
32
|
+
end
|
33
|
+
User.collection.remove # empties collection
|
34
|
+
|
35
|
+
User.create(:name => 'John', :tags => %w[ruby marklogic], :age => 28)
|
36
|
+
User.create(:name => 'Bill', :tags => %w[ruby marklogic], :age => 30)
|
37
|
+
User.create(:name => 'Frank', :tags => %w[marklogic], :age => 35)
|
38
|
+
User.create(:name => 'Steve', :tags => %w[html5 css3], :age => 27)
|
39
|
+
|
40
|
+
# simple scopes
|
41
|
+
pp User.johns.first
|
42
|
+
pp User.bills.first
|
43
|
+
|
44
|
+
# scope with arg
|
45
|
+
pp User.by_name('Frank').first
|
46
|
+
|
47
|
+
# scope with two args
|
48
|
+
pp User.by_ages(20, 29).all
|
49
|
+
|
50
|
+
# chaining class methods on scopes
|
51
|
+
pp User.by_ages(20, 40).by_tag('ruby').all
|
52
|
+
|
53
|
+
# scope made using method that returns scope
|
54
|
+
pp User.twenties.all
|
55
|
+
|
56
|
+
MarkMapper.application.drop
|