mark_mapper 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (211) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +21 -0
  3. data/README.rdoc +39 -0
  4. data/examples/attr_accessible.rb +24 -0
  5. data/examples/attr_protected.rb +24 -0
  6. data/examples/cache_key.rb +26 -0
  7. data/examples/custom_types.rb +26 -0
  8. data/examples/identity_map.rb +30 -0
  9. data/examples/identity_map/automatic.rb +2 -0
  10. data/examples/keys.rb +42 -0
  11. data/examples/modifiers/set.rb +27 -0
  12. data/examples/plugins.rb +40 -0
  13. data/examples/querying.rb +39 -0
  14. data/examples/sample_app.rb +43 -0
  15. data/examples/scopes.rb +56 -0
  16. data/examples/validating/embedded_docs.rb +31 -0
  17. data/lib/mark_mapper.rb +125 -0
  18. data/lib/mark_mapper/config.rb +90 -0
  19. data/lib/mark_mapper/connection.rb +60 -0
  20. data/lib/mark_mapper/criteria_hash.rb +194 -0
  21. data/lib/mark_mapper/document.rb +46 -0
  22. data/lib/mark_mapper/embedded_document.rb +32 -0
  23. data/lib/mark_mapper/exceptions.rb +33 -0
  24. data/lib/mark_mapper/extensions/array.rb +27 -0
  25. data/lib/mark_mapper/extensions/boolean.rb +45 -0
  26. data/lib/mark_mapper/extensions/date.rb +29 -0
  27. data/lib/mark_mapper/extensions/duplicable.rb +86 -0
  28. data/lib/mark_mapper/extensions/float.rb +18 -0
  29. data/lib/mark_mapper/extensions/hash.rb +26 -0
  30. data/lib/mark_mapper/extensions/integer.rb +27 -0
  31. data/lib/mark_mapper/extensions/kernel.rb +11 -0
  32. data/lib/mark_mapper/extensions/nil_class.rb +18 -0
  33. data/lib/mark_mapper/extensions/object.rb +30 -0
  34. data/lib/mark_mapper/extensions/object_id.rb +18 -0
  35. data/lib/mark_mapper/extensions/set.rb +20 -0
  36. data/lib/mark_mapper/extensions/string.rb +31 -0
  37. data/lib/mark_mapper/extensions/symbol.rb +87 -0
  38. data/lib/mark_mapper/extensions/time.rb +29 -0
  39. data/lib/mark_mapper/locale/en.yml +5 -0
  40. data/lib/mark_mapper/middleware/identity_map.rb +41 -0
  41. data/lib/mark_mapper/normalizers/criteria_hash_key.rb +17 -0
  42. data/lib/mark_mapper/normalizers/criteria_hash_value.rb +66 -0
  43. data/lib/mark_mapper/normalizers/fields_value.rb +26 -0
  44. data/lib/mark_mapper/normalizers/hash_key.rb +19 -0
  45. data/lib/mark_mapper/normalizers/integer.rb +19 -0
  46. data/lib/mark_mapper/normalizers/options_hash_value.rb +83 -0
  47. data/lib/mark_mapper/normalizers/sort_value.rb +55 -0
  48. data/lib/mark_mapper/options_hash.rb +103 -0
  49. data/lib/mark_mapper/pagination.rb +6 -0
  50. data/lib/mark_mapper/pagination/collection.rb +32 -0
  51. data/lib/mark_mapper/pagination/paginator.rb +46 -0
  52. data/lib/mark_mapper/plugins.rb +22 -0
  53. data/lib/mark_mapper/plugins/accessible.rb +61 -0
  54. data/lib/mark_mapper/plugins/active_model.rb +18 -0
  55. data/lib/mark_mapper/plugins/associations.rb +96 -0
  56. data/lib/mark_mapper/plugins/associations/base.rb +98 -0
  57. data/lib/mark_mapper/plugins/associations/belongs_to_association.rb +63 -0
  58. data/lib/mark_mapper/plugins/associations/belongs_to_polymorphic_proxy.rb +35 -0
  59. data/lib/mark_mapper/plugins/associations/belongs_to_proxy.rb +52 -0
  60. data/lib/mark_mapper/plugins/associations/collection.rb +29 -0
  61. data/lib/mark_mapper/plugins/associations/embedded_collection.rb +44 -0
  62. data/lib/mark_mapper/plugins/associations/in_array_proxy.rb +133 -0
  63. data/lib/mark_mapper/plugins/associations/many_association.rb +63 -0
  64. data/lib/mark_mapper/plugins/associations/many_documents_as_proxy.rb +28 -0
  65. data/lib/mark_mapper/plugins/associations/many_documents_proxy.rb +142 -0
  66. data/lib/mark_mapper/plugins/associations/many_embedded_polymorphic_proxy.rb +32 -0
  67. data/lib/mark_mapper/plugins/associations/many_embedded_proxy.rb +24 -0
  68. data/lib/mark_mapper/plugins/associations/many_polymorphic_proxy.rb +14 -0
  69. data/lib/mark_mapper/plugins/associations/one_as_proxy.rb +22 -0
  70. data/lib/mark_mapper/plugins/associations/one_association.rb +48 -0
  71. data/lib/mark_mapper/plugins/associations/one_embedded_polymorphic_proxy.rb +30 -0
  72. data/lib/mark_mapper/plugins/associations/one_embedded_proxy.rb +44 -0
  73. data/lib/mark_mapper/plugins/associations/one_proxy.rb +95 -0
  74. data/lib/mark_mapper/plugins/associations/proxy.rb +138 -0
  75. data/lib/mark_mapper/plugins/associations/single_association.rb +46 -0
  76. data/lib/mark_mapper/plugins/caching.rb +21 -0
  77. data/lib/mark_mapper/plugins/callbacks.rb +42 -0
  78. data/lib/mark_mapper/plugins/clone.rb +24 -0
  79. data/lib/mark_mapper/plugins/counter_cache.rb +97 -0
  80. data/lib/mark_mapper/plugins/dirty.rb +61 -0
  81. data/lib/mark_mapper/plugins/document.rb +41 -0
  82. data/lib/mark_mapper/plugins/dumpable.rb +22 -0
  83. data/lib/mark_mapper/plugins/dynamic_querying.rb +45 -0
  84. data/lib/mark_mapper/plugins/dynamic_querying/dynamic_finder.rb +44 -0
  85. data/lib/mark_mapper/plugins/embedded_callbacks.rb +81 -0
  86. data/lib/mark_mapper/plugins/embedded_document.rb +53 -0
  87. data/lib/mark_mapper/plugins/equality.rb +23 -0
  88. data/lib/mark_mapper/plugins/identity_map.rb +144 -0
  89. data/lib/mark_mapper/plugins/indexable.rb +86 -0
  90. data/lib/mark_mapper/plugins/inspect.rb +16 -0
  91. data/lib/mark_mapper/plugins/keys.rb +470 -0
  92. data/lib/mark_mapper/plugins/keys/key.rb +134 -0
  93. data/lib/mark_mapper/plugins/keys/static.rb +45 -0
  94. data/lib/mark_mapper/plugins/logger.rb +18 -0
  95. data/lib/mark_mapper/plugins/modifiers.rb +140 -0
  96. data/lib/mark_mapper/plugins/pagination.rb +16 -0
  97. data/lib/mark_mapper/plugins/partial_updates.rb +77 -0
  98. data/lib/mark_mapper/plugins/persistence.rb +79 -0
  99. data/lib/mark_mapper/plugins/protected.rb +45 -0
  100. data/lib/mark_mapper/plugins/querying.rb +173 -0
  101. data/lib/mark_mapper/plugins/querying/decorated_markmapper_query.rb +75 -0
  102. data/lib/mark_mapper/plugins/rails.rb +79 -0
  103. data/lib/mark_mapper/plugins/rails/active_record_association_adapter.rb +33 -0
  104. data/lib/mark_mapper/plugins/sci.rb +82 -0
  105. data/lib/mark_mapper/plugins/scopes.rb +28 -0
  106. data/lib/mark_mapper/plugins/serialization.rb +109 -0
  107. data/lib/mark_mapper/plugins/timestamps.rb +29 -0
  108. data/lib/mark_mapper/plugins/touch.rb +18 -0
  109. data/lib/mark_mapper/plugins/userstamps.rb +18 -0
  110. data/lib/mark_mapper/plugins/validations.rb +96 -0
  111. data/lib/mark_mapper/query.rb +278 -0
  112. data/lib/mark_mapper/railtie.rb +52 -0
  113. data/lib/mark_mapper/railtie/database.rake +65 -0
  114. data/lib/mark_mapper/translation.rb +10 -0
  115. data/lib/mark_mapper/version.rb +4 -0
  116. data/lib/rails/generators/mark_mapper/config/config_generator.rb +37 -0
  117. data/lib/rails/generators/mark_mapper/config/templates/marklogic.yml +19 -0
  118. data/lib/rails/generators/mark_mapper/model/model_generator.rb +40 -0
  119. data/lib/rails/generators/mark_mapper/model/templates/model.rb +17 -0
  120. data/spec/config/mark_mapper.yml +6 -0
  121. data/spec/examples_spec.rb +25 -0
  122. data/spec/functional/accessible_spec.rb +198 -0
  123. data/spec/functional/associations/belongs_to_polymorphic_proxy_spec.rb +64 -0
  124. data/spec/functional/associations/belongs_to_proxy_spec.rb +255 -0
  125. data/spec/functional/associations/in_array_proxy_spec.rb +349 -0
  126. data/spec/functional/associations/many_documents_as_proxy_spec.rb +230 -0
  127. data/spec/functional/associations/many_documents_proxy_spec.rb +968 -0
  128. data/spec/functional/associations/many_embedded_polymorphic_proxy_spec.rb +238 -0
  129. data/spec/functional/associations/many_embedded_proxy_spec.rb +288 -0
  130. data/spec/functional/associations/many_polymorphic_proxy_spec.rb +302 -0
  131. data/spec/functional/associations/one_as_proxy_spec.rb +489 -0
  132. data/spec/functional/associations/one_embedded_polymorphic_proxy_spec.rb +207 -0
  133. data/spec/functional/associations/one_embedded_proxy_spec.rb +100 -0
  134. data/spec/functional/associations/one_proxy_spec.rb +406 -0
  135. data/spec/functional/associations_spec.rb +48 -0
  136. data/spec/functional/caching_spec.rb +75 -0
  137. data/spec/functional/callbacks_spec.rb +330 -0
  138. data/spec/functional/counter_cache_spec.rb +235 -0
  139. data/spec/functional/dirty_spec.rb +316 -0
  140. data/spec/functional/document_spec.rb +310 -0
  141. data/spec/functional/dumpable_spec.rb +24 -0
  142. data/spec/functional/dynamic_querying_spec.rb +75 -0
  143. data/spec/functional/embedded_document_spec.rb +316 -0
  144. data/spec/functional/equality_spec.rb +20 -0
  145. data/spec/functional/extensions_spec.rb +16 -0
  146. data/spec/functional/identity_map_spec.rb +483 -0
  147. data/spec/functional/keys_spec.rb +339 -0
  148. data/spec/functional/logger_spec.rb +20 -0
  149. data/spec/functional/modifiers_spec.rb +446 -0
  150. data/spec/functional/options_hash_spec.rb +41 -0
  151. data/spec/functional/pagination_spec.rb +89 -0
  152. data/spec/functional/partial_updates_spec.rb +530 -0
  153. data/spec/functional/protected_spec.rb +199 -0
  154. data/spec/functional/querying_spec.rb +984 -0
  155. data/spec/functional/rails_spec.rb +55 -0
  156. data/spec/functional/sci_spec.rb +374 -0
  157. data/spec/functional/scopes_spec.rb +204 -0
  158. data/spec/functional/static_keys_spec.rb +153 -0
  159. data/spec/functional/timestamps_spec.rb +97 -0
  160. data/spec/functional/touch_spec.rb +125 -0
  161. data/spec/functional/userstamps_spec.rb +46 -0
  162. data/spec/functional/validations_spec.rb +416 -0
  163. data/spec/quality_spec.rb +51 -0
  164. data/spec/spec_helper.rb +150 -0
  165. data/spec/support/matchers.rb +15 -0
  166. data/spec/support/models.rb +256 -0
  167. data/spec/symbol_operator_spec.rb +70 -0
  168. data/spec/symbol_spec.rb +9 -0
  169. data/spec/unit/associations/base_spec.rb +146 -0
  170. data/spec/unit/associations/belongs_to_association_spec.rb +30 -0
  171. data/spec/unit/associations/many_association_spec.rb +64 -0
  172. data/spec/unit/associations/one_association_spec.rb +48 -0
  173. data/spec/unit/associations/proxy_spec.rb +103 -0
  174. data/spec/unit/clone_spec.rb +79 -0
  175. data/spec/unit/config_generator_spec.rb +24 -0
  176. data/spec/unit/criteria_hash_spec.rb +218 -0
  177. data/spec/unit/document_spec.rb +251 -0
  178. data/spec/unit/dynamic_finder_spec.rb +125 -0
  179. data/spec/unit/embedded_document_spec.rb +676 -0
  180. data/spec/unit/equality_spec.rb +38 -0
  181. data/spec/unit/exceptions_spec.rb +12 -0
  182. data/spec/unit/extensions_spec.rb +368 -0
  183. data/spec/unit/identity_map_middleware_spec.rb +134 -0
  184. data/spec/unit/inspect_spec.rb +47 -0
  185. data/spec/unit/key_spec.rb +276 -0
  186. data/spec/unit/keys_spec.rb +155 -0
  187. data/spec/unit/mark_mapper_spec.rb +37 -0
  188. data/spec/unit/model_generator_spec.rb +45 -0
  189. data/spec/unit/normalizers/criteria_hash_key_spec.rb +37 -0
  190. data/spec/unit/normalizers/criteria_hash_value_spec.rb +200 -0
  191. data/spec/unit/normalizers/fields_value_spec.rb +45 -0
  192. data/spec/unit/normalizers/hash_key_spec.rb +15 -0
  193. data/spec/unit/normalizers/integer_spec.rb +24 -0
  194. data/spec/unit/normalizers/options_hash_value_spec.rb +99 -0
  195. data/spec/unit/normalizers/sort_value_spec.rb +98 -0
  196. data/spec/unit/options_hash_spec.rb +64 -0
  197. data/spec/unit/pagination/collection_spec.rb +30 -0
  198. data/spec/unit/pagination/paginator_spec.rb +118 -0
  199. data/spec/unit/pagination_spec.rb +11 -0
  200. data/spec/unit/plugins_spec.rb +89 -0
  201. data/spec/unit/query_spec.rb +837 -0
  202. data/spec/unit/rails_compatibility_spec.rb +40 -0
  203. data/spec/unit/rails_reflect_on_association_spec.rb +118 -0
  204. data/spec/unit/rails_spec.rb +188 -0
  205. data/spec/unit/serialization_spec.rb +169 -0
  206. data/spec/unit/serializers/json_serializer_spec.rb +218 -0
  207. data/spec/unit/serializers/xml_serializer_spec.rb +198 -0
  208. data/spec/unit/time_zones_spec.rb +44 -0
  209. data/spec/unit/translation_spec.rb +27 -0
  210. data/spec/unit/validations_spec.rb +588 -0
  211. metadata +307 -0
