README in coded_attribute-0.0.3 vs README in coded_attribute-0.0.4
- old
+ new
@@ -1,13 +1,89 @@
-CodedAttributes
-===============
+=CodedAttribute
-Introduction goes here.
+Two of my favorite MySQL datatypes are ENUMs and SETs. Unfortunately,
+ActiveRecord doesn't appear to support these fields well, or provide a good
+and simple alternative to the problem of coded values. In the past, I used to
+write getters and setters that looked something like this to solve my problem.
+ class Article
+ STATUS_CODES => {
+ :deleted => 0, 0 => :deleted
+ :pending => 1, 1 => :pending,
+ :completed => 2, 2 => :completed,
+ :published => 3, 3 => :published
+ }
-Example
-=======
+ def status=(value)
+ value = value.to_sym if value.is_a?(String)
+ status_code = STATUS_CODES[value]
+ end
+
+ def status
+ STATUS_CODES[status_code]
+ end
+ end
-Example goes here.
+Doesn't that code look horrible? Wouldn't it be better if it looked like this?!
+ class Article
+ coded_attribute :status {
+ 0 => :deleted
+ 1 => :pending
+ 2 => :completed
+ 3 => :published
+ end
+ end
-Copyright (c) 2010 [name of plugin creator], released under the MIT license
+Or, if we want to get even lazier!
+
+ class MyClass
+ coded_attribute :status, [ :deleted, :active, :pending, :deleted ]
+ end
+
+If so, then you've come to the right place.
+
+This plugin makes doing all of the above super easy. And your code (and other
+programmers) will love you for using it! Like seriously love you!
+
+==Coded Attributes
+
+Lets get down to it. Suppose we have a car, and it can be any one of a variety
+of colors. We can indicate this in the model with the following code:
+
+ class Car < ActiveRecord::Base
+ coded_attribute :color, [ :red, :orange, :yellow, :green, :blue, :indigo, :violet ]
+ end
+
+But we aren't finished just yet. We still need to create a column to store our
+attribute data in. There are two ways to go about this.
+
+===Storing the Coded Value
+
+The easiest way to store the coded value is to create an integer column in the
+database by appending '_code' to the name of the attribute. So in our 'cars'
+table, we could create a 'color_code' integer field. If you do not want to
+name the column in your database 'color_code', you can replace :color, with a
+:method => :column pair, for example:
+
+ class Car < ActiveRecord::Base
+ coded_attribute :color => :color_id, [ :red, orange, :yellow, :green, :blue, :indigo, :violet ]
+ end
+
+==Coded Attribute Sets
+
+If you do not want to use a SET datatype, coded_attribute_set an make use of an
+integer bitmask to store the values.
+
+ class Car < ActiveRecord::Base
+ coded_attribute_set :color, [ :red, :orange, :yellow, :green, :blue, :indigo, :violet ]
+ end
+
+=Planned Features
+
+Future versions should hopefully support auto-detecting and setup of enum and
+set types (so you don't need to even define the coded_attribute, it will be
+done automatically on all classes).
+
+I also plan on a method added to Migrations that allow you to easily recode data
+
+Copyright (c) 2010 Jaden Carver, released under the MIT license