winch 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/Manifest.txt CHANGED
@@ -3,9 +3,12 @@ Manifest.txt
3
3
  PostInstall.txt
4
4
  README.rdoc
5
5
  Rakefile
6
+ lib/active_resource_boot/base.rb
7
+ lib/winch/base.rb
6
8
  lib/winch.rb
7
9
  script/console
8
10
  script/destroy
9
11
  script/generate
10
- test/test_helper.rb
11
- test/test_winch.rb
12
+ spec/spec.opts
13
+ spec/spec_helper.rb
14
+ spec/winch_spec.rb
data/README.rdoc CHANGED
@@ -4,371 +4,49 @@
4
4
  == DESCRIPTION:
5
5
 
6
6
  * Winch, when you need to have some more control over the data that ActiveResource loads.
7
+
7
8
  == FEATURES/PROBLEMS:
8
9
 
9
10
  * There seems to be problems if the class inheriting ActiveResource::Base has Mixins with constructors.
11
+
10
12
  == SYNOPSIS:
11
13
 
12
- #In the example below a cat will default to clean fur on it's first leg, and dirty fur on all the other legs unless
13
- #it is explicitly defined in the xml
14
+ #In the example below a cat will default to clean fur on it's first leg, and dirty fur on all the other legs unless
15
+ #it is explicitly defined in the xml
14
16
 
15
- class Cat < ActiveResource::Base
16
- define_type do
17
- must_have 'tail'
18
- must_have 'legs', :default => [{'paws' => 'groomed', 'fur' => 'clean'}, {}], :type => 'collection' # can be collection, node, or text
19
- end
20
- end
17
+ class Cat < ActiveResource::Base
18
+ must_have 'tail', :faux => "invalid tail"
19
+ must_have 'legs', :default => [{'paws' => 'groomed', 'fur' => 'clean'}]
20
+ end
21
+
22
+ class Cat::Leg < ActiveResource::Base
23
+ must_have 'paws', :faux => "invalid tail"
24
+ must_have 'fur', :default => 'dirty'
25
+ end
21
26
 
22
- class Cat::Leg < ActiveResource::Base
23
- define_type do
24
- must_have 'paws', :type => 'text'
25
- must_have 'fur', :type => 'text', :default => 'dirty'
26
- end
27
- end
28
27
  == REQUIREMENTS:
29
28
 
30
29
  * NONE
30
+
31
31
  == INSTALL:
32
32
 
33
33
  * sudo gem install winch
