dm-is-predefined 0.3.1 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog.md +15 -0
- data/Gemfile +1 -1
- data/README.md +10 -6
- data/Rakefile +4 -4
- data/dm-is-predefined.gemspec +125 -13
- data/gemspec.yml +2 -2
- data/lib/dm-is-predefined/is/predefined.rb +169 -35
- data/spec/integration/models/migrated_model.rb +19 -0
- data/spec/integration/predefined_spec.rb +55 -17
- metadata +40 -44
data/ChangeLog.md
CHANGED
@@ -1,3 +1,18 @@
|
|
1
|
+
### 0.4.0 / 2011-07-28
|
2
|
+
|
3
|
+
* Added {DataMapper::Is::Predefined::MigrationMethods}.
|
4
|
+
* Overrides `auto_migrate!` and `auto_upgrade!` to auto-predefine
|
5
|
+
the resources after auto-migrations.
|
6
|
+
* Added {DataMapper::Is::Predefined::ClassMethods#predefine!}.
|
7
|
+
* Added {DataMapper::Is::Predefined::ClassMethods#predefined}.
|
8
|
+
* Added {DataMapper::Is::Predefined::ClassMethods#predefined?}.
|
9
|
+
* Added {DataMapper::Is::Predefined::ClassMethods#first_or_predefined}.
|
10
|
+
* Made {DataMapper::Is::Predefined::ClassMethods#predefined_attributes} public.
|
11
|
+
* Deprecated {DataMapper::Is::Predefined::ClassMethods#predefined_resource_with}
|
12
|
+
in favor of {DataMapper::Is::Predefined::ClassMethods#first_or_predefined}.
|
13
|
+
* Deprecated {DataMapper::Is::Predefined::ClassMethods#predefined_names}
|
14
|
+
in favor of {DataMapper::Is::Predefined::ClassMethods#predefined}.
|
15
|
+
|
1
16
|
### 0.3.1 / 2011-02-28
|
2
17
|
|
3
18
|
* Require dm-core ~> 1.0.
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -34,25 +34,29 @@ A DataMapper plugin for adding predefined resources to Models.
|
|
34
34
|
|
35
35
|
end
|
36
36
|
|
37
|
+
|
38
|
+
License.predefined
|
39
|
+
# => [:gpl2, :mit]
|
40
|
+
|
41
|
+
License.predefined?(:gpl2)
|
42
|
+
# => true
|
43
|
+
|
37
44
|
Licence.gpl2
|
38
45
|
# => #<Licence: id: 1, name: "GPL-2", url: "http://www.gnu.org/copyleft/gpl.html">
|
39
|
-
|
46
|
+
|
40
47
|
Licence.predefined_resource(:mit)
|
41
48
|
# => #<Licence: id: 2, name: "MIT">
|
42
49
|
|
43
|
-
License.
|
50
|
+
License.first_or_predefined(:name => 'GPL-2')
|
44
51
|
# => #<License: id: 1, name: "GPL-2", url: "http://www.gnu.org/copyleft/gpl.html">
|
45
52
|
|
46
|
-
License.predefined_names
|
47
|
-
# => [:gpl2, :mit]
|
48
|
-
|
49
53
|
## Requirements
|
50
54
|
|
51
55
|
* [dm-core](http://github.com/datamapper/dm-core/) ~> 1.0
|
52
56
|
|
53
57
|
## Install
|
54
58
|
|
55
|
-
$
|
59
|
+
$ gem install dm-is-predefined
|
56
60
|
|
57
61
|
## License
|
58
62
|
|
data/Rakefile
CHANGED
@@ -3,16 +3,16 @@ require 'rubygems'
|
|
3
3
|
begin
|
4
4
|
require 'bundler'
|
5
5
|
rescue LoadError => e
|
6
|
-
|
7
|
-
|
6
|
+
warn e.message
|
7
|
+
warn "Run `gem install bundler` to install Bundler."
|
8
8
|
exit e.status_code
|
9
9
|
end
|
10
10
|
|
11
11
|
begin
|
12
12
|
Bundler.setup(:development)
|
13
13
|
rescue Bundler::BundlerError => e
|
14
|
-
|
15
|
-
|
14
|
+
warn e.message
|
15
|
+
warn "Run `bundle install` to install missing gems"
|
16
16
|
exit e.status_code
|
17
17
|
end
|
18
18
|
|
data/dm-is-predefined.gemspec
CHANGED
@@ -1,15 +1,127 @@
|
|
1
|
-
#
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'yaml'
|
4
|
+
|
5
|
+
Gem::Specification.new do |gemspec|
|
6
|
+
files = if File.directory?('.git')
|
7
|
+
`git ls-files`.split($/)
|
8
|
+
elsif File.directory?('.hg')
|
9
|
+
`hg manifest`.split($/)
|
10
|
+
elsif File.directory?('.svn')
|
11
|
+
`svn ls -R`.split($/).select { |path| File.file?(path) }
|
12
|
+
else
|
13
|
+
Dir['{**/}{.*,*}'].select { |path| File.file?(path) }
|
14
|
+
end
|
15
|
+
|
16
|
+
filter_files = lambda { |paths|
|
17
|
+
case paths
|
18
|
+
when Array
|
19
|
+
(files & paths)
|
20
|
+
when String
|
21
|
+
(files & Dir[paths])
|
22
|
+
end
|
23
|
+
}
|
24
|
+
|
25
|
+
version = {
|
26
|
+
:file => 'lib/dm-is-predefined/version.rb',
|
27
|
+
:constant => 'DataMapper::Is::Predefined::VERSION'
|
28
|
+
}
|
29
|
+
|
30
|
+
defaults = {
|
31
|
+
'name' => File.basename(File.dirname(__FILE__)),
|
32
|
+
'files' => files,
|
33
|
+
'executables' => filter_files['bin/*'].map { |path| File.basename(path) },
|
34
|
+
'test_files' => filter_files['{test/{**/}*_test.rb,spec/{**/}*_spec.rb}'],
|
35
|
+
'extra_doc_files' => filter_files['*.{txt,rdoc,md,markdown,tt,textile}'],
|
36
|
+
}
|
37
|
+
|
38
|
+
metadata = defaults.merge(YAML.load_file('gemspec.yml'))
|
39
|
+
|
40
|
+
gemspec.name = metadata.fetch('name',defaults[:name])
|
41
|
+
gemspec.version = if metadata['version']
|
42
|
+
metadata['version']
|
43
|
+
elsif File.file?(version[:file])
|
44
|
+
require File.join('.',version[:file])
|
45
|
+
eval(version[:constant])
|
46
|
+
end
|
47
|
+
|
48
|
+
gemspec.summary = metadata.fetch('summary',metadata['description'])
|
49
|
+
gemspec.description = metadata.fetch('description',metadata['summary'])
|
50
|
+
|
51
|
+
case metadata['license']
|
52
|
+
when Array
|
53
|
+
gemspec.licenses = metadata['license']
|
54
|
+
when String
|
55
|
+
gemspec.license = metadata['license']
|
56
|
+
end
|
57
|
+
|
58
|
+
case metadata['authors']
|
59
|
+
when Array
|
60
|
+
gemspec.authors = metadata['authors']
|
61
|
+
when String
|
62
|
+
gemspec.author = metadata['authors']
|
63
|
+
end
|
64
|
+
|
65
|
+
gemspec.email = metadata['email']
|
66
|
+
gemspec.homepage = metadata['homepage']
|
67
|
+
|
68
|
+
case metadata['require_paths']
|
69
|
+
when Array
|
70
|
+
gemspec.require_paths = metadata['require_paths']
|
71
|
+
when String
|
72
|
+
gemspec.require_path = metadata['require_paths']
|
73
|
+
end
|
74
|
+
|
75
|
+
gemspec.files = filter_files[metadata['files']]
|
76
|
+
|
77
|
+
gemspec.executables = metadata['executables']
|
78
|
+
gemspec.extensions = metadata['extensions']
|
79
|
+
|
80
|
+
if Gem::VERSION < '1.7.'
|
81
|
+
gemspec.default_executable = gemspec.executables.first
|
82
|
+
end
|
83
|
+
|
84
|
+
gemspec.test_files = filter_files[metadata['test_files']]
|
85
|
+
|
86
|
+
unless gemspec.files.include?('.document')
|
87
|
+
gemspec.extra_rdoc_files = metadata['extra_doc_files']
|
88
|
+
end
|
89
|
+
|
90
|
+
gemspec.post_install_message = metadata['post_install_message']
|
91
|
+
gemspec.requirements = metadata['requirements']
|
92
|
+
|
93
|
+
if gemspec.respond_to?(:required_ruby_version=)
|
94
|
+
gemspec.required_ruby_version = metadata['required_ruby_version']
|
95
|
+
end
|
96
|
+
|
97
|
+
if gemspec.respond_to?(:required_rubygems_version=)
|
98
|
+
gemspec.required_rubygems_version = metadata['required_ruby_version']
|
99
|
+
end
|
100
|
+
|
101
|
+
parse_versions = lambda { |versions|
|
102
|
+
case versions
|
103
|
+
when Array
|
104
|
+
versions.map { |v| v.to_s }
|
105
|
+
when String
|
106
|
+
versions.split(/,\s*/)
|
107
|
+
end
|
108
|
+
}
|
109
|
+
|
110
|
+
if metadata['dependencies']
|
111
|
+
metadata['dependencies'].each do |name,versions|
|
112
|
+
gemspec.add_dependency(name,parse_versions[versions])
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
if metadata['runtime_dependencies']
|
117
|
+
metadata['runtime_dependencies'].each do |name,versions|
|
118
|
+
gemspec.add_runtime_dependency(name,parse_versions[versions])
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
if metadata['development_dependencies']
|
123
|
+
metadata['development_dependencies'].each do |name,versions|
|
124
|
+
gemspec.add_development_dependency(name,parse_versions[versions])
|
125
|
+
end
|
14
126
|
end
|
15
127
|
end
|
data/gemspec.yml
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
name: dm-is-predefined
|
2
|
-
version: 0.
|
2
|
+
version: 0.4.0
|
3
3
|
summary: DataMapper plugin for adding predefined resources to models.
|
4
4
|
description:
|
5
5
|
A DataMapper plugin for adding predefined resources to Models.
|
@@ -15,4 +15,4 @@ dependencies:
|
|
15
15
|
|
16
16
|
development_dependencies:
|
17
17
|
bundler: ~> 1.0.0
|
18
|
-
yard: ~> 0.
|
18
|
+
yard: ~> 0.7.0
|
@@ -4,94 +4,225 @@ module DataMapper
|
|
4
4
|
module Is
|
5
5
|
module Predefined
|
6
6
|
#
|
7
|
-
# Fired when your plugin gets included into
|
7
|
+
# Fired when your plugin gets included into a Model.
|
8
|
+
#
|
9
|
+
# @note
|
10
|
+
# If the model already includes `DataMapper::Migrations`, then
|
11
|
+
# {MigrationMethods} will be extended into the Model.
|
12
|
+
#
|
13
|
+
# @api private
|
8
14
|
#
|
9
15
|
def is_predefined
|
10
16
|
extend DataMapper::Is::Predefined::ClassMethods
|
17
|
+
|
18
|
+
if defined?(DataMapper::Migrations) &&
|
19
|
+
included_modules.include?(DataMapper::Migrations)
|
20
|
+
extend MigrationMethods
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
#
|
25
|
+
# @since 0.4.0
|
26
|
+
#
|
27
|
+
module MigrationMethods
|
28
|
+
#
|
29
|
+
# Auto-migrates the model, then creates all predefined resources.
|
30
|
+
#
|
31
|
+
# @param [Symbol] repository_name
|
32
|
+
# The repository to perform the migrations within.
|
33
|
+
#
|
34
|
+
# @return [true]
|
35
|
+
#
|
36
|
+
# @api public
|
37
|
+
#
|
38
|
+
def auto_migrate!(repository_name=self.repository_name)
|
39
|
+
result = super(repository_name)
|
40
|
+
|
41
|
+
predefine!(repository_name)
|
42
|
+
return result
|
43
|
+
end
|
44
|
+
|
45
|
+
#
|
46
|
+
# Auto-upgrades the model, then creates any missing predefined
|
47
|
+
# resources.
|
48
|
+
#
|
49
|
+
# @param [Symbol] repository_name
|
50
|
+
# The repository to perform the upgrade within.
|
51
|
+
#
|
52
|
+
# @return [true]
|
53
|
+
#
|
54
|
+
# @api public
|
55
|
+
#
|
56
|
+
def auto_upgrade!(repository_name=self.repository_name)
|
57
|
+
result = super(repository_name)
|
58
|
+
|
59
|
+
predefine!(repository_name)
|
60
|
+
return result
|
61
|
+
end
|
11
62
|
end
|
12
63
|
|
13
64
|
module ClassMethods
|
65
|
+
#
|
66
|
+
# All pre-defined resources of the model.
|
67
|
+
#
|
68
|
+
# @return [Hash{Symbol => Hash}]
|
69
|
+
# The Hash of pre-defined resources and their attributes.
|
70
|
+
#
|
71
|
+
# @api semipublic
|
72
|
+
#
|
73
|
+
def predefined_attributes
|
74
|
+
@predefined_attributes ||= {}
|
75
|
+
end
|
76
|
+
|
14
77
|
#
|
15
78
|
# Returns the names of the predefined resources.
|
16
79
|
#
|
17
80
|
# @return [Array<Symbol>]
|
18
81
|
# The names of the predefined resources.
|
19
82
|
#
|
83
|
+
# @since 0.4.0
|
84
|
+
#
|
85
|
+
# @api public
|
86
|
+
#
|
87
|
+
def predefined
|
88
|
+
predefined_attributes.keys
|
89
|
+
end
|
90
|
+
|
91
|
+
#
|
92
|
+
# @see #predefined
|
93
|
+
#
|
94
|
+
# @deprecated Will be removed in 1.0.0.
|
95
|
+
#
|
20
96
|
# @since 0.2.1
|
21
97
|
#
|
22
98
|
def predefined_names
|
23
|
-
|
99
|
+
predefined
|
24
100
|
end
|
25
101
|
|
26
102
|
#
|
27
|
-
#
|
103
|
+
# Determines if a resource was predefined.
|
104
|
+
#
|
105
|
+
# @param [Symbol, String] name
|
106
|
+
# The name of the predefined resource to search for.
|
107
|
+
#
|
108
|
+
# @return [Boolean]
|
109
|
+
# Specifies whether the resource was predefined.
|
110
|
+
#
|
111
|
+
# @since 0.4.0
|
112
|
+
#
|
113
|
+
# @api public
|
114
|
+
#
|
115
|
+
def predefined?(name)
|
116
|
+
predefined_attributes.has_key?(name.to_sym)
|
117
|
+
end
|
118
|
+
|
119
|
+
#
|
120
|
+
# Finds or auto-creates the pre-defined resource with the given
|
121
|
+
# name.
|
28
122
|
#
|
29
123
|
# @param [Symbol, String] name
|
30
124
|
# The name of the pre-defined resource.
|
31
125
|
#
|
126
|
+
# @param [Hash{Symbol => Object}] extra_attributes
|
127
|
+
# Additional attributes to add to the predefined resource.
|
128
|
+
#
|
32
129
|
# @return [DataMapper::Resource]
|
33
130
|
# The pre-defined resource.
|
34
131
|
#
|
35
132
|
# @raise [UnknownResource]
|
36
|
-
# Indicates that there are no predefined attributes for the
|
37
|
-
# with the given name.
|
133
|
+
# Indicates that there are no predefined attributes for the
|
134
|
+
# resource with the given name.
|
38
135
|
#
|
39
136
|
# @since 0.2.1
|
40
137
|
#
|
138
|
+
# @api public
|
139
|
+
#
|
41
140
|
def predefined_resource(name)
|
42
141
|
name = name.to_sym
|
43
|
-
attributes = self.predefined_attributes[name]
|
44
142
|
|
45
|
-
unless
|
46
|
-
raise(UnknownResource,"The resource '#{name}' was not predefined"
|
143
|
+
unless predefined?(name)
|
144
|
+
raise(UnknownResource,"The resource '#{name}' was not predefined")
|
47
145
|
end
|
48
146
|
|
49
|
-
|
147
|
+
return first_or_create(predefined_attributes[name])
|
50
148
|
end
|
51
149
|
|
52
150
|
#
|
53
151
|
# Finds or auto-creates the predefined resource which shares the
|
54
152
|
# given attributes.
|
55
153
|
#
|
56
|
-
# @param [Hash{Symbol => Object}]
|
154
|
+
# @param [Hash{Symbol => Object}] conditions
|
155
|
+
# Query conditions.
|
156
|
+
#
|
157
|
+
# @param [Hash{Symbol => Object}] attributes
|
57
158
|
# The attribute names and values that the predefined resource
|
58
159
|
# should shared.
|
59
160
|
#
|
60
|
-
# @return [DataMapper::Resource]
|
161
|
+
# @return [DataMapper::Resource, nil]
|
61
162
|
# The predefined resource.
|
163
|
+
#
|
164
|
+
# @since 0.4.0
|
165
|
+
#
|
166
|
+
# @api public
|
167
|
+
#
|
168
|
+
def first_or_predefined(conditions={},attributes=conditions)
|
169
|
+
if (resource = first(conditions))
|
170
|
+
return resource
|
171
|
+
end
|
172
|
+
|
173
|
+
# if the resource wasn't found, search for matching
|
174
|
+
# predefined attributes
|
175
|
+
attributes = predefined_attributes.values.find do |attrs|
|
176
|
+
attrs.all? do |name,value|
|
177
|
+
attributes.has_key?(name) && (attributes[name] == value)
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
# create the resource using the predefined attributes
|
182
|
+
create(attributes) if attributes
|
183
|
+
end
|
184
|
+
|
62
185
|
#
|
63
186
|
# @raise [UnknownResource]
|
64
187
|
# Could not find a predefined resource that shared all of the
|
65
188
|
# desired attributes.
|
66
189
|
#
|
190
|
+
# @deprecated
|
191
|
+
# Will be removed in 1.0.0. Use {#first_or_predefined} instead.
|
192
|
+
#
|
67
193
|
# @since 0.2.1
|
68
194
|
#
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
end
|
76
|
-
|
77
|
-
return predefined_resource(name) if shares_attributes
|
195
|
+
# @api public
|
196
|
+
#
|
197
|
+
def predefined_resource_with(query={})
|
198
|
+
unless (resource = first_or_predefined(query))
|
199
|
+
# no pre-existing or predefined resource matching the query
|
200
|
+
raise(UnknownResource,"Could not find a predefined resource which shared the given attributes")
|
78
201
|
end
|
79
202
|
|
80
|
-
|
203
|
+
return resource
|
81
204
|
end
|
82
205
|
|
83
|
-
protected
|
84
|
-
|
85
206
|
#
|
86
|
-
#
|
207
|
+
# Creates the predefined resources.
|
87
208
|
#
|
88
|
-
# @
|
89
|
-
# The
|
209
|
+
# @param [Symbol] repository_name
|
210
|
+
# The repository to perform the upgrade within.
|
90
211
|
#
|
91
|
-
|
92
|
-
|
212
|
+
# @since 0.4.0
|
213
|
+
#
|
214
|
+
# @api public
|
215
|
+
#
|
216
|
+
def predefine!(repository_name=self.repository_name)
|
217
|
+
DataMapper.repository(repository_name) do
|
218
|
+
predefined_attributes.each_value do |attributes|
|
219
|
+
first_or_create(attributes)
|
220
|
+
end
|
221
|
+
end
|
93
222
|
end
|
94
223
|
|
224
|
+
protected
|
225
|
+
|
95
226
|
#
|
96
227
|
# Defines a new pre-defined resource for the model.
|
97
228
|
#
|
@@ -102,26 +233,29 @@ module DataMapper
|
|
102
233
|
# The attributes for the pre-defined resource.
|
103
234
|
#
|
104
235
|
# @return [Hash]
|
105
|
-
# The attributes that will be assigned to the pre-defined
|
236
|
+
# The attributes that will be assigned to the pre-defined
|
237
|
+
# resource.
|
238
|
+
#
|
239
|
+
# @api public
|
106
240
|
#
|
107
241
|
def predefine(name,attributes={})
|
108
|
-
name = name.
|
242
|
+
name = name.to_sym
|
109
243
|
|
110
244
|
if attributes.empty?
|
111
|
-
raise(ArgumentError,"Cannot predefine a resource with no attributes"
|
245
|
+
raise(ArgumentError,"Cannot predefine a resource with no attributes")
|
112
246
|
end
|
113
247
|
|
114
|
-
|
248
|
+
predefined_attributes[name] = attributes
|
115
249
|
|
116
250
|
class_eval %{
|
117
251
|
class << self
|
118
|
-
define_method(#{name.
|
119
|
-
predefined_resource(#{name.
|
252
|
+
define_method(#{name.inspect}) do
|
253
|
+
predefined_resource(#{name.inspect})
|
120
254
|
end
|
121
255
|
end
|
122
256
|
}
|
123
257
|
|
124
|
-
attributes
|
258
|
+
return attributes
|
125
259
|
end
|
126
260
|
end # ClassMethods
|
127
261
|
end # Predefined
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'dm-is-predefined'
|
2
|
+
|
3
|
+
class MigratedModel
|
4
|
+
|
5
|
+
include DataMapper::Resource
|
6
|
+
include DataMapper::Migrations
|
7
|
+
|
8
|
+
is :predefined
|
9
|
+
|
10
|
+
# Primary key of the test model
|
11
|
+
property :id, Serial
|
12
|
+
|
13
|
+
# Name property to test String values
|
14
|
+
property :name, String
|
15
|
+
|
16
|
+
predefine :test1, :name => 'test1'
|
17
|
+
predefine :test2, :name => 'test2'
|
18
|
+
|
19
|
+
end
|
@@ -1,17 +1,56 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'integration/models/test_model'
|
3
|
+
require 'integration/models/migrated_model'
|
3
4
|
|
4
5
|
describe DataMapper::Is::Predefined do
|
5
6
|
before(:all) do
|
6
7
|
TestModel.auto_migrate!
|
7
8
|
end
|
8
9
|
|
10
|
+
context "migrations" do
|
11
|
+
it "should extend MigrationMethods, if Migrations are included" do
|
12
|
+
TestModel.should_not be_kind_of(DataMapper::Is::Predefined::MigrationMethods)
|
13
|
+
MigratedModel.should be_kind_of(DataMapper::Is::Predefined::MigrationMethods)
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should create all predefined resources after auto_migrate!" do
|
17
|
+
MigratedModel.auto_migrate!
|
18
|
+
|
19
|
+
resources = MigratedModel.all
|
20
|
+
|
21
|
+
resources[0].id.should == 1
|
22
|
+
resources[0].name.should == 'test1'
|
23
|
+
|
24
|
+
resources[1].id.should == 2
|
25
|
+
resources[1].name.should == 'test2'
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should create missing predefined resources after auto_upgrade!" do
|
29
|
+
MigratedModel.first(:name => 'test2').destroy!
|
30
|
+
|
31
|
+
MigratedModel.property :extra, String
|
32
|
+
MigratedModel.auto_upgrade!
|
33
|
+
|
34
|
+
resources = MigratedModel.all
|
35
|
+
|
36
|
+
resources[0].id.should == 1
|
37
|
+
resources[0].name.should == 'test1'
|
38
|
+
|
39
|
+
resources[1].id.should == 3
|
40
|
+
resources[1].name.should == 'test2'
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
9
44
|
it "should define the @predefined_attributes instance variable" do
|
10
45
|
TestModel.should be_instance_variable_defined(:@predefined_attributes)
|
11
46
|
end
|
12
47
|
|
13
48
|
it "should provide the names of all predefined resources of a Model" do
|
14
|
-
TestModel.
|
49
|
+
TestModel.predefined.should =~ [:test1, :test2]
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should determine if a predefined resource was defined" do
|
53
|
+
TestModel.should be_predefined(:test2)
|
15
54
|
end
|
16
55
|
|
17
56
|
it "should be able to define resources of a Model" do
|
@@ -56,34 +95,33 @@ describe DataMapper::Is::Predefined do
|
|
56
95
|
end
|
57
96
|
end
|
58
97
|
|
59
|
-
describe "
|
98
|
+
describe "first_or_predefined" do
|
60
99
|
it "should find resources based on attributes they share" do
|
61
|
-
test2 = TestModel.
|
100
|
+
test2 = TestModel.first_or_predefined(:name => 'test2', :number => 2)
|
62
101
|
|
63
102
|
test2.name.should == 'test2'
|
64
103
|
end
|
65
104
|
|
66
|
-
it "should
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
105
|
+
it "should allow specifying different query and predefined attributes" do
|
106
|
+
test2 = TestModel.first_or_predefined(
|
107
|
+
{:name.like => '%test2%'},
|
108
|
+
{:name => 'test2', :number => 2}
|
109
|
+
)
|
71
110
|
|
72
|
-
|
73
|
-
lambda {
|
74
|
-
TestModel.predefined_resource_with(:missing => 1, :typo => 'yo')
|
75
|
-
}.should raise_error(DataMapper::Is::Predefined::UnknownResource)
|
111
|
+
test2.name.should == 'test2'
|
76
112
|
end
|
77
113
|
|
78
|
-
it "should
|
79
|
-
|
80
|
-
|
81
|
-
|
114
|
+
it "should return nil if no resource shares any attribute values" do
|
115
|
+
resource = TestModel.first_or_predefined(:number => 100, :optional => 'bla')
|
116
|
+
|
117
|
+
resource.should be_nil
|
82
118
|
end
|
119
|
+
end
|
83
120
|
|
121
|
+
describe "predefined_resource_with" do
|
84
122
|
it "should raise UnknownResource if no resource shares any attribute values" do
|
85
123
|
lambda {
|
86
|
-
TestModel.predefined_resource_with(:number =>
|
124
|
+
TestModel.predefined_resource_with(:number => 100, :optional => 'bla')
|
87
125
|
}.should raise_error(DataMapper::Is::Predefined::UnknownResource)
|
88
126
|
end
|
89
127
|
end
|
metadata
CHANGED
@@ -1,63 +1,60 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: dm-is-predefined
|
3
|
-
version: !ruby/object:Gem::Version
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.4.0
|
4
5
|
prerelease:
|
5
|
-
version: 0.3.1
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Postmodern
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
date: 2011-02-28 00:00:00 -08:00
|
12
|
+
date: 2011-07-28 00:00:00.000000000 -07:00
|
14
13
|
default_executable:
|
15
|
-
dependencies:
|
16
|
-
- !ruby/object:Gem::Dependency
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
17
16
|
name: dm-core
|
18
|
-
requirement: &
|
17
|
+
requirement: &11760400 !ruby/object:Gem::Requirement
|
19
18
|
none: false
|
20
|
-
requirements:
|
19
|
+
requirements:
|
21
20
|
- - ~>
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version:
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '1.0'
|
24
23
|
type: :runtime
|
25
24
|
prerelease: false
|
26
|
-
version_requirements: *
|
27
|
-
- !ruby/object:Gem::Dependency
|
25
|
+
version_requirements: *11760400
|
26
|
+
- !ruby/object:Gem::Dependency
|
28
27
|
name: bundler
|
29
|
-
requirement: &
|
28
|
+
requirement: &11758740 !ruby/object:Gem::Requirement
|
30
29
|
none: false
|
31
|
-
requirements:
|
30
|
+
requirements:
|
32
31
|
- - ~>
|
33
|
-
- !ruby/object:Gem::Version
|
32
|
+
- !ruby/object:Gem::Version
|
34
33
|
version: 1.0.0
|
35
34
|
type: :development
|
36
35
|
prerelease: false
|
37
|
-
version_requirements: *
|
38
|
-
- !ruby/object:Gem::Dependency
|
36
|
+
version_requirements: *11758740
|
37
|
+
- !ruby/object:Gem::Dependency
|
39
38
|
name: yard
|
40
|
-
requirement: &
|
39
|
+
requirement: &11757200 !ruby/object:Gem::Requirement
|
41
40
|
none: false
|
42
|
-
requirements:
|
41
|
+
requirements:
|
43
42
|
- - ~>
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version: 0.
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: 0.7.0
|
46
45
|
type: :development
|
47
46
|
prerelease: false
|
48
|
-
version_requirements: *
|
47
|
+
version_requirements: *11757200
|
49
48
|
description: A DataMapper plugin for adding predefined resources to Models.
|
50
|
-
email:
|
49
|
+
email:
|
51
50
|
- postmodern.mod3@gmail.com
|
52
51
|
executables: []
|
53
|
-
|
54
52
|
extensions: []
|
55
|
-
|
56
|
-
extra_rdoc_files:
|
53
|
+
extra_rdoc_files:
|
57
54
|
- README.md
|
58
55
|
- ChangeLog.md
|
59
56
|
- LICENSE.txt
|
60
|
-
files:
|
57
|
+
files:
|
61
58
|
- .document
|
62
59
|
- .rspec
|
63
60
|
- .yardopts
|
@@ -71,36 +68,35 @@ files:
|
|
71
68
|
- lib/dm-is-predefined.rb
|
72
69
|
- lib/dm-is-predefined/is/exceptions/unknown_resource.rb
|
73
70
|
- lib/dm-is-predefined/is/predefined.rb
|
71
|
+
- spec/integration/models/migrated_model.rb
|
74
72
|
- spec/integration/models/test_model.rb
|
75
73
|
- spec/integration/predefined_spec.rb
|
76
74
|
- spec/spec_helper.rb
|
77
75
|
has_rdoc: yard
|
78
76
|
homepage: http://github.com/postmodern/dm-is-predefined
|
79
|
-
licenses:
|
77
|
+
licenses:
|
80
78
|
- MIT
|
81
79
|
post_install_message:
|
82
80
|
rdoc_options: []
|
83
|
-
|
84
|
-
require_paths:
|
81
|
+
require_paths:
|
85
82
|
- lib
|
86
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
83
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
87
84
|
none: false
|
88
|
-
requirements:
|
89
|
-
- -
|
90
|
-
- !ruby/object:Gem::Version
|
91
|
-
version:
|
92
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - ! '>='
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
89
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
93
90
|
none: false
|
94
|
-
requirements:
|
95
|
-
- -
|
96
|
-
- !ruby/object:Gem::Version
|
91
|
+
requirements:
|
92
|
+
- - ! '>='
|
93
|
+
- !ruby/object:Gem::Version
|
97
94
|
version: 1.3.6
|
98
95
|
requirements: []
|
99
|
-
|
100
96
|
rubyforge_project: dm-is-predefined
|
101
|
-
rubygems_version: 1.
|
97
|
+
rubygems_version: 1.6.2
|
102
98
|
signing_key:
|
103
99
|
specification_version: 3
|
104
100
|
summary: DataMapper plugin for adding predefined resources to models.
|
105
|
-
test_files:
|
101
|
+
test_files:
|
106
102
|
- spec/integration/predefined_spec.rb
|