attribute_mapper 1.0.0 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -1,2 +1,4 @@
1
1
  coverage
2
- pkg
2
+ pkg
3
+ doc
4
+ .yardoc
data/Rakefile CHANGED
@@ -5,13 +5,23 @@ task :default => :test
5
5
 
6
6
  Rake::TestTask.new do |t|
7
7
  t.test_files = FileList['test/*_test.rb']
8
- t.ruby_opts = ['-rubygems']
8
+ t.ruby_opts = ['-Itest', '-rubygems']
9
9
  end
10
10
 
11
11
  Rcov::RcovTask.new do |t|
12
12
  t.test_files = FileList['test/*_test.rb']
13
13
  end
14
14
 
15
+ begin
16
+ require 'yard'
17
+ YARD::Rake::YardocTask.new(:doc) do |t|
18
+ t.options = ['--no-private']
19
+ t.files = FileList['lib/**/*.rb']
20
+ end
21
+ rescue LoadError => e
22
+ puts "yard not available. Install it with: gem install yard"
23
+ end
24
+
15
25
  begin
16
26
  require 'jeweler'
17
27
  Jeweler::Tasks.new do |s|
@@ -24,4 +34,4 @@ begin
24
34
  end
25
35
  rescue LoadError
26
36
  puts "Jeweler not available. Install it with: gem install technicalpickles-jeweler -s http://gems.github.com"
27
- end
37
+ end
data/VERSION.yml CHANGED
@@ -1,5 +1,5 @@
1
1
  ---
2
- :patch: 0
3
- :major: 1
4
- :minor: 0
2
+ :minor: 1
3
+ :patch: 1
5
4
  :build:
5
+ :major: 1
@@ -1,25 +1,46 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
1
4
  # -*- encoding: utf-8 -*-
2
5
 
3
6
  Gem::Specification.new do |s|
4
7
  s.name = %q{attribute_mapper}
5
- s.version = "0.9.1"
8
+ s.version = "1.1.1"
6
9
 
7
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
11
  s.authors = ["Marcel Molina Jr.", "Bruce Williams", "Adam Keys"]
9
- s.date = %q{2009-03-10}
12
+ s.date = %q{2010-01-08}
10
13
  s.description = %q{Provides a transparent interface for mapping symbolic representations to a column in the database of a more primitive type.}
11
14
  s.email = %q{adamkkeys@gmail.com}
