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 +1 -1
- data/degu.gemspec +3 -3
- data/lib/degu/has_enum.rb +9 -5
- data/lib/degu/version.rb +1 -1
- data/test/has_enum_test.rb +18 -0
- data/test/test_helper.rb +9 -0
- metadata +5 -5
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
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.
|
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 = "
|
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
|
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
|
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]
|
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
|
-
|
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
data/test/has_enum_test.rb
CHANGED
@@ -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.
|
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:
|
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:
|
167
|
+
hash: -273126236324992353
|
168
168
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
169
169
|
none: false
|
170
170
|
requirements:
|