degu 0.1.3 → 0.2.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
- 0.1.3
1
+ 0.2.0
data/degu.gemspec CHANGED
@@ -2,14 +2,14 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "degu"
5
- s.version = "0.1.3"
5
+ s.version = "0.2.0"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Florian Frank"]
9
- s.date = "2012-07-30"
9
+ s.date = "2013-01-11"
10
10
  s.description = "Library that includes enums, and rails support for enums and bitfield sets."
11
11
  s.email = "dev@pkw.de"
12
- s.extra_rdoc_files = ["README.rdoc", "lib/degu/has_enum.rb", "lib/degu/has_set.rb", "lib/degu/polite.rb", "lib/degu/renum/enumerated_value.rb", "lib/degu/renum/enumerated_value_type_factory.rb", "lib/degu/renum.rb", "lib/degu/rude.rb", "lib/degu/version.rb", "lib/degu.rb"]
12
+ s.extra_rdoc_files = ["README.rdoc", "lib/degu.rb", "lib/degu/has_enum.rb", "lib/degu/has_set.rb", "lib/degu/polite.rb", "lib/degu/renum.rb", "lib/degu/renum/enumerated_value.rb", "lib/degu/renum/enumerated_value_type_factory.rb", "lib/degu/rude.rb", "lib/degu/version.rb"]
13
13
  s.files = [".gitignore", ".travis.yml", "Gemfile", "README.rdoc", "Rakefile", "VERSION", "degu.gemspec", "lib/degu.rb", "lib/degu/has_enum.rb", "lib/degu/has_set.rb", "lib/degu/polite.rb", "lib/degu/renum.rb", "lib/degu/renum/enumerated_value.rb", "lib/degu/renum/enumerated_value_type_factory.rb", "lib/degu/rude.rb", "lib/degu/version.rb", "spec/renum_spec.rb", "spec/spec_helper.rb", "test/has_enum_test.rb", "test/has_set_test.rb", "test/test_helper.rb", "test_helper.rb"]
14
14
  s.homepage = "http://github.com/caroo/degu"
15
15
  s.rdoc_options = ["--title", "Degu - Library for enums and bitfield sets.", "--main", "README.rdoc"]
data/lib/degu/has_enum.rb CHANGED
@@ -32,7 +32,7 @@ module Degu
32
32
 
33
33
  define_method("#{enum_name}") do
34
34
  begin
35
- return self[enum_column].present? ? enum_class.const_get(self[enum_column]) : nil
35
+ return self[enum_column].present? ? enum_class[self[enum_column]] : nil
36
36
  rescue NameError => e
37
37
  return nil
38
38
  end
@@ -51,7 +51,13 @@ module Degu
51
51
  if enum_to_set.to_s.strip.empty?
52
52
  self[enum_column] = nil
53
53
  elsif enum_resolved
54
- self[enum_column] = enum_resolved.name
54
+ column_type = ((column_definition = self.class.columns_hash[enum_column]) and column_definition.type)
55
+ self[enum_column] = case column_type
56
+ when :integer
57
+ enum_resolved.index
58
+ else
59
+ enum_resolved.name
60
+ end
55
61
  else
56
62
  raise ArgumentError, "could not resolve #{enum_to_set.inspect}"
57
63
  end
@@ -64,9 +70,7 @@ module Degu
64
70
 
65
71
  define_method("#{enum_column}_check_for_valid_type_of_enum") do
66
72
  return true if self[enum_column].nil? || self[enum_column].to_s.empty?
67
- begin
68
- enum_class.const_get(self[enum_column])
69
- rescue NameError => e
73
+ unless enum_class[self[enum_column]].present?
70
74
  self.errors.add(enum_column.to_sym, "Wrong type '#{self[enum_column]}' for enum '#{enum_name}'")
71
75
  return false
72
76
  end
data/lib/degu/version.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  module Degu
2
2
  # Degu version
3
- VERSION = '0.1.3'
3
+ VERSION = '0.2.0'
4
4
  VERSION_ARRAY = VERSION.split(/\./).map { |x| x.to_i } # :nodoc:
5
5
  VERSION_MAJOR = VERSION_ARRAY[0] # :nodoc:
6
6
  VERSION_MINOR = VERSION_ARRAY[1] # :nodoc:
@@ -181,4 +181,22 @@ class HasEnumTest < Test::Unit::TestCase
181
181
  assert enum_mixin.callback1_executed
182
182
  end
183
183
 
184
+ def test_should_be_able_to_use_integer_columns_for_enums
185
+ with_integer = ClassWithIntergerColumn.new
186
+ with_integer.product = Product::Titanium
187
+ assert_equal 2, with_integer[:product_type]
188
+
189
+ with_integer[:product_type] = 0
190
+ assert_equal Product::Silver, with_integer.product
191
+ end
192
+
193
+ def test_should_validate_integer_columns
194
+ with_integer = ClassWithIntergerColumn.new
195
+ with_integer.product = Product::Titanium
196
+ assert_equal true, with_integer.valid?
197
+
198
+ with_integer.product_type = 20
199
+ assert_equal false, with_integer.valid?
200
+ end
201
+
184
202
  end
data/test/test_helper.rb CHANGED
@@ -22,6 +22,11 @@ def setup_db
22
22
  t.column :updated_at, :datetime
23
23
  end
24
24
 
25
+ create_table :class_with_interger_columns do |t|
26
+ t.column :title, :string
27
+ t.column :product_type, :integer
28
+ end
29
+
25
30
  create_table :class_with_custom_name_enums do |t|
26
31
  t.column :title, :string
27
32
  t.column :product_enum, :string
@@ -135,4 +140,8 @@ class Itunes < ActiveRecord::Base
135
140
  has_set :music, :enum_class => MusicStyles
136
141
  end
137
142
 
143
+ class ClassWithIntergerColumn < ActiveRecord::Base
144
+ has_enum :product
145
+ end
146
+
138
147
  teardown_db # And drop them right afterwards
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: degu
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-30 00:00:00.000000000 Z
12
+ date: 2013-01-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: gem_hadar
@@ -114,15 +114,15 @@ executables: []
114
114
  extensions: []
115
115
  extra_rdoc_files:
116
116
  - README.rdoc
117
+ - lib/degu.rb
117
118
  - lib/degu/has_enum.rb
118
119
  - lib/degu/has_set.rb
119
120
  - lib/degu/polite.rb
121
+ - lib/degu/renum.rb
120
122
  - lib/degu/renum/enumerated_value.rb
121
123
  - lib/degu/renum/enumerated_value_type_factory.rb
122
- - lib/degu/renum.rb
123
124
  - lib/degu/rude.rb
124
125
  - lib/degu/version.rb
125
- - lib/degu.rb
126
126
  files:
127
127
  - .gitignore
128
128
  - .travis.yml
@@ -164,7 +164,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
164
164
  version: '0'
165
165
  segments:
166
166
  - 0
167
- hash: 1326534228350775604
167
+ hash: -273126236324992353
168
168
  required_rubygems_version: !ruby/object:Gem::Requirement
169
169
  none: false
170
170
  requirements: