has_dictionary 0.0.1
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/README.md +55 -0
- data/lib/has_dictionary.rb +25 -0
- data/lib/has_dictionary/dictionary.rb +32 -0
- data/lib/has_dictionary/has_dictionary.rb +25 -0
- metadata +65 -0
data/README.md
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
# has_dictionary Gem
|
2
|
+
|
3
|
+
ActiveRecord association with a class-based tableless enumerators.
|
4
|
+
|
5
|
+
## install
|
6
|
+
|
7
|
+
in Gemfile add:
|
8
|
+
|
9
|
+
gem 'has_dictionary', :git=>'https://github.com/aloon/has_dictionary.git'
|
10
|
+
|
11
|
+
and execute:
|
12
|
+
|
13
|
+
$ bundle install
|
14
|
+
|
15
|
+
## how it works
|
16
|
+
|
17
|
+
Yoy must create a class with the definitions of Enums:
|
18
|
+
|
19
|
+
models/status.rb:
|
20
|
+
```ruby
|
21
|
+
class Status < Dictionary
|
22
|
+
self.add_item :NEW, 0
|
23
|
+
self.add_item :GENERATING, 1
|
24
|
+
self.add_item :RUN, 2
|
25
|
+
self.add_item :DELETING, 3
|
26
|
+
end
|
27
|
+
```
|
28
|
+
|
29
|
+
In your ActiveRecord class
|
30
|
+
|
31
|
+
```ruby
|
32
|
+
class MyClass < ActiveRecord::Base
|
33
|
+
attr_accessible :name, :status_id
|
34
|
+
|
35
|
+
has_dictionary :dic_class=>Status, :field=>:status_id, :method=>'status'
|
36
|
+
end
|
37
|
+
```
|
38
|
+
|
39
|
+
now you can:
|
40
|
+
|
41
|
+
```ruby
|
42
|
+
MyClass.find(1).status
|
43
|
+
# returns #<Status:0x00 @id=0, @desc="NEW">
|
44
|
+
|
45
|
+
MyClass.find(1).status.desc
|
46
|
+
# returns "NEW"
|
47
|
+
|
48
|
+
element = MyClass.find(1)
|
49
|
+
element.status_id = Status::GENERATING
|
50
|
+
elements.save
|
51
|
+
# this save element.status_id with the value 1
|
52
|
+
|
53
|
+
Status.get
|
54
|
+
#returns [#<Status:0x00 @id=0, @desc="NEW">, #<Status:0x00 @id=1, @desc="GENERATING">, #<Status:0x00 @id=2, @desc="RUN">, #<Status:0x00 @id=3, @desc="DELETING">]
|
55
|
+
```
|
@@ -0,0 +1,25 @@
|
|
1
|
+
=begin
|
2
|
+
require 'has_dictionary/has_dictionary'
|
3
|
+
require 'has_dictionary/dictionary'
|
4
|
+
|
5
|
+
ActiveRecord::Base.send( :include, ActiveRecord::Dictionaries )
|
6
|
+
=end
|
7
|
+
|
8
|
+
|
9
|
+
|
10
|
+
|
11
|
+
require 'active_record'
|
12
|
+
require 'active_support/inflector'
|
13
|
+
|
14
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
15
|
+
|
16
|
+
module HasDictionary
|
17
|
+
|
18
|
+
if defined?(ActiveRecord::Base)
|
19
|
+
require 'has_dictionary/has_dictionary'
|
20
|
+
require 'has_dictionary/dictionary'
|
21
|
+
#ActiveRecord::Base.extend ActsAsVotable::Extenders::Votable
|
22
|
+
#ActiveRecord::Base.extend HasDictionary::Dictionary
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
class Dictionary
|
2
|
+
attr_reader :id, :description
|
3
|
+
|
4
|
+
def initialize id, description
|
5
|
+
@id = id
|
6
|
+
@description = description
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.add_item(key,value)
|
10
|
+
@hash ||= {}
|
11
|
+
@hash[key]=value
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.const_missing(key)
|
15
|
+
@hash[key]
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.each
|
19
|
+
@hash.each {|key,value| yield(key,value)}
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.get key=nil
|
23
|
+
if key.nil?
|
24
|
+
status=[]
|
25
|
+
each { |k,v| status << new(v,k[0..-1]) }
|
26
|
+
status
|
27
|
+
else
|
28
|
+
each { |k,v| return new(v,k[0..-1]) if v==key }
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module HasDictionary
|
2
|
+
extend ActiveSupport::Concern
|
3
|
+
|
4
|
+
included do
|
5
|
+
end
|
6
|
+
|
7
|
+
module ClassMethods
|
8
|
+
def has_dictionary(options = {})
|
9
|
+
class_attribute :dic_options
|
10
|
+
|
11
|
+
self.dic_options = options
|
12
|
+
|
13
|
+
define_method(dic_options[:method]) {
|
14
|
+
eval "#{dic_options[:dic_class]}.get self.#{dic_options[:field]}"
|
15
|
+
}
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def squawk(string)
|
20
|
+
write_attribute(self.class.yaffle_text_field, string.to_squawk)
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
ActiveRecord::Base.send :include, HasDictionary
|
metadata
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: has_dictionary
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Alex Gonzalez Lacasa
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-10-27 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: activemodel
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 3.0.0
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 3.0.0
|
30
|
+
description: ActiveRecord association with a class-based tableless enumerators
|
31
|
+
email:
|
32
|
+
- alooncom@gmail.com
|
33
|
+
executables: []
|
34
|
+
extensions: []
|
35
|
+
extra_rdoc_files: []
|
36
|
+
files:
|
37
|
+
- lib/has_dictionary.rb
|
38
|
+
- lib/has_dictionary/dictionary.rb
|
39
|
+
- lib/has_dictionary/has_dictionary.rb
|
40
|
+
- README.md
|
41
|
+
homepage: http://aloon.com
|
42
|
+
licenses: []
|
43
|
+
post_install_message:
|
44
|
+
rdoc_options: []
|
45
|
+
require_paths:
|
46
|
+
- lib
|
47
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
48
|
+
none: false
|
49
|
+
requirements:
|
50
|
+
- - ! '>='
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '0'
|
53
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
54
|
+
none: false
|
55
|
+
requirements:
|
56
|
+
- - ! '>='
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
version: '0'
|
59
|
+
requirements: []
|
60
|
+
rubyforge_project:
|
61
|
+
rubygems_version: 1.8.23
|
62
|
+
signing_key:
|
63
|
+
specification_version: 3
|
64
|
+
summary: ActiveRecord association with a class-based tableless enumerators
|
65
|
+
test_files: []
|