e9_attributes 0.0.2 → 0.0.3

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.
@@ -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