mark_mapper 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.
- 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
|