has_enum 0.4.0 → 0.5.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/.rspec +3 -0
- data/Gemfile +2 -2
- data/Gemfile.lock +1 -1
- data/README.md +5 -1
- data/VERSION +1 -1
- data/has_enum.gemspec +10 -9
- data/lib/has_enum/active_record.rb +22 -15
- data/spec/has_enum_spec.rb +31 -2
- data/spec/helpers/form_helper_spec.rb +1 -2
- data/spec/ru.yml +8 -0
- data/spec/spec_helper.rb +4 -1
- data/spec/test_model.rb +1 -1
- metadata +10 -9
- data/spec/spec.opts +0 -5
data/.rspec
ADDED
data/Gemfile
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
source "http://rubygems.org"
|
2
2
|
|
3
|
-
gem "rails", "~> 3.0.
|
3
|
+
gem "rails", "~> 3.0.0"
|
4
4
|
|
5
5
|
# Add dependencies to develop your gem here.
|
6
6
|
# Include everything needed to run rake, tests, features, etc.
|
7
7
|
group :development do
|
8
8
|
gem "rspec", ">= 2.2.0"
|
9
|
-
gem "rails", "~> 3.0.
|
9
|
+
gem "rails", "~> 3.0.0"
|
10
10
|
gem "bundler", ">= 1.0.0"
|
11
11
|
gem "jeweler", ">= 1.5.1"
|
12
12
|
gem "sqlite3-ruby", "~> 1.3.2"
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -18,7 +18,7 @@ in your Rails 3 Gemfile. Then do
|
|
18
18
|
Here's example model:
|
19
19
|
class TestModel < ActiveRecord::Base
|
20
20
|
has_enum :category, %w( stuff things misc )
|
21
|
-
has_enum :color , %w( red green blue )
|
21
|
+
has_enum :color , %w( red green blue ) , :scopes => true
|
22
22
|
has_enum :size , %w( small medium large ) , :query_methods => false
|
23
23
|
has_enum :status , [:pending, :failed, :done]
|
24
24
|
end
|
@@ -26,6 +26,10 @@ Query methods are available by default. For example, query methods for color enu
|
|
26
26
|
color_green?
|
27
27
|
color_red?
|
28
28
|
color_blue?
|
29
|
+
If you set *:scopes => true* these scopes will be available:
|
30
|
+
color_green
|
31
|
+
color_red
|
32
|
+
color_blue
|
29
33
|
See [sample usage in specs](https://github.com/openteam/has_enum/blob/master/spec/has_enum_spec.rb).
|
30
34
|
|
31
35
|
### Views
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.5.0
|
data/has_enum.gemspec
CHANGED
@@ -5,17 +5,18 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{has_enum}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.5.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Andreas Korth", "Konstantin Shabanov"]
|
12
|
-
s.date = %q{
|
12
|
+
s.date = %q{2011-01-19}
|
13
13
|
s.email = %q{kes.eclipse@gmail.com}
|
14
14
|
s.extra_rdoc_files = [
|
15
15
|
"LICENSE.txt",
|
16
16
|
"README.md"
|
17
17
|
]
|
18
18
|
s.files = [
|
19
|
+
".rspec",
|
19
20
|
"Gemfile",
|
20
21
|
"Gemfile.lock",
|
21
22
|
"LICENSE.txt",
|
@@ -29,7 +30,7 @@ Gem::Specification.new do |s|
|
|
29
30
|
"spec/has_enum_spec.rb",
|
30
31
|
"spec/helpers/form_helper_spec.rb",
|
31
32
|
"spec/rcov.opts",
|
32
|
-
"spec/
|
33
|
+
"spec/ru.yml",
|
33
34
|
"spec/spec_helper.rb",
|
34
35
|
"spec/test_model.rb"
|
35
36
|
]
|
@@ -50,26 +51,26 @@ Gem::Specification.new do |s|
|
|
50
51
|
s.specification_version = 3
|
51
52
|
|
52
53
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
53
|
-
s.add_runtime_dependency(%q<rails>, ["~> 3.0.
|
54
|
+
s.add_runtime_dependency(%q<rails>, ["~> 3.0.0"])
|
54
55
|
s.add_development_dependency(%q<rspec>, [">= 2.2.0"])
|
55
|
-
s.add_development_dependency(%q<rails>, ["~> 3.0.
|
56
|
+
s.add_development_dependency(%q<rails>, ["~> 3.0.0"])
|
56
57
|
s.add_development_dependency(%q<bundler>, [">= 1.0.0"])
|
57
58
|
s.add_development_dependency(%q<jeweler>, [">= 1.5.1"])
|
58
59
|
s.add_development_dependency(%q<sqlite3-ruby>, ["~> 1.3.2"])
|
59
60
|
s.add_development_dependency(%q<rcov>, [">= 0"])
|
60
61
|
else
|
61
|
-
s.add_dependency(%q<rails>, ["~> 3.0.
|
62
|
+
s.add_dependency(%q<rails>, ["~> 3.0.0"])
|
62
63
|
s.add_dependency(%q<rspec>, [">= 2.2.0"])
|
63
|
-
s.add_dependency(%q<rails>, ["~> 3.0.
|
64
|
+
s.add_dependency(%q<rails>, ["~> 3.0.0"])
|
64
65
|
s.add_dependency(%q<bundler>, [">= 1.0.0"])
|
65
66
|
s.add_dependency(%q<jeweler>, [">= 1.5.1"])
|
66
67
|
s.add_dependency(%q<sqlite3-ruby>, ["~> 1.3.2"])
|
67
68
|
s.add_dependency(%q<rcov>, [">= 0"])
|
68
69
|
end
|
69
70
|
else
|
70
|
-
s.add_dependency(%q<rails>, ["~> 3.0.
|
71
|
+
s.add_dependency(%q<rails>, ["~> 3.0.0"])
|
71
72
|
s.add_dependency(%q<rspec>, [">= 2.2.0"])
|
72
|
-
s.add_dependency(%q<rails>, ["~> 3.0.
|
73
|
+
s.add_dependency(%q<rails>, ["~> 3.0.0"])
|
73
74
|
s.add_dependency(%q<bundler>, [">= 1.0.0"])
|
74
75
|
s.add_dependency(%q<jeweler>, [">= 1.5.1"])
|
75
76
|
s.add_dependency(%q<sqlite3-ruby>, ["~> 1.3.2"])
|
@@ -12,13 +12,17 @@ module HasEnum
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def has_enum(attribute, values, options = {})
|
15
|
+
options.assert_valid_keys(:query_methods, :scopes)
|
15
16
|
enum[attribute] = values.freeze
|
16
17
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
18
|
+
values.each do |val|
|
19
|
+
scope :"#{attribute}_#{val}", where(:"#{attribute}" => "#{val}")
|
20
|
+
end if options[:scopes]
|
21
|
+
|
22
|
+
values.each do |val|
|
23
|
+
define_method(:"#{attribute}_#{val}?") { self.send(attribute) == val }
|
24
|
+
end if options[:query_methods] != false
|
25
|
+
|
22
26
|
|
23
27
|
define_method(:"#{attribute}=") do |value|
|
24
28
|
if value.nil? or values.find{ |val| val == value }
|
@@ -36,25 +40,28 @@ module HasEnum
|
|
36
40
|
end
|
37
41
|
|
38
42
|
define_method "human_#{attribute}" do
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
43
|
+
return nil unless self.send(attribute)
|
44
|
+
|
45
|
+
klass = self.class
|
46
|
+
klass_key = klass.model_name.respond_to?(:i18n_key) ? klass.model_name.i18n_key : klass.name.underscore
|
47
|
+
defaults = ["activerecord.attributes.#{klass_key}.#{attribute}_enum.#{self.send(attribute)}"]
|
48
|
+
|
49
|
+
defaults << self.send(attribute).to_s.humanize
|
50
|
+
I18n.translate(defaults.shift, :default => defaults, :raise => true)
|
46
51
|
end
|
47
52
|
end
|
48
53
|
|
49
54
|
def values_for_select_tag(enum)
|
50
55
|
values = enum(enum)
|
51
56
|
begin
|
52
|
-
|
57
|
+
klass_key = self.model_name.respond_to?(:i18n_key) ? self.model_name.i18n_key : self.name.underscore
|
58
|
+
translation = I18n.translate("activerecord.attributes.#{klass_key}.#{enum}_enum", :raise => true)
|
59
|
+
|
53
60
|
values.map { |value| [translation[value.to_sym], value] }
|
54
61
|
rescue I18n::MissingTranslationData
|
55
|
-
values.map { |value| [value.humanize, value] }
|
62
|
+
values.map { |value| [value.to_s.humanize, value] }
|
56
63
|
end
|
57
64
|
end
|
58
65
|
end
|
59
66
|
end
|
60
|
-
end
|
67
|
+
end
|
data/spec/has_enum_spec.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
1
3
|
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
4
|
|
3
5
|
describe HasEnum::ActiveRecord do
|
@@ -26,6 +28,12 @@ describe HasEnum::ActiveRecord do
|
|
26
28
|
@model.category = 'objects'
|
27
29
|
@model.errors[:category].size.should eql(1)
|
28
30
|
end
|
31
|
+
|
32
|
+
it "should define query methods for enum values" do
|
33
|
+
%w( stuff things misc ).each do |value|
|
34
|
+
@model.should respond_to(:"category_#{value}?")
|
35
|
+
end
|
36
|
+
end
|
29
37
|
end
|
30
38
|
|
31
39
|
describe "color enum" do
|
@@ -49,6 +57,16 @@ describe HasEnum::ActiveRecord do
|
|
49
57
|
@model.should_not be_color_red
|
50
58
|
@model.should_not be_color_blue
|
51
59
|
end
|
60
|
+
|
61
|
+
it "should define a scope for each enum value" do
|
62
|
+
@model.color = 'red'
|
63
|
+
@model.save
|
64
|
+
@model2 = TestModel.new(:color => 'red')
|
65
|
+
@model2.save
|
66
|
+
|
67
|
+
TestModel.color_red.all.should eql TestModel.where(:color => 'red').all
|
68
|
+
TestModel.color_green.all.should be_empty
|
69
|
+
end
|
52
70
|
end
|
53
71
|
|
54
72
|
describe "size enum" do
|
@@ -60,10 +78,15 @@ describe HasEnum::ActiveRecord do
|
|
60
78
|
end
|
61
79
|
|
62
80
|
it "should not define query methods for enum values" do
|
63
|
-
%w(
|
64
|
-
@model.should_not respond_to(
|
81
|
+
%w(small medium large).each do |value|
|
82
|
+
@model.should_not respond_to(:"size_#{value}?")
|
65
83
|
end
|
66
84
|
end
|
85
|
+
|
86
|
+
it "should return humanized translation if not localized" do
|
87
|
+
@model.size = 'medium'
|
88
|
+
@model.human_size.should eql("Medium")
|
89
|
+
end
|
67
90
|
end
|
68
91
|
|
69
92
|
describe "status enum" do
|
@@ -81,5 +104,11 @@ describe HasEnum::ActiveRecord do
|
|
81
104
|
@model.status = nil
|
82
105
|
@model.status.should be_nil
|
83
106
|
end
|
107
|
+
|
108
|
+
it "should translate values for the enum" do
|
109
|
+
I18n.reload!
|
110
|
+
@model.status = :pending
|
111
|
+
@model.human_status.should eql("На рассмотрении")
|
112
|
+
end
|
84
113
|
end
|
85
114
|
end
|
data/spec/ru.yml
ADDED
data/spec/spec_helper.rb
CHANGED
@@ -23,4 +23,7 @@ ActiveRecord::Schema.define(:version => 0) do
|
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
|
-
|
26
|
+
I18n.load_path << 'spec/ru.yml'
|
27
|
+
I18n.default_locale = :ru
|
28
|
+
|
29
|
+
require File.dirname(__FILE__) + "/test_model" unless defined?(Model)
|
data/spec/test_model.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
class TestModel < ActiveRecord::Base
|
2
2
|
has_enum :category, %w( stuff things misc )
|
3
|
-
has_enum :color , %w( red green blue )
|
3
|
+
has_enum :color , %w( red green blue ) , :scopes => true
|
4
4
|
has_enum :size , %w( small medium large ) , :query_methods => false
|
5
5
|
has_enum :status , [:pending, :failed, :done]
|
6
6
|
end
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
7
|
+
- 5
|
8
8
|
- 0
|
9
|
-
version: 0.
|
9
|
+
version: 0.5.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Andreas Korth
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date:
|
18
|
+
date: 2011-01-19 00:00:00 +06:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -28,8 +28,8 @@ dependencies:
|
|
28
28
|
segments:
|
29
29
|
- 3
|
30
30
|
- 0
|
31
|
-
-
|
32
|
-
version: 3.0.
|
31
|
+
- 0
|
32
|
+
version: 3.0.0
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
35
|
version_requirements: *id001
|
@@ -58,8 +58,8 @@ dependencies:
|
|
58
58
|
segments:
|
59
59
|
- 3
|
60
60
|
- 0
|
61
|
-
-
|
62
|
-
version: 3.0.
|
61
|
+
- 0
|
62
|
+
version: 3.0.0
|
63
63
|
type: :development
|
64
64
|
prerelease: false
|
65
65
|
version_requirements: *id003
|
@@ -131,6 +131,7 @@ extra_rdoc_files:
|
|
131
131
|
- LICENSE.txt
|
132
132
|
- README.md
|
133
133
|
files:
|
134
|
+
- .rspec
|
134
135
|
- Gemfile
|
135
136
|
- Gemfile.lock
|
136
137
|
- LICENSE.txt
|
@@ -144,7 +145,7 @@ files:
|
|
144
145
|
- spec/has_enum_spec.rb
|
145
146
|
- spec/helpers/form_helper_spec.rb
|
146
147
|
- spec/rcov.opts
|
147
|
-
- spec/
|
148
|
+
- spec/ru.yml
|
148
149
|
- spec/spec_helper.rb
|
149
150
|
- spec/test_model.rb
|
150
151
|
has_rdoc: true
|
@@ -161,7 +162,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
161
162
|
requirements:
|
162
163
|
- - ">="
|
163
164
|
- !ruby/object:Gem::Version
|
164
|
-
hash:
|
165
|
+
hash: -956477031175016980
|
165
166
|
segments:
|
166
167
|
- 0
|
167
168
|
version: "0"
|