coded_options 0.2.7 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +5 -0
- data/Gemfile +1 -7
- data/README.md +2 -2
- data/Rakefile +1 -17
- data/coded_options.gemspec +10 -18
- data/lib/coded_options/base.rb +38 -26
- data/lib/coded_options/version.rb +1 -1
- data/lib/rails/coded_options.rb +1 -1
- data/spec/coded_options_spec.rb +20 -4
- metadata +28 -44
data/.gitignore
ADDED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -25,7 +25,7 @@ a plain Ruby object as follows:
|
|
25
25
|
require "coded_options"
|
26
26
|
|
27
27
|
class Foo
|
28
|
-
|
28
|
+
include CodedOptions
|
29
29
|
attr_accessor :state_id, :type_id
|
30
30
|
coded_options :state => %w(active closed), :type => %w(stupid awesome)
|
31
31
|
end
|
@@ -45,7 +45,7 @@ numerically by the keys of the hash.
|
|
45
45
|
|
46
46
|
If you want to use this with MongoDB, just add
|
47
47
|
|
48
|
-
|
48
|
+
include CodedOptions
|
49
49
|
|
50
50
|
to your model.
|
51
51
|
|
data/Rakefile
CHANGED
@@ -1,18 +1,2 @@
|
|
1
1
|
require "bundler"
|
2
|
-
Bundler.
|
3
|
-
|
4
|
-
require "rspec"
|
5
|
-
require "rspec/core/rake_task"
|
6
|
-
|
7
|
-
Rspec::Core::RakeTask.new(:spec)
|
8
|
-
|
9
|
-
gemspec = eval(File.read(File.join(Dir.pwd, "coded_options.gemspec")))
|
10
|
-
|
11
|
-
task :build => "#{gemspec.full_name}.gem"
|
12
|
-
|
13
|
-
task :test => :spec
|
14
|
-
|
15
|
-
file "#{gemspec.full_name}.gem" => gemspec.files + ["coded_options.gemspec"] do
|
16
|
-
system "gem build coded_options.gemspec"
|
17
|
-
system "gem install coded_options-#{CodedOptions::VERSION}.gem"
|
18
|
-
end
|
2
|
+
Bundler::GemHelper.install_tasks
|
data/coded_options.gemspec
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "coded_options/version"
|
2
4
|
|
3
5
|
Gem::Specification.new do |s|
|
4
6
|
s.name = "coded_options"
|
@@ -10,23 +12,13 @@ Gem::Specification.new do |s|
|
|
10
12
|
s.summary = "Making options easier"
|
11
13
|
s.description = "A gem for making fields with coded values easier"
|
12
14
|
|
13
|
-
s.
|
15
|
+
s.rubyforge_project = "coded_options"
|
14
16
|
|
15
|
-
|
16
|
-
s.
|
17
|
+
s.files = `git ls-files`.split("\n")
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
|
+
s.require_paths = ["lib"]
|
17
21
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
# If you need to check in files that aren't .rb files, add them here
|
22
|
-
s.files = Dir["{lib}/**/*.rb", "spec/*.rb", "LICENSE", "*.md", "Gemfile", "Rakefile", ".gemtest", "coded_options.gemspec"]
|
23
|
-
s.require_path = 'lib'
|
24
|
-
|
25
|
-
# If you need an executable, add it here
|
26
|
-
# s.executables = ["coded_options"]
|
27
|
-
|
28
|
-
# If you have C extensions, uncomment this line
|
29
|
-
# s.extensions = "ext/extconf.rb"
|
30
|
-
|
31
|
-
s.add_bundler_dependencies
|
22
|
+
s.add_development_dependency "rspec", "~>2.0.0"
|
23
|
+
s.add_development_dependency "rr"
|
32
24
|
end
|
data/lib/coded_options/base.rb
CHANGED
@@ -1,38 +1,50 @@
|
|
1
1
|
module CodedOptions
|
2
2
|
|
3
|
-
def
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
3
|
+
def self.included base
|
4
|
+
base.send :extend, ClassMethods
|
5
|
+
end
|
6
|
+
|
7
|
+
module PrivateClassMethods
|
8
|
+
attr_accessor :initial_value
|
9
|
+
@initial_value = 0
|
9
10
|
end
|
11
|
+
extend PrivateClassMethods
|
12
|
+
|
13
|
+
module ClassMethods
|
14
|
+
def coded_options *args
|
15
|
+
case args.length
|
16
|
+
when 1 then args.first.each {|name, values| setup_coded_options name, values }
|
17
|
+
when 2 then setup_coded_options *args
|
18
|
+
else raise("Error in coded_options syntax, expecting name and values or a hash, got #{args.inspect}")
|
19
|
+
end
|
20
|
+
end
|
10
21
|
|
11
|
-
|
22
|
+
private
|
12
23
|
|
13
|
-
|
14
|
-
|
24
|
+
def setup_coded_options singular_name, values
|
25
|
+
plural_name = singular_name.to_s.pluralize
|
15
26
|
|
16
|
-
|
17
|
-
|
27
|
+
const_set plural_name.upcase, values
|
28
|
+
const_set "#{singular_name}_options".upcase, to_options(values)
|
18
29
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
30
|
+
class_eval <<-EOT, __FILE__, (__LINE__+1)
|
31
|
+
def #{singular_name} # def state
|
32
|
+
return unless #{singular_name}_id # return unless state_id
|
33
|
+
#{plural_name.upcase}[#{singular_name}_id.to_i] # STATES[state_id.to_i]
|
34
|
+
end # end
|
24
35
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
36
|
+
def #{singular_name}= new_value # def state= new_value
|
37
|
+
send :#{singular_name}_id=, #{plural_name.upcase}.index(new_value) # send :state_id=, STATES.index(new_value)
|
38
|
+
end # end
|
39
|
+
EOT
|
40
|
+
end
|
30
41
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
42
|
+
def to_options values
|
43
|
+
if values.is_a? Hash
|
44
|
+
values.sort{|a,b| a.first <=> b.first}.map{|a| a.reverse}
|
45
|
+
else
|
46
|
+
values.zip((CodedOptions.initial_value..values.length).to_a)
|
47
|
+
end
|
36
48
|
end
|
37
49
|
end
|
38
50
|
|
data/lib/rails/coded_options.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module CodedOptions
|
2
2
|
class Railtie < Rails::Railtie
|
3
3
|
initializer "coded_options.initialize" do |app|
|
4
|
-
ActiveRecord::Base.send :
|
4
|
+
ActiveRecord::Base.send :include, CodedOptions if defined?(ActiveRecord)
|
5
5
|
end
|
6
6
|
end
|
7
7
|
end
|
data/spec/coded_options_spec.rb
CHANGED
@@ -3,10 +3,26 @@ require "active_support/inflector"
|
|
3
3
|
|
4
4
|
describe CodedOptions do
|
5
5
|
|
6
|
+
describe "changing initial value" do
|
7
|
+
it "should use the initial value given" do
|
8
|
+
CodedOptions.initial_value = 1
|
9
|
+
CodedOptions.initial_value.should == 1
|
10
|
+
|
11
|
+
class Foo
|
12
|
+
include CodedOptions
|
13
|
+
attr_accessor :state_id
|
14
|
+
coded_options :state, %w(initial active closed)
|
15
|
+
end
|
16
|
+
|
17
|
+
Foo::STATE_OPTIONS.should == [["initial", 1], ["active", 2], ["closed", 3]]
|
18
|
+
CodedOptions.initial_value = 0
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
6
22
|
describe "allow setting the *_id field via the value" do
|
7
23
|
it "should perform a lookup and set the proper id" do
|
8
24
|
class Foo
|
9
|
-
|
25
|
+
include CodedOptions
|
10
26
|
attr_accessor :state_id
|
11
27
|
coded_options :state, %w(initial active closed)
|
12
28
|
end
|
@@ -22,7 +38,7 @@ describe CodedOptions do
|
|
22
38
|
|
23
39
|
before(:all) do
|
24
40
|
class Foo
|
25
|
-
|
41
|
+
include CodedOptions
|
26
42
|
coded_options :state, %w(initial active closed)
|
27
43
|
end
|
28
44
|
|
@@ -55,7 +71,7 @@ describe CodedOptions do
|
|
55
71
|
class Bar
|
56
72
|
attr_accessor :state_id, :foo_id
|
57
73
|
|
58
|
-
|
74
|
+
include CodedOptions
|
59
75
|
coded_options :state => %w(initial active closed),
|
60
76
|
:foo => %w(bar quux baz)
|
61
77
|
end
|
@@ -76,7 +92,7 @@ describe CodedOptions do
|
|
76
92
|
|
77
93
|
before(:all) do
|
78
94
|
class Foo
|
79
|
-
|
95
|
+
include CodedOptions
|
80
96
|
coded_options :gender, {99 => 'other', 1 => 'male', 2 => 'female'}
|
81
97
|
end
|
82
98
|
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: coded_options
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
|
+
- 1
|
7
8
|
- 0
|
8
|
-
-
|
9
|
-
|
10
|
-
version: 0.2.7
|
9
|
+
- 0
|
10
|
+
version: 1.0.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Jason Dew
|
@@ -15,30 +15,13 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-03-01 00:00:00 -05:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
|
-
prerelease: false
|
23
|
-
type: :runtime
|
24
|
-
name: rails
|
25
|
-
version_requirements: &id001 !ruby/object:Gem::Requirement
|
26
|
-
none: false
|
27
|
-
requirements:
|
28
|
-
- - ~>
|
29
|
-
- !ruby/object:Gem::Version
|
30
|
-
hash: 7
|
31
|
-
segments:
|
32
|
-
- 3
|
33
|
-
- 0
|
34
|
-
- 0
|
35
|
-
version: 3.0.0
|
36
|
-
requirement: *id001
|
37
|
-
- !ruby/object:Gem::Dependency
|
38
|
-
prerelease: false
|
39
|
-
type: :development
|
40
22
|
name: rspec
|
41
|
-
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
42
25
|
none: false
|
43
26
|
requirements:
|
44
27
|
- - ~>
|
@@ -49,12 +32,12 @@ dependencies:
|
|
49
32
|
- 0
|
50
33
|
- 0
|
51
34
|
version: 2.0.0
|
52
|
-
requirement: *id002
|
53
|
-
- !ruby/object:Gem::Dependency
|
54
|
-
prerelease: false
|
55
35
|
type: :development
|
36
|
+
version_requirements: *id001
|
37
|
+
- !ruby/object:Gem::Dependency
|
56
38
|
name: rr
|
57
|
-
|
39
|
+
prerelease: false
|
40
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
58
41
|
none: false
|
59
42
|
requirements:
|
60
43
|
- - ">="
|
@@ -63,7 +46,8 @@ dependencies:
|
|
63
46
|
segments:
|
64
47
|
- 0
|
65
48
|
version: "0"
|
66
|
-
|
49
|
+
type: :development
|
50
|
+
version_requirements: *id002
|
67
51
|
description: A gem for making fields with coded values easier
|
68
52
|
email:
|
69
53
|
- jason.dew@gmail.com
|
@@ -74,18 +58,19 @@ extensions: []
|
|
74
58
|
extra_rdoc_files: []
|
75
59
|
|
76
60
|
files:
|
61
|
+
- .gemtest
|
62
|
+
- .gitignore
|
63
|
+
- Gemfile
|
64
|
+
- LICENSE
|
65
|
+
- README.md
|
66
|
+
- Rakefile
|
67
|
+
- coded_options.gemspec
|
68
|
+
- lib/coded_options.rb
|
77
69
|
- lib/coded_options/base.rb
|
78
70
|
- lib/coded_options/version.rb
|
79
|
-
- lib/coded_options.rb
|
80
71
|
- lib/rails/coded_options.rb
|
81
72
|
- spec/coded_options_spec.rb
|
82
73
|
- spec/spec_helper.rb
|
83
|
-
- LICENSE
|
84
|
-
- README.md
|
85
|
-
- Gemfile
|
86
|
-
- Rakefile
|
87
|
-
- .gemtest
|
88
|
-
- coded_options.gemspec
|
89
74
|
has_rdoc: true
|
90
75
|
homepage: http://github.com/jasondew/coded_options
|
91
76
|
licenses: []
|
@@ -109,18 +94,17 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
109
94
|
requirements:
|
110
95
|
- - ">="
|
111
96
|
- !ruby/object:Gem::Version
|
112
|
-
hash:
|
97
|
+
hash: 3
|
113
98
|
segments:
|
114
|
-
-
|
115
|
-
|
116
|
-
- 6
|
117
|
-
version: 1.3.6
|
99
|
+
- 0
|
100
|
+
version: "0"
|
118
101
|
requirements: []
|
119
102
|
|
120
103
|
rubyforge_project: coded_options
|
121
|
-
rubygems_version: 1.5.
|
104
|
+
rubygems_version: 1.5.2
|
122
105
|
signing_key:
|
123
106
|
specification_version: 3
|
124
107
|
summary: Making options easier
|
125
|
-
test_files:
|
126
|
-
|
108
|
+
test_files:
|
109
|
+
- spec/coded_options_spec.rb
|
110
|
+
- spec/spec_helper.rb
|