e9_attributes 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,24 +1,21 @@
1
1
  # A simple class to manage menu options, usable by other classes to build their menus.
2
2
  #
3
3
  class MenuOption < ActiveRecord::Base
4
- class_inheritable_accessor :keys
4
+ cattr_writer :keys
5
5
 
6
- def self.initialize_keys!(*keys)
7
- return self.keys unless self.keys.nil?
8
-
9
- keys.flatten!
10
- keys.map!(&:to_s)
11
-
12
- self.keys = keys
13
- validates :key, :presence => true, :inclusion => { :in => keys, :allow_blank => true }
6
+ def self.keys
7
+ @@keys || []
14
8
  end
15
9
 
16
10
  validates :value, :presence => true
11
+ validate { errors.add(:key, :inclusion) if key.present? && !keys.include?(key) }
17
12
 
18
13
  acts_as_list :scope => 'menu_options.key = \"#{key}\"'
19
14
 
20
15
  scope :options_for, lambda {|key| where(:key => key).order('menu_options.position ASC') }
21
16
 
17
+ delegate :keys, :to => 'self.class'
18
+
22
19
  ##
23
20
  # A direct SQL selection of values for a given key
24
21
  #
@@ -29,7 +26,7 @@ class MenuOption < ActiveRecord::Base
29
26
  # [key (String)] The key for the assocated menu options.
30
27
  #
31
28
  def self.fetch_values(key)
32
- connection.send(:select_values, options_for(key).order(:position).project('value').to_sql, 'Menu Option Select')
29
+ connection.send(:select_values, options_for(key).select('value').order(:position).to_sql, 'Menu Option Select')
33
30
  end
34
31
 
35
32
  def to_s
@@ -2,20 +2,40 @@ module E9Attributes::Model
2
2
  extend ActiveSupport::Concern
3
3
 
4
4
  module ClassMethods
5
+ #
6
+ # By default, it reformats the attributes passed into association
7
+ # names and defines them. To add a record attribute without defining
8
+ # an association name, pass the association names literally and specify
9
+ # the option :skip_name_format. This will cause the method to skip adding
10
+ # associations for any attribute not ending in "_attributes", which you
11
+ # must add manually, e.g.
12
+ #
13
+ # has_many :users
14
+ # accepts_nested_attributes_for :users, :allow_destroy => true
15
+ #
5
16
  def has_record_attributes(*attributes)
6
17
  options = attributes.extract_options!
18
+ options.symbolize_keys!
7
19
 
8
20
  class_inheritable_accessor :record_attributes
9
- self.record_attributes = attributes.flatten.map do |a|
10
- a = a.to_s.classify
11
- a = a =~ /Attribute$/ ? a : "#{a}Attribute"
12
- a.constantize rescue next
13
- a.underscore.pluralize
14
- end.compact
21
+
22
+ attributes.flatten!
23
+ attributes.map!(&:to_s)
24
+
25
+ unless options[:skip_name_format]
26
+ attributes.map! do |a|
27
+ a = a.classify
28
+ a = a =~ /Attribute$/ ? a : "#{a}Attribute"
29
+ a.constantize rescue next
30
+ a.underscore.pluralize
31
+ end.compact
32
+ end
33
+
34
+ self.record_attributes = attributes
15
35
 
16
36
  has_many :record_attributes, :as => :record
17
37
 
18
- self.record_attributes.each do |association_name|
38
+ self.record_attributes.select {|r| r =~ /attributes$/ }.each do |association_name|
19
39
  has_many association_name.to_sym, :class_name => association_name.classify, :as => :record
20
40
  accepts_nested_attributes_for association_name.to_sym, :allow_destroy => true, :reject_if => :reject_record_attribute?
21
41
  end
@@ -1,3 +1,3 @@
1
1
  module E9Attributes
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
metadata CHANGED
@@ -1,8 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: e9_attributes
3
3
  version: !ruby/object:Gem::Version
4
- prerelease:
5
- version: 0.0.2
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 3
9
+ version: 0.0.3
6
10
  platform: ruby
7
11
  authors:
8
12
  - Travis Cox
@@ -10,7 +14,7 @@ autorequire:
10
14
  bindir: bin
11
15
  cert_chain: []
12
16
 
13
- date: 2011-08-22 00:00:00 -04:00
17
+ date: 2011-09-07 00:00:00 -04:00
14
18
  default_executable:
15
19
  dependencies: []
16
20
 
@@ -72,17 +76,21 @@ required_ruby_version: !ruby/object:Gem::Requirement
72
76
  requirements:
73
77
  - - ">="
74
78
  - !ruby/object:Gem::Version
79
+ segments:
80
+ - 0
75
81
  version: "0"
76
82
  required_rubygems_version: !ruby/object:Gem::Requirement
77
83
  none: false
78
84
  requirements:
79
85
  - - ">="
80
86
  - !ruby/object:Gem::Version
87
+ segments:
88
+ - 0
81
89
  version: "0"
82
90
  requirements: []
83
91
 
84
92
  rubyforge_project: e9_attributes
85
- rubygems_version: 1.6.2
93
+ rubygems_version: 1.3.7
86
94
  signing_key:
87
95
  specification_version: 3
88
96
  summary: Searchable attributes