34
- == LICENSE:
35
-
36
- GNU GENERAL PUBLIC LICENSE
37
- Version 2, June 1991
38
-
39
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
40
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
41
- Everyone is permitted to copy and distribute verbatim copies
42
- of this license document, but changing it is not allowed.
43
-
44
- Preamble
45
-
46
- The licenses for most software are designed to take away your
47
- freedom to share and change it. By contrast, the GNU General Public
48
- License is intended to guarantee your freedom to share and change free
49
- software--to make sure the software is free for all its users. This
50
- General Public License applies to most of the Free Software
51
- Foundation's software and to any other program whose authors commit to
52
- using it. (Some other Free Software Foundation software is covered by
53
- the GNU Lesser General Public License instead.) You can apply it to
54
- your programs, too.
55
-
56
- When we speak of free software, we are referring to freedom, not
57
- price. Our General Public Licenses are designed to make sure that you
58
- have the freedom to distribute copies of free software (and charge for
59
- this service if you wish), that you receive source code or can get it
60
- if you want it, that you can change the software or use pieces of it
61
- in new free programs; and that you know you can do these things.
62
-
63
- To protect your rights, we need to make restrictions that forbid
64
- anyone to deny you these rights or to ask you to surrender the rights.
65
- These restrictions translate to certain responsibilities for you if you
66
- distribute copies of the software, or if you modify it.
67
-
68
- For example, if you distribute copies of such a program, whether
69
- gratis or for a fee, you must give the recipients all the rights that
70
- you have. You must make sure that they, too, receive or can get the
71
- source code. And you must show them these terms so they know their
72
- rights.
73
-
74
- We protect your rights with two steps: (1) copyright the software, and
75
- (2) offer you this license which gives you legal permission to copy,
76
- distribute and/or modify the software.
77
-
78
- Also, for each author's protection and ours, we want to make certain
79
- that everyone understands that there is no warranty for this free
80
- software. If the software is modified by someone else and passed on, we
81
- want its recipients to know that what they have is not the original, so
82
- that any problems introduced by others will not reflect on the original
83
- authors' reputations.
84
-
85
- Finally, any free program is threatened constantly by software
86
- patents. We wish to avoid the danger that redistributors of a free
87
- program will individually obtain patent licenses, in effect making the
88
- program proprietary. To prevent this, we have made it clear that any
89
- patent must be licensed for everyone's free use or not licensed at all.
90
-
91
- The precise terms and conditions for copying, distribution and
92
- modification follow.
93
-
94
- GNU GENERAL PUBLIC LICENSE
95
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
96
-
97
- 0. This License applies to any program or other work which contains
98
- a notice placed by the copyright holder saying it may be distributed
99
- under the terms of this General Public License. The "Program", below,
100
- refers to any such program or work, and a "work based on the Program"
101
- means either the Program or any derivative work under copyright law:
102
- that is to say, a work containing the Program or a portion of it,
103
- either verbatim or with modifications and/or translated into another
104
- language. (Hereinafter, translation is included without limitation in
105
- the term "modification".) Each licensee is addressed as "you".
106
-
107
- Activities other than copying, distribution and modification are not
108
- covered by this License; they are outside its scope. The act of
109
- running the Program is not restricted, and the output from the Program
110
- is covered only if its contents constitute a work based on the
111
- Program (independent of having been made by running the Program).
112
- Whether that is true depends on what the Program does.
113
-
114
- 1. You may copy and distribute verbatim copies of the Program's
115
- source code as you receive it, in any medium, provided that you
116
- conspicuously and appropriately publish on each copy an appropriate
117
- copyright notice and disclaimer of warranty; keep intact all the
118
- notices that refer to this License and to the absence of any warranty;
119
- and give any other recipients of the Program a copy of this License
120
- along with the Program.
121
-
122
- You may charge a fee for the physical act of transferring a copy, and
123
- you may at your option offer warranty protection in exchange for a fee.
124
-
125
- 2. You may modify your copy or copies of the Program or any portion
126
- of it, thus forming a work based on the Program, and copy and
127
- distribute such modifications or work under the terms of Section 1
128
- above, provided that you also meet all of these conditions:
129
-
130
- a) You must cause the modified files to carry prominent notices
131
- stating that you changed the files and the date of any change.
132
-
133
- b) You must cause any work that you distribute or publish, that in
134
- whole or in part contains or is derived from the Program or any
135
- part thereof, to be licensed as a whole at no charge to all third
136
- parties under the terms of this License.
137
-
138
- c) If the modified program normally reads commands interactively
139
- when run, you must cause it, when started running for such
140
- interactive use in the most ordinary way, to print or display an
141
- announcement including an appropriate copyright notice and a
142
- notice that there is no warranty (or else, saying that you provide
143
- a warranty) and that users may redistribute the program under
144
- these conditions, and telling the user how to view a copy of this
145
- License. (Exception: if the Program itself is interactive but
146
- does not normally print such an announcement, your work based on
147
- the Program is not required to print an announcement.)
148
-
149
- These requirements apply to the modified work as a whole. If
150
- identifiable sections of that work are not derived from the Program,
151
- and can be reasonably considered independent and separate works in
152
- themselves, then this License, and its terms, do not apply to those
153
- sections when you distribute them as separate works. But when you
154
- distribute the same sections as part of a whole which is a work based
155
- on the Program, the distribution of the whole must be on the terms of
156
- this License, whose permissions for other licensees extend to the
157
- entire whole, and thus to each and every part regardless of who wrote it.
158
-
159
- Thus, it is not the intent of this section to claim rights or contest
160
- your rights to work written entirely by you; rather, the intent is to
161
- exercise the right to control the distribution of derivative or
162
- collective works based on the Program.
163
-
164
- In addition, mere aggregation of another work not based on the Program
165
- with the Program (or with a work based on the Program) on a volume of
166
- a storage or distribution medium does not bring the other work under
167
- the scope of this License.
168
-
169
- 3. You may copy and distribute the Program (or a work based on it,
170
- under Section 2) in object code or executable form under the terms of
171
- Sections 1 and 2 above provided that you also do one of the following:
172
-
173
- a) Accompany it with the complete corresponding machine-readable
174
- source code, which must be distributed under the terms of Sections
175
- 1 and 2 above on a medium customarily used for software interchange; or,
176
34
 
