iron-enum 1.0.4 → 1.0.5

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 0e8720fd7684984e779c2c1ec32303efa0bc4524
4
+ data.tar.gz: 25418ec2a560576081bab7141e409c750001793e
5
+ SHA512:
6
+ metadata.gz: a4333e90565840188208a30f0f34bb16abddb6c7ff02dc3bd649b40c3de99128f14bbac2046373ec1a070456be76f4759ae6dbb0dd9fa9fa706cf2fdc0558f82
7
+ data.tar.gz: ca0e7f8ddfd034dcc65e22b6a2c0422f90fb0361f195a602277e574a0d5237760b0a1c1a8e43148a2f22215d3900c76b00fa9ffe0e2b8cf5d0f4a0d088597a6f
@@ -1,3 +1,8 @@
1
+ == 1.0.5 / 2016-08-16
2
+
3
+ * Change enum_attr to assume :some_enum maps to SomeEnum module
4
+ * Enable require 'iron-enum' instead of 'iron/enum'
5
+
1
6
  == 1.0.4 / 2013-06-21
2
7
 
3
8
  * Same as 1.0.4, but add support to model attributes as well (doh)
@@ -11,7 +11,7 @@ Add support for rich enum values (enumerated constants) to Ruby/Rails.
11
11
  Managing constants - status flags, system states, etc - is frustrating when working
12
12
  with Ruby and Rails. The canonical solution is to use class constants. But doing so
13
13
  leaves a lot to be desired. This gem provides a much more Ruby-like way of dealing
14
- with magic constants, that provides symbol/key-based lookup, automatic conversion between
14
+ with magic constants that provides symbol/key-based lookup, automatic conversion between
15
15
  keys and values, user-friendly naming, attribute support, model scoping and validation, and more.
16
16
 
17
17
  To use:
@@ -30,16 +30,16 @@ To use:
30
30
  enum :returned, 5
31
31
  end
32
32
 
33
- # Once you have your enum set up, there are a host of things you can do
34
- # To start with, enums set up normal Ruby class constants
33
+ # Once you have your enum set up, there are a host of things you can do.
34
+ # To start with, enums set up normal Ruby class constants:
35
35
  >> puts OrderStatus::PURCHASED
36
36
  => 3
37
37
 
38
- # But you can also refer to them with symbolic keys
38
+ # But you can also refer to them with symbolic keys:
39
39
  >> puts OrderStatus.value(:purchased)
40
40
  => 3
41
41
 
42
- # You can convert between values, keys and text
42
+ # You can convert between values, keys and text:
43
43
  >> OrderStatus.value(:shipped)
44
44
  => 4
45
45
  >> OrderStatus.name(:shipped)
@@ -60,7 +60,11 @@ To use:
60
60
 
61
61
  # This is all handy, but where enums really shine is as declared attributes
62
62
  class Order < ActiveRecord::Base
63
+ # Pass the attribute and the enum module that it uses
63
64
  enum_attr :status => OrderStatus
65
+
66
+ # Note that if your attribute's name maps to your enum module name, you can skip the hash:
67
+ # enum_attr :order_status
64
68
  end
65
69
 
66
70
  # Now you can set a value using a key
@@ -78,7 +82,7 @@ To use:
78
82
  # This raises RuntimeError('Unknown key or value [27] in enum OrderStatus')
79
83
  >> @order.status = 27
80
84
 
81
- # You even get free scoping
85
+ # You even get free scoping!
82
86
  >> Order.with_status(:shipped)
83
87
  => [...all orders with status == 4...]
84
88
 
@@ -100,4 +104,8 @@ To install, simply run:
100
104
 
101
105
  RVM users can skip the sudo:
102
106
 
103
- gem install iron-enum
107
+ gem install iron-enum
108
+
109
+ Once installed, just require it:
110
+
111
+ require 'iron-enum'
@@ -1 +1 @@
1
- 1.0.4
1
+ 1.0.5
@@ -0,0 +1,2 @@
1
+ # Make it easy to require using the gem name...
2
+ require 'iron/enum'
@@ -13,13 +13,19 @@ module Enum
13
13
  # declare it like so:
14
14
  #
15
15
  # class User < ActiveRecord::Base
16
- # enum_attr :user_type => UserType
16
+ # # A symbol will be assumed to map to a valid enum class name
17
+ # enum_attr :user_type
18
+ # # If your attribute's name won't map automatically, you can pass a hash instead
19
+ # enum_attr :another_user_type => UserType
20
+ # # If you have multiple enum attributes, you can add them all in one call, just make
21
+ # # sure mapped attrs are at the end or you'll get an error
22
+ # enum_attr :user_type, :another_user_type => UserType
17
23
  # end
18
24
  #
19
25
  # When using non-model classes, it's the same syntax:
20
26
  #
21
27
  # class User
22
- # enum_attr :user_type => UserType
28
+ # enum_attr :user_type
23
29
  # end
24
30
  #
25
31
  # This will tell your class/model that the user_type attribute contains values from the UserType enum, and
@@ -46,7 +52,22 @@ module Enum
46
52
  module AttrSupport
47
53
 
48
54
  # Call with enum_attr :field => Enum
