acts_as_label 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
data/.specification CHANGED
@@ -1,12 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: acts_as_label
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 1
8
- - 3
9
- version: 0.1.3
4
+ version: 0.1.4
10
5
  platform: ruby
11
6
  authors:
12
7
  - Coroutine
@@ -15,21 +10,19 @@ autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
12
 
18
- date: 2010-03-10 00:00:00 -06:00
13
+ date: 2010-03-25 00:00:00 -05:00
19
14
  default_executable:
20
15
  dependencies:
21
16
  - !ruby/object:Gem::Dependency
22
17
  name: activesupport
23
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
18
+ type: :runtime
19
+ version_requirement:
20
+ version_requirements: !ruby/object:Gem::Requirement
25
21
  requirements:
26
22
  - - ">="
27
23
  - !ruby/object:Gem::Version
28
- segments:
29
- - 0
30
24
  version: "0"
31
- type: :runtime
32
- version_requirements: *id001
25
+ version:
33
26
  description: This acts_as extension implements a system label and a friendly label on a class and centralizes the logic for performing validations and accessing items by system label.
34
27
  email: jdugan@coroutine.com
35
28
  executables: []
@@ -45,7 +38,6 @@ files:
45
38
  - README.rdoc
46
39
  - Rakefile
47
40
  - VERSION
48
- - acts_as_label-0.1.2.gem
49
41
  - acts_as_label.gemspec
50
42
  - init.rb
51
43
  - lib/acts_as_label.rb
@@ -64,20 +56,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
64
56
  requirements:
65
57
  - - ">="
66
58
  - !ruby/object:Gem::Version
67
- segments:
68
- - 0
69
59
  version: "0"
60
+ version:
70
61
  required_rubygems_version: !ruby/object:Gem::Requirement
71
62
  requirements:
72
63
  - - ">="
73
64
  - !ruby/object:Gem::Version
74
- segments:
75
- - 0
76
65
  version: "0"
66
+ version:
77
67
  requirements: []
78
68
 
79
69
  rubyforge_project:
80
- rubygems_version: 1.3.6
70
+ rubygems_version: 1.3.5
81
71
  signing_key:
82
72
  specification_version: 3
83
73
  summary: Gem version of acts_as_label Rails plugin.
data/Rakefile CHANGED
@@ -28,13 +28,15 @@ end
28
28
 
29
29
  begin
30
30
  Jeweler::Tasks.new do |gemspec|
31
- gemspec.name = "acts_as_label"
32
- gemspec.summary = "Gem version of acts_as_label Rails plugin."
31
+ gemspec.authors = ["Coroutine", "John Dugan"]
33
32
  gemspec.description = "This acts_as extension implements a system label and a friendly label on a class and centralizes the logic for performing validations and accessing items by system label."
34
33
  gemspec.email = "jdugan@coroutine.com"
35
34
  gemspec.homepage = "http://github.com/coroutine/acts_as_label"
36
- gemspec.authors = ["Coroutine", "John Dugan"]
37
- gemspec.add_dependency "activesupport"
35
+ gemspec.name = "acts_as_label"
36
+ gemspec.summary = "Gem version of acts_as_label Rails plugin."
37
+
38
+ gemspec.add_dependency("activesupport")
39
+ gemspec.files.include("lib/**/*.rb")
38
40
  end
39
41
  Jeweler::GemcutterTasks.new
40
42
  rescue LoadError
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.3
1
+ 0.1.4
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{acts_as_label}
8
- s.version = "0.1.3"
8
+ s.version = "0.1.4"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Coroutine", "John Dugan"]
12
- s.date = %q{2010-03-10}
12
+ s.date = %q{2010-03-25}
13
13
  s.description = %q{This acts_as extension implements a system label and a friendly label on a class and centralizes the logic for performing validations and accessing items by system label.}
14
14
  s.email = %q{jdugan@coroutine.com}
15
15
  s.extra_rdoc_files = [
@@ -25,13 +25,14 @@ Gem::Specification.new do |s|
25
25
  "acts_as_label.gemspec",
26
26
  "init.rb",
27
27
  "lib/acts_as_label.rb",
28
+ "lib/acts_as_label/base.rb",
28
29
  "test/acts_as_label_test.rb",
29
30
  "test/test_helper.rb"
30
31
  ]
