enumerize 0.2.2 → 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/.travis.yml CHANGED
@@ -10,5 +10,6 @@ gemfile:
10
10
  notifications:
11
11
  email:
12
12
  recipients:
13
- - sergey.nartimov@twinslash.com
14
- - vasily.ermolovich@twinslash.com
13
+ - lest@brainspec.com
14
+ - nashby@brainspec.com
15
+ - dreamfall@brainspec.com
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## 0.3.0 (July 9, 2012) ##
2
+
3
+ ### enhancements
4
+ * Accept a values hash to store an attribute using custom values (e.g. integers) (by [@lest](https://github.com/lest))
5
+
1
6
  ## 0.2.2 (May 22, 2012) ##
2
7
 
3
8
  ### bug fix
data/Gemfile CHANGED
@@ -3,8 +3,7 @@ source 'https://rubygems.org'
3
3
  gemspec
4
4
 
5
5
  gem 'rake'
6
- gem 'minitest', '~> 2.12.0'
7
- gem 'mocha'
6
+ gem 'minitest', '~> 3.1'
8
7
 
9
8
  gem 'activerecord', '~> 3.2.0'
10
9
  gem 'sqlite3'
data/MIT-LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2012 Twinslash
1
+ Copyright (c) 2012 Brainspec
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Enumerize [![TravisCI](https://secure.travis-ci.org/twinslash/enumerize.png?branch=master)](http://travis-ci.org/twinslash/enumerize) [![Gemnasium](https://gemnasium.com/twinslash/enumerize.png)](https://gemnasium.com/twinslash/enumerize)
1
+ # Enumerize [![TravisCI](https://secure.travis-ci.org/brainspec/enumerize.png?branch=master)](http://travis-ci.org/brainspec/enumerize) [![Gemnasium](https://gemnasium.com/brainspec/enumerize.png)](https://gemnasium.com/brainspec/enumerize)
2
2
 
3
3
  Enumerated attributes with I18n and ActiveRecord/Mongoid support
4
4
 
@@ -93,6 +93,42 @@ use it with forms:
93
93
  <% end %>
94
94
  ```
95
95
 
96
+ Boolean methods:
97
+
98
+ ```ruby
99
+ user.sex = :male
100
+ user.sex.male? #=> true
101
+ user.sex.female? #=> false
102
+ ```
103
+
104
+ To make some attributes shared across different classes it's possible to define them in a separate module and then include it into classes:
105
+
106
+ ```ruby
107
+ module PersonEnumerations
108
+ include Enumerize
109
+
110
+ enumerize :sex, :in => %w[male female]
111
+ end
112
+
113
+ class Person
114
+ include PersonEnumerations
115
+ end
116
+
117
+ class User
118
+ include PersonEnumerations
119
+ end
120
+ ```
121
+
122
+ It's also possible to store enumerized attribute value using custom values (e.g. integers). You can pass a hash as `:in` option to achieve this:
123
+
124
+ ```ruby
125
+ class User < ActiveRecord::Base
126
+ enumerize :role, :in => {:user => 1, :admin => 2}
127
+ end
128
+ ```
129
+
130
+ ### SimpleForm
131
+
96
132
  If you are using SimpleForm gem you don't need to specify input type (`:select` by default) and collection:
97
133
 
98
134
  ```erb
@@ -109,6 +145,8 @@ and if you want it as radio buttons:
109
145
  <% end %>
110
146
  ```
111
147
 
148
+ ### Formtastic
149
+
112
150
  If you are using Formtastic gem you also don't need to specify input type (`:select` by default) and collection:
113
151
 
114
152
  ```erb
@@ -125,33 +163,6 @@ and if you want it as radio buttons:
125
163
  <% end %>
126
164
  ```
127
165
 
128
- Boolean methods:
129
-
130
- ```ruby
131
- user.sex = :male
132
- user.sex.male? #=> true
133
- user.sex.female? #=> false
134
- ```
135
-
136
- To make some attributes shared across different classes it's possible to define them in a separate module and then include it into classes:
137
-
138
- ```ruby
139
- module PersonEnumerations
140
- include Enumerize
141
-
142
- enumerize :sex, :in => %w[male female]
143
- end
144
-
145
- class Person
146
- include PersonEnumerations
147
- end
148
-
149
- class User
150
- include PersonEnumerations
151
- end
152
- ```
153
-
154
-
155
166
  ## Contributing
156
167
 
157
168
  1. Fork it
data/enumerize.gemspec CHANGED
@@ -3,10 +3,10 @@ require File.expand_path('../lib/enumerize/version', __FILE__)
3
3
 
4
4
  Gem::Specification.new do |gem|
5
5
  gem.authors = ["Sergey Nartimov"]
6
- gem.email = "info@twinslash.com"
6
+ gem.email = "team@brainspec.com"
7
7
  gem.description = %q{Enumerated attributes with I18n and ActiveRecord/Mongoid support}
8
8
  gem.summary = %q{Enumerated attributes with I18n and ActiveRecord/Mongoid support}
9
- gem.homepage = "https://github.com/twinslash/enumerize"
9
+ gem.homepage = "https://github.com/brainspec/enumerize"
10
10
 
11
11
  gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
12
12
  gem.files = `git ls-files`.split("\n")
@@ -3,8 +3,7 @@ source 'https://rubygems.org'
3
3
  gem 'enumerize', :path => '..'
4
4
 
5
5
  gem 'rake'
6
- gem 'minitest', '~> 2.12.0'
7
- gem 'mocha'
6
+ gem 'minitest', '~> 3.0.0'
8
7
 
9
8
  gem 'activerecord', '~> 3.1.0'
10
9
  gem 'sqlite3'
@@ -7,8 +7,9 @@ module Enumerize
7
7
 
8
8
  @klass = klass
9
9
  @name = name.to_sym
10
- @values = Array(options[:in]).map { |v| Value.new(self, v) }
11
- @value_hash = Hash[@values.map { |v| [v.to_s, v] }]
10
+ @values = Array(options[:in]).map { |v| Value.new(self, *v) }
11
+ @value_hash = Hash[@values.map { |v| [v.value.to_s, v] }]
12
+ @value_hash.merge! Hash[@values.map { |v| [v.to_s, v] }]
12
13
 
13
14
  if options[:default]
14
15
  @default_value = find_value(options[:default])
@@ -75,7 +75,7 @@ module Enumerize
75
75
  _enumerized_values_for_validation[:#{attr.name}] = new_value.nil? ? nil : new_value.to_s
76
76
 
77
77
  allowed_value_or_nil = self.class.enumerized_attributes[:#{attr.name}].find_value(new_value)
78
- allowed_value_or_nil = allowed_value_or_nil.to_s unless allowed_value_or_nil.nil?
78
+ allowed_value_or_nil = allowed_value_or_nil.value unless allowed_value_or_nil.nil?
79
79
 
80
80
  if defined?(super)
81
81
  super allowed_value_or_nil
@@ -2,10 +2,15 @@ require 'i18n'
2
2
 
3
3
  module Enumerize
4
4
  class Value < String
5
- def initialize(attr, value)
6
- @attr = attr
5
+ def initialize(attr, name, value=nil)
6
+ @attr = attr
7
+ @value = value || name.to_s
7
8
 
8
- super(value.to_s)
9
+ super(name.to_s)
10
+ end
11
+
12
+ def value
13
+ @value
9
14
  end
10
15
 
11
16
  def text
@@ -1,3 +1,3 @@
1
1
  module Enumerize
2
- VERSION = "0.2.2"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -50,10 +50,11 @@ module Enumerize
50
50
 
51
51
  it 'updates dependants' do
52
52
  attr = make_attr(:a)
53
- dependant = mock
54
- dependant.expects(:<<).with(attr)
53
+ dependant = MiniTest::Mock.new
54
+ dependant.expect(:<<, nil, [attr])
55
55
  subject.add_dependant dependant
56
56
  subject << attr
57
+ dependant.verify
57
58
  end
58
59
 
59
60
  it 'adds attrs to dependant' do
@@ -25,4 +25,19 @@ describe Enumerize::Attribute do
25
25
  attr.options.must_equal [['a text', 'a'], ['b text', 'b']]
26
26
  end
27
27
  end
28
+
29
+ describe 'values hash' do
30
+ before do
31
+ build_attr nil, :foo, :in => {:a => 1, :b => 2}
32
+ end
33
+
34
+ it 'returns hash keys as values' do
35
+ attr.values.must_equal %w[a b]
36
+ end
37
+
38
+ it 'finds values by hash values' do
39
+ attr.find_value(1).must_equal 'a'
40
+ attr.find_value(2).must_equal 'b'
41
+ end
42
+ end
28
43
  end
data/test/base_test.rb CHANGED
@@ -167,4 +167,16 @@ describe Enumerize::Base do
167
167
  object.foo.must_equal 'test'
168
168
  object.attributes.must_equal(:foo => 'test')
169
169
  end
170
+
171
+ it 'returns stores hash values' do
172
+ klass.enumerize(:foo, :in => {:a => 1, :b => 2})
173
+
174
+ object.foo = :a
175
+ object.instance_variable_get(:@foo).must_equal 1
176
+ object.foo.must_equal 'a'
177
+
178
+ object.foo = :b
179
+ object.instance_variable_get(:@foo).must_equal 2
180
+ object.foo.must_equal 'b'
181
+ end
170
182
  end
data/test/test_helper.rb CHANGED
@@ -1,6 +1,5 @@
1
1
  require 'minitest/autorun'
2
2
  require 'minitest/spec'
3
- require 'mocha'
4
3
  require 'active_support/core_ext/kernel/reporting'
5
4
 
6
5
  $VERBOSE=true
data/test/value_test.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  require 'test_helper'
2
2
 
3
3
  describe Enumerize::Value do
4
- let(:attr) { Object.new }
4
+ let(:attr) { Struct.new(:values).new([]) }
5
5
  let(:value) { Enumerize::Value.new(attr, 'test_value') }
6
6
 
7
7
  it 'is a string' do
@@ -14,7 +14,7 @@ describe Enumerize::Value do
14
14
 
15
15
  describe 'boolean methods comparison' do
16
16
  before do
17
- attr.stubs(:values).returns([value, Enumerize::Value.new(attr, 'other_value')])
17
+ attr.values = [value, Enumerize::Value.new(attr, 'other_value')]
18
18
  end
19
19
 
20
20
  it 'returns true if value equals method' do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: enumerize
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-22 00:00:00.000000000 Z
12
+ date: 2012-07-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -28,7 +28,7 @@ dependencies:
28
28
  - !ruby/object:Gem::Version
29
29
  version: 3.1.3
30
30
  description: Enumerated attributes with I18n and ActiveRecord/Mongoid support
31
- email: info@twinslash.com
31
+ email: team@brainspec.com
32
32
  executables: []
33
33
  extensions: []
34
34
  extra_rdoc_files: []
@@ -64,7 +64,7 @@ files:
64
64
  - test/support/view_test_helper.rb
65
65
  - test/test_helper.rb
66
66
  - test/value_test.rb
67
- homepage: https://github.com/twinslash/enumerize
67
+ homepage: https://github.com/brainspec/enumerize
68
68
  licenses: []
69
69
  post_install_message:
70
70
  rdoc_options: []
@@ -78,7 +78,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
78
78
  version: '0'
79
79
  segments:
80
80
  - 0
81
- hash: 4327206353620209815
81
+ hash: -3692164922268239392
82
82
  required_rubygems_version: !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
@@ -87,7 +87,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
87
87
  version: '0'
88
88
  segments:
89
89
  - 0
90
- hash: 4327206353620209815
90
+ hash: -3692164922268239392
91
91
  requirements: []
92
92
  rubyforge_project:
93
93
  rubygems_version: 1.8.23