datamapper-shim 0.0.1 → 0.0.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/Gemfile.lock +11 -7
- data/datamapper-shim.gemspec +4 -6
- data/lib/data_mapper/shim.rb +47 -3
- data/test/data_mapper/shim_test.rb +13 -1
- metadata +17 -48
data/Gemfile.lock
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
datamapper-shim (0.0.1)
|
5
|
+
activerecord (~> 3.2.0)
|
6
|
+
composite_primary_keys (~> 5.0.0)
|
7
|
+
json (~> 1.4)
|
8
|
+
|
1
9
|
GEM
|
2
10
|
remote: https://rubygems.org/
|
3
11
|
specs:
|
@@ -13,8 +21,6 @@ GEM
|
|
13
21
|
i18n (~> 0.6, >= 0.6.4)
|
14
22
|
multi_json (~> 1.0)
|
15
23
|
arel (3.0.3)
|
16
|
-
attribute-defaults (0.6.0)
|
17
|
-
activerecord (>= 3.0.0)
|
18
24
|
builder (3.0.4)
|
19
25
|
coderay (1.1.0)
|
20
26
|
composite_primary_keys (5.0.13)
|
@@ -36,10 +42,8 @@ PLATFORMS
|
|
36
42
|
ruby
|
37
43
|
|
38
44
|
DEPENDENCIES
|
39
|
-
|
40
|
-
|
41
|
-
composite_primary_keys (~> 5.0.0)
|
42
|
-
json (~> 1.4)
|
45
|
+
bundler (~> 1.3)
|
46
|
+
datamapper-shim!
|
43
47
|
minitest (~> 5.2.3)
|
44
|
-
pry
|
48
|
+
pry (~> 0.9.12.4)
|
45
49
|
sqlite3 (~> 1.3.8)
|
data/datamapper-shim.gemspec
CHANGED
@@ -4,11 +4,11 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
6
|
spec.name = "datamapper-shim"
|
7
|
-
spec.version = "0.0.
|
7
|
+
spec.version = "0.0.2"
|
8
8
|
spec.authors = ["ecin"]
|
9
9
|
spec.email = ["ecin@copypastel.com"]
|
10
|
-
spec.description = "Dress ActiveRecord models in DataMapper robes
|
11
|
-
spec.summary = "Migrate DataMapper models to ActiveRecord
|
10
|
+
spec.description = "Dress ActiveRecord models in DataMapper robes"
|
11
|
+
spec.summary = "Migrate DataMapper models to ActiveRecord"
|
12
12
|
spec.homepage = "https://github.com/typekit/datamapper-shim"
|
13
13
|
spec.license = "MIT"
|
14
14
|
|
@@ -19,11 +19,9 @@ Gem::Specification.new do |spec|
|
|
19
19
|
|
20
20
|
spec.add_dependency "json", "~> 1.4"
|
21
21
|
spec.add_dependency "activerecord", "~> 3.2.0"
|
22
|
-
spec.add_dependency "attribute-defaults", "~> 0.6.0"
|
23
22
|
spec.add_dependency "composite_primary_keys", "~> 5.0.0"
|
24
|
-
spec.add_dependency "json", "~> 1.4"
|
25
|
-
spec.add_dependency "sqlite3", "~> 1.3.8"
|
26
23
|
|
24
|
+
spec.add_development_dependency "sqlite3", "~> 1.3.8"
|
27
25
|
spec.add_development_dependency "bundler", "~> 1.3"
|
28
26
|
spec.add_development_dependency "minitest", "~> 5.2.3"
|
29
27
|
spec.add_development_dependency "pry", "~> 0.9.12.4"
|
data/lib/data_mapper/shim.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
require "active_record"
|
2
2
|
require "active_support/concern"
|
3
|
-
require "attribute_defaults"
|
4
3
|
require "composite_primary_keys"
|
5
4
|
require "json"
|
6
5
|
|
@@ -101,7 +100,7 @@ module DataMapper
|
|
101
100
|
atext = "[#{alpha}#{digit}\!\#\$\%\&\'\*+\/\=\?\^\_\`\{\|\}\~\-]"
|
102
101
|
dot_atom_text = "#{atext}+([.]#{atext}*)*"
|
103
102
|
dot_atom = "#{dot_atom_text}"
|
104
|
-
qtext = '[^\\x0d\\x22\\x5c\\
|
103
|
+
qtext = '[^\\x0d\\x22\\x5c\\x80-\\xff]'
|
105
104
|
text = "[\\x01-\\x09\\x11\\x12\\x14-\\x7f]"
|
106
105
|
quoted_pair = "(\\x5c#{text})"
|
107
106
|
qcontent = "(?:#{qtext}|#{quoted_pair})"
|
@@ -262,7 +261,7 @@ module DataMapper
|
|
262
261
|
# :if => :class guarantees that the default value is always returned
|
263
262
|
attr_default(name, :if => :class, :persisted => false) do |record|
|
264
263
|
if record.new_record? && !record.__send__(:"#{name}_changed?")
|
265
|
-
default
|
264
|
+
default.respond_to?(:call) ? default.call : default
|
266
265
|
else
|
267
266
|
record.instance_eval do
|
268
267
|
read_attribute(name)
|
@@ -718,6 +717,51 @@ module DataMapper
|
|
718
717
|
warn message
|
719
718
|
end
|
720
719
|
end
|
720
|
+
|
721
|
+
# Borrowed from https://github.com/bsm/attribute-defaults/blob/master/lib/attribute_defaults.rb
|
722
|
+
# Copyright (C) 2011 Dimitrij Denissenko
|
723
|
+
|
724
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
725
|
+
# a copy of this software and associated documentation files (the
|
726
|
+
# "Software"), to deal in the Software without restriction, including
|
727
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
728
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
729
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
730
|
+
# the following conditions:
|
731
|
+
#
|
732
|
+
# The above copyright notice and this permission notice shall be
|
733
|
+
# included in all copies or substantial portions of the Software.
|
734
|
+
#
|
735
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
736
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
737
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
738
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
739
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
740
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
741
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
742
|
+
def attr_default(sym, *args, &block)
|
743
|
+
options = args.extract_options!
|
744
|
+
default = options.delete(:default) || args.shift
|
745
|
+
raise 'Default value or block required' unless !default.nil? || block
|
746
|
+
|
747
|
+
evaluator = "__eval_attr_default_for_#{sym}".to_sym
|
748
|
+
setter = "__set_attr_default_for_#{sym}".to_sym
|
749
|
+
block ||= default.is_a?(Proc) ? default : proc { default }
|
750
|
+
|
751
|
+
after_initialize setter.to_sym
|
752
|
+
define_method(evaluator, &block)
|
753
|
+
|
754
|
+
module_eval(<<-EVAL, __FILE__, __LINE__ + 1)
|
755
|
+
def #{setter}
|
756
|
+
#{'return if persisted?' if options[:persisted] == false}
|
757
|
+
return unless self.__send__(:#{sym}).__send__(:#{options[:if] || 'nil?'})
|
758
|
+
value = #{evaluator}#{'(self)' unless block.arity.zero?}
|
759
|
+
self.__send__(:#{sym}=, value.duplicable? ? value.dup : value)
|
760
|
+
rescue ActiveModel::MissingAttributeError
|
761
|
+
end
|
762
|
+
EVAL
|
763
|
+
private evaluator, setter
|
764
|
+
end
|
721
765
|
end
|
722
766
|
end
|
723
767
|
end
|
@@ -46,6 +46,7 @@ describe DataMapper::Shim do
|
|
46
46
|
t.text :body
|
47
47
|
t.references :user
|
48
48
|
t.datetime :deleted_at
|
49
|
+
t.boolean :unread
|
49
50
|
t.timestamps
|
50
51
|
end
|
51
52
|
|
@@ -135,6 +136,8 @@ describe DataMapper::Shim do
|
|
135
136
|
include DataMapper::Shim
|
136
137
|
|
137
138
|
property :deleted_at, ParanoidDateTime, :writer => :protected
|
139
|
+
property :updated_at, DateTime, :default => proc { DateTime.now }, :reader => :protected
|
140
|
+
property :unread, Boolean, :default => true, :writer => :protected
|
138
141
|
property :body, Text
|
139
142
|
|
140
143
|
belongs_to :user
|
@@ -491,7 +494,6 @@ describe DataMapper::Shim do
|
|
491
494
|
end
|
492
495
|
end
|
493
496
|
|
494
|
-
|
495
497
|
end
|
496
498
|
|
497
499
|
describe "typecasted properties" do
|
@@ -640,6 +642,16 @@ describe DataMapper::Shim do
|
|
640
642
|
Channel.new.state.must_equal :open
|
641
643
|
end
|
642
644
|
|
645
|
+
it "handles default values on properties with protected writers" do
|
646
|
+
message = Message.new
|
647
|
+
message.unread.must_equal true
|
648
|
+
end
|
649
|
+
|
650
|
+
it "handles default values on properties with protected readers" do
|
651
|
+
message = Message.new
|
652
|
+
message.__send__(:updated_at).must_be_instance_of DateTime
|
653
|
+
end
|
654
|
+
|
643
655
|
it "handles default boolean values" do
|
644
656
|
User.new.must_be :active?
|
645
657
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: datamapper-shim
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 2
|
10
|
+
version: 0.0.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- ecin
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2014-02-
|
18
|
+
date: 2014-02-28 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: json
|
@@ -48,26 +48,10 @@ dependencies:
|
|
48
48
|
version: 3.2.0
|
49
49
|
type: :runtime
|
50
50
|
version_requirements: *id002
|
51
|
-
- !ruby/object:Gem::Dependency
|
52
|
-
name: attribute-defaults
|
53
|
-
prerelease: false
|
54
|
-
requirement: &id003 !ruby/object:Gem::Requirement
|
55
|
-
none: false
|
56
|
-
requirements:
|
57
|
-
- - ~>
|
58
|
-
- !ruby/object:Gem::Version
|
59
|
-
hash: 7
|
60
|
-
segments:
|
61
|
-
- 0
|
62
|
-
- 6
|
63
|
-
- 0
|
64
|
-
version: 0.6.0
|
65
|
-
type: :runtime
|
66
|
-
version_requirements: *id003
|
67
51
|
- !ruby/object:Gem::Dependency
|
68
52
|
name: composite_primary_keys
|
69
53
|
prerelease: false
|
70
|
-
requirement: &
|
54
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
71
55
|
none: false
|
72
56
|
requirements:
|
73
57
|
- - ~>
|
@@ -79,26 +63,11 @@ dependencies:
|
|
79
63
|
- 0
|
80
64
|
version: 5.0.0
|
81
65
|
type: :runtime
|
82
|
-
version_requirements: *
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: json
|
85
|
-
prerelease: false
|
86
|
-
requirement: &id005 !ruby/object:Gem::Requirement
|
87
|
-
none: false
|
88
|
-
requirements:
|
89
|
-
- - ~>
|
90
|
-
- !ruby/object:Gem::Version
|
91
|
-
hash: 7
|
92
|
-
segments:
|
93
|
-
- 1
|
94
|
-
- 4
|
95
|
-
version: "1.4"
|
96
|
-
type: :runtime
|
97
|
-
version_requirements: *id005
|
66
|
+
version_requirements: *id003
|
98
67
|
- !ruby/object:Gem::Dependency
|
99
68
|
name: sqlite3
|
100
69
|
prerelease: false
|
101
|
-
requirement: &
|
70
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
102
71
|
none: false
|
103
72
|
requirements:
|
104
73
|
- - ~>
|
@@ -109,12 +78,12 @@ dependencies:
|
|
109
78
|
- 3
|
110
79
|
- 8
|
111
80
|
version: 1.3.8
|
112
|
-
type: :
|
113
|
-
version_requirements: *
|
81
|
+
type: :development
|
82
|
+
version_requirements: *id004
|
114
83
|
- !ruby/object:Gem::Dependency
|
115
84
|
name: bundler
|
116
85
|
prerelease: false
|
117
|
-
requirement: &
|
86
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
118
87
|
none: false
|
119
88
|
requirements:
|
120
89
|
- - ~>
|
@@ -125,11 +94,11 @@ dependencies:
|
|
125
94
|
- 3
|
126
95
|
version: "1.3"
|
127
96
|
type: :development
|
128
|
-
version_requirements: *
|
97
|
+
version_requirements: *id005
|
129
98
|
- !ruby/object:Gem::Dependency
|
130
99
|
name: minitest
|
131
100
|
prerelease: false
|
132
|
-
requirement: &
|
101
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
133
102
|
none: false
|
134
103
|
requirements:
|
135
104
|
- - ~>
|
@@ -141,11 +110,11 @@ dependencies:
|
|
141
110
|
- 3
|
142
111
|
version: 5.2.3
|
143
112
|
type: :development
|
144
|
-
version_requirements: *
|
113
|
+
version_requirements: *id006
|
145
114
|
- !ruby/object:Gem::Dependency
|
146
115
|
name: pry
|
147
116
|
prerelease: false
|
148
|
-
requirement: &
|
117
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
149
118
|
none: false
|
150
119
|
requirements:
|
151
120
|
- - ~>
|
@@ -158,8 +127,8 @@ dependencies:
|
|
158
127
|
- 4
|
159
128
|
version: 0.9.12.4
|
160
129
|
type: :development
|
161
|
-
version_requirements: *
|
162
|
-
description: Dress ActiveRecord models in DataMapper robes
|
130
|
+
version_requirements: *id007
|
131
|
+
description: Dress ActiveRecord models in DataMapper robes
|
163
132
|
email:
|
164
133
|
- ecin@copypastel.com
|
165
134
|
executables: []
|
@@ -206,6 +175,6 @@ rubyforge_project:
|
|
206
175
|
rubygems_version: 1.8.25
|
207
176
|
signing_key:
|
208
177
|
specification_version: 3
|
209
|
-
summary: Migrate DataMapper models to ActiveRecord
|
178
|
+
summary: Migrate DataMapper models to ActiveRecord
|
210
179
|
test_files:
|
211
180
|
- test/data_mapper/shim_test.rb
|