@@ -0,0 +1,46 @@
1
+ # encoding: UTF-8
2
+ module MarkMapper
3
+ module Document
4
+ extend ActiveSupport::Concern
5
+ extend Plugins
6
+
7
+ include Plugins::ActiveModel
8
+ include Plugins::Document
9
+ include Plugins::Dumpable
10
+ include Plugins::Querying # for now needs to be before associations (save_to_collection)
11
+ include Plugins::Associations
12
+ include Plugins::Caching
13
+ include Plugins::Clone
14
+ include Plugins::DynamicQuerying
15
+ include Plugins::Equality
16
+ include Plugins::Inspect
17
+ include Plugins::Indexable
18
+ include Plugins::Keys
19
+ include Plugins::Keys::Static
20
+ include Plugins::Dirty # for now dirty needs to be after keys
21
+ include Plugins::Logger
22
+ include Plugins::Modifiers
23
+ include Plugins::Pagination
24
+ include Plugins::Persistence
25
+ include Plugins::Accessible
26
+ include Plugins::Protected
27
+ include Plugins::Rails
28
+ include Plugins::Sci
29
+ include Plugins::Scopes
30
+ include Plugins::Serialization
31
+ include Plugins::Timestamps
32
+ include Plugins::Userstamps
33
+ include Plugins::Touch
34
+ include Plugins::Validations
35
+ include Plugins::EmbeddedCallbacks
36
+ include Plugins::Callbacks # for now callbacks needs to be after validations
37
+ include Plugins::PartialUpdates
38
+ include Plugins::IdentityMap
39
+ include Plugins::CounterCache
40
+
41
+ included do
42
+ extend Plugins
43
+ extend Translation
44
+ end
45
+ end # Document
46
+ end # MarkMapper
@@ -0,0 +1,32 @@
1
+ # encoding: UTF-8
2
+ module MarkMapper
3
+ module EmbeddedDocument
4
+ extend ActiveSupport::Concern
5
+ extend Plugins
6
+
7
+ include Plugins::ActiveModel
8
+ include Plugins::EmbeddedDocument
9
+ include Plugins::Associations
10
+ include Plugins::Caching
11
+ include Plugins::Clone
12
+ include Plugins::Equality
13
+ include Plugins::Inspect
14
+ include Plugins::Keys
15
+ include Plugins::Logger
16
+ include Plugins::Persistence
17
+ include Plugins::Accessible
18
+ include Plugins::Protected
19
+ include Plugins::Rails
20
+ include Plugins::Sci
21
+ include Plugins::Serialization
22
+ include Plugins::Timestamps
23
+ include Plugins::Validations
24
+ include Plugins::EmbeddedCallbacks
25
+ include Plugins::Touch
26
+
27
+ included do
28
+ extend Plugins
29
+ extend Translation
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,33 @@
1
+ # encoding: UTF-8
2
+ module MarkMapper
3
+ # generic MM error
4
+ class Error < StandardError; end
5
+
6
+ # raised when document expected but not found
7
+ class DocumentNotFound < Error; end
8
+
9
+ # raised when trying to connect using uri with incorrect scheme
10
+ class InvalidScheme < Error; end
11
+
12
+ # raised when trying to do something not supported, mostly for edocs
13
+ class NotSupported < Error; end
14
+
15
+ # raised when trying to create a key with an invalid name
16
+ class InvalidKey < Error; end
17
+
18
+ # raised when document not valid and using !
19
+ class DocumentNotValid < Error
20
+ attr_reader :document
21
+
22
+ def initialize(document)
23
+ @document = document
24
+ super("Validation failed: #{document.errors.full_messages.join(", ")}")
25
+ end
26
+ end
27
+
28
+ class AccessibleOrProtected < Error
29
+ def initialize(name)
30
+ super("Declare either attr_protected or attr_accessible for #{name}, but not both.")
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,27 @@
1
+ # encoding: UTF-8
2
+ module MarkMapper
3
+ module Extensions
4
+ module Array
5
+ extend ActiveSupport::Concern
6
+
7
+ module ClassMethods
8
+ def to_marklogic(value)
9
+ value = value.respond_to?(:lines) ? value.lines : value
10
+ value.to_a
11
+ end
12
+
13
+ def from_marklogic(value)
14
+ value || []
15
+ end
16
+ end
17
+
18
+ def _mark_mapper_deep_copy_
19
+ map { |value| value._mark_mapper_deep_copy_ }
20
+ end
21
+ end
22
+ end
23
+ end
24
+
25
+ class Array
26
+ include MarkMapper::Extensions::Array
27
+ end
@@ -0,0 +1,45 @@
1
+ # encoding: UTF-8
2
+ module MarkMapper
3
+ module Extensions
4
+ module Boolean
5
+ Mapping = {
6
+ true => true,
7
+ 'true' => true,
8
+ 'TRUE' => true,
9
+ 'True' => true,
10
+ 't' => true,
11
+ 'T' => true,
12
+ '1' => true,
13
+ 1 => true,
14
+ 1.0 => true,
15
+ false => false,
16
+ 'false' => false,
17
+ 'FALSE' => false,
18
+ 'False' => false,
19
+ 'f' => false,
20
+ 'F' => false,
21
+ '0' => false,
22
+ 0 => false,
23
+ 0.0 => false,
24
+ nil => nil
25
+ }
26
+
27
+ def to_marklogic(value)
28
+ Mapping[value]
29
+ end
30
+
31
+ def from_marklogic(value)
32
+ return nil if value == nil
33
+ !!value
34
+ end
35
+
36
+ def xs_type
37
+ "boolean"
38
+ end
39
+ end
40
+ end
41
+ end
42
+
43
+ class Boolean; end unless defined?(Boolean)
44
+
45
+ Boolean.extend MarkMapper::Extensions::Boolean
@@ -0,0 +1,29 @@
1
+ # encoding: UTF-8
2
+ module MarkMapper
3
+ module Extensions
4
+ module Date
5
+ def to_marklogic(value)
6
+ if value.nil? || (value.instance_of?(String) && '' === value)
7
+ nil
8
+ else
9
+ date = value.instance_of?(::Date) || value.instance_of?(::Time) ? value : ::Date.parse(value.to_s)
10
+ ::Time.utc(date.year, date.month, date.day)
11
+ end
12
+ rescue
13
+ nil
14
+ end
15
+
16
+ def from_marklogic(value)
17
+ value.to_date if value
18
+ end
19
+
20
+ def xs_type
21
+ "date"
22
+ end
23
+ end
24
+ end
25
+ end
26
+
27
+ class Date
28
+ extend MarkMapper::Extensions::Date
29
+ end
@@ -0,0 +1,86 @@
1
+ # Copyright (c) 2005-2010 David Heinemeier Hansson
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining
4
+ # a copy of this software and associated documentation files (the
5
+ # "Software"), to deal in the Software without restriction, including
6
+ # without limitation the rights to use, copy, modify, merge, publish,
7
+ # distribute, sublicense, and/or sell copies of the Software, and to
8
+ # permit persons to whom the Software is furnished to do so, subject to
9
+ # the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be
12
+ # included in all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
+ #
22
+ # Most objects are cloneable, but not all. For example you can't dup +nil+:
23
+ #
24
+ # nil.dup # => TypeError: can't dup NilClass
25
+ #
26
+ # Classes may signal their instances are not duplicable removing +dup+/+clone+
27
+ # or raising exceptions from them. So, to dup an arbitrary object you normally
28
+ # use an optimistic approach and are ready to catch an exception, say:
29
+ #
30
+ # arbitrary_object.dup rescue object
31
+ #
32
+ # Rails dups objects in a few critical spots where they are not that arbitrary.
33
+ # That rescue is very expensive (like 40 times slower than a predicate), and it
34
+ # is often triggered.
35
+ #
36
+ # That's why we hardcode the following cases and check duplicable? instead of
37
+ # using that rescue idiom.
38
+ class Object
39
+ # Can you safely .dup this object?
40
+ # False for nil, false, true, symbols, numbers, class and module objects; true otherwise.
41
+ def duplicable?
42
+ true
43
+ end
44
+ end
45
+
46
+ class NilClass #:nodoc:
47
+ def duplicable?
48
+ false
49
+ end
50
+ end
51
+
52
+ class FalseClass #:nodoc:
53
+ def duplicable?
54
+ false
55
+ end
56
+ end
57
+
58
+ class TrueClass #:nodoc:
59
+ def duplicable?
60
+ false
61
+ end
62
+ end
63
+
64
+ class Symbol #:nodoc:
65
+ def duplicable?
66
+ false
67
+ end
68
+ end
69
+
70
+ class Numeric #:nodoc:
71
+ def duplicable?
72
+ false
73
+ end
74
+ end
75
+
76
+ class Class #:nodoc:
77
+ def duplicable?
78
+ false
79
+ end
80
+ end
81
+
82
+ class Module #:nodoc:
83
+ def duplicable?
84
+ false
85
+ end
86
+ end
@@ -0,0 +1,18 @@
1
+ # encoding: UTF-8
2
+ module MarkMapper
3
+ module Extensions
4
+ module Float
5
+ def to_marklogic(value)
6
+ value.blank? ? nil : value.to_f
7
+ end
8
+
9
+ def xs_type
10
+ "float"
11
+ end
12
+ end
13
+ end
14
+ end
15
+
16
+ class Float
17
+ extend MarkMapper::Extensions::Float
18
+ end
@@ -0,0 +1,26 @@
1
+ # encoding: UTF-8
2
+ module MarkMapper
3
+ module Extensions
4
+ module Hash
5
+ extend ActiveSupport::Concern
6
+
7
+ module ClassMethods
8
+ def from_marklogic(value)
9
+ HashWithIndifferentAccess.new(value || {})
10
+ end
11
+ end
12
+
13
+ def _mark_mapper_deep_copy_
14
+ self.class.new.tap do |new_hash|
15
+ each do |key, value|
16
+ new_hash[key._mark_mapper_deep_copy_] = value._mark_mapper_deep_copy_
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+
24
+ class Hash
25
+ include MarkMapper::Extensions::Hash
26
+ end
@@ -0,0 +1,27 @@
1
+ # encoding: UTF-8
2
+ module MarkMapper
3
+ module Extensions
4
+ module Integer
5
+ def to_marklogic(value)
6
+ value_to_i = value.to_i
7
+ if value_to_i == 0 && value != value_to_i
8
+ value.to_s =~ /^(0x|0b)?0+/ ? 0 : nil
9
+ else
10
+ value_to_i
11
+ end
12
+ end
13
+
14
+ def from_marklogic(value)
15
+ value && value.to_i
16
+ end
17
+
18
+ def xs_type
19
+ "int"
20
+ end
21
+ end
22
+ end
23
+ end
24
+
25
+ class Integer
26
+ extend MarkMapper::Extensions::Integer
27
+ end
@@ -0,0 +1,11 @@
1
+ # encoding: UTF-8
2
+ # :nocov:
3
+ module Kernel
4
+ # Returns the object's singleton class.
5
+ def singleton_class
6
+ class << self
7
+ self
8
+ end
9
+ end unless respond_to?(:singleton_class) # exists in 1.9.2
10
+ end
11
+ # :nocov:
@@ -0,0 +1,18 @@
1
+ # encoding: UTF-8
2
+ module MarkMapper
3
+ module Extensions
4
+ module NilClass
5
+ def to_marklogic(value)
6
+ value
7
+ end
8
+
9
+ def from_marklogic(value)
10
+ value
11
+ end
12
+ end
13
+ end
14
+ end
15
+
16
+ class NilClass
17
+ include MarkMapper::Extensions::NilClass
18
+ end
@@ -0,0 +1,30 @@
1
+ # encoding: UTF-8
2
+ module MarkMapper
3
+ module Extensions
4
+ module Object
5
+ extend ActiveSupport::Concern
6
+
7
+ module ClassMethods
8
+ def to_marklogic(value)
9
+ value
10
+ end
11
+
12
+ def from_marklogic(value)
13
+ value
14
+ end
15
+ end
16
+
17
+ def to_marklogic
18
+ self.class.to_marklogic(self)
19
+ end
20
+
21
+ def _mark_mapper_deep_copy_
22
+ self
23
+ end
24
+ end
25
+ end
26
+ end
27
+
28
+ class Object
29
+ include MarkMapper::Extensions::Object
30
+ end