has_constant 0.2.9 → 0.3.0

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/Gemfile CHANGED
@@ -5,4 +5,12 @@ group :test do
5
5
  gem 'activesupport'
6
6
  gem 'activerecord'
7
7
  gem 'sqlite3-ruby'
8
+ gem 'activesupport'
9
+ gem 'mongoid', '2.0.0.beta.20'
10
+ gem 'bson'
11
+ gem 'bson_ext'
12
+ end
13
+
14
+ group :development do
15
+ gem 'jeweler'
8
16
  end
data/Gemfile.lock ADDED
@@ -0,0 +1,48 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ activemodel (3.0.3)
5
+ activesupport (= 3.0.3)
6
+ builder (~> 2.1.2)
7
+ i18n (~> 0.4)
8
+ activerecord (3.0.3)
9
+ activemodel (= 3.0.3)
10
+ activesupport (= 3.0.3)
11
+ arel (~> 2.0.2)
12
+ tzinfo (~> 0.3.23)
13
+ activesupport (3.0.3)
14
+ arel (2.0.6)
15
+ bson (1.1.5)
16
+ bson_ext (1.1.5)
17
+ builder (2.1.2)
18
+ git (1.2.5)
19
+ i18n (0.5.0)
20
+ jeweler (1.5.1)
21
+ bundler (~> 1.0.0)
22
+ git (>= 1.2.5)
23
+ rake
24
+ mongo (1.1.5)
25
+ bson (>= 1.1.5)
26
+ mongoid (2.0.0.beta.20)
27
+ activemodel (~> 3.0)
28
+ mongo (~> 1.1)
29
+ tzinfo (~> 0.3.22)
30
+ will_paginate (~> 3.0.pre)
31
+ rake (0.8.7)
32
+ shoulda (2.11.3)
33
+ sqlite3-ruby (1.3.2)
34
+ tzinfo (0.3.23)
35
+ will_paginate (3.0.pre2)
36
+
37
+ PLATFORMS
38
+ ruby
39
+
40
+ DEPENDENCIES
41
+ activerecord
42
+ activesupport
43
+ bson
44
+ bson_ext
45
+ jeweler
46
+ mongoid (= 2.0.0.beta.20)
47
+ shoulda
48
+ sqlite3-ruby
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.9
1
+ 0.3.0
data/has_constant.gemspec CHANGED
@@ -1,49 +1,48 @@
1
1
  # Generated by jeweler
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{has_constant}
8
- s.version = "0.2.9"
8
+ s.version = "0.3.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["mattbeedle"]
12
- s.date = %q{2010-10-09}
12
+ s.date = %q{2010-12-19}
13
13
  s.description = %q{Allows certain fields to be limited to a set of values}
14
14
  s.email = %q{mattbeedle@gmail.com}
15
15
  s.extra_rdoc_files = [
16
16
  "LICENSE",
17
- "README.rdoc"
17
+ "README.rdoc"
18
18
  ]
19
19
  s.files = [
20
20
  ".document",
21
- ".gitignore",
22
- ".rvmrc",
23
- "Gemfile",
24
- "LICENSE",
25
- "README.rdoc",
26
- "Rakefile",
27
- "VERSION",
28
- "has_constant.gemspec",
29
- "lib/has_constant.rb",
30
- "lib/has_constant/orm/active_record.rb",
31
- "lib/has_constant/orm/mongoid.rb",
32
- "test/has_constant_test.rb",
33
- "test/helper.rb",
34
- "test/unit/orm/active_record_test.rb",
35
- "test/unit/orm/mongoid_test.rb"
21
+ ".rvmrc",
22
+ "Gemfile",
23
+ "Gemfile.lock",
24
+ "LICENSE",
25
+ "README.rdoc",
26
+ "Rakefile",
27
+ "VERSION",
28
+ "has_constant.gemspec",
29
+ "lib/has_constant.rb",
30
+ "lib/has_constant/orm/active_record.rb",
31
+ "lib/has_constant/orm/mongoid.rb",
32
+ "test/has_constant_test.rb",
33
+ "test/helper.rb",
34
+ "test/unit/orm/active_record_test.rb",
35
+ "test/unit/orm/mongoid_test.rb"
36
36
  ]
