enumlogic 1.0.1 → 1.0.2
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/Rakefile +1 -0
- data/VERSION.yml +3 -2
- data/enumlogic.gemspec +6 -4
- data/init.rb +3 -0
- data/lib/enumlogic.rb +10 -8
- data/spec/enumlogic_spec.rb +31 -2
- data/spec/spec_helper.rb +7 -2
- metadata +3 -2
data/Rakefile
CHANGED
@@ -13,6 +13,7 @@ begin
|
|
13
13
|
gem.rubyforge_project = "enumlogic"
|
14
14
|
gem.add_development_dependency "rspec"
|
15
15
|
end
|
16
|
+
Jeweler::GemcutterTasks.new
|
16
17
|
Jeweler::RubyforgeTasks.new
|
17
18
|
rescue LoadError
|
18
19
|
puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
|
data/VERSION.yml
CHANGED
data/enumlogic.gemspec
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{enumlogic}
|
8
|
-
s.version = "1.0.
|
8
|
+
s.version = "1.0.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["binarylogic"]
|
12
|
-
s.date = %q{2009-
|
12
|
+
s.date = %q{2009-11-18}
|
13
13
|
s.description = %q{Adds enumerations to your models}
|
14
14
|
s.email = %q{bjohnson@binarylogic.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -25,6 +25,7 @@ Gem::Specification.new do |s|
|
|
25
25
|
"Rakefile",
|
26
26
|
"VERSION.yml",
|
27
27
|
"enumlogic.gemspec",
|
28
|
+
"init.rb",
|
28
29
|
"lib/enumlogic.rb",
|
29
30
|
"spec/enumlogic_spec.rb",
|
30
31
|
"spec/spec_helper.rb"
|
@@ -53,3 +54,4 @@ Gem::Specification.new do |s|
|
|
53
54
|
s.add_dependency(%q<rspec>, [">= 0"])
|
54
55
|
end
|
55
56
|
end
|
57
|
+
|
data/init.rb
ADDED
data/lib/enumlogic.rb
CHANGED
@@ -11,14 +11,15 @@ module Enumlogic
|
|
11
11
|
#
|
12
12
|
# You can now do the following:
|
13
13
|
#
|
14
|
-
# Computer::KINDS # passes back
|
14
|
+
# Computer::KINDS # passes back the defined enum keys as array
|
15
15
|
# Computer.kind_options # gives you a friendly hash that you can easily pass into the select helper for forms
|
16
16
|
# Computer.new(:kind => "unknown").valid? # false, automatically validates inclusion of the enum field
|
17
17
|
#
|
18
18
|
# c = Computer.new(:kind => "apple")
|
19
19
|
# c.apple? # true
|
20
|
-
# c.
|
21
|
-
# c.
|
20
|
+
# c.kind_key # :apple
|
21
|
+
# c.kind_text # "apple" or "Apple" if you gave a hash with a user friendly text value
|
22
|
+
# c.enum?(:kind) # true
|
22
23
|
def enum(field, values, options = {})
|
23
24
|
values_hash = if values.is_a?(Array)
|
24
25
|
hash = {}
|
@@ -30,7 +31,6 @@ module Enumlogic
|
|
30
31
|
|
31
32
|
values_array = values.is_a?(Hash) ? values.keys : values
|
32
33
|
|
33
|
-
message = options[:message] || "#{field} is not included in the list"
|
34
34
|
constant_name = options[:constant] || field.to_s.pluralize.upcase
|
35
35
|
const_set constant_name, values_array unless const_defined?(constant_name)
|
36
36
|
|
@@ -47,7 +47,7 @@ module Enumlogic
|
|
47
47
|
define_method("#{field}_text") do
|
48
48
|
value = send(field)
|
49
49
|
return nil if value.nil?
|
50
|
-
values_hash
|
50
|
+
values_hash[value]
|
51
51
|
end
|
52
52
|
|
53
53
|
values_array.each do |value|
|
@@ -58,8 +58,10 @@ module Enumlogic
|
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
61
|
-
validates_inclusion_of field, :in => values_array, :message => message, :allow_nil => options[:allow_nil]
|
61
|
+
validates_inclusion_of field, :in => values_array, :message => options[:message], :allow_nil => options[:allow_nil], :if => options[:if]
|
62
62
|
end
|
63
|
-
end
|
64
63
|
|
65
|
-
|
64
|
+
def enum?(name)
|
65
|
+
method_defined?("#{name}_key")
|
66
|
+
end
|
67
|
+
end
|
data/spec/enumlogic_spec.rb
CHANGED
@@ -49,6 +49,12 @@ describe "Enumlogic" do
|
|
49
49
|
c = Computer.new(:kind => "hp")
|
50
50
|
c.kind_text.should == "HP"
|
51
51
|
end
|
52
|
+
|
53
|
+
it "should create text method which results nil for wrong key" do
|
54
|
+
Computer.enum :kind, {"apple" => "Apple", "dell" => "Dell", "hp" => "HP"}
|
55
|
+
c = Computer.new :kind => 'ibm'
|
56
|
+
c.kind_text.should == nil
|
57
|
+
end
|
52
58
|
|
53
59
|
it "should create boolean methods" do
|
54
60
|
Computer.enum :kind, ["apple", "dell", "hp"]
|
@@ -67,7 +73,7 @@ describe "Enumlogic" do
|
|
67
73
|
c = Computer.new
|
68
74
|
c.kind = "blah"
|
69
75
|
c.should_not be_valid
|
70
|
-
c.errors[:kind].should include("
|
76
|
+
c.errors[:kind].should include("is not included in the list")
|
71
77
|
end
|
72
78
|
|
73
79
|
it "should allow nil during validations" do
|
@@ -75,4 +81,27 @@ describe "Enumlogic" do
|
|
75
81
|
c = Computer.new
|
76
82
|
c.should be_valid
|
77
83
|
end
|
78
|
-
|
84
|
+
|
85
|
+
it "should implement the if option during validation" do
|
86
|
+
Computer.enum :kind, ["apple", "dell", "hp"], :if => :return_false
|
87
|
+
c = Computer.new
|
88
|
+
c.should be_valid
|
89
|
+
end
|
90
|
+
|
91
|
+
it "should be included in the list" do
|
92
|
+
Computer.enum :kind, ["apple", "dell", "hp", "custom made"]
|
93
|
+
c = Computer.new(:kind => "custom made")
|
94
|
+
c.should be_valid
|
95
|
+
end
|
96
|
+
|
97
|
+
it "should find a defined enum" do
|
98
|
+
Computer.enum :kind, ["apple", "dell", "hp"]
|
99
|
+
|
100
|
+
Computer.enum?(:kind).should == true
|
101
|
+
Computer.enum?(:some_other_field).should == false
|
102
|
+
end
|
103
|
+
|
104
|
+
it "should check for defined enums if there isn't any" do
|
105
|
+
Computer.enum?(:kind).should == false
|
106
|
+
end
|
107
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -3,9 +3,10 @@ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
|
3
3
|
require 'spec'
|
4
4
|
require 'spec/autorun'
|
5
5
|
require 'rubygems'
|
6
|
-
require '
|
6
|
+
require 'active_record'
|
7
|
+
require "#{File.dirname(__FILE__)}/../init"
|
7
8
|
|
8
|
-
ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :
|
9
|
+
ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
|
9
10
|
ActiveRecord::Base.configurations = true
|
10
11
|
|
11
12
|
ActiveRecord::Schema.verbose = false
|
@@ -18,6 +19,10 @@ end
|
|
18
19
|
Spec::Runner.configure do |config|
|
19
20
|
config.before(:each) do
|
20
21
|
class Computer < ActiveRecord::Base
|
22
|
+
private
|
23
|
+
def return_false
|
24
|
+
false
|
25
|
+
end
|
21
26
|
end
|
22
27
|
end
|
23
28
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: enumlogic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- binarylogic
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-11-18 00:00:00 -05:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -40,6 +40,7 @@ files:
|
|
40
40
|
- Rakefile
|
41
41
|
- VERSION.yml
|
42
42
|
- enumlogic.gemspec
|
43
|
+
- init.rb
|
43
44
|
- lib/enumlogic.rb
|
44
45
|
- spec/enumlogic_spec.rb
|
45
46
|
- spec/spec_helper.rb
|