49
- def enum_attr(field_to_enum_map)
55
+ def enum_attr(*array_or_map)
56
+ # Convert to a full map
57
+ field_to_enum_map = {}
58
+ array_or_map.each do |info|
59
+ if info.is_a?(Symbol)
60
+ name = info.to_s.capitalize.gsub(/\_([a-z])/) { $1.capitalize }
61
+ klass = Object.const_get(name) rescue nil
62
+ raise "Unknown enum class '#{name}' for enum_attr :#{info}" unless klass
63
+ field_to_enum_map[info] = klass
64
+ elsif info.is_a?(Hash)
65
+ field_to_enum_map.merge!(info)
66
+ else
67
+ raise "Invalid enum_attr key: #{info.inspect}"
68
+ end
69
+ end
70
+
50
71
  # Save off the attr map
51
72
  @enum_attrs ||= {}
52
73
  @enum_attrs.merge!(field_to_enum_map)
@@ -8,6 +8,7 @@ describe Enum do
8
8
 
9
9
  class AttrClass
10
10
  enum_attr :pos => AttrTest
11
+ enum_attr :attr_test, :bob => AttrTest
11
12
  end
12
13
 
13
14
  before do
@@ -16,6 +17,8 @@ describe Enum do
16
17
 
17
18
  it 'should support declaring enum attributes' do
18
19
  Module.should respond_to(:enum_attr)
20
+ @obj.should respond_to(:attr_test_second?)
21
+ @obj.should respond_to(:bob_as_name)
19
22
  end
20
23
 
21
24
  it 'should allow getting an attribute in key form' do
@@ -16,6 +16,6 @@ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib', 'iron',
16
16
  RSpec.configure do |config|
17
17
  config.add_formatter 'documentation'
18
18
  config.color = true
19
- config.backtrace_clean_patterns = [/rspec/]
19
+ config.backtrace_exclusion_patterns = [/rspec/]
20
20
  end
21
21
 
metadata CHANGED
@@ -1,62 +1,55 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: iron-enum
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.4
5
- prerelease:
4
+ version: 1.0.5
6
5
  platform: ruby
7
6
  authors:
8
7
  - Rob Morris
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-06-21 00:00:00.000000000 Z
11
+ date: 2016-08-16 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: rspec
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ~>
17
+ - - "~>"
20
18
  - !ruby/object:Gem::Version
21
19
  version: '2.6'
22
20
  type: :development
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ~>
24
+ - - "~>"
28
25
  - !ruby/object:Gem::Version
29
26
  version: '2.6'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: active_record
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ~>
31
+ - - "~>"
36
32
  - !ruby/object:Gem::Version
37
33
  version: '3.0'
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ~>
38
+ - - "~>"
44
39
  - !ruby/object:Gem::Version
45
40
  version: '3.0'
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: sqlite3
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ~>
45
+ - - "~>"
52
46
  - !ruby/object:Gem::Version
53
47
  version: '1.3'
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ~>
52
+ - - "~>"
60
53
  - !ruby/object:Gem::Version
61
54
  version: '1.3'
62
55
  description: Adds enumerated constant value support to Ruby and Rails projects
@@ -66,10 +59,16 @@ executables: []
66
59
  extensions: []
67
60
  extra_rdoc_files: []
68
61
  files:
62
+ - ".rspec"
63
+ - History.txt
64
+ - LICENSE
65
+ - README.rdoc
66
+ - Version.txt
67
+ - lib/iron-enum.rb
68
+ - lib/iron/enum.rb
69
69
  - lib/iron/enum/attr_support.rb
70
70
  - lib/iron/enum/core.rb
71
71
  - lib/iron/enum/model_support.rb
72
- - lib/iron/enum.rb
73
72
  - spec/enum/attr_spec.rb
74
73
  - spec/enum/enum_spec.rb
75
74
  - spec/enum/key_spec.rb
@@ -78,34 +77,28 @@ files:
78
77
  - spec/enum/option_spec.rb
79
78
  - spec/enum/value_spec.rb
80
79
  - spec/spec_helper.rb
81
- - LICENSE
82
- - History.txt
83
- - Version.txt
84
- - README.rdoc
85
- - .rspec
86
80
  homepage: http://irongaze.com
87
81
  licenses:
88
82
  - MIT
83
+ metadata: {}
89
84
  post_install_message:
90
85
  rdoc_options: []
91
86
  require_paths:
92
87
  - lib
93
88
  required_ruby_version: !ruby/object:Gem::Requirement
94
- none: false
95
89
  requirements:
96
- - - ! '>='
90
+ - - ">="
97
91
  - !ruby/object:Gem::Version
98
92
  version: 1.9.2
99
93
  required_rubygems_version: !ruby/object:Gem::Requirement
100
- none: false
101
94
  requirements:
102
- - - ! '>='
95
+ - - ">="
103
96
  - !ruby/object:Gem::Version
104
97
  version: '0'
105
98
  requirements: []
106
99
  rubyforge_project:
107
- rubygems_version: 1.8.24
100
+ rubygems_version: 2.4.3
108
101
  signing_key:
109
- specification_version: 3
102
+ specification_version: 4
110
103
  summary: Enum support for Ruby and Rails
111
104
  test_files: []