woahdae-units 1.0.3 → 1.1.0

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/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.3
1
+ 1.1.0
@@ -0,0 +1,36 @@
1
+ module Units
2
+ module ActiveRecord
3
+ def acts_as_units(*methods)
4
+ methods.each do |method|
5
+ define_method(method) do
6
+ unit_attr = "#{method}_unit".to_sym
7
+ self[unit_attr].blank? ? self[method] : self[method].send(self[unit_attr])
8
+ end
9
+
10
+ define_method("#{method}=".to_sym) do |value|
11
+ if value.is_a?(String) && value =~ /^(.*?) (\w.*?)$/
12
+ amount = $1
13
+ unit = $2
14
+ elsif value.respond_to?(:unit) && value.unit
15
+ amount = value
16
+ unit = value.unit
17
+ else
18
+ amount = value
19
+ unit = nil
20
+ end
21
+
22
+ amount = amount.to_f
23
+ amount = amount.send(unit) if unit
24
+
25
+ self[method] = amount
26
+ self["#{method}_unit".to_sym] = self.attributes["#{method}_unit"] || unit
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+
33
+ class ActiveRecord::Base
34
+ extend Units::ActiveRecord
35
+ end
36
+
@@ -0,0 +1,41 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+ require 'rubygems'
3
+ require 'activerecord'
4
+ require 'units/active_record'
5
+ require 'ruby-debug'
6
+ ActiveRecord::Base.establish_connection(
7
+ :adapter => 'sqlite3',
8
+ :database => ":memory:"
9
+ )
10
+
11
+ ActiveRecord::Schema.define do
12
+ create_table "items", :force => true do |t|
13
+ t.float :quantity
14
+ t.string :quantity_unit
15
+ end
16
+ end
17
+
18
+ class Item < ActiveRecord::Base
19
+ acts_as_units :quantity
20
+ end
21
+
22
+
23
+ class ActiveRecordTest < Test::Unit::TestCase
24
+ def test_accessor_gets_float_with_unit
25
+ item = Item.create!(:quantity => 5, :quantity_unit => "lbs")
26
+ item.reload
27
+ assert_equal :pounds, item.quantity.unit
28
+ end
29
+
30
+ def test_writer_sets_qty_and_qty_unit_given_a_string
31
+ item = Item.new(:quantity => "5 lbs")
32
+ assert_equal :pounds, item.quantity.unit
33
+ assert_equal "lbs", item.quantity_unit
34
+ end
35
+
36
+ def test_writer_sets_qty_and_qty_unit_given_a_numeric_with_unit
37
+ item = Item.new(:quantity => 5.pounds)
38
+ assert_equal :pounds, item.quantity.unit
39
+ assert_equal :pounds, item.quantity_unit
40
+ end
41
+ end
data/units.gemspec CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{units}
5
- s.version = "1.0.3"
5
+ s.version = "1.1.0"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Lucas Carlson"]
9
- s.date = %q{2009-07-30}
9
+ s.date = %q{2009-07-31}
10
10
  s.description = %q{A simple way to add units and conversion ability to numbers in Ruby}
11
11
  s.email = %q{lucas@rufy.com}
12
12
  s.extra_rdoc_files = [
@@ -19,10 +19,12 @@ Gem::Specification.new do |s|
19
19
  "Rakefile",
20
20
  "VERSION",
21
21
  "lib/units.rb",
22
+ "lib/units/active_record.rb",
22
23
  "lib/units/base.rb",
23
24
  "lib/units/currency.rb",
24
25
  "lib/units/standard.rb",
25
26
  "test/test_helper.rb",
27
+ "test/units/active_record_test.rb",
26
28
  "test/units/base_test.rb",
27
29
  "test/units/currency_test.rb",
28
30
  "test/units/standard_test.rb",
@@ -36,6 +38,7 @@ Gem::Specification.new do |s|
36
38
  s.summary = %q{units/conversions Gem}
37
39
  s.test_files = [
38
40
  "test/test_helper.rb",
41
+ "test/units/active_record_test.rb",
39
42
  "test/units/base_test.rb",
40
43
  "test/units/currency_test.rb",
41
44
  "test/units/standard_test.rb"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: woahdae-units
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lucas Carlson
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-07-30 00:00:00 -07:00
12
+ date: 2009-07-31 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -28,10 +28,12 @@ files:
28
28
  - Rakefile
29
29
  - VERSION
30
30
  - lib/units.rb
31
+ - lib/units/active_record.rb
31
32
  - lib/units/base.rb
32
33
  - lib/units/currency.rb
33
34
  - lib/units/standard.rb
34
35
  - test/test_helper.rb
36
+ - test/units/active_record_test.rb
35
37
  - test/units/base_test.rb
36
38
  - test/units/currency_test.rb
37
39
  - test/units/standard_test.rb
@@ -65,6 +67,7 @@ specification_version: 2
65
67
  summary: units/conversions Gem
66
68
  test_files:
67
69
  - test/test_helper.rb
70
+ - test/units/active_record_test.rb
68
71
  - test/units/base_test.rb
69
72
  - test/units/currency_test.rb
70
73
  - test/units/standard_test.rb