enum_attr 0.0.7 → 1.0.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/.gitignore +1 -0
- data/Gemfile +8 -1
- data/Rakefile +9 -1
- data/VERSION +1 -1
- data/enum_attr.gemspec +3 -7
- data/lib/enum_attr.rb +2 -71
- data/spec/enum_spec.rb +49 -17
- data/spec/spec_helper.rb +4 -25
- metadata +25 -41
- data/enum_attr_test.sqlite3 +0 -0
- data/spec/database.yml +0 -4
data/.gitignore
CHANGED
data/Gemfile
CHANGED
data/Rakefile
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require "rubygems"
|
2
|
-
require 'rake'
|
2
|
+
require 'rake'
|
3
|
+
require 'rspec/core/rake_task'
|
3
4
|
|
4
5
|
begin
|
5
6
|
require 'jeweler'
|
@@ -15,4 +16,11 @@ begin
|
|
15
16
|
|
16
17
|
rescue LoadError
|
17
18
|
puts "Jeweler not available. Install it with: gem install jeweler"
|
19
|
+
end
|
20
|
+
|
21
|
+
task :default => :spec
|
22
|
+
|
23
|
+
RSpec::Core::RakeTask.new(:spec) do |t|
|
24
|
+
t.pattern = Dir.glob('spec/**/*_spec.rb')
|
25
|
+
t.rspec_opts = '--format progress -c'
|
18
26
|
end
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0
|
1
|
+
1.0.0
|
data/enum_attr.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{enum_attr}
|
8
|
-
s.version = "0.0
|
8
|
+
s.version = "1.0.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["qichunren"]
|
12
|
-
s.date = %q{
|
12
|
+
s.date = %q{2012-09-05}
|
13
13
|
s.description = %q{A Rails plugin which brings easy-to-use enum-like functionality to ActiveRecord models (now compatible with rails 3, ruby 1.9 and jruby). .}
|
14
14
|
s.email = %q{whyruby@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -23,13 +23,9 @@ Gem::Specification.new do |s|
|
|
23
23
|
"Rakefile",
|
24
24
|
"VERSION",
|
25
25
|
"enum_attr.gemspec",
|
26
|
-
"enum_attr_test.sqlite3",
|
27
26
|
"init.rb",
|
28
27
|
"lib/enum_attr.rb",
|
29
|
-
"rails/init.rb"
|
30
|
-
"spec/database.yml",
|
31
|
-
"spec/enum_spec.rb",
|
32
|
-
"spec/spec_helper.rb"
|
28
|
+
"rails/init.rb"
|
33
29
|
]
|
34
30
|
s.homepage = %q{https://github.com/qichunren/enum_attr}
|
35
31
|
s.rdoc_options = ["--charset=UTF-8"]
|
data/lib/enum_attr.rb
CHANGED
@@ -1,71 +1,2 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
module Mixin
|
4
|
-
# for model Contract:
|
5
|
-
# enum_attr :status, [['新建', 0, "origin"], ['整理中', 1, "collecting"], ["已上传", 2, "uploaded"]]
|
6
|
-
# It generates these code for you:
|
7
|
-
# # status const 状态常量
|
8
|
-
# STATUS_ORIGIN = 0; STATUS_COLLECTING = 2; STATUS_UPLOADED = 3
|
9
|
-
#
|
10
|
-
# # scopes for column status
|
11
|
-
# scope :status_origin, where("status=0")
|
12
|
-
# scope :status_collection, where("status=1")
|
13
|
-
# scope :status_uploaded, where("status=2")
|
14
|
-
#
|
15
|
-
# # for view select
|
16
|
-
# ENUMS_STATUS = [["新建", 0], ["整理中", 1], ["已上传", 2]]
|
17
|
-
|
18
|
-
# # validates 包含验证
|
19
|
-
# validates_inclusion_of "status", :in => [1, 2, 3], :allow_nil => true
|
20
|
-
#
|
21
|
-
# # column_name instant method
|
22
|
-
# def status_origin
|
23
|
-
# # return status name by it's status value
|
24
|
-
# end
|
25
|
-
#
|
26
|
-
def enum_attr(attr, enums)
|
27
|
-
raise "The secone param must be a array!" unless enums.is_a? Array
|
28
|
-
|
29
|
-
attr = attr.to_s
|
30
|
-
|
31
|
-
enums.each do |enum|
|
32
|
-
const_set("#{attr.upcase}_#{enum[2].upcase}", enum[1] )
|
33
|
-
|
34
|
-
# TODO: how to judge if there is active_record 3 gem here?
|
35
|
-
scope "#{attr}_#{enum[2]}".to_sym, where("#{attr}=#{enum[1]}")
|
36
|
-
|
37
|
-
# # TODO define_method such as "stauts_origin?"
|
38
|
-
# why does this get error result?
|
39
|
-
# define_method "#{attr}_#{enum[2]}?" do
|
40
|
-
# attr == enum[1]
|
41
|
-
# end
|
42
|
-
class_eval(%Q{
|
43
|
-
def #{attr}_#{enum[2]}?
|
44
|
-
#{attr} == #{enum[1]}
|
45
|
-
end
|
46
|
-
})
|
47
|
-
|
48
|
-
end # end: enums.each
|
49
|
-
|
50
|
-
self.class_eval(%Q{
|
51
|
-
|
52
|
-
ENUMS_#{attr.upcase} = enums.collect{|item| [item[0], item[1]]}
|
53
|
-
|
54
|
-
validates_inclusion_of attr, :in => enums.map{|e| e[1].to_i}, :allow_nil => true
|
55
|
-
|
56
|
-
def self.#{attr}_name_by(arg)
|
57
|
-
ENUMS_#{attr.upcase}.find{|option| option[1] == arg }[0] rescue ""
|
58
|
-
end
|
59
|
-
|
60
|
-
def #{attr}_name
|
61
|
-
ENUMS_#{attr.upcase}.find{|option| option[1] == #{attr}}[0] unless #{attr}.nil?
|
62
|
-
end
|
63
|
-
|
64
|
-
})
|
65
|
-
end
|
66
|
-
|
67
|
-
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
Object.send :include, EnumAttr::Mixin
|
1
|
+
require "enum_attr_base"
|
2
|
+
require "enum_attr_for_active_record"
|
data/spec/enum_spec.rb
CHANGED
@@ -1,34 +1,66 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require File.dirname(__FILE__) + "/spec_helper"
|
1
|
+
# encoding: utf-8
|
2
|
+
require File.dirname(__FILE__) + "/spec_helper"
|
3
|
+
require "active_record"
|
4
|
+
|
5
|
+
|
6
|
+
dbconfig = YAML::load(File.open(File.dirname(__FILE__) + "/database.yml"))
|
7
|
+
ActiveRecord::Base.establish_connection(dbconfig)
|
8
|
+
ActiveRecord::Base.logger = Logger.new(STDOUT)
|
9
|
+
|
10
|
+
#migrations
|
11
|
+
class CreateAllTables < ActiveRecord::Migration
|
12
|
+
def self.up
|
13
|
+
create_table(:contracts) do |t|
|
14
|
+
t.string :name
|
15
|
+
t.integer :status
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
RSpec.configure do |config|
|
21
|
+
config.before :all do
|
22
|
+
CreateAllTables.up unless ActiveRecord::Base.connection.table_exists? 'contracts'
|
23
|
+
end
|
24
|
+
end
|
3
25
|
|
4
26
|
|
5
27
|
class Contract < ActiveRecord::Base
|
6
28
|
enum_attr :status, [['新建', 0, "origin"], ['整理中', 1, "collecting"], ["已上传", 2, "uploaded"]]
|
7
29
|
end
|
8
30
|
|
9
|
-
describe "EnumAttr" do
|
31
|
+
describe "EnumAttr" do
|
10
32
|
after(:each) do
|
11
33
|
Contract.delete_all
|
12
34
|
end
|
13
|
-
|
35
|
+
|
36
|
+
it "should get superclass" do
|
37
|
+
Contract.superclass.should == ActiveRecord::Base
|
38
|
+
end
|
39
|
+
|
14
40
|
it "should get const" do
|
15
41
|
Contract::STATUS_ORIGIN.should == 0
|
16
42
|
Contract::STATUS_COLLECTING.should == 1
|
17
43
|
Contract::STATUS_UPLOADED.should == 2
|
18
44
|
end
|
19
|
-
|
20
|
-
it "should get scope" do
|
45
|
+
|
46
|
+
it "should get scope" do
|
21
47
|
Contract.should respond_to(:status_origin)
|
22
48
|
Contract.should respond_to(:status_collecting)
|
23
49
|
Contract.should respond_to(:status_uploaded)
|
24
|
-
Contract.create(:name => "contract 1", :status => 0)
|
25
|
-
Contract.create(:name => "contract 2", :status => 1)
|
26
|
-
Contract.create(:name => "contract 3", :status => 2)
|
27
|
-
Contract.create(:name => "contract 4", :status => 1)
|
50
|
+
Contract.create!(:name => "contract 1", :status => 0)
|
51
|
+
Contract.create!(:name => "contract 2", :status => 1)
|
52
|
+
Contract.create!(:name => "contract 3", :status => 2)
|
53
|
+
Contract.create!(:name => "contract 4", :status => 1)
|
28
54
|
Contract.status_origin.first.name.should == "contract 1"
|
29
|
-
Contract.status_collecting.count.should == 2
|
55
|
+
Contract.status_collecting.count.should == 2
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should return origanl value if not matched" do
|
59
|
+
contract_with_error_status = Contract.new(:name => "contract with no correct status value", :status => 100000)
|
60
|
+
contract_with_error_status.save(:validate => false)
|
61
|
+
Contract.first.status_name.should == ""
|
30
62
|
end
|
31
|
-
|
63
|
+
|
32
64
|
it "should get status_#name#?" do
|
33
65
|
contract = Contract.create(:name => "测试合同", :status => 0)
|
34
66
|
contract.should respond_to(:status_origin?)
|
@@ -37,21 +69,21 @@ describe "EnumAttr" do
|
|
37
69
|
contract.status_origin?.should == true
|
38
70
|
contract.status_uploaded?.should == false
|
39
71
|
end
|
40
|
-
|
72
|
+
|
41
73
|
it "should get const array" do
|
42
74
|
Contract::ENUMS_STATUS.should == [['新建', 0], ['整理中', 1], ["已上传", 2]]
|
43
75
|
end
|
44
|
-
|
76
|
+
|
45
77
|
it "should get status_name" do
|
46
78
|
contract = Contract.create(:name => "测试合同", :status => 0)
|
47
79
|
contract.status_name.should == "新建"
|
48
80
|
end
|
49
|
-
|
50
|
-
it "should get status_name_by" do
|
81
|
+
|
82
|
+
it "should get status_name_by" do
|
51
83
|
Contract.status_name_by(0).should == "新建"
|
52
84
|
Contract.status_name_by(1).should == "整理中"
|
53
85
|
Contract.status_name_by(2).should == "已上传"
|
54
|
-
Contract.status_name_by(3).should == ""
|
86
|
+
Contract.status_name_by(3).should == ""
|
55
87
|
end
|
56
88
|
|
57
89
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,27 +1,6 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
require '
|
3
|
-
require '
|
4
|
-
require '
|
5
|
-
require File.expand_path("../../lib/enum_attr", __FILE__)
|
2
|
+
require 'yaml'
|
3
|
+
require 'rspec'
|
4
|
+
require 'logger'
|
6
5
|
|
7
|
-
|
8
|
-
ActiveRecord::Base.establish_connection(dbconfig)
|
9
|
-
|
10
|
-
#migrations
|
11
|
-
class CreateAllTables < ActiveRecord::Migration
|
12
|
-
def self.up
|
13
|
-
create_table(:contracts) do |t|
|
14
|
-
t.string :name
|
15
|
-
t.integer :status
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
RSpec.configure do |config|
|
21
|
-
config.before :all do
|
22
|
-
# ActiveRecord::Base.connection.execute
|
23
|
-
# 'CREATE TABLE "users" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255))'
|
24
|
-
# unless ActiveRecord::Base.connection.table_exists? 'users'
|
25
|
-
CreateAllTables.up unless ActiveRecord::Base.connection.table_exists? 'contracts'
|
26
|
-
end
|
27
|
-
end
|
6
|
+
require File.expand_path("../../lib/enum_attr", __FILE__)
|
metadata
CHANGED
@@ -1,32 +1,24 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: enum_attr
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
6
|
-
- 0
|
7
|
-
- 0
|
8
|
-
- 7
|
9
|
-
version: 0.0.7
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
prerelease:
|
10
6
|
platform: ruby
|
11
|
-
authors:
|
7
|
+
authors:
|
12
8
|
- qichunren
|
13
9
|
autorequire:
|
14
10
|
bindir: bin
|
15
11
|
cert_chain: []
|
16
|
-
|
17
|
-
date: 2011-04-22 00:00:00 +08:00
|
18
|
-
default_executable:
|
12
|
+
date: 2012-09-05 00:00:00.000000000 Z
|
19
13
|
dependencies: []
|
20
|
-
|
21
|
-
|
14
|
+
description: A Rails plugin which brings easy-to-use enum-like functionality to ActiveRecord
|
15
|
+
models (now compatible with rails 3, ruby 1.9 and jruby). .
|
22
16
|
email: whyruby@gmail.com
|
23
17
|
executables: []
|
24
|
-
|
25
18
|
extensions: []
|
26
|
-
|
27
|
-
extra_rdoc_files:
|
19
|
+
extra_rdoc_files:
|
28
20
|
- README.rdoc
|
29
|
-
files:
|
21
|
+
files:
|
30
22
|
- .gitignore
|
31
23
|
- Gemfile
|
32
24
|
- MIT-LICENSE
|
@@ -34,45 +26,37 @@ files:
|
|
34
26
|
- Rakefile
|
35
27
|
- VERSION
|
36
28
|
- enum_attr.gemspec
|
37
|
-
- enum_attr_test.sqlite3
|
38
29
|
- init.rb
|
39
30
|
- lib/enum_attr.rb
|
40
31
|
- rails/init.rb
|
41
|
-
- spec/database.yml
|
42
32
|
- spec/enum_spec.rb
|
43
33
|
- spec/spec_helper.rb
|
44
|
-
has_rdoc: true
|
45
34
|
homepage: https://github.com/qichunren/enum_attr
|
46
35
|
licenses: []
|
47
|
-
|
48
36
|
post_install_message:
|
49
|
-
rdoc_options:
|
37
|
+
rdoc_options:
|
50
38
|
- --charset=UTF-8
|
51
|
-
require_paths:
|
39
|
+
require_paths:
|
52
40
|
- lib
|
53
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
41
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
54
42
|
none: false
|
55
|
-
requirements:
|
56
|
-
- -
|
57
|
-
- !ruby/object:Gem::Version
|
58
|
-
|
59
|
-
|
60
|
-
version: "0"
|
61
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - ! '>='
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
47
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
62
48
|
none: false
|
63
|
-
requirements:
|
64
|
-
- -
|
65
|
-
- !ruby/object:Gem::Version
|
66
|
-
|
67
|
-
- 0
|
68
|
-
version: "0"
|
49
|
+
requirements:
|
50
|
+
- - ! '>='
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '0'
|
69
53
|
requirements: []
|
70
|
-
|
71
54
|
rubyforge_project:
|
72
|
-
rubygems_version: 1.
|
55
|
+
rubygems_version: 1.8.24
|
73
56
|
signing_key:
|
74
57
|
specification_version: 3
|
75
58
|
summary: enum_attr is a Ruby gem to manage enum column for active_record.
|
76
|
-
test_files:
|
59
|
+
test_files:
|
77
60
|
- spec/enum_spec.rb
|
78
61
|
- spec/spec_helper.rb
|
62
|
+
has_rdoc:
|
data/enum_attr_test.sqlite3
DELETED
Binary file
|
data/spec/database.yml
DELETED