31
32
  s.homepage = %q{http://github.com/coroutine/acts_as_label}
32
33
  s.rdoc_options = ["--charset=UTF-8"]
33
34
  s.require_paths = ["lib"]
34
- s.rubygems_version = %q{1.3.6}
35
+ s.rubygems_version = %q{1.3.5}
35
36
  s.summary = %q{Gem version of acts_as_label Rails plugin.}
36
37
  s.test_files = [
37
38
  "test/acts_as_label_test.rb",
data/init.rb CHANGED
@@ -1,5 +1 @@
1
- require 'acts_as_label'
2
-
3
- ActiveRecord::Base.class_eval do
4
- include Coroutine::Acts::Label
5
- end
1
+ require File.dirname(__FILE__) + "/rails/init.rb"
data/lib/acts_as_label.rb CHANGED
@@ -1,168 +1,10 @@
1
- module Coroutine #:nodoc:
2
- module Acts #:nodoc:
3
- module Label #:nodoc:
1
+ # external gems
2
+ require "active_record"
4
3
 
5
- def self.included(base) #:nodoc:
6
- base.extend(ClassMethods)
7
- end
8
4
 
9
-
10
- module ClassMethods
11
-
12
-
13
- # == Description
14
- #
15
- # This +acts_as+ extension implements a system label and a friendly label on a class and centralizes
16
- # the logic for performing validations and accessing items by system label.
17
- #
18
- #
19
- # == Usage
20
- #
21
- # Simple Example
22
- #
23
- # class BillingFrequency < ActiveRecord::Base
24
- # has_many :subscriptions
25
- # acts_as_label :default => :monthly
26
- # end
27
- #
28
- # class Subscription < ActiveRecord::Base
29
- # belongs_to :billing_frequency
30
- # end
31
- #
32
- # subscription.billing_frequency = BillingFrequency.monthly
33
- # subscription.billing_frequency = BillingFrequency.default
34
- #
35
- #
36
- # STI Example:
37
- #
38
- # class Label < ActiveRecord::Base
39
- # acts_as_label :scoped_to => :type
40
- # end
41
- #
42
- # class BillingFrequency < Label
43
- # has_many :subscriptions
44
- # def self.default
45
- # BillingFrequency.monthly
46
- # end
47
- # end
48
- #
49
- # class Subscription < ActiveRecord::Base
50
- # belongs_to :billing_frequency
51
- # end
52
- #
53
- # subscription.billing_frequency = BillingFrequency.monthly
54
- # subscription.billing_frequency = BillingFrequency.default
55
- #
56
- #
57
- # == Configuration
58
- #
59
- # * +system_label_cloumn+ - specifies the column name to use for storing the system label (default: +system_label+)
60
- # * +label_column+ - specifies the column name to use for storing the label (default: +label+)
61
- # * +default+ - specifies the system label value of the default instance (default: the first record in the default scope)
62
- #
63
- def acts_as_label(options = {})
64
-
65
- #-------------------------------------------
66
- # scrub options
67
- #-------------------------------------------
68
- options = {} unless options.is_a?(Hash)
69
- system_label = options.key?(:system_label_column) ? options[:system_label_column].to_sym : :system_label
70
- label = options.key?(:label_column) ? options[:label_column].to_sym : :label
71
- scope = options.key?(:scope) ? options[:scope] : "1 = 1"
72
- default = options.key?(:default) ? options[:default].to_sym : nil
73
-
74
-
75
- #--------------------------------------------
76
- # mix methods into class definition
77
- #--------------------------------------------
78
- class_eval do
79
-
80
- # Add inheritable accessors
81
- write_inheritable_attribute :acts_as_label_system_label_column, system_label
82
- class_inheritable_reader :acts_as_label_system_label_column
83
- write_inheritable_attribute :acts_as_label_label_column, label
84
- class_inheritable_reader :acts_as_label_label_column
85
- write_inheritable_attribute :acts_as_label_scope, scope
86
- class_inheritable_reader :acts_as_label_scope
87
- write_inheritable_attribute :acts_as_label_default_system_label, default
88
- class_inheritable_reader :acts_as_label_default_system_label
89
-
90
-
91
- # protect attributes
92
- attr_readonly system_label
93
-
94
-
95
- # Add validations
96
- validates_presence_of system_label
97
- validates_length_of system_label, :maximum => 255
98
- validates_format_of system_label, :with => /^[A-Z][_A-Z0-9]*$/
99
- validates_presence_of label
100
- validates_length_of label, :maximum => 255
101
-
102
-
103
- # Add method missing, if needed
104
- unless self.method_defined? :method_missing
105
- def self.method_missing(method, *args, &block)
106
- super
107
- end
108
- end
109
-
110
- # Add custom method missing functionality to perform find by system label lookup. If
111
- # nothing is found, it delegates the call to the original method_missing.
112
- def self.method_missing_with_label(method, *args, &block)
113
- record = self.find(:first, :conditions => ["#{acts_as_label_system_label_column} = ?", method.to_s.upcase])
114
- if record
115
- return record
116
- else
117
- method_missing_without_label(method, *args, &block)
118
- end
119
- end
120
-
121
- # Add method missing alias
122
- class << self
123
- alias_method_chain :method_missing, :label
124
- end
125
-
126
- # Add class method to return default record, if needed
127
- unless self.method_defined? :default
128
- if default.nil?
129
- def self.default
130
- self.first
131
- end
132
- else
133
- def self.default
134
- self.send("#{acts_as_label_default_system_label}")
135
- end
136
- end
137
- end
138
-
139
-
140
- # Add all the instance methods
141
- include Coroutine::Acts::Label::InstanceMethods
5
+ # acts_as_label extension
6
+ require File.dirname(__FILE__) + "/acts_as_label/base"
142
7
 
143
- end
144
- end
145
- end
146
8
 
147
-
148
- module InstanceMethods
149
-
150
- # This method updates the system label attribute writer to ensure it is uppercase.
151
- #
152
- def system_label=(value)
153
- value = value.to_s.strip.upcase unless value.nil?
154
- write_attribute("#{acts_as_label_system_label_column}", value)
155
- end
156
-
157
-
158
- # This method overrides the to_s method to return the friendly label value.
159
- #
160
- def to_s
161
- self.send("#{acts_as_label_label_column}")
162
- end
163
-
164
- end
165
-
166
- end
167
- end
168
- end
9
+ # add extensions to active record
10
+ ::ActiveRecord::Base.send :include, Coroutine::ActsAsLabel::Base
@@ -0,0 +1,168 @@
1
+ module Coroutine #:nodoc:
2
+ module ActsAsLabel #:nodoc:
3
+ module Base #:nodoc:
4
+
5
+ def self.included(base) #:nodoc:
6
+ base.extend(ClassMethods)
7
+ end
8
+
9
+
10
+ module ClassMethods
11
+
12
+
13
+ # == Description
14
+ #
15
+ # This +acts_as+ extension implements a system label and a friendly label on a class and centralizes
16
+ # the logic for performing validations and accessing items by system label.
17
+ #
18
+ #
19
+ # == Usage
20
+ #
21
+ # Simple Example
22
+ #
23
+ # class BillingFrequency < ActiveRecord::Base
24
+ # has_many :subscriptions
25
+ # acts_as_label :default => :monthly
26
+ # end
27
+ #
28
+ # class Subscription < ActiveRecord::Base
29
+ # belongs_to :billing_frequency
30
+ # end
31
+ #
32
+ # subscription.billing_frequency = BillingFrequency.monthly
33
+ # subscription.billing_frequency = BillingFrequency.default
34
+ #
35
+ #
36
+ # STI Example:
37
+ #
38
+ # class Label < ActiveRecord::Base
39
+ # acts_as_label :scoped_to => :type
40
+ # end
41
+ #
42
+ # class BillingFrequency < Label
43
+ # has_many :subscriptions
44
+ # def self.default
45
+ # BillingFrequency.monthly
46
+ # end
47
+ # end
48
+ #
49
+ # class Subscription < ActiveRecord::Base
50
+ # belongs_to :billing_frequency
51
+ # end
52
+ #
53
+ # subscription.billing_frequency = BillingFrequency.monthly
54
+ # subscription.billing_frequency = BillingFrequency.default
55
+ #
56
+ #
57
+ # == Configuration
58
+ #
59
+ # * +system_label_cloumn+ - specifies the column name to use for storing the system label (default: +system_label+)
60
+ # * +label_column+ - specifies the column name to use for storing the label (default: +label+)
61
+ # * +default+ - specifies the system label value of the default instance (default: the first record in the default scope)
62
+ #
63
+ def acts_as_label(options = {})
64
+
65
+ #-------------------------------------------
66
+ # scrub options
67
+ #-------------------------------------------
68
+ options = {} unless options.is_a?(Hash)
69
+ system_label = options.key?(:system_label_column) ? options[:system_label_column].to_sym : :system_label
70
+ label = options.key?(:label_column) ? options[:label_column].to_sym : :label
71
+ scope = options.key?(:scope) ? options[:scope] : "1 = 1"
72
+ default = options.key?(:default) ? options[:default].to_sym : nil
73
+
74
+
75
+ #--------------------------------------------
76
+ # mix methods into class definition
77
+ #--------------------------------------------
78
+ class_eval do
79
+
80
+ # Add inheritable accessors
81
+ write_inheritable_attribute :acts_as_label_system_label_column, system_label
82
+ class_inheritable_reader :acts_as_label_system_label_column
83
+ write_inheritable_attribute :acts_as_label_label_column, label
84
+ class_inheritable_reader :acts_as_label_label_column
85
+ write_inheritable_attribute :acts_as_label_scope, scope
86
+ class_inheritable_reader :acts_as_label_scope
87
+ write_inheritable_attribute :acts_as_label_default_system_label, default
88
+ class_inheritable_reader :acts_as_label_default_system_label
89
+
90
+
91
+ # protect attributes
92
+ attr_readonly system_label
93
+
94
+
95
+ # Add validations
96
+ validates_presence_of system_label
97
+ validates_length_of system_label, :maximum => 255
98
+ validates_format_of system_label, :with => /^[A-Z][_A-Z0-9]*$/
99
+ validates_presence_of label
100
+ validates_length_of label, :maximum => 255
101
+
102
+
103
+ # Add method missing, if needed
104
+ unless self.method_defined? :method_missing
105
+ def self.method_missing(method, *args, &block)
106
+ super
107
+ end
108
+ end
109
+
110
+ # Add custom method missing functionality to perform find by system label lookup. If
111
+ # nothing is found, it delegates the call to the original method_missing.
112
+ def self.method_missing_with_label(method, *args, &block)
113
+ record = self.find(:first, :conditions => ["#{acts_as_label_system_label_column} = ?", method.to_s.upcase])
114
+ if record
115
+ return record
116
+ else
117
+ method_missing_without_label(method, *args, &block)
118
+ end
119
+ end
120
+
121
+ # Add method missing alias
122
+ class << self
123
+ alias_method_chain :method_missing, :label
124
+ end
125
+
126
+ # Add class method to return default record, if needed
127
+ unless self.method_defined? :default
128
+ if default.nil?
129
+ def self.default
130
+ self.first
131
+ end
132
+ else
133
+ def self.default
134
+ self.send("#{acts_as_label_default_system_label}")
135
+ end
136
+ end
137
+ end
138
+
139
+
140
+ # Add all the instance methods
141
+ include Coroutine::ActsAsLabel::Base::InstanceMethods
142
+
143
+ end
144
+ end
145
+ end
146
+
147
+
148
+ module InstanceMethods
149
+
150
+ # This method updates the system label attribute writer to ensure it is uppercase.
151
+ #
152
+ def system_label=(value)
153
+ value = value.to_s.strip.upcase unless value.nil?
154
+ write_attribute("#{acts_as_label_system_label_column}", value)
155
+ end
156
+
157
+
158
+ # This method overrides the to_s method to return the friendly label value.
159
+ #
160
+ def to_s
161
+ self.send("#{acts_as_label_label_column}")
162
+ end
163
+
164
+ end
165
+
166
+ end
167
+ end
168
+ end
metadata CHANGED
@@ -1,12 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: acts_as_label
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 1
8
- - 3
9
- version: 0.1.3
4
+ version: 0.1.4
10
5
  platform: ruby
11
6
  authors:
12
7
  - Coroutine
@@ -15,21 +10,19 @@ autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
12
 
18
- date: 2010-03-10 00:00:00 -06:00
13
+ date: 2010-03-25 00:00:00 -05:00
19
14
  default_executable:
20
15
  dependencies:
21
16
  - !ruby/object:Gem::Dependency
22
17
  name: activesupport
23
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
18
+ type: :runtime
19
+ version_requirement:
20
+ version_requirements: !ruby/object:Gem::Requirement
25
21
  requirements:
26
22
  - - ">="
27
23
  - !ruby/object:Gem::Version
28
- segments:
29
- - 0
30
24
  version: "0"
31
- type: :runtime
32
- version_requirements: *id001
25
+ version:
33
26
  description: This acts_as extension implements a system label and a friendly label on a class and centralizes the logic for performing validations and accessing items by system label.
34
27
  email: jdugan@coroutine.com
35
28
  executables: []
@@ -48,6 +41,7 @@ files:
48
41
  - acts_as_label.gemspec
49
42
  - init.rb
50
43
  - lib/acts_as_label.rb
44
+ - lib/acts_as_label/base.rb
51
45
  - test/acts_as_label_test.rb
52
46
  - test/test_helper.rb
53
47
  has_rdoc: true
@@ -63,20 +57,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
63
57
  requirements:
64
58
  - - ">="
65
59
  - !ruby/object:Gem::Version
66
- segments:
67
- - 0
68
60
  version: "0"
61
+ version:
69
62
  required_rubygems_version: !ruby/object:Gem::Requirement
70
63
  requirements:
71
64
  - - ">="
72
65
  - !ruby/object:Gem::Version
73
- segments:
74
- - 0
75
66
  version: "0"
67
+ version:
76
68
  requirements: []
77
69
 
78
70
  rubyforge_project:
79
- rubygems_version: 1.3.6
71
+ rubygems_version: 1.3.5
80
72
  signing_key:
81
73
  specification_version: 3
82
74
  summary: Gem version of acts_as_label Rails plugin.