mack-data_mapper 0.8.2 → 0.8.3
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.
- data/lib/gems/{addressable-2.0.0 → addressable-2.0.1}/lib/addressable/idna.rb +0 -0
- data/lib/gems/{addressable-2.0.0 → addressable-2.0.1}/lib/addressable/uri.rb +62 -21
- data/lib/gems/{addressable-2.0.0 → addressable-2.0.1}/lib/addressable/version.rb +1 -1
- data/lib/gems/addressable-2.0.1/tasks/clobber.rake +2 -0
- data/lib/gems/addressable-2.0.1/tasks/gem.rake +68 -0
- data/lib/gems/addressable-2.0.1/tasks/git.rake +40 -0
- data/lib/gems/addressable-2.0.1/tasks/metrics.rake +22 -0
- data/lib/gems/addressable-2.0.1/tasks/rdoc.rake +29 -0
- data/lib/gems/addressable-2.0.1/tasks/rubyforge.rake +89 -0
- data/lib/gems/addressable-2.0.1/tasks/spec.rake +64 -0
- data/lib/gems/data_objects-0.9.10.1/lib/data_objects.rb +46 -0
- data/lib/gems/data_objects-0.9.10.1/lib/data_objects/command.rb +30 -0
- data/lib/gems/data_objects-0.9.10.1/lib/data_objects/connection.rb +107 -0
- data/lib/gems/data_objects-0.9.10.1/lib/data_objects/field.rb +19 -0
- data/lib/gems/data_objects-0.9.10.1/lib/data_objects/logger.rb +233 -0
- data/lib/gems/data_objects-0.9.10.1/lib/data_objects/quoting.rb +103 -0
- data/lib/gems/data_objects-0.9.10.1/lib/data_objects/reader.rb +22 -0
- data/lib/gems/data_objects-0.9.10.1/lib/data_objects/result.rb +13 -0
- data/lib/gems/data_objects-0.9.10.1/lib/data_objects/transaction.rb +45 -0
- data/lib/gems/data_objects-0.9.10.1/lib/data_objects/uri.rb +34 -0
- data/lib/gems/data_objects-0.9.10.1/lib/data_objects/version.rb +3 -0
- data/lib/gems/{dm-aggregates-0.9.7 → dm-aggregates-0.9.9}/lib/dm-aggregates.rb +1 -1
- data/lib/gems/{dm-aggregates-0.9.7 → dm-aggregates-0.9.9}/lib/dm-aggregates/adapters/data_objects_adapter.rb +0 -0
- data/lib/gems/{dm-aggregates-0.9.7 → dm-aggregates-0.9.9}/lib/dm-aggregates/aggregate_functions.rb +0 -0
- data/lib/gems/{dm-aggregates-0.9.7 → dm-aggregates-0.9.9}/lib/dm-aggregates/collection.rb +4 -0
- data/lib/gems/{dm-aggregates-0.9.7 → dm-aggregates-0.9.9}/lib/dm-aggregates/model.rb +4 -0
- data/lib/gems/{dm-aggregates-0.9.7 → dm-aggregates-0.9.9}/lib/dm-aggregates/repository.rb +0 -0
- data/lib/gems/{dm-aggregates-0.9.7 → dm-aggregates-0.9.9}/lib/dm-aggregates/support/symbol.rb +0 -0
- data/lib/gems/dm-aggregates-0.9.9/lib/dm-aggregates/version.rb +5 -0
- data/lib/gems/{dm-core-0.9.7 → dm-core-0.9.9}/lib/dm-core.rb +5 -5
- data/lib/gems/{dm-core-0.9.7 → dm-core-0.9.9}/lib/dm-core/adapters.rb +0 -0
- data/lib/gems/{dm-core-0.9.7 → dm-core-0.9.9}/lib/dm-core/adapters/abstract_adapter.rb +0 -0
- data/lib/gems/{dm-core-0.9.7 → dm-core-0.9.9}/lib/dm-core/adapters/data_objects_adapter.rb +1 -1
- data/lib/gems/{dm-core-0.9.7 → dm-core-0.9.9}/lib/dm-core/adapters/in_memory_adapter.rb +0 -0
- data/lib/gems/{dm-core-0.9.7 → dm-core-0.9.9}/lib/dm-core/adapters/mysql_adapter.rb +1 -1
- data/lib/gems/{dm-core-0.9.7 → dm-core-0.9.9}/lib/dm-core/adapters/postgres_adapter.rb +1 -1
- data/lib/gems/{dm-core-0.9.7 → dm-core-0.9.9}/lib/dm-core/adapters/sqlite3_adapter.rb +1 -1
- data/lib/gems/{dm-core-0.9.7 → dm-core-0.9.9}/lib/dm-core/associations.rb +0 -0
- data/lib/gems/{dm-core-0.9.7 → dm-core-0.9.9}/lib/dm-core/associations/many_to_many.rb +0 -0
- data/lib/gems/{dm-core-0.9.7 → dm-core-0.9.9}/lib/dm-core/associations/many_to_one.rb +1 -1
- data/lib/gems/{dm-core-0.9.7 → dm-core-0.9.9}/lib/dm-core/associations/one_to_many.rb +3 -6
- data/lib/gems/{dm-core-0.9.7 → dm-core-0.9.9}/lib/dm-core/associations/one_to_one.rb +0 -0
- data/lib/gems/{dm-core-0.9.7 → dm-core-0.9.9}/lib/dm-core/associations/relationship.rb +0 -0
- data/lib/gems/{dm-core-0.9.7 → dm-core-0.9.9}/lib/dm-core/associations/relationship_chain.rb +0 -0
- data/lib/gems/{dm-core-0.9.7 → dm-core-0.9.9}/lib/dm-core/auto_migrations.rb +0 -0
- data/lib/gems/{dm-core-0.9.7 → dm-core-0.9.9}/lib/dm-core/collection.rb +26 -0
- data/lib/gems/{dm-core-0.9.7 → dm-core-0.9.9}/lib/dm-core/dependency_queue.rb +0 -0
- data/lib/gems/{dm-core-0.9.7 → dm-core-0.9.9}/lib/dm-core/hook.rb +0 -0
- data/lib/gems/{dm-core-0.9.7 → dm-core-0.9.9}/lib/dm-core/identity_map.rb +0 -0
- data/lib/gems/{dm-core-0.9.7 → dm-core-0.9.9}/lib/dm-core/is.rb +0 -0
- data/lib/gems/{dm-core-0.9.7 → dm-core-0.9.9}/lib/dm-core/logger.rb +0 -0
- data/lib/gems/{dm-core-0.9.7 → dm-core-0.9.9}/lib/dm-core/migrations/destructive_migrations.rb +0 -0
- data/lib/gems/{dm-core-0.9.7 → dm-core-0.9.9}/lib/dm-core/migrator.rb +0 -0
- data/lib/gems/{dm-core-0.9.7 → dm-core-0.9.9}/lib/dm-core/model.rb +29 -3
- data/lib/gems/{dm-core-0.9.7 → dm-core-0.9.9}/lib/dm-core/naming_conventions.rb +0 -0
- data/lib/gems/{dm-core-0.9.7 → dm-core-0.9.9}/lib/dm-core/property.rb +13 -0
- data/lib/gems/{dm-core-0.9.7 → dm-core-0.9.9}/lib/dm-core/property_set.rb +0 -0
- data/lib/gems/{dm-core-0.9.7 → dm-core-0.9.9}/lib/dm-core/query.rb +51 -3
- data/lib/gems/{dm-core-0.9.7 → dm-core-0.9.9}/lib/dm-core/repository.rb +8 -0
- data/lib/gems/{dm-core-0.9.7 → dm-core-0.9.9}/lib/dm-core/resource.rb +19 -6
- data/lib/gems/{dm-core-0.9.7 → dm-core-0.9.9}/lib/dm-core/scope.rb +0 -0
- data/lib/gems/{dm-core-0.9.7 → dm-core-0.9.9}/lib/dm-core/support.rb +0 -0
- data/lib/gems/{dm-core-0.9.7 → dm-core-0.9.9}/lib/dm-core/support/array.rb +0 -0
- data/lib/gems/{dm-core-0.9.7 → dm-core-0.9.9}/lib/dm-core/support/assertions.rb +0 -0
- data/lib/gems/{dm-core-0.9.7 → dm-core-0.9.9}/lib/dm-core/support/errors.rb +0 -0
- data/lib/gems/{dm-core-0.9.7 → dm-core-0.9.9}/lib/dm-core/support/kernel.rb +0 -0
- data/lib/gems/{dm-core-0.9.7 → dm-core-0.9.9}/lib/dm-core/support/symbol.rb +0 -0
- data/lib/gems/{dm-core-0.9.7 → dm-core-0.9.9}/lib/dm-core/transaction.rb +0 -0
- data/lib/gems/{dm-core-0.9.7 → dm-core-0.9.9}/lib/dm-core/type.rb +0 -0
- data/lib/gems/{dm-core-0.9.7 → dm-core-0.9.9}/lib/dm-core/type_map.rb +0 -0
- data/lib/gems/{dm-core-0.9.7 → dm-core-0.9.9}/lib/dm-core/types.rb +0 -0
- data/lib/gems/{dm-core-0.9.7 → dm-core-0.9.9}/lib/dm-core/types/boolean.rb +0 -0
- data/lib/gems/{dm-core-0.9.7 → dm-core-0.9.9}/lib/dm-core/types/discriminator.rb +0 -0
- data/lib/gems/{dm-core-0.9.7 → dm-core-0.9.9}/lib/dm-core/types/object.rb +0 -0
- data/lib/gems/{dm-core-0.9.7 → dm-core-0.9.9}/lib/dm-core/types/paranoid_boolean.rb +0 -0
- data/lib/gems/{dm-core-0.9.7 → dm-core-0.9.9}/lib/dm-core/types/paranoid_datetime.rb +0 -0
- data/lib/gems/{dm-core-0.9.7 → dm-core-0.9.9}/lib/dm-core/types/serial.rb +0 -0
- data/lib/gems/{dm-core-0.9.7 → dm-core-0.9.9}/lib/dm-core/types/text.rb +0 -0
- data/lib/gems/dm-core-0.9.9/lib/dm-core/version.rb +3 -0
- data/lib/gems/{dm-migrations-0.9.7 → dm-migrations-0.9.9}/lib/dm-migrations.rb +0 -0
- data/lib/gems/{dm-migrations-0.9.7 → dm-migrations-0.9.9}/lib/dm-migrations/version.rb +1 -1
- data/lib/gems/{dm-migrations-0.9.7 → dm-migrations-0.9.9}/lib/migration.rb +5 -3
- data/lib/gems/{dm-migrations-0.9.7 → dm-migrations-0.9.9}/lib/migration_runner.rb +0 -0
- data/lib/gems/{dm-migrations-0.9.7 → dm-migrations-0.9.9}/lib/spec/example/migration_example_group.rb +0 -0
- data/lib/gems/{dm-migrations-0.9.7 → dm-migrations-0.9.9}/lib/spec/matchers/migration_matchers.rb +0 -0
- data/lib/gems/{dm-migrations-0.9.7 → dm-migrations-0.9.9}/lib/sql.rb +0 -0
- data/lib/gems/{dm-migrations-0.9.7 → dm-migrations-0.9.9}/lib/sql/column.rb +0 -0
- data/lib/gems/{dm-migrations-0.9.7 → dm-migrations-0.9.9}/lib/sql/mysql.rb +0 -0
- data/lib/gems/{dm-migrations-0.9.7 → dm-migrations-0.9.9}/lib/sql/postgresql.rb +0 -0
- data/lib/gems/{dm-migrations-0.9.7 → dm-migrations-0.9.9}/lib/sql/sqlite3.rb +0 -0
- data/lib/gems/{dm-migrations-0.9.7 → dm-migrations-0.9.9}/lib/sql/table.rb +0 -0
- data/lib/gems/{dm-migrations-0.9.7 → dm-migrations-0.9.9}/lib/sql/table_creator.rb +0 -0
- data/lib/gems/{dm-migrations-0.9.7 → dm-migrations-0.9.9}/lib/sql/table_modifier.rb +0 -0
- data/lib/gems/dm-migrations-0.9.9/tasks/db.rb +22 -0
- data/lib/gems/dm-migrations-0.9.9/tasks/install.rb +13 -0
- data/lib/gems/dm-migrations-0.9.9/tasks/spec.rb +25 -0
- data/lib/gems/{dm-observer-0.9.7 → dm-observer-0.9.9}/lib/dm-observer.rb +1 -1
- data/lib/gems/{dm-observer-0.9.7 → dm-observer-0.9.9}/lib/dm-observer/version.rb +1 -1
- data/lib/gems/dm-observer-0.9.9/tasks/install.rb +13 -0
- data/lib/gems/dm-observer-0.9.9/tasks/spec.rb +25 -0
- data/lib/gems/dm-serializer-0.9.9/lib/dm-serializer.rb +4 -0
- data/lib/gems/dm-serializer-0.9.9/lib/dm-serializer/common.rb +24 -0
- data/lib/gems/dm-serializer-0.9.9/lib/dm-serializer/to_csv.rb +35 -0
- data/lib/gems/dm-serializer-0.9.9/lib/dm-serializer/to_json.rb +73 -0
- data/lib/gems/dm-serializer-0.9.9/lib/dm-serializer/to_xml.rb +61 -0
- data/lib/gems/dm-serializer-0.9.9/lib/dm-serializer/to_yaml.rb +48 -0
- data/lib/gems/{dm-serializer-0.9.7 → dm-serializer-0.9.9}/lib/dm-serializer/version.rb +1 -1
- data/lib/gems/dm-serializer-0.9.9/lib/dm-serializer/xml_serializers.rb +17 -0
- data/lib/gems/dm-serializer-0.9.9/lib/dm-serializer/xml_serializers/libxml.rb +29 -0
- data/lib/gems/dm-serializer-0.9.9/lib/dm-serializer/xml_serializers/nokogiri.rb +28 -0
- data/lib/gems/dm-serializer-0.9.9/lib/dm-serializer/xml_serializers/rexml.rb +23 -0
- data/lib/gems/dm-serializer-0.9.9/tasks/install.rb +13 -0
- data/lib/gems/dm-serializer-0.9.9/tasks/spec.rb +25 -0
- data/lib/gems/dm-timestamps-0.9.9/lib/dm-timestamps.rb +58 -0
- data/lib/gems/{dm-timestamps-0.9.7 → dm-timestamps-0.9.9}/lib/dm-timestamps/version.rb +1 -1
- data/lib/gems/dm-timestamps-0.9.9/tasks/install.rb +13 -0
- data/lib/gems/dm-timestamps-0.9.9/tasks/spec.rb +25 -0
- data/lib/gems/dm-types-0.9.9/lib/dm-types.rb +26 -0
- data/lib/gems/dm-types-0.9.9/lib/dm-types/bcrypt_hash.rb +33 -0
- data/lib/gems/{dm-types-0.9.7 → dm-types-0.9.9}/lib/dm-types/csv.rb +0 -0
- data/lib/gems/{dm-types-0.9.7 → dm-types-0.9.9}/lib/dm-types/enum.rb +4 -4
- data/lib/gems/{dm-types-0.9.7 → dm-types-0.9.9}/lib/dm-types/epoch_time.rb +0 -0
- data/lib/gems/{dm-types-0.9.7 → dm-types-0.9.9}/lib/dm-types/file_path.rb +0 -0
- data/lib/gems/{dm-types-0.9.7 → dm-types-0.9.9}/lib/dm-types/flag.rb +0 -0
- data/lib/gems/{dm-types-0.9.7 → dm-types-0.9.9}/lib/dm-types/ip_address.rb +0 -0
- data/lib/gems/{dm-types-0.9.7 → dm-types-0.9.9}/lib/dm-types/json.rb +3 -6
- data/lib/gems/{dm-types-0.9.7 → dm-types-0.9.9}/lib/dm-types/regexp.rb +0 -0
- data/lib/gems/{dm-types-0.9.7 → dm-types-0.9.9}/lib/dm-types/serial.rb +0 -0
- data/lib/gems/{dm-types-0.9.7 → dm-types-0.9.9}/lib/dm-types/slug.rb +0 -0
- data/lib/gems/{dm-types-0.9.7 → dm-types-0.9.9}/lib/dm-types/uri.rb +2 -0
- data/lib/gems/{dm-types-0.9.7 → dm-types-0.9.9}/lib/dm-types/uuid.rb +3 -0
- data/lib/gems/{dm-types-0.9.7 → dm-types-0.9.9}/lib/dm-types/version.rb +1 -1
- data/lib/gems/{dm-types-0.9.7 → dm-types-0.9.9}/lib/dm-types/yaml.rb +1 -2
- data/lib/gems/dm-types-0.9.9/tasks/install.rb +13 -0
- data/lib/gems/dm-types-0.9.9/tasks/spec.rb +25 -0
- data/lib/gems/{dm-validations-0.9.7 → dm-validations-0.9.9}/lib/dm-validations.rb +1 -1
- data/lib/gems/{dm-validations-0.9.7 → dm-validations-0.9.9}/lib/dm-validations/absent_field_validator.rb +0 -0
- data/lib/gems/{dm-validations-0.9.7 → dm-validations-0.9.9}/lib/dm-validations/acceptance_validator.rb +0 -0
- data/lib/gems/{dm-validations-0.9.7 → dm-validations-0.9.9}/lib/dm-validations/auto_validate.rb +0 -0
- data/lib/gems/{dm-validations-0.9.7 → dm-validations-0.9.9}/lib/dm-validations/block_validator.rb +0 -0
- data/lib/gems/{dm-validations-0.9.7 → dm-validations-0.9.9}/lib/dm-validations/confirmation_validator.rb +0 -0
- data/lib/gems/{dm-validations-0.9.7 → dm-validations-0.9.9}/lib/dm-validations/contextual_validators.rb +2 -3
- data/lib/gems/{dm-validations-0.9.7 → dm-validations-0.9.9}/lib/dm-validations/custom_validator.rb +0 -0
- data/lib/gems/{dm-validations-0.9.7 → dm-validations-0.9.9}/lib/dm-validations/format_validator.rb +0 -0
- data/lib/gems/{dm-validations-0.9.7 → dm-validations-0.9.9}/lib/dm-validations/formats/email.rb +1 -0
- data/lib/gems/{dm-validations-0.9.7 → dm-validations-0.9.9}/lib/dm-validations/formats/url.rb +0 -0
- data/lib/gems/{dm-validations-0.9.7 → dm-validations-0.9.9}/lib/dm-validations/generic_validator.rb +0 -0
- data/lib/gems/{dm-validations-0.9.7 → dm-validations-0.9.9}/lib/dm-validations/length_validator.rb +0 -0
- data/lib/gems/{dm-validations-0.9.7 → dm-validations-0.9.9}/lib/dm-validations/method_validator.rb +0 -0
- data/lib/gems/{dm-validations-0.9.7 → dm-validations-0.9.9}/lib/dm-validations/numeric_validator.rb +0 -0
- data/lib/gems/{dm-validations-0.9.7 → dm-validations-0.9.9}/lib/dm-validations/primitive_validator.rb +0 -0
- data/lib/gems/{dm-validations-0.9.7 → dm-validations-0.9.9}/lib/dm-validations/required_field_validator.rb +0 -0
- data/lib/gems/{dm-validations-0.9.7 → dm-validations-0.9.9}/lib/dm-validations/support/object.rb +0 -0
- data/lib/gems/{dm-validations-0.9.7 → dm-validations-0.9.9}/lib/dm-validations/uniqueness_validator.rb +1 -1
- data/lib/gems/{dm-validations-0.9.7 → dm-validations-0.9.9}/lib/dm-validations/validation_errors.rb +0 -0
- data/lib/gems/{dm-validations-0.9.7 → dm-validations-0.9.9}/lib/dm-validations/version.rb +1 -1
- data/lib/gems/{dm-validations-0.9.7 → dm-validations-0.9.9}/lib/dm-validations/within_validator.rb +0 -0
- data/lib/gems/dm-validations-0.9.9/tasks/install.rb +13 -0
- data/lib/gems/dm-validations-0.9.9/tasks/spec.rb +25 -0
- data/lib/gems/json_pure-1.1.3/tools/fuzz.rb +140 -0
- data/lib/gems/json_pure-1.1.3/tools/server.rb +62 -0
- data/lib/mack-data_mapper/dm_patches/migrations.rb +22 -1
- data/lib/mack-data_mapper/migration_generator/templates/db/migrations/%=@migration_name%.rb.template +1 -1
- metadata +216 -172
- data/lib/gems/dm-aggregates-0.9.7/lib/dm-aggregates/version.rb +0 -7
- data/lib/gems/dm-core-0.9.7/lib/dm-core/version.rb +0 -3
- data/lib/gems/dm-core-0.9.7/script/all +0 -5
- data/lib/gems/dm-core-0.9.7/script/performance.rb +0 -284
- data/lib/gems/dm-core-0.9.7/script/profile.rb +0 -87
- data/lib/gems/dm-serializer-0.9.7/lib/dm-serializer.rb +0 -183
- data/lib/gems/dm-timestamps-0.9.7/lib/dm-timestamps.rb +0 -57
- data/lib/gems/dm-types-0.9.7/lib/dm-types.rb +0 -28
- data/lib/gems/dm-types-0.9.7/lib/dm-types/bcrypt_hash.rb +0 -31
- data/lib/gems/json_pure-1.1.3/GPL +0 -340
- data/lib/gems/uuidtools-1.0.3/lib/uuidtools.rb +0 -648
- data/lib/gems/uuidtools-1.0.3/lib/uuidtools/version.rb +0 -32
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
require 'dm-serializer/common'
|
|
2
|
+
require 'dm-serializer/xml_serializers'
|
|
3
|
+
require 'rexml/document'
|
|
4
|
+
|
|
5
|
+
module DataMapper
|
|
6
|
+
module Serialize
|
|
7
|
+
# Serialize a Resource to XML
|
|
8
|
+
#
|
|
9
|
+
# @return <REXML::Document> an XML representation of this Resource
|
|
10
|
+
def to_xml(opts = {})
|
|
11
|
+
to_xml_document(opts).to_s
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
protected
|
|
15
|
+
# This method requires certain methods to be implemented in the individual
|
|
16
|
+
# serializer library subclasses:
|
|
17
|
+
# new_document
|
|
18
|
+
# root_node
|
|
19
|
+
# add_property_node
|
|
20
|
+
# add_node
|
|
21
|
+
def to_xml_document(opts={}, doc = nil)
|
|
22
|
+
xml = XMLSerializers::SERIALIZER
|
|
23
|
+
doc ||= xml.new_document
|
|
24
|
+
default_xml_element_name = lambda { Extlib::Inflection.underscore(self.class.name).tr("/", "-") }
|
|
25
|
+
root = xml.root_node(doc, opts[:element_name] || default_xml_element_name[])
|
|
26
|
+
properties_to_serialize(opts).each do |property|
|
|
27
|
+
value = send(property.name)
|
|
28
|
+
attrs = (property.type == String) ? {} : {'type' => property.type.to_s.downcase}
|
|
29
|
+
xml.add_node(root, property.name.to_s, value, attrs)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
(opts[:methods] || []).each do |meth|
|
|
33
|
+
if self.respond_to?(meth)
|
|
34
|
+
xml_name = meth.to_s.gsub(/[^a-z0-9_]/, '')
|
|
35
|
+
value = send(meth)
|
|
36
|
+
xml.add_node(root, xml_name, value.to_s) unless value.nil?
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
doc
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
class Collection
|
|
44
|
+
def to_xml(opts = {})
|
|
45
|
+
to_xml_document(opts).to_s
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
protected
|
|
49
|
+
|
|
50
|
+
def to_xml_document(opts = {})
|
|
51
|
+
xml = DataMapper::Serialize::XMLSerializers::SERIALIZER
|
|
52
|
+
doc = xml.new_document
|
|
53
|
+
default_collection_element_name = lambda {Extlib::Inflection.pluralize(Extlib::Inflection.underscore(self.model.to_s)).tr("/", "-")}
|
|
54
|
+
root = xml.root_node(doc, opts[:collection_element_name] || default_collection_element_name[], {'type' => 'array'})
|
|
55
|
+
self.each do |item|
|
|
56
|
+
item.send(:to_xml_document, opts, doc)
|
|
57
|
+
end
|
|
58
|
+
doc
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
require 'dm-serializer/common'
|
|
2
|
+
|
|
3
|
+
module DataMapper
|
|
4
|
+
module Serialize
|
|
5
|
+
# Serialize a Resource to YAML
|
|
6
|
+
#
|
|
7
|
+
# @return <YAML> a YAML representation of this Resource
|
|
8
|
+
def to_yaml(opts_or_emitter = {})
|
|
9
|
+
if opts_or_emitter.is_a?(YAML::Syck::Emitter)
|
|
10
|
+
emitter = opts_or_emitter
|
|
11
|
+
opts = {}
|
|
12
|
+
else
|
|
13
|
+
emitter = {}
|
|
14
|
+
opts = opts_or_emitter
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
YAML::quick_emit(object_id,emitter) do |out|
|
|
18
|
+
out.map(nil,to_yaml_style) do |map|
|
|
19
|
+
propset = properties_to_serialize(opts)
|
|
20
|
+
propset.each do |property|
|
|
21
|
+
value = send(property.name.to_sym)
|
|
22
|
+
map.add(property.name, value.is_a?(Class) ? value.to_s : value)
|
|
23
|
+
end
|
|
24
|
+
# add methods
|
|
25
|
+
(opts[:methods] || []).each do |meth|
|
|
26
|
+
if self.respond_to?(meth)
|
|
27
|
+
map.add(meth.to_sym, send(meth))
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
(instance_variable_get("@yaml_addes") || []).each do |k,v|
|
|
31
|
+
map.add(k.to_s,v)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
class Collection
|
|
39
|
+
def to_yaml(opts_or_emitter = {})
|
|
40
|
+
if opts_or_emitter.is_a?(YAML::Syck::Emitter)
|
|
41
|
+
to_a.to_yaml(opts_or_emitter)
|
|
42
|
+
else
|
|
43
|
+
# FIXME: Don't double handle the YAML (remove the YAML.load)
|
|
44
|
+
to_a.collect {|x| YAML.load(x.to_yaml(opts_or_emitter)) }.to_yaml
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
require 'dm-serializer/xml_serializers/rexml'
|
|
2
|
+
require 'dm-serializer/xml_serializers/nokogiri'
|
|
3
|
+
require 'dm-serializer/xml_serializers/libxml'
|
|
4
|
+
|
|
5
|
+
module DataMapper
|
|
6
|
+
module Serialize
|
|
7
|
+
module XMLSerializers
|
|
8
|
+
SERIALIZER = if defined?(::LibXML)
|
|
9
|
+
LibXML
|
|
10
|
+
elsif defined?(::Nokogiri)
|
|
11
|
+
Nokogiri
|
|
12
|
+
else
|
|
13
|
+
REXML
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
module DataMapper
|
|
2
|
+
module Serialize
|
|
3
|
+
module XMLSerializers
|
|
4
|
+
module LibXML
|
|
5
|
+
def self.new_document
|
|
6
|
+
::LibXML::XML::Document.new
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def self.root_node(doc, name, attrs = {})
|
|
10
|
+
root = ::LibXML::XML::Node.new(name)
|
|
11
|
+
attrs.each do |attr_name, attr_val|
|
|
12
|
+
root[attr_name] = attr_val
|
|
13
|
+
end
|
|
14
|
+
doc.root.nil? ? doc.root = root : doc.root << root
|
|
15
|
+
root
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def self.add_node(parent, name, value, attrs = {})
|
|
19
|
+
value_str = value.to_s unless value.nil?
|
|
20
|
+
node = ::LibXML::XML::Node.new(name, value_str)
|
|
21
|
+
attrs.each do |attr_name, attr_val|
|
|
22
|
+
node[attr_name] = attr_val
|
|
23
|
+
end
|
|
24
|
+
parent << node
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
module DataMapper
|
|
2
|
+
module Serialize
|
|
3
|
+
module XMLSerializers
|
|
4
|
+
module Nokogiri
|
|
5
|
+
def self.new_document
|
|
6
|
+
::Nokogiri::XML::Document.new
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def self.root_node(doc, name, attrs = {})
|
|
10
|
+
root = ::Nokogiri::XML::Node.new(name, doc)
|
|
11
|
+
attrs.each do |attr_name, attr_val|
|
|
12
|
+
root[attr_name] = attr_val
|
|
13
|
+
end
|
|
14
|
+
doc.root.nil? ? doc.root = root : doc.root << root
|
|
15
|
+
root
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def self.add_node(parent, name, value, attrs = {})
|
|
19
|
+
node = ::Nokogiri::XML::Node.new(name, parent.document)
|
|
20
|
+
node << ::Nokogiri::XML::Text.new(value.to_s, parent.document) unless value.nil?
|
|
21
|
+
attrs.each {|attr_name, attr_val| node[attr_name] = attr_val }
|
|
22
|
+
parent << node
|
|
23
|
+
node
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module DataMapper
|
|
2
|
+
module Serialize
|
|
3
|
+
module XMLSerializers
|
|
4
|
+
module REXML
|
|
5
|
+
def self.new_document
|
|
6
|
+
::REXML::Document.new
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def self.root_node(document, name, attrs = {})
|
|
10
|
+
add_node(document.root || document, name, nil, attrs)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def self.add_node(parent, name, value, attrs = {})
|
|
14
|
+
node = parent.add_element(name)
|
|
15
|
+
attrs.each {|attr_name, attr_val| node.attributes[attr_name] = attr_val}
|
|
16
|
+
node << ::REXML::Text.new(value.to_s) unless value.nil?
|
|
17
|
+
node
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
def sudo_gem(cmd)
|
|
2
|
+
sh "#{SUDO} #{RUBY} -S gem #{cmd}", :verbose => false
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
desc "Install #{GEM_NAME} #{GEM_VERSION}"
|
|
6
|
+
task :install => [ :package ] do
|
|
7
|
+
sudo_gem "install --local pkg/#{GEM_NAME}-#{GEM_VERSION} --no-update-sources"
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
desc "Uninstall #{GEM_NAME} #{GEM_VERSION}"
|
|
11
|
+
task :uninstall => [ :clobber ] do
|
|
12
|
+
sudo_gem "uninstall #{GEM_NAME} -v#{GEM_VERSION} -Ix"
|
|
13
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
begin
|
|
2
|
+
gem 'rspec', '~>1.1.11'
|
|
3
|
+
require 'spec'
|
|
4
|
+
require 'spec/rake/spectask'
|
|
5
|
+
|
|
6
|
+
task :default => [ :spec ]
|
|
7
|
+
|
|
8
|
+
desc 'Run specifications'
|
|
9
|
+
Spec::Rake::SpecTask.new(:spec) do |t|
|
|
10
|
+
t.spec_opts << '--options' << 'spec/spec.opts' if File.exists?('spec/spec.opts')
|
|
11
|
+
t.spec_files = Pathname.glob((ROOT + 'spec/**/*_spec.rb').to_s)
|
|
12
|
+
|
|
13
|
+
begin
|
|
14
|
+
gem 'rcov', '~>0.8'
|
|
15
|
+
t.rcov = JRUBY ? false : (ENV.has_key?('NO_RCOV') ? ENV['NO_RCOV'] != 'true' : true)
|
|
16
|
+
t.rcov_opts << '--exclude' << 'spec'
|
|
17
|
+
t.rcov_opts << '--text-summary'
|
|
18
|
+
t.rcov_opts << '--sort' << 'coverage' << '--sort-reverse'
|
|
19
|
+
rescue LoadError
|
|
20
|
+
# rcov not installed
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
rescue LoadError
|
|
24
|
+
# rspec not installed
|
|
25
|
+
end
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
require 'rubygems'
|
|
2
|
+
|
|
3
|
+
gem 'dm-core', '~>0.9.9'
|
|
4
|
+
require 'dm-core'
|
|
5
|
+
|
|
6
|
+
module DataMapper
|
|
7
|
+
module Timestamp
|
|
8
|
+
Resource.append_inclusions self
|
|
9
|
+
|
|
10
|
+
TIMESTAMP_PROPERTIES = {
|
|
11
|
+
:updated_at => [ DateTime, lambda { |r, p| DateTime.now } ],
|
|
12
|
+
:updated_on => [ Date, lambda { |r, p| Date.today } ],
|
|
13
|
+
:created_at => [ DateTime, lambda { |r, p| r.created_at || (DateTime.now if r.new_record?) } ],
|
|
14
|
+
:created_on => [ Date, lambda { |r, p| r.created_on || (Date.today if r.new_record?) } ],
|
|
15
|
+
}.freeze
|
|
16
|
+
|
|
17
|
+
def self.included(model)
|
|
18
|
+
model.before :create, :set_timestamps
|
|
19
|
+
model.before :update, :set_timestamps
|
|
20
|
+
model.extend ClassMethods
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
private
|
|
24
|
+
|
|
25
|
+
def set_timestamps
|
|
26
|
+
return unless dirty?
|
|
27
|
+
TIMESTAMP_PROPERTIES.each do |name,(_type,proc)|
|
|
28
|
+
if model.properties.has_property?(name)
|
|
29
|
+
model.properties[name].set(self, proc.call(self, model.properties[name])) unless attribute_dirty?(name)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
module ClassMethods
|
|
35
|
+
def timestamps(*names)
|
|
36
|
+
raise ArgumentError, 'You need to pass at least one argument' if names.empty?
|
|
37
|
+
|
|
38
|
+
names.each do |name|
|
|
39
|
+
case name
|
|
40
|
+
when *TIMESTAMP_PROPERTIES.keys
|
|
41
|
+
type = TIMESTAMP_PROPERTIES[name].first
|
|
42
|
+
property name, type, :nullable => false, :auto_validation => false
|
|
43
|
+
when :at
|
|
44
|
+
timestamps(:created_at, :updated_at)
|
|
45
|
+
when :on
|
|
46
|
+
timestamps(:created_on, :updated_on)
|
|
47
|
+
else
|
|
48
|
+
raise InvalidTimestampName, "Invalid timestamp property name '#{name}'"
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end # module ClassMethods
|
|
53
|
+
|
|
54
|
+
class InvalidTimestampName < RuntimeError; end
|
|
55
|
+
end # module Timestamp
|
|
56
|
+
# include Timestamp or Timestamps, it still works
|
|
57
|
+
Timestamps = Timestamp
|
|
58
|
+
end # module DataMapper
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
def sudo_gem(cmd)
|
|
2
|
+
sh "#{SUDO} #{RUBY} -S gem #{cmd}", :verbose => false
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
desc "Install #{GEM_NAME} #{GEM_VERSION}"
|
|
6
|
+
task :install => [ :package ] do
|
|
7
|
+
sudo_gem "install --local pkg/#{GEM_NAME}-#{GEM_VERSION} --no-update-sources"
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
desc "Uninstall #{GEM_NAME} #{GEM_VERSION}"
|
|
11
|
+
task :uninstall => [ :clobber ] do
|
|
12
|
+
sudo_gem "uninstall #{GEM_NAME} -v#{GEM_VERSION} -Ix"
|
|
13
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
begin
|
|
2
|
+
gem 'rspec', '~>1.1.11'
|
|
3
|
+
require 'spec'
|
|
4
|
+
require 'spec/rake/spectask'
|
|
5
|
+
|
|
6
|
+
task :default => [ :spec ]
|
|
7
|
+
|
|
8
|
+
desc 'Run specifications'
|
|
9
|
+
Spec::Rake::SpecTask.new(:spec) do |t|
|
|
10
|
+
t.spec_opts << '--options' << 'spec/spec.opts' if File.exists?('spec/spec.opts')
|
|
11
|
+
t.spec_files = Pathname.glob((ROOT + 'spec/**/*_spec.rb').to_s)
|
|
12
|
+
|
|
13
|
+
begin
|
|
14
|
+
gem 'rcov', '~>0.8'
|
|
15
|
+
t.rcov = JRUBY ? false : (ENV.has_key?('NO_RCOV') ? ENV['NO_RCOV'] != 'true' : true)
|
|
16
|
+
t.rcov_opts << '--exclude' << 'spec'
|
|
17
|
+
t.rcov_opts << '--text-summary'
|
|
18
|
+
t.rcov_opts << '--sort' << 'coverage' << '--sort-reverse'
|
|
19
|
+
rescue LoadError
|
|
20
|
+
# rcov not installed
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
rescue LoadError
|
|
24
|
+
# rspec not installed
|
|
25
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
require 'pathname'
|
|
2
|
+
require 'rubygems'
|
|
3
|
+
|
|
4
|
+
gem 'dm-core', '~>0.9.9'
|
|
5
|
+
require 'dm-core'
|
|
6
|
+
|
|
7
|
+
module DataMapper
|
|
8
|
+
module Types
|
|
9
|
+
dir = (Pathname(__FILE__).dirname.expand_path / 'dm-types').to_s
|
|
10
|
+
|
|
11
|
+
autoload :BCryptHash, dir / 'bcrypt_hash'
|
|
12
|
+
autoload :Csv, dir / 'csv'
|
|
13
|
+
autoload :Enum, dir / 'enum'
|
|
14
|
+
autoload :EpochTime, dir / 'epoch_time'
|
|
15
|
+
autoload :FilePath, dir / 'file_path'
|
|
16
|
+
autoload :Flag, dir / 'flag'
|
|
17
|
+
autoload :IPAddress, dir / 'ip_address'
|
|
18
|
+
autoload :Json, dir / 'json'
|
|
19
|
+
autoload :Regexp, dir / 'regexp'
|
|
20
|
+
autoload :Serial, dir / 'serial'
|
|
21
|
+
autoload :Slug, dir / 'slug'
|
|
22
|
+
autoload :URI, dir / 'uri'
|
|
23
|
+
autoload :UUID, dir / 'uuid'
|
|
24
|
+
autoload :Yaml, dir / 'yaml'
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
require 'rubygems'
|
|
2
|
+
|
|
3
|
+
gem 'bcrypt-ruby', '~>2.0.3'
|
|
4
|
+
require 'bcrypt'
|
|
5
|
+
|
|
6
|
+
module DataMapper
|
|
7
|
+
module Types
|
|
8
|
+
class BCryptHash < DataMapper::Type
|
|
9
|
+
primitive String
|
|
10
|
+
size 60
|
|
11
|
+
|
|
12
|
+
def self.load(value, property)
|
|
13
|
+
typecast(value, property)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def self.dump(value, property)
|
|
17
|
+
typecast(value, property)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def self.typecast(value, property)
|
|
21
|
+
if value.nil?
|
|
22
|
+
nil
|
|
23
|
+
else
|
|
24
|
+
begin
|
|
25
|
+
value.is_a?(BCrypt::Password) ? value : BCrypt::Password.new(value)
|
|
26
|
+
rescue BCrypt::Errors::InvalidHash
|
|
27
|
+
BCrypt::Password.create(value, :cost => BCrypt::Engine::DEFAULT_COST)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end # class BCryptHash
|
|
32
|
+
end # module Types
|
|
33
|
+
end # module DataMapper
|
|
File without changes
|
|
@@ -34,8 +34,8 @@ module DataMapper
|
|
|
34
34
|
|
|
35
35
|
def self.dump(value, property)
|
|
36
36
|
case value
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
when Array then value.collect { |v| self.dump(v, property) }
|
|
38
|
+
else self.flag_map.invert[value]
|
|
39
39
|
end
|
|
40
40
|
end
|
|
41
41
|
|
|
@@ -46,7 +46,7 @@ module DataMapper
|
|
|
46
46
|
when Symbol then value.to_sym
|
|
47
47
|
when String then value.to_s
|
|
48
48
|
when Fixnum then value.to_i
|
|
49
|
-
else
|
|
49
|
+
else value
|
|
50
50
|
end
|
|
51
51
|
end
|
|
52
52
|
end # class Enum
|
|
@@ -61,7 +61,7 @@ module DataMapper
|
|
|
61
61
|
return unless property.options[:auto_validation]
|
|
62
62
|
|
|
63
63
|
if property.type.ancestors.include?(Types::Enum)
|
|
64
|
-
|
|
64
|
+
validates_within property.name, options_with_message({:set => property.type.flag_map.values}, property, :within)
|
|
65
65
|
end
|
|
66
66
|
end
|
|
67
67
|
end
|