forked from lukegalea/hyperactiveresource
-
Notifications
You must be signed in to change notification settings - Fork 1
/
README
59 lines (46 loc) · 2.19 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
HyperactiveResource
===================
v0.1
Many have said that ActiveResource is not really "complete". On the surface,
this means that some features that are documented aren't implemented. Digging a
little deeper, we find that some features that should exist don't.
Arguably, a "complete" ActiveResource would behave like ActiveRecord or, as the
rdoc for ActiveResource states "very similarly to Active Record".
Hyperactive Resource is MDL's extension to ActiveResource::Base written to
support our Patient Registry and goes a long way towards the goal of an
ActiveResource that behaves like ActiveRecord.
Features
* Client side validations
* Hooks for before_validate, before_save
* Dynamic finders: find_by_X
* save!
* Awareness of associations between resources: belongs_to, has_many, has_one & columns
* Patient.new.name returns nil instead of MethodMissing
* Patient.new.races returns [] instead of MethodMissing
* pat = Patient.new; pat.gender_id = 1; pat.gender #Will return find the gender obj
* Resources can be associated with records
* Records can be associated with records
* ActiveRecord-like attributes= (updates rather than replaces)
* ActiveRecord-like #load that doesn't #dup attributes (stores direct reference)
* Supports saving resources that :include other resources via:
* Nested resource saving (creating a patient will create their associated addresses)
* Mapping associations ([:gender].id will serialize as :gender_id)
Example
=======
1. Install the plugin via:
cd path/to/rails_root/vendor/plugins
git clone git://github.com/lukegalea/hyperactiveresource.git
2. Create a HyperactiveResource where you would normally use ActiveResource
and define the meta-data/associations that drive the dynamic magic:
class Address < HyperactiveResource
self.columns = [ :street_address, :city, :zipcode, :home_phone_number ]
self.belong_tos = [ :country, :state ]
self.has_manys = [ :people ]
end
3. Enjoy the magic
address = Address.new
address.country # nil instead of method_missing
address.country_id = 5
address.country #Returns Country.find(5)
etc..
Copyright (c) 2008 Medical Decision Logic, released under the MIT license