mack-data_mapper 0.8.1 → 0.8.2
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/lib/addressable/idna.rb +4867 -0
- data/lib/gems/addressable-2.0.0/lib/addressable/uri.rb +2469 -0
- data/lib/gems/addressable-2.0.0/lib/addressable/version.rb +35 -0
- data/lib/gems/dm-aggregates-0.9.7/lib/dm-aggregates/adapters/data_objects_adapter.rb +85 -0
- data/lib/gems/dm-aggregates-0.9.7/lib/dm-aggregates/aggregate_functions.rb +201 -0
- data/lib/gems/dm-aggregates-0.9.7/lib/dm-aggregates/collection.rb +11 -0
- data/lib/gems/dm-aggregates-0.9.7/lib/dm-aggregates/model.rb +11 -0
- data/lib/gems/dm-aggregates-0.9.7/lib/dm-aggregates/repository.rb +7 -0
- data/lib/gems/dm-aggregates-0.9.7/lib/dm-aggregates/support/symbol.rb +21 -0
- data/lib/gems/dm-aggregates-0.9.7/lib/dm-aggregates/version.rb +7 -0
- data/lib/gems/dm-aggregates-0.9.7/lib/dm-aggregates.rb +15 -0
- data/lib/gems/dm-core-0.9.7/lib/dm-core/adapters/abstract_adapter.rb +209 -0
- data/lib/gems/dm-core-0.9.7/lib/dm-core/adapters/data_objects_adapter.rb +709 -0
- data/lib/gems/dm-core-0.9.7/lib/dm-core/adapters/in_memory_adapter.rb +87 -0
- data/lib/gems/dm-core-0.9.7/lib/dm-core/adapters/mysql_adapter.rb +136 -0
- data/lib/gems/dm-core-0.9.7/lib/dm-core/adapters/postgres_adapter.rb +188 -0
- data/lib/gems/dm-core-0.9.7/lib/dm-core/adapters/sqlite3_adapter.rb +105 -0
- data/lib/gems/dm-core-0.9.7/lib/dm-core/adapters.rb +22 -0
- data/lib/gems/dm-core-0.9.7/lib/dm-core/associations/many_to_many.rb +147 -0
- data/lib/gems/dm-core-0.9.7/lib/dm-core/associations/many_to_one.rb +107 -0
- data/lib/gems/dm-core-0.9.7/lib/dm-core/associations/one_to_many.rb +318 -0
- data/lib/gems/dm-core-0.9.7/lib/dm-core/associations/one_to_one.rb +61 -0
- data/lib/gems/dm-core-0.9.7/lib/dm-core/associations/relationship.rb +223 -0
- data/lib/gems/dm-core-0.9.7/lib/dm-core/associations/relationship_chain.rb +81 -0
- data/lib/gems/dm-core-0.9.7/lib/dm-core/associations.rb +200 -0
- data/lib/gems/dm-core-0.9.7/lib/dm-core/auto_migrations.rb +105 -0
- data/lib/gems/dm-core-0.9.7/lib/dm-core/collection.rb +642 -0
- data/lib/gems/dm-core-0.9.7/lib/dm-core/dependency_queue.rb +32 -0
- data/lib/gems/dm-core-0.9.7/lib/dm-core/hook.rb +11 -0
- data/lib/gems/dm-core-0.9.7/lib/dm-core/identity_map.rb +42 -0
- data/lib/gems/dm-core-0.9.7/lib/dm-core/is.rb +16 -0
- data/lib/gems/dm-core-0.9.7/lib/dm-core/logger.rb +232 -0
- data/lib/gems/dm-core-0.9.7/lib/dm-core/migrations/destructive_migrations.rb +17 -0
- data/lib/gems/dm-core-0.9.7/lib/dm-core/migrator.rb +29 -0
- data/lib/gems/dm-core-0.9.7/lib/dm-core/model.rb +488 -0
- data/lib/gems/dm-core-0.9.7/lib/dm-core/naming_conventions.rb +84 -0
- data/lib/gems/dm-core-0.9.7/lib/dm-core/property.rb +663 -0
- data/lib/gems/dm-core-0.9.7/lib/dm-core/property_set.rb +169 -0
- data/lib/gems/dm-core-0.9.7/lib/dm-core/query.rb +628 -0
- data/lib/gems/dm-core-0.9.7/lib/dm-core/repository.rb +159 -0
- data/lib/gems/dm-core-0.9.7/lib/dm-core/resource.rb +637 -0
- data/lib/gems/dm-core-0.9.7/lib/dm-core/scope.rb +58 -0
- data/lib/gems/dm-core-0.9.7/lib/dm-core/support/array.rb +13 -0
- data/lib/gems/dm-core-0.9.7/lib/dm-core/support/assertions.rb +8 -0
- data/lib/gems/dm-core-0.9.7/lib/dm-core/support/errors.rb +23 -0
- data/lib/gems/dm-core-0.9.7/lib/dm-core/support/kernel.rb +11 -0
- data/lib/gems/dm-core-0.9.7/lib/dm-core/support/symbol.rb +41 -0
- data/lib/gems/dm-core-0.9.7/lib/dm-core/support.rb +7 -0
- data/lib/gems/dm-core-0.9.7/lib/dm-core/transaction.rb +267 -0
- data/lib/gems/dm-core-0.9.7/lib/dm-core/type.rb +160 -0
- data/lib/gems/dm-core-0.9.7/lib/dm-core/type_map.rb +80 -0
- data/lib/gems/dm-core-0.9.7/lib/dm-core/types/boolean.rb +7 -0
- data/lib/gems/dm-core-0.9.7/lib/dm-core/types/discriminator.rb +34 -0
- data/lib/gems/dm-core-0.9.7/lib/dm-core/types/object.rb +24 -0
- data/lib/gems/dm-core-0.9.7/lib/dm-core/types/paranoid_boolean.rb +34 -0
- data/lib/gems/dm-core-0.9.7/lib/dm-core/types/paranoid_datetime.rb +33 -0
- data/lib/gems/dm-core-0.9.7/lib/dm-core/types/serial.rb +9 -0
- data/lib/gems/dm-core-0.9.7/lib/dm-core/types/text.rb +10 -0
- data/lib/gems/dm-core-0.9.7/lib/dm-core/types.rb +19 -0
- data/lib/gems/dm-core-0.9.7/lib/dm-core/version.rb +3 -0
- data/lib/gems/dm-core-0.9.7/lib/dm-core.rb +217 -0
- data/lib/gems/dm-core-0.9.7/script/all +5 -0
- data/lib/gems/dm-core-0.9.7/script/performance.rb +284 -0
- data/lib/gems/dm-core-0.9.7/script/profile.rb +87 -0
- data/lib/gems/dm-migrations-0.9.7/lib/dm-migrations/version.rb +5 -0
- data/lib/gems/dm-migrations-0.9.7/lib/dm-migrations.rb +1 -0
- data/lib/gems/dm-migrations-0.9.7/lib/migration.rb +215 -0
- data/lib/gems/dm-migrations-0.9.7/lib/migration_runner.rb +88 -0
- data/lib/gems/dm-migrations-0.9.7/lib/spec/example/migration_example_group.rb +73 -0
- data/lib/gems/dm-migrations-0.9.7/lib/spec/matchers/migration_matchers.rb +107 -0
- data/lib/gems/dm-migrations-0.9.7/lib/sql/column.rb +9 -0
- data/lib/gems/dm-migrations-0.9.7/lib/sql/mysql.rb +52 -0
- data/lib/gems/dm-migrations-0.9.7/lib/sql/postgresql.rb +78 -0
- data/lib/gems/dm-migrations-0.9.7/lib/sql/sqlite3.rb +43 -0
- data/lib/gems/dm-migrations-0.9.7/lib/sql/table.rb +19 -0
- data/lib/gems/dm-migrations-0.9.7/lib/sql/table_creator.rb +81 -0
- data/lib/gems/dm-migrations-0.9.7/lib/sql/table_modifier.rb +53 -0
- data/lib/gems/dm-migrations-0.9.7/lib/sql.rb +10 -0
- data/lib/gems/dm-observer-0.9.7/lib/dm-observer/version.rb +5 -0
- data/lib/gems/dm-observer-0.9.7/lib/dm-observer.rb +91 -0
- data/lib/gems/dm-serializer-0.9.7/lib/dm-serializer/version.rb +5 -0
- data/lib/gems/dm-serializer-0.9.7/lib/dm-serializer.rb +183 -0
- data/lib/gems/dm-timestamps-0.9.7/lib/dm-timestamps/version.rb +5 -0
- data/lib/gems/dm-timestamps-0.9.7/lib/dm-timestamps.rb +57 -0
- data/lib/gems/dm-types-0.9.7/lib/dm-types/bcrypt_hash.rb +31 -0
- data/lib/gems/dm-types-0.9.7/lib/dm-types/csv.rb +28 -0
- data/lib/gems/dm-types-0.9.7/lib/dm-types/enum.rb +70 -0
- data/lib/gems/dm-types-0.9.7/lib/dm-types/epoch_time.rb +27 -0
- data/lib/gems/dm-types-0.9.7/lib/dm-types/file_path.rb +27 -0
- data/lib/gems/dm-types-0.9.7/lib/dm-types/flag.rb +61 -0
- data/lib/gems/dm-types-0.9.7/lib/dm-types/ip_address.rb +30 -0
- data/lib/gems/dm-types-0.9.7/lib/dm-types/json.rb +40 -0
- data/lib/gems/dm-types-0.9.7/lib/dm-types/regexp.rb +20 -0
- data/lib/gems/dm-types-0.9.7/lib/dm-types/serial.rb +8 -0
- data/lib/gems/dm-types-0.9.7/lib/dm-types/slug.rb +37 -0
- data/lib/gems/dm-types-0.9.7/lib/dm-types/uri.rb +29 -0
- data/lib/gems/dm-types-0.9.7/lib/dm-types/uuid.rb +64 -0
- data/lib/gems/dm-types-0.9.7/lib/dm-types/version.rb +5 -0
- data/lib/gems/dm-types-0.9.7/lib/dm-types/yaml.rb +36 -0
- data/lib/gems/dm-types-0.9.7/lib/dm-types.rb +28 -0
- data/lib/gems/dm-validations-0.9.7/lib/dm-validations/absent_field_validator.rb +60 -0
- data/lib/gems/dm-validations-0.9.7/lib/dm-validations/acceptance_validator.rb +76 -0
- data/lib/gems/dm-validations-0.9.7/lib/dm-validations/auto_validate.rb +153 -0
- data/lib/gems/dm-validations-0.9.7/lib/dm-validations/block_validator.rb +60 -0
- data/lib/gems/dm-validations-0.9.7/lib/dm-validations/confirmation_validator.rb +80 -0
- data/lib/gems/dm-validations-0.9.7/lib/dm-validations/contextual_validators.rb +56 -0
- data/lib/gems/dm-validations-0.9.7/lib/dm-validations/custom_validator.rb +72 -0
- data/lib/gems/dm-validations-0.9.7/lib/dm-validations/format_validator.rb +97 -0
- data/lib/gems/dm-validations-0.9.7/lib/dm-validations/formats/email.rb +40 -0
- data/lib/gems/dm-validations-0.9.7/lib/dm-validations/formats/url.rb +20 -0
- data/lib/gems/dm-validations-0.9.7/lib/dm-validations/generic_validator.rb +100 -0
- data/lib/gems/dm-validations-0.9.7/lib/dm-validations/length_validator.rb +113 -0
- data/lib/gems/dm-validations-0.9.7/lib/dm-validations/method_validator.rb +68 -0
- data/lib/gems/dm-validations-0.9.7/lib/dm-validations/numeric_validator.rb +83 -0
- data/lib/gems/dm-validations-0.9.7/lib/dm-validations/primitive_validator.rb +60 -0
- data/lib/gems/dm-validations-0.9.7/lib/dm-validations/required_field_validator.rb +88 -0
- data/lib/gems/dm-validations-0.9.7/lib/dm-validations/support/object.rb +5 -0
- data/lib/gems/dm-validations-0.9.7/lib/dm-validations/uniqueness_validator.rb +64 -0
- data/lib/gems/dm-validations-0.9.7/lib/dm-validations/validation_errors.rb +63 -0
- data/lib/gems/dm-validations-0.9.7/lib/dm-validations/version.rb +5 -0
- data/lib/gems/dm-validations-0.9.7/lib/dm-validations/within_validator.rb +53 -0
- data/lib/gems/dm-validations-0.9.7/lib/dm-validations.rb +234 -0
- data/lib/gems/json_pure-1.1.3/GPL +340 -0
- data/lib/gems/json_pure-1.1.3/VERSION +1 -0
- data/lib/gems/json_pure-1.1.3/bin/edit_json.rb +10 -0
- data/lib/gems/json_pure-1.1.3/bin/prettify_json.rb +76 -0
- data/lib/gems/json_pure-1.1.3/lib/json/Array.xpm +21 -0
- data/lib/gems/json_pure-1.1.3/lib/json/FalseClass.xpm +21 -0
- data/lib/gems/json_pure-1.1.3/lib/json/Hash.xpm +21 -0
- data/lib/gems/json_pure-1.1.3/lib/json/Key.xpm +73 -0
- data/lib/gems/json_pure-1.1.3/lib/json/NilClass.xpm +21 -0
- data/lib/gems/json_pure-1.1.3/lib/json/Numeric.xpm +28 -0
- data/lib/gems/json_pure-1.1.3/lib/json/String.xpm +96 -0
- data/lib/gems/json_pure-1.1.3/lib/json/TrueClass.xpm +21 -0
- data/lib/gems/json_pure-1.1.3/lib/json/add/core.rb +135 -0
- data/lib/gems/json_pure-1.1.3/lib/json/add/rails.rb +58 -0
- data/lib/gems/json_pure-1.1.3/lib/json/common.rb +354 -0
- data/lib/gems/json_pure-1.1.3/lib/json/editor.rb +1362 -0
- data/lib/gems/json_pure-1.1.3/lib/json/ext.rb +13 -0
- data/lib/gems/json_pure-1.1.3/lib/json/json.xpm +1499 -0
- data/lib/gems/json_pure-1.1.3/lib/json/pure/generator.rb +394 -0
- data/lib/gems/json_pure-1.1.3/lib/json/pure/parser.rb +259 -0
- data/lib/gems/json_pure-1.1.3/lib/json/pure.rb +75 -0
- data/lib/gems/json_pure-1.1.3/lib/json/version.rb +9 -0
- data/lib/gems/json_pure-1.1.3/lib/json.rb +235 -0
- data/lib/gems/launchy-0.3.2/bin/launchy +12 -0
- data/lib/gems/launchy-0.3.2/lib/launchy/application.rb +163 -0
- data/lib/gems/launchy-0.3.2/lib/launchy/browser.rb +85 -0
- data/lib/gems/launchy-0.3.2/lib/launchy/command_line.rb +48 -0
- data/lib/gems/launchy-0.3.2/lib/launchy/gemspec.rb +53 -0
- data/lib/gems/launchy-0.3.2/lib/launchy/specification.rb +133 -0
- data/lib/gems/launchy-0.3.2/lib/launchy/version.rb +18 -0
- data/lib/gems/launchy-0.3.2/lib/launchy.rb +58 -0
- data/lib/gems/uuidtools-1.0.3/lib/uuidtools/version.rb +32 -0
- data/lib/gems/uuidtools-1.0.3/lib/uuidtools.rb +648 -0
- data/lib/gems.rb +13 -0
- data/lib/mack-data_mapper/migration_generator/migration_generator.rb +5 -0
- data/lib/mack-data_mapper/migration_generator/templates/db/migrations/%=@migration_name%.rb.template +1 -1
- data/lib/mack-data_mapper/model_generator/manifest.yml +3 -3
- data/lib/mack-data_mapper/model_generator/model_generator.rb +8 -1
- data/lib/mack-data_mapper/model_generator/templates/model.rb.template +1 -1
- data/lib/mack-data_mapper/model_generator/templates/rspec.rb.template +1 -1
- data/lib/mack-data_mapper/model_generator/templates/test_case.rb.template +1 -1
- data/lib/mack-data_mapper.rb +3 -2
- data/lib/mack-data_mapper_tasks.rb +7 -0
- metadata +235 -86
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
module DataMapper
|
|
2
|
+
|
|
3
|
+
# Tracks objects to help ensure that each object gets loaded only once.
|
|
4
|
+
# See: http://www.martinfowler.com/eaaCatalog/identityMap.html
|
|
5
|
+
class IdentityMap
|
|
6
|
+
# Get a resource from the IdentityMap
|
|
7
|
+
def get(key)
|
|
8
|
+
@cache[key] || (@second_level_cache && @second_level_cache.get(key))
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
alias [] get
|
|
12
|
+
|
|
13
|
+
# Add a resource to the IdentityMap
|
|
14
|
+
def set(key, resource)
|
|
15
|
+
@second_level_cache.set(key, resource) if @second_level_cache
|
|
16
|
+
@cache[key] = resource
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
alias []= set
|
|
20
|
+
|
|
21
|
+
# Remove a resource from the IdentityMap
|
|
22
|
+
def delete(key)
|
|
23
|
+
@second_level_cache.delete(key) if @second_level_cache
|
|
24
|
+
@cache.delete(key)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
private
|
|
28
|
+
|
|
29
|
+
def initialize(second_level_cache = nil)
|
|
30
|
+
@cache = {}
|
|
31
|
+
@second_level_cache = second_level_cache
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def cache
|
|
35
|
+
@cache
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def method_missing(method, *args, &block)
|
|
39
|
+
cache.__send__(method, *args, &block)
|
|
40
|
+
end
|
|
41
|
+
end # class IdentityMap
|
|
42
|
+
end # module DataMapper
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
module DataMapper
|
|
2
|
+
module Is
|
|
3
|
+
|
|
4
|
+
def is(plugin, *pars, &block)
|
|
5
|
+
generator_method = "is_#{plugin}".to_sym
|
|
6
|
+
|
|
7
|
+
if self.respond_to?(generator_method)
|
|
8
|
+
self.send(generator_method, *pars, &block)
|
|
9
|
+
else
|
|
10
|
+
raise PluginNotFoundError, "could not find plugin named #{plugin}"
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
Model.send(:include, self)
|
|
15
|
+
end # module Is
|
|
16
|
+
end # module DataMapper
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
require "time" # httpdate
|
|
2
|
+
# ==== Public DataMapper Logger API
|
|
3
|
+
#
|
|
4
|
+
# Logger taken from Merb :)
|
|
5
|
+
#
|
|
6
|
+
# To replace an existing logger with a new one:
|
|
7
|
+
# DataMapper.logger.set_log(log{String, IO},level{Symbol, String})
|
|
8
|
+
#
|
|
9
|
+
# Available logging levels are:
|
|
10
|
+
# :off, :fatal, :error, :warn, :info, :debug
|
|
11
|
+
#
|
|
12
|
+
# Logging via:
|
|
13
|
+
# DataMapper.logger.fatal(message<String>)
|
|
14
|
+
# DataMapper.logger.error(message<String>)
|
|
15
|
+
# DataMapper.logger.warn(message<String>)
|
|
16
|
+
# DataMapper.logger.info(message<String>)
|
|
17
|
+
# DataMapper.logger.debug(message<String>)
|
|
18
|
+
#
|
|
19
|
+
# Flush the buffer to
|
|
20
|
+
# DataMapper.logger.flush
|
|
21
|
+
#
|
|
22
|
+
# Remove the current log object
|
|
23
|
+
# DataMapper.logger.close
|
|
24
|
+
#
|
|
25
|
+
# ==== Private DataMapper Logger API
|
|
26
|
+
#
|
|
27
|
+
# To initialize the logger you create a new object, proxies to set_log.
|
|
28
|
+
# DataMapper::Logger.new(log{String, IO}, level{Symbol, String})
|
|
29
|
+
#
|
|
30
|
+
# Logger will not create the file until something is actually logged
|
|
31
|
+
# This avoids file creation on DataMapper init when it creates the
|
|
32
|
+
# default logger.
|
|
33
|
+
module DataMapper
|
|
34
|
+
|
|
35
|
+
class << self #:nodoc:
|
|
36
|
+
attr_accessor :logger
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
class Logger
|
|
40
|
+
|
|
41
|
+
attr_accessor :aio
|
|
42
|
+
attr_accessor :delimiter
|
|
43
|
+
attr_reader :level
|
|
44
|
+
attr_reader :buffer
|
|
45
|
+
attr_reader :log
|
|
46
|
+
|
|
47
|
+
# @note
|
|
48
|
+
# Ruby (standard) logger levels:
|
|
49
|
+
# off: absolutely nothing
|
|
50
|
+
# fatal: an unhandleable error that results in a program crash
|
|
51
|
+
# error: a handleable error condition
|
|
52
|
+
# warn: a warning
|
|
53
|
+
# info: generic (useful) information about system operation
|
|
54
|
+
# debug: low-level information for developers
|
|
55
|
+
#
|
|
56
|
+
# DataMapper::Logger::LEVELS[:off, :fatal, :error, :warn, :info, :debug]
|
|
57
|
+
LEVELS =
|
|
58
|
+
{
|
|
59
|
+
:off => 99999,
|
|
60
|
+
:fatal => 7,
|
|
61
|
+
:error => 6,
|
|
62
|
+
:warn => 4,
|
|
63
|
+
:info => 3,
|
|
64
|
+
:debug => 0
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
def level=(new_level)
|
|
68
|
+
@level = LEVELS[new_level.to_sym]
|
|
69
|
+
reset_methods(:close)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
private
|
|
73
|
+
|
|
74
|
+
# The idea here is that instead of performing an 'if' conditional check on
|
|
75
|
+
# each logging we do it once when the log object is setup
|
|
76
|
+
def set_write_method
|
|
77
|
+
@log.instance_eval do
|
|
78
|
+
|
|
79
|
+
# Determine if asynchronous IO can be used
|
|
80
|
+
def aio?
|
|
81
|
+
@aio = !RUBY_PLATFORM.match(/java|mswin/) &&
|
|
82
|
+
!(@log == STDOUT) &&
|
|
83
|
+
@log.respond_to?(:write_nonblock)
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
# Define the write method based on if aio an be used
|
|
87
|
+
undef write_method if defined? write_method
|
|
88
|
+
if aio?
|
|
89
|
+
alias :write_method :write_nonblock
|
|
90
|
+
else
|
|
91
|
+
alias :write_method :write
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def initialize_log(log)
|
|
97
|
+
close if @log # be sure that we don't leave open files laying around.
|
|
98
|
+
@log = log || "log/dm.log"
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def reset_methods(o_or_c)
|
|
102
|
+
if o_or_c == :open
|
|
103
|
+
alias internal_push push_opened
|
|
104
|
+
elsif o_or_c == :close
|
|
105
|
+
alias internal_push push_closed
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def push_opened(string)
|
|
110
|
+
message = Time.now.httpdate
|
|
111
|
+
message << delimiter
|
|
112
|
+
message << string
|
|
113
|
+
message << "\n" unless message[-1] == ?\n
|
|
114
|
+
@buffer << message
|
|
115
|
+
flush # Force a flush for now until we figure out where we want to use the buffering.
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def push_closed(string)
|
|
119
|
+
unless @log.respond_to?(:write)
|
|
120
|
+
log = Pathname(@log)
|
|
121
|
+
log.dirname.mkpath
|
|
122
|
+
@log = log.open('a')
|
|
123
|
+
@log.sync = true
|
|
124
|
+
end
|
|
125
|
+
set_write_method
|
|
126
|
+
reset_methods(:open)
|
|
127
|
+
push(string)
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
alias internal_push push_closed
|
|
131
|
+
|
|
132
|
+
def prep_msg(message, level)
|
|
133
|
+
level << delimiter << message
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
public
|
|
137
|
+
|
|
138
|
+
# To initialize the logger you create a new object, proxies to set_log.
|
|
139
|
+
# DataMapper::Logger.new(log{String, IO},level{Symbol, String})
|
|
140
|
+
#
|
|
141
|
+
# @param log<IO,String> either an IO object or a name of a logfile.
|
|
142
|
+
# @param log_level<String> the message string to be logged
|
|
143
|
+
# @param delimiter<String> delimiter to use between message sections
|
|
144
|
+
# @param log_creation<Boolean> log that the file is being created
|
|
145
|
+
def initialize(*args)
|
|
146
|
+
set_log(*args)
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
# To replace an existing logger with a new one:
|
|
150
|
+
# DataMapper.logger.set_log(log{String, IO},level{Symbol, String})
|
|
151
|
+
#
|
|
152
|
+
# @param log<IO,String> either an IO object or a name of a logfile.
|
|
153
|
+
# @param log_level<Symbol> a symbol representing the log level from
|
|
154
|
+
# {:off, :fatal, :error, :warn, :info, :debug}
|
|
155
|
+
# @param delimiter<String> delimiter to use between message sections
|
|
156
|
+
# @param log_creation<Boolean> log that the file is being created
|
|
157
|
+
def set_log(log, log_level = :off, delimiter = " ~ ", log_creation = false)
|
|
158
|
+
delimiter ||= " ~ "
|
|
159
|
+
|
|
160
|
+
if log_level && LEVELS[log_level.to_sym]
|
|
161
|
+
self.level = log_level.to_sym
|
|
162
|
+
else
|
|
163
|
+
self.level = :debug
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
@buffer = []
|
|
167
|
+
@delimiter = delimiter
|
|
168
|
+
|
|
169
|
+
initialize_log(log)
|
|
170
|
+
|
|
171
|
+
DataMapper.logger = self
|
|
172
|
+
|
|
173
|
+
self.info("Logfile created") if log_creation
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
# Flush the entire buffer to the log object.
|
|
177
|
+
# DataMapper.logger.flush
|
|
178
|
+
#
|
|
179
|
+
def flush
|
|
180
|
+
return unless @buffer.size > 0
|
|
181
|
+
@log.write_method(@buffer.slice!(0..-1).to_s)
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
# Close and remove the current log object.
|
|
185
|
+
# DataMapper.logger.close
|
|
186
|
+
#
|
|
187
|
+
def close
|
|
188
|
+
flush
|
|
189
|
+
@log.close if @log.respond_to?(:close)
|
|
190
|
+
@log = nil
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
# Appends a string and log level to logger's buffer.
|
|
194
|
+
|
|
195
|
+
# @note
|
|
196
|
+
# Note that the string is discarded if the string's log level less than the
|
|
197
|
+
# logger's log level.
|
|
198
|
+
# @note
|
|
199
|
+
# Note that if the logger is aio capable then the logger will use
|
|
200
|
+
# non-blocking asynchronous writes.
|
|
201
|
+
#
|
|
202
|
+
# @param level<Fixnum> the logging level as an integer
|
|
203
|
+
# @param string<String> the message string to be logged
|
|
204
|
+
def push(string)
|
|
205
|
+
internal_push(string)
|
|
206
|
+
end
|
|
207
|
+
alias << push
|
|
208
|
+
|
|
209
|
+
# Generate the following logging methods for DataMapper.logger as described
|
|
210
|
+
# in the API:
|
|
211
|
+
# :fatal, :error, :warn, :info, :debug
|
|
212
|
+
# :off only gets a off? method
|
|
213
|
+
LEVELS.each_pair do |name, number|
|
|
214
|
+
unless name.to_s == 'off'
|
|
215
|
+
class_eval <<-EOS, __FILE__, __LINE__
|
|
216
|
+
# DOC
|
|
217
|
+
def #{name}(message)
|
|
218
|
+
self.<<( prep_msg(message, "#{name}") ) if #{name}?
|
|
219
|
+
end
|
|
220
|
+
EOS
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
class_eval <<-EOS, __FILE__, __LINE__
|
|
224
|
+
# DOC
|
|
225
|
+
def #{name}?
|
|
226
|
+
#{number} >= level
|
|
227
|
+
end
|
|
228
|
+
EOS
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
end # class Logger
|
|
232
|
+
end # module DataMapper
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# TODO: move to dm-more/dm-migrations
|
|
2
|
+
|
|
3
|
+
module DataMapper
|
|
4
|
+
module DestructiveMigrations
|
|
5
|
+
def self.included(model)
|
|
6
|
+
DestructiveMigrator.models << model
|
|
7
|
+
end
|
|
8
|
+
end # module DestructiveMigrations
|
|
9
|
+
|
|
10
|
+
class DestructiveMigrator < Migrator
|
|
11
|
+
def self.migrate(repository_name)
|
|
12
|
+
models.each do |model|
|
|
13
|
+
model.auto_migrate!
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end # class DestructiveMigrator
|
|
17
|
+
end # module DataMapper
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# TODO: move to dm-more/dm-migrations
|
|
2
|
+
|
|
3
|
+
module DataMapper
|
|
4
|
+
class Migrator
|
|
5
|
+
def self.subclasses
|
|
6
|
+
@@subclasses ||= []
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def self.subclasses=(obj)
|
|
10
|
+
@@subclasses = obj
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def self.inherited(klass)
|
|
14
|
+
subclasses << klass
|
|
15
|
+
|
|
16
|
+
class << klass
|
|
17
|
+
def models
|
|
18
|
+
@models ||= []
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def self.migrate(repository_name)
|
|
24
|
+
subclasses.collect do |migrator|
|
|
25
|
+
migrator.migrate(repository_name)
|
|
26
|
+
end.flatten
|
|
27
|
+
end
|
|
28
|
+
end # class Migrator
|
|
29
|
+
end # module DataMapper
|