12
- s.files = ["README.md", "VERSION.yml", "lib/attribute_mapper.rb", "test/attribute_mapper_test.rb"]
13
- s.has_rdoc = true
15
+ s.extra_rdoc_files = [
16
+ "LICENSE",
17
+ "README.md"
18
+ ]
19
+ s.files = [
20
+ ".gitignore",
21
+ "LICENSE",
22
+ "README.md",
23
+ "Rakefile",
24
+ "VERSION.yml",
25
+ "attribute_mapper.gemspec",
26
+ "init.rb",
27
+ "lib/attribute_mapper.rb",
28
+ "test/attribute_mapper_test.rb",
29
+ "test/test_helper.rb"
30
+ ]
14
31
  s.homepage = %q{http://github.com/therealadam/attribute_mapper}
15
- s.rdoc_options = ["--inline-source", "--charset=UTF-8"]
32
+ s.rdoc_options = ["--charset=UTF-8"]
16
33
  s.require_paths = ["lib"]
17
- s.rubygems_version = %q{1.3.1}
34
+ s.rubygems_version = %q{1.3.5}
18
35
  s.summary = %q{Map symbolic types to primitive types and stash them in a column.}
36
+ s.test_files = [
37
+ "test/attribute_mapper_test.rb",
38
+ "test/test_helper.rb"
39
+ ]
19
40
 
20
41
  if s.respond_to? :specification_version then
21
42
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
22
- s.specification_version = 2
43
+ s.specification_version = 3
23
44
 
24
45
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
25
46
  else
@@ -27,3 +48,4 @@ Gem::Specification.new do |s|
27
48
  else
28
49
  end
29
50
  end
51
+
@@ -5,14 +5,36 @@ module AttributeMapper
5
5
  model.send(:include, InstanceMethods)
6
6
  end
7
7
 
8
- module ClassMethods
8
+ module ClassMethods # @private
9
+
10
+ # Map a column in your table to a human-friendly attribute on your model. When
11
+ # ++attribute is accessed, it will return the key from the mapping hash. When
12
+ # the attribute is updated, the value from the mapping hash is written to the
13
+ # database.
14
+ #
15
+ # A class method is also added providing access to the mapping
16
+ # hash, i.e. defining an attribute ++status++ will add a
17
+ # ++statuses++ class method that returns the hash passed to the
18
+ # ++:to++ option.
19
+ #
20
+ # Predicates are also added to each object for each attribute. If you have a key
21
+ # ++open++ in your mapping, your objects will have an ++open?++ method that
22
+ # returns true if the attribute value is ++:open++
23
+ #
24
+ # @example Define a Ticket model with a status column that maps to open or closed
25
+ # map_attribute :status, :to => {:open => 1, :closed => 2}
26
+ #
27
+ # @param [String] attribute the column to map on
28
+ # @param [Hash] options the options for this attribute
29
+ # @option options [Hash] :to The enumeration to use for this attribute. See example above.
9
30
  def map_attribute(attribute, options)
10
- mapping = options[:to]
11
- verify_existence_of attribute
12
- add_accessor_for attribute, mapping
13
- override attribute
31
+ mapping = options[:to]
32
+ verify_existence_of attribute
33
+ add_accessor_for attribute, mapping
34
+ add_predicates_for attribute, mapping.keys
35
+ override attribute
14
36
  end
15
-
37
+
16
38
  private
17
39
  def add_accessor_for(attribute, mapping)
18
40
  class_eval(<<-EVAL)
@@ -22,7 +44,17 @@ module AttributeMapper
22
44
  end
23
45
  end
24
46
  EVAL
25
- end
47
+ end
48
+
49
+ def add_predicates_for(attribute, names)
50
+ names.each do |name|
51
+ class_eval(<<-RUBY)
52
+ def #{name}?
53
+ self.#{attribute} == :#{name}
54
+ end
55
+ RUBY
56
+ end
57
+ end
26
58
 
27
59
  def override(*args)
28
60
  override_getters *args
@@ -60,4 +92,4 @@ module AttributeMapper
60
92
  mapping[check_value] || check_value
61
93
  end
62
94
  end
63
- end
95
+ end
@@ -1,24 +1,4 @@
1
- require 'test/unit'
2
- require 'shoulda'
3
-
4
- require 'active_record'
5
- require 'attribute_mapper'
6
-
7
- ActiveRecord::Base.establish_connection(
8
- :adapter => 'sqlite3',
9
- :database => ':memory:'
10
- )
11
-
12
- ActiveRecord::Schema.define do
13
- create_table :tickets do |table|
14
- table.column :status, :integer
15
- end
16
- end
17
-
18
- # Pseudo model for testing purposes
19
- class Ticket < ActiveRecord::Base
20
- include AttributeMapper
21
- end
1
+ require 'test_helper'
22
2
 
23
3
  class AttributeMapperTest < Test::Unit::TestCase
24
4
 
@@ -47,6 +27,11 @@ class AttributeMapperTest < Test::Unit::TestCase
47
27
  assert_equal :closed, ticket.status
48
28
  assert_equal mapping[:closed], ticket[:status]
49
29
  end
30
+
31
+ should 'define predicates for each attribute' do
32
+ ticket.status = :open
33
+ assert ticket.open?
34
+ end
50
35
 
51
36
  should "allow indifferent access to setters" do
52
37
  assert_nothing_raised do
@@ -0,0 +1,22 @@
1
+ require 'test/unit'
2
+ require 'shoulda'
3
+
4
+ require 'active_record'
5
+ require 'attribute_mapper'
6
+
7
+ ActiveRecord::Base.establish_connection(
8
+ :adapter => 'sqlite3',
9
+ :database => ':memory:'
10
+ )
11
+
12
+ ActiveRecord::Schema.define do
13
+ create_table :tickets do |table|
14
+ table.column :status, :integer
15
+ end
16
+ end
17
+
18
+ # Pseudo model for testing purposes
19
+ class Ticket < ActiveRecord::Base
20
+ include AttributeMapper
21
+ end
22
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: attribute_mapper
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marcel Molina Jr.
@@ -11,7 +11,7 @@ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
13
 
14
- date: 2009-12-22 00:00:00 -06:00
14
+ date: 2010-01-08 00:00:00 -06:00
15
15
  default_executable:
16
16
  dependencies: []
17
17
 
@@ -34,6 +34,7 @@ files:
34
34
  - init.rb
35
35
  - lib/attribute_mapper.rb
36
36
  - test/attribute_mapper_test.rb
37
+ - test/test_helper.rb
37
38
  has_rdoc: true
38
39
  homepage: http://github.com/therealadam/attribute_mapper
39
40
  licenses: []
@@ -64,3 +65,4 @@ specification_version: 3
64
65
  summary: Map symbolic types to primitive types and stash them in a column.
65
66
  test_files:
66
67
  - test/attribute_mapper_test.rb
68
+ - test/test_helper.rb