177
- b) Accompany it with a written offer, valid for at least three
178
- years, to give any third party, for a charge no more than your
179
- cost of physically performing source distribution, a complete
180
- machine-readable copy of the corresponding source code, to be
181
- distributed under the terms of Sections 1 and 2 above on a medium
182
- customarily used for software interchange; or,
183
-
184
- c) Accompany it with the information you received as to the offer
185
- to distribute corresponding source code. (This alternative is
186
- allowed only for noncommercial distribution and only if you
187
- received the program in object code or executable form with such
188
- an offer, in accord with Subsection b above.)
189
-
190
- The source code for a work means the preferred form of the work for
191
- making modifications to it. For an executable work, complete source
192
- code means all the source code for all modules it contains, plus any
193
- associated interface definition files, plus the scripts used to
194
- control compilation and installation of the executable. However, as a
195
- special exception, the source code distributed need not include
196
- anything that is normally distributed (in either source or binary
197
- form) with the major components (compiler, kernel, and so on) of the
198
- operating system on which the executable runs, unless that component
199
- itself accompanies the executable.
200
-
201
- If distribution of executable or object code is made by offering
202
- access to copy from a designated place, then offering equivalent
203
- access to copy the source code from the same place counts as
204
- distribution of the source code, even though third parties are not
205
- compelled to copy the source along with the object code.
206
-
207
- 4. You may not copy, modify, sublicense, or distribute the Program
208
- except as expressly provided under this License. Any attempt
209
- otherwise to copy, modify, sublicense or distribute the Program is
210
- void, and will automatically terminate your rights under this License.
211
- However, parties who have received copies, or rights, from you under
212
- this License will not have their licenses terminated so long as such
213
- parties remain in full compliance.
214
-
215
- 5. You are not required to accept this License, since you have not
216
- signed it. However, nothing else grants you permission to modify or
217
- distribute the Program or its derivative works. These actions are
218
- prohibited by law if you do not accept this License. Therefore, by
219
- modifying or distributing the Program (or any work based on the
220
- Program), you indicate your acceptance of this License to do so, and
221
- all its terms and conditions for copying, distributing or modifying
222
- the Program or works based on it.
223
-
224
- 6. Each time you redistribute the Program (or any work based on the
225
- Program), the recipient automatically receives a license from the
226
- original licensor to copy, distribute or modify the Program subject to
227
- these terms and conditions. You may not impose any further
228
- restrictions on the recipients' exercise of the rights granted herein.
229
- You are not responsible for enforcing compliance by third parties to
230
- this License.
231
-
232
- 7. If, as a consequence of a court judgment or allegation of patent
233
- infringement or for any other reason (not limited to patent issues),
234
- conditions are imposed on you (whether by court order, agreement or
235
- otherwise) that contradict the conditions of this License, they do not
236
- excuse you from the conditions of this License. If you cannot
237
- distribute so as to satisfy simultaneously your obligations under this
238
- License and any other pertinent obligations, then as a consequence you
239
- may not distribute the Program at all. For example, if a patent
240
- license would not permit royalty-free redistribution of the Program by
241
- all those who receive copies directly or indirectly through you, then
242
- the only way you could satisfy both it and this License would be to
243
- refrain entirely from distribution of the Program.
244
-
245
- If any portion of this section is held invalid or unenforceable under
246
- any particular circumstance, the balance of the section is intended to
247
- apply and the section as a whole is intended to apply in other
248
- circumstances.
249
-
250
- It is not the purpose of this section to induce you to infringe any
251
- patents or other property right claims or to contest validity of any
252
- such claims; this section has the sole purpose of protecting the
253
- integrity of the free software distribution system, which is
254
- implemented by public license practices. Many people have made
255
- generous contributions to the wide range of software distributed
256
- through that system in reliance on consistent application of that
257
- system; it is up to the author/donor to decide if he or she is willing
258
- to distribute software through any other system and a licensee cannot
259
- impose that choice.
260
-
261
- This section is intended to make thoroughly clear what is believed to
262
- be a consequence of the rest of this License.
263
-
264
- 8. If the distribution and/or use of the Program is restricted in
265
- certain countries either by patents or by copyrighted interfaces, the
266
- original copyright holder who places the Program under this License
267
- may add an explicit geographical distribution limitation excluding
268
- those countries, so that distribution is permitted only in or among
269
- countries not thus excluded. In such case, this License incorporates
270
- the limitation as if written in the body of this License.
271
-
272
- 9. The Free Software Foundation may publish revised and/or new versions
273
- of the General Public License from time to time. Such new versions will
274
- be similar in spirit to the present version, but may differ in detail to
275
- address new problems or concerns.
276
-
277
- Each version is given a distinguishing version number. If the Program
278
- specifies a version number of this License which applies to it and "any
279
- later version", you have the option of following the terms and conditions
280
- either of that version or of any later version published by the Free
281
- Software Foundation. If the Program does not specify a version number of
282
- this License, you may choose any version ever published by the Free Software
283
- Foundation.
284
-
285
- 10. If you wish to incorporate parts of the Program into other free
286
- programs whose distribution conditions are different, write to the author
287
- to ask for permission. For software which is copyrighted by the Free
288
- Software Foundation, write to the Free Software Foundation; we sometimes
289
- make exceptions for this. Our decision will be guided by the two goals
290
- of preserving the free status of all derivatives of our free software and
291
- of promoting the sharing and reuse of software generally.
292
-
293
- NO WARRANTY
294
-
295
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
296
- FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
297
- OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
298
- PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
299
- OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
300
- MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
301
- TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
302
- PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
303
- REPAIR OR CORRECTION.
304
-
305
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
306
- WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
307
- REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
308
- INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
309
- OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
310
- TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
311
- YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
312
- PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
313
- POSSIBILITY OF SUCH DAMAGES.
314
-
315
- END OF TERMS AND CONDITIONS
316
-
317
- How to Apply These Terms to Your New Programs
318
-
319
- If you develop a new program, and you want it to be of the greatest
320
- possible use to the public, the best way to achieve this is to make it
321
- free software which everyone can redistribute and change under these terms.
322
-
323
- To do so, attach the following notices to the program. It is safest
324
- to attach them to the start of each source file to most effectively
325
- convey the exclusion of warranty; and each file should have at least
326
- the "copyright" line and a pointer to where the full notice is found.
327
-
328
- <one line to give the program's name and a brief idea of what it does.>
329
- Copyright (C) <year> <name of author>
330
-
331
- This program is free software; you can redistribute it and/or modify
332
- it under the terms of the GNU General Public License as published by
333
- the Free Software Foundation; either version 2 of the License, or
334
- (at your option) any later version.
335
-
336
- This program is distributed in the hope that it will be useful,
337
- but WITHOUT ANY WARRANTY; without even the implied warranty of
338
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
339
- GNU General Public License for more details.
340
-
341
- You should have received a copy of the GNU General Public License along
342
- with this program; if not, write to the Free Software Foundation, Inc.,
343
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
344
-
345
- Also add information on how to contact you by electronic and paper mail.
346
-
347
- If the program is interactive, make it output a short notice like this
348
- when it starts in an interactive mode:
349
-
350
- Gnomovision version 69, Copyright (C) year name of author
351
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
352
- This is free software, and you are welcome to redistribute it
353
- under certain conditions; type `show c' for details.
354
-
355
- The hypothetical commands `show w' and `show c' should show the appropriate
356
- parts of the General Public License. Of course, the commands you use may
357
- be called something other than `show w' and `show c'; they could even be
358
- mouse-clicks or menu items--whatever suits your program.
35
+ == LICENSE:
359
36
 