37
37
  s.homepage = %q{http://github.com/mattbeedle/has_constant}
38
- s.rdoc_options = ["--charset=UTF-8"]
39
38
  s.require_paths = ["lib"]
40
39
  s.rubygems_version = %q{1.3.7}
41
40
  s.summary = %q{Allows certain fields to be limited to a set of values}
42
41
  s.test_files = [
43
42
  "test/has_constant_test.rb",
44
- "test/helper.rb",
45
- "test/unit/orm/active_record_test.rb",
46
- "test/unit/orm/mongoid_test.rb"
43
+ "test/helper.rb",
44
+ "test/unit/orm/active_record_test.rb",
45
+ "test/unit/orm/mongoid_test.rb"
47
46
  ]
48
47
 
49
48
  if s.respond_to? :specification_version then
@@ -51,13 +50,16 @@ Gem::Specification.new do |s|
51
50
  s.specification_version = 3
52
51
 
53
52
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
53
+ s.add_development_dependency(%q<jeweler>, [">= 0"])
54
54
  s.add_development_dependency(%q<shoulda>, [">= 0"])
55
55
  s.add_development_dependency(%q<activesupport>, [">= 0"])
56
56
  else
57
+ s.add_dependency(%q<jeweler>, [">= 0"])
57
58
  s.add_dependency(%q<shoulda>, [">= 0"])
58
59
  s.add_dependency(%q<activesupport>, [">= 0"])
59
60
  end
60
61
  else
62
+ s.add_dependency(%q<jeweler>, [">= 0"])
61
63
  s.add_dependency(%q<shoulda>, [">= 0"])
62
64
  s.add_dependency(%q<activesupport>, [">= 0"])
63
65
  end
@@ -1,9 +1,7 @@
1
1
  module HasConstant
2
2
  module Orm
3
3
  module ActiveRecord
4
- def self.included( base )
5
- base.extend(ClassMethods)
6
- end
4
+ extend ActiveSupport::Concern
7
5
 
8
6
  module ClassMethods
9
7
  def has_constant( name, values, options = {} )
@@ -43,4 +41,4 @@ module HasConstant
43
41
  end
44
42
  end
45
43
  end
46
- end
44
+ end if defined?(ActiveRecord::Base)
@@ -1,20 +1,18 @@
1
1
  module HasConstant
2
2
  module Orm
3
3
  module Mongoid
4
- def self.included( base )
5
- base.extend(ClassMethods)
6
- base.send(:include, InstanceMethods)
7
- base.class_eval do
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ class_eval do
8
8
  validate :validate_has_constant_attributes
9
9
  end
10
10
  end
11
11
 
12
- module InstanceMethods
13
- def validate_has_constant_attributes
14
- @has_constant_errors.each do |key, value|
15
- self.errors.add key, value
16
- end if @has_constant_errors
17
- end
12
+ def validate_has_constant_attributes
13
+ @has_constant_errors.each do |key, value|
14
+ self.errors.add key, value
15
+ end if @has_constant_errors
18
16
  end
19
17
 
20
18
  module ClassMethods
@@ -41,13 +39,13 @@ module HasConstant
41
39
  write_attribute singular.to_sym, val
42
40
  end
43
41
  end
44
-
42
+
45
43
  (class << self; self; end).instance_eval do
46
44
  define_method "#{singular}_is".to_sym do |values|
47
45
  values = values.lines.to_a if values.respond_to?(:lines)
48
46
  where(singular.to_sym => { '$in' => values.map { |v| self.send(name.to_sym).index(v) } })
49
47
  end
50
-
48
+
51
49
  define_method "#{singular}_is_not".to_sym do |values|
52
50
  values = values.lines.to_a if values.respond_to?(:lines)
53
51
  where(singular.to_sym => { '$nin' => values.map { |v| self.send(name.to_sym).index(v) } })
@@ -62,4 +60,4 @@ module HasConstant
62
60
  end
63
61
  end
64
62
  end
65
- end
63
+ end if defined?(Mongoid)
data/lib/has_constant.rb CHANGED
@@ -1,11 +1,9 @@
1
- require 'has_constant/orm/mongoid'
2
- require 'has_constant/orm/active_record'
1
+ require 'active_support'
2
+ require 'has_constant/orm/mongoid' if defined?(Mongoid)
3
+ require 'has_constant/orm/active_record' if defined?(ActiveRecord::Base)
3
4
  require 'active_support/inflector'
4
5
  module HasConstant
5
-
6
- def self.included(base)
7
- base.extend(ClassMethods)
8
- end
6
+ extend ActiveSupport::Concern
9
7
 
10
8
  # HasConstant takes a Proc containing an array of possible values for a field name
11
9
  # The field name is inferred as the singular of the has constant name. For example
@@ -58,7 +56,19 @@ module HasConstant
58
56
  end
59
57
 
60
58
  define_method("#{singular}_is?") do |value|
61
- eval("#{singular} == '#{value.to_s}'")
59
+ send(singular) == value.to_s
60
+ end
61
+
62
+ define_method("#{singular}_is_not?") do |value|
63
+ !send("#{singular}_is?", value)
64
+ end
65
+
66
+ define_method("#{singular}_in?") do |value_list|
67
+ value_list.include? send(singular)
68
+ end
69
+
70
+ define_method("#{singular}_not_in?") do |value_list|
71
+ !send("#{singular}_in?", value_list)
62
72
  end
63
73
  end
64
74
  end
@@ -2,8 +2,6 @@ require 'helper'
2
2
 
3
3
  class Model
4
4
  include HasConstant
5
-
6
- attr_accessor :salutation
7
5
  end
8
6
 
9
7
  class TestHasConstant < Test::Unit::TestCase
@@ -22,6 +20,7 @@ class TestHasConstant < Test::Unit::TestCase
22
20
  end
23
21
 
24
22
  should 'be able to override accessor' do
23
+ Model.send(:attr_accessor, :salutation)
25
24
  Model.has_constant :titles, ['Mr', 'Mrs'], :accessor => :salutation
26
25
  m = Model.new
27
26
  m.salutation = 'Mr'
@@ -43,10 +42,67 @@ class TestHasConstant < Test::Unit::TestCase
43
42
  assert_equal ['Mr', 'Mrs'], Model.titles
44
43
  end
45
44
 
46
- should 'provide singular_is? comparison method' do
47
- Model.has_constant :titles, ['Mr', 'Mrs']
48
- m = Model.new
49
- m.title = 'Mr'
50
- assert m.title_is?('Mr')
45
+ context '#field_is?' do
46
+ setup do
47
+ Model.has_constant :titles, ['Mr', 'Mrs', 'Ms']
48
+ @m = Model.new
49
+ @m.title = 'Mr'
50
+ end
51
+
52
+ should 'be true when the value is equal to the supplied one' do
53
+ assert @m.title_is?('Mr')
54
+ end
55
+
56
+ should 'be false when the value is not equal to the supplied one' do
57
+ assert !@m.title_is?('Mrs')
58
+ end
59
+ end
60
+
61
+ context '#field_in?' do
62
+ setup do
63
+ Model.has_constant :titles, ['Mr', 'Mrs', 'Ms']
64
+ @m = Model.new
65
+ @m.title = 'Mr'
66
+ end
67
+
68
+ should 'be true when the field value is in the supplied set of values' do
69
+ assert @m.title_in?(['Mr', 'Ms'])
70
+ end
71
+
72
+ should 'be false when the field value is not in the supplied set of values' do
73
+ assert !@m.title_in?(['Mrs', 'Ms'])
74
+ end
75
+ end
76
+
77
+ context '#field_is_not?' do
78
+ setup do
79
+ Model.has_constant :titles, ['Mr', 'Mrs', 'Ms']
80
+ @m = Model.new
81
+ @m.title = 'Mr'
82
+ end
83
+
84
+ should 'be true when the field value is not equal to the supplied one' do
85
+ assert @m.title_is_not?('Mrs')
86
+ end
87
+
88
+ should 'be false when the field value is equal to the supplied one' do
89
+ assert !@m.title_is_not?('Mr')
90
+ end
91
+ end
92
+
93
+ context '#field_not_in?' do
94
+ setup do
95
+ Model.has_constant :titles, ['Mr', 'Mrs', 'Ms']
96
+ @m = Model.new
97
+ @m.title = 'Mr'
98
+ end
99
+
100
+ should 'be true when the field value is not in the supplied list' do
101
+ assert @m.title_not_in?(['Mrs', 'Ms'])
102
+ end
103
+
104
+ should 'be false when the field value is in the supplied list' do
105
+ assert !@m.title_not_in?(['Mr', 'Mrs'])
106
+ end
51
107
  end
52
108
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: has_constant
3
3
  version: !ruby/object:Gem::Version
4
- hash: 5
4
+ hash: 19
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 2
9
- - 9
10
- version: 0.2.9
8
+ - 3
9
+ - 0
10
+ version: 0.3.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - mattbeedle
@@ -15,13 +15,14 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-10-09 00:00:00 +02:00
18
+ date: 2010-12-19 00:00:00 +01:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
- name: shoulda
22
+ type: :development
23
23
  prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
24
+ name: jeweler
25
+ version_requirements: &id001 !ruby/object:Gem::Requirement
25
26
  none: false
26
27
  requirements:
27
28
  - - ">="
@@ -30,12 +31,12 @@ dependencies:
30
31
  segments:
31
32
  - 0
32
33
  version: "0"
33
- type: :development
34
- version_requirements: *id001
34
+ requirement: *id001
35
35
  - !ruby/object:Gem::Dependency
36
- name: activesupport
36
+ type: :development
37
37
  prerelease: false
38
- requirement: &id002 !ruby/object:Gem::Requirement
38
+ name: shoulda
39
+ version_requirements: &id002 !ruby/object:Gem::Requirement
39
40
  none: false
40
41
  requirements:
41
42
  - - ">="
@@ -44,8 +45,21 @@ dependencies:
44
45
  segments:
45
46
  - 0
46
47
  version: "0"
48
+ requirement: *id002
49
+ - !ruby/object:Gem::Dependency
47
50
  type: :development
48
- version_requirements: *id002
51
+ prerelease: false
52
+ name: activesupport
53
+ version_requirements: &id003 !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ hash: 3
59
+ segments:
60
+ - 0
61
+ version: "0"
62
+ requirement: *id003
49
63
  description: Allows certain fields to be limited to a set of values
50
64
  email: mattbeedle@gmail.com
51
65
  executables: []
@@ -57,9 +71,9 @@ extra_rdoc_files:
57
71
  - README.rdoc
58
72
  files:
59
73
  - .document
60
- - .gitignore
61
74
  - .rvmrc
62
75
  - Gemfile
76
+ - Gemfile.lock
63
77
  - LICENSE
64
78
  - README.rdoc
65
79
  - Rakefile
@@ -77,8 +91,8 @@ homepage: http://github.com/mattbeedle/has_constant
77
91
  licenses: []
78
92
 
79
93
  post_install_message:
80
- rdoc_options:
81
- - --charset=UTF-8
94
+ rdoc_options: []
95
+
82
96
  require_paths:
83
97
  - lib
84
98
  required_ruby_version: !ruby/object:Gem::Requirement
data/.gitignore DELETED
@@ -1,22 +0,0 @@
1
- ## MAC OS
2
- .DS_Store
3
-
4
- ## TEXTMATE
5
- *.tmproj
6
- tmtags
7
-
8
- ## EMACS
9
- *~
10
- \#*
11
- .\#*
12
-
13
- ## VIM
14
- *.swp
15
-
16
- ## PROJECT::GENERAL
17
- coverage
18
- rdoc
19
- pkg
20
- .bundle
21
-
22
- ## PROJECT::SPECIFIC