360
- You should also get your employer (if you work as a programmer) or your
361
- school, if any, to sign a "copyright disclaimer" for the program, if
362
- necessary. Here is a sample; alter the names:
37
+ winch: when you need to have some more control over the data that ActiveResource loads.
38
+ Copyright (C) 2009 Vanson Samuel
363
39
 
364
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
365
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
40
+ This program is free software; you can redistribute it and/or
41
+ modify it under the terms of the GNU General Public License
42
+ as published by the Free Software Foundation; either version 2
43
+ of the License, or (at your option) any later version.
366
44
 
367
- <signature of Ty Coon>, 1 April 1989
368
- Ty Coon, President of Vice
45
+ This program is distributed in the hope that it will be useful,
46
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
47
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
48
+ GNU General Public License for more details.
369
49
 
370
- This General Public License does not permit incorporating your program into
371
- proprietary programs. If your program is a subroutine library, you may
372
- consider it more useful to permit linking proprietary applications with the
373
- library. If this is what you want to do, use the GNU Lesser General
374
- Public License instead of this License.
50
+ You should have received a copy of the GNU General Public License
51
+ along with this program; if not, write to the Free Software
52
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
data/Rakefile CHANGED
@@ -1,25 +1,25 @@
1
- require 'rubygems'
2
- gem 'hoe', '>= 2.1.0'
3
- require 'hoe'
4
- require 'fileutils'
5
- require './lib/winch'
6
-
7
- Hoe.plugin :newgem
8
- # Hoe.plugin :website
9
- # Hoe.plugin :cucumberfeatures
10
-
11
- # Generate all the Rake tasks
12
- # Run 'rake -T' to see list of generated tasks (from gem root directory)
13
- $hoe = Hoe.spec 'winch' do
14
- self.developer 'Vanson Samuel', 'vs@binq.com'
15
- # self.post_install_message = 'PostInstall.txt' # TODO remove if post-install message not required
16
- # self.rubyforge_name = self.name # TODO this is default value
17
- # self.extra_deps = [['activesupport','>= 2.0.2']]
18
- end
19
-
20
- require 'newgem/tasks'
21
- Dir['tasks/**/*.rake'].each { |t| load t }
22
-
23
- # TODO - want other tests/tasks run by default? Add them to the list
24
- # remove_task :default
25
- # task :default => [:spec, :features]
1
+ require 'rubygems'
2
+ gem 'hoe', '>= 2.1.0'
3
+ require 'hoe'
4
+ require 'fileutils'
5
+ require './lib/winch'
6
+
7
+ Hoe.plugin :newgem
8
+ # Hoe.plugin :website
9
+ # Hoe.plugin :cucumberfeatures
10
+
11
+ # Generate all the Rake tasks
12
+ # Run 'rake -T' to see list of generated tasks (from gem root directory)
13
+ $hoe = Hoe.spec 'winch' do
14
+ self.developer 'Vanson Samuel', 'vs@binq.com'
15
+ self.post_install_message = 'PostInstall.txt' # TODO remove if post-install message not required
16
+ # self.rubyforge_name = self.name # TODO this is default value
17
+ self.extra_deps = [['activeresource','>= 2.3.2']]
18
+ end
19
+
20
+ require 'newgem/tasks'
21
+ Dir['tasks/**/*.rake'].each { |t| load t }
22
+
23
+ # TODO - want other tests/tasks run by default? Add them to the list
24
+ # remove_task :default
25
+ # task :default => [:spec, :features]
@@ -0,0 +1,10 @@
1
+ class ActiveResource::Base
2
+ include Winch::Base
3
+
4
+ def initialize_with_winch(attributes)
5
+ initialize_winch(attributes)
6
+ initialize_without_winch(attributes).tap { preform_type_check }
7
+ end
8
+
9
+ alias_method_chain :initialize, :winch
10
+ end
data/lib/winch/base.rb ADDED
@@ -0,0 +1,54 @@
1
+ module Winch::Base
2
+ module ClassMethods
3
+ def must_have(name, options={})
4
+ #Either :default, or :faux can be anything including false and '', just not nil
5
+ raise "%s can have either a default or a faux value, but not both." % name unless options.values_at(:default, :faux).one? { |v| !v.nil? }
6
+
7
+ self.must_haves = (self.must_haves || []).push(options.merge(:name => name))
8
+ end
9
+ end
10
+
11
+ module InstanceMethods
12
+ def initialize_winch(attributes)
13
+ (self.must_haves || []).each do |clause|
14
+ name = clause[:name]
15
+
16
+ next unless attributes[name].nil?
17
+
18
+ if clause[:default].nil?
19
+ @broken_attributes = (@broken_attributes || []).push(name)
20
+ attributes[name] = clause[:faux]
21
+ else
22
+ attributes[name] = clause[:default]
23
+ end
24
+ end
25
+ end
26
+
27
+ def preform_type_check
28
+ @broken_attributes = (@broken_attributes || []) + attributes.keys.collect do |name|
29
+ if attributes[name].kind_of?(ActiveResource::Base) && !attributes[name].well_typed?
30
+ attributes[name].broken_attributes.collect { |a| "%s.%s" % [name, a] }
31
+ elsif attributes[name].kind_of?(Array)
32
+ attributes[name].to_enum(:each_with_index).collect do |node, index|
33
+ node.broken_attributes.collect { |a| "%s[%s].%s" % [name, index, a] } unless node.well_typed?
34
+ end
35
+ else
36
+ nil
37
+ end
38
+ end.flatten.compact
39
+
40
+ @well_typed = @broken_attributes.blank?
41
+ end
42
+ end
43
+
44
+ def self.included(klass)
45
+ klass.class_eval do
46
+ class_inheritable_array :must_haves, :instance_writer => false
47
+ attr_reader :well_typed, :broken_attributes
48
+ alias_method :well_typed?, :well_typed
49
+
50
+ extend ClassMethods
51
+ include InstanceMethods
52
+ end
53
+ end
54
+ end
data/lib/winch.rb CHANGED
@@ -1,6 +1,13 @@
1
+ require 'rubygems'
2
+ require 'active_resource'
3
+
1
4
  $:.unshift(File.dirname(__FILE__)) unless
2
5
  $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
6
 
4
7
  module Winch
5
- VERSION = '0.0.1'
6
- end
8
+ VERSION = '0.0.2'
9
+
10
+ autoload :Base, 'winch/base'
11
+ end
12
+
13
+ require 'active_resource_boot/base'
data/spec/spec.opts ADDED
@@ -0,0 +1 @@
1
+ --colour
@@ -0,0 +1,12 @@
1
+ require 'ruby-debug'
2
+
3
+ begin
4
+ require 'spec'
5
+ rescue LoadError
6
+ require 'rubygems' unless ENV['NO_RUBYGEMS']
7
+ gem 'rspec'
8
+ require 'spec'
9
+ end
10
+
11
+ $:.unshift(File.dirname(__FILE__) + '/../lib')
12
+ require 'winch'
@@ -0,0 +1,77 @@
1
+ require File.dirname(__FILE__) + '/spec_helper.rb'
2
+
3
+ class Bat < ActiveResource::Base
4
+ self.site = ''
5
+ end
6
+
7
+ class Cat < ActiveResource::Base
8
+ self.site = ''
9
+
10
+ must_have 'name', :default => 'Oreo'
11
+ must_have 'legs', :default => [{'paws' => 'sharp', 'fur' => 'clean'},
12
+ {'paws' => 'sharp', 'fur' => 'clean'},
13
+ {'paws' => 'sharp', 'fur' => 'clean'},
14
+ {'paws' => 'sharp', 'fur' => 'clean'}]
15
+ end
16
+
17
+ class Cat::Leg < ActiveResource::Base
18
+ self.site = ''
19
+
20
+ must_have 'paws', :faux => 'mysterious'
21
+ must_have 'fur', :default => 'dirty'
22
+ end
23
+
24
+ class Goat < ActiveResource::Base
25
+ self.site = ''
26
+
27
+ must_have 'name', :default => 'billy'
28
+ must_have 'legs', :default => [{'hoof' => 'clean'}, {}, {}, {}]
29
+ end
30
+
31
+ class Goat::Leg < ActiveResource::Base
32
+ self.site = ''
33
+
34
+ must_have 'hoof', :faux => 'mysterious'
35
+ must_have 'fur', :default => 'dirty'
36
+ end
37
+
38
+ describe Winch do
39
+ it "should work in the default situation" do
40
+ Bat.new({}).should be_well_typed
41
+ end
42
+
43
+ it "should work with a basic winch case" do
44
+ Cat::Leg.new({'paws' => 'sharp'}).tap do |cl|
45
+ cl.paws.should eql('sharp')
46
+ cl.fur.should eql('dirty')
47
+ cl.should be_well_typed
48
+ end
49
+
50
+ Cat::Leg.new({'fur' => 'black'}).tap do |cl|
51
+ cl.paws.should eql('mysterious')
52
+ cl.fur.should eql('black')
53
+ cl.should_not be_well_typed
54
+ cl.broken_attributes.should eql(['paws'])
55
+ end
56
+ end
57
+
58
+ it "should work with a nested winch case" do
59
+ Goat.new({}).tap do |g|
60
+ g.legs.each_with_index do |l, i|
61
+ if [1, 2, 3].include?(i)
62
+ l.hoof.should eql('mysterious')
63
+ l.fur.should eql('dirty')
64
+ l.should_not be_well_typed
65
+ else
66
+ l.hoof.should eql('clean')
67
+ l.fur.should eql('dirty')
68
+ l.should be_well_typed
69
+ end
70
+ end
71
+
72
+ g.name.should eql('billy')
73
+ g.should_not be_well_typed
74
+ g.broken_attributes.should eql(['legs[1].hoof', 'legs[2].hoof', 'legs[3].hoof'])
75
+ end
76
+ end
77
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: winch
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vanson Samuel
@@ -9,9 +9,19 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-12-07 00:00:00 -05:00
12
+ date: 2009-12-14 00:00:00 -05:00
13
13
  default_executable:
14
14
  dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: activeresource
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 2.3.2
24
+ version:
15
25
  - !ruby/object:Gem::Dependency
16
26
  name: hoe
17
27
  type: :development
@@ -20,7 +30,7 @@ dependencies:
20
30
  requirements:
21
31
  - - ">="
22
32
  - !ruby/object:Gem::Version
23
- version: 2.3.3
33
+ version: 2.4.0
24
34
  version:
25
35
  description: "* Winch, when you need to have some more control over the data that ActiveResource loads."
26
36
  email:
@@ -39,17 +49,20 @@ files:
39
49
  - PostInstall.txt
40
50
  - README.rdoc
41
51
  - Rakefile
52
+ - lib/active_resource_boot/base.rb
53
+ - lib/winch/base.rb
42
54
  - lib/winch.rb
43
55
  - script/console
44
56
  - script/destroy
45
57
  - script/generate
46
- - test/test_helper.rb
47
- - test/test_winch.rb
58
+ - spec/spec.opts
59
+ - spec/spec_helper.rb
60
+ - spec/winch_spec.rb
48
61
  has_rdoc: true
49
62
  homepage: http://github.com/binq/winch
50
63
  licenses: []
51
64
 
52
- post_install_message:
65
+ post_install_message: PostInstall.txt
53
66
  rdoc_options:
54
67
  - --main
55
68
  - README.rdoc
@@ -74,6 +87,5 @@ rubygems_version: 1.3.5
74
87
  signing_key:
75
88
  specification_version: 3
76
89
  summary: "* Winch, when you need to have some more control over the data that ActiveResource loads."
77
- test_files:
78
- - test/test_helper.rb
79
- - test/test_winch.rb
90
+ test_files: []
91
+
data/test/test_helper.rb DELETED
@@ -1,3 +0,0 @@
1
- require 'stringio'
2
- require 'test/unit'
3
- require File.dirname(__FILE__) + '/../lib/winch'
data/test/test_winch.rb DELETED
@@ -1,11 +0,0 @@
1
- require File.dirname(__FILE__) + '/test_helper.rb'
2
-
3
- class TestWinch < Test::Unit::TestCase
4
-
5
- def setup
6
- end
7
-
8
- def test_truth
9
- assert true
10
- end
11
- end