simpler_enum 0.1.1 → 0.1.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 852c5f27e0a8a5ad10d26623f91b83964f1e09e9
4
- data.tar.gz: 77221d767767b7f3d8345be3a2ce3fb7d3b507bc
3
+ metadata.gz: a137b4bec16ae080f77916b91953b58e9052dbb7
4
+ data.tar.gz: 7fb0a3d277b03c2eb5a0fe8e42cd083d790de61d
5
5
  SHA512:
6
- metadata.gz: 29e8d3f065ca1d8a704f8c8e9918d0760219bf2b5b6a502683d77e8d0028d9f5bd62ad5afbac71a483c9101cb000d1213baacf67a2e6c1e1bdf422087a157cfd
7
- data.tar.gz: e47c153ede0a48eb12f0164c38390cab04e98bda4bd18b56f2b80d27c537bad31fc230ffa5280e68bf15fac35c08e0a4bdec70ad58c12c0decc970501a8c4d4d
6
+ metadata.gz: 0abf31f96c855d5983ad9abc47358bd1ea6cff815df0ca1fa9a87bc5f06de40b2ad8d44191572d377f2ee21e34c1b28a86509ebbdc942b00be3fa152f2e55b29
7
+ data.tar.gz: c7eb44b75b2ea6e56bc3f0bf81ec6e3c13e3b0568a8dd26c51c10eb028856084a25dfd8c6c8a2147fa01a2da736159c5f27104e7e050fb30b1be5f1324d8f0db
data/README.md CHANGED
@@ -63,7 +63,7 @@ end
63
63
  => false
64
64
  [10] pry(main)> necojackarc.fine?
65
65
  => true
66
- [11] pry(main)> necojackarc.mood = 1
66
+ [11] pry(main)> necojackarc.mood = 1 # excellent
67
67
  => 1
68
68
  [12] pry(main)> necojackarc.fine?
69
69
  => false
data/lib/simpler_enum.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require "active_support"
2
2
  require "active_support/core_ext"
3
3
  require "simpler_enum/version"
4
+ require "simpler_enum/generator"
4
5
 
5
6
  module SimplerEnum
6
7
  def self.included(base)
@@ -11,59 +12,8 @@ module SimplerEnum
11
12
  def simpler_enum(single_size_hash)
12
13
  fail ArgumentError if single_size_hash.size != 1
13
14
 
14
- name, enum_values = single_size_hash.first
15
-
16
- define_read_enum_values_method_to_class!(name.to_s.pluralize, enum_values)
17
- define_read_enum_value_method_to_instance!(name)
18
- define_write_enum_value_method_to_instance!(name)
19
-
20
- enum_values.each do |key, _|
21
- define_query_enum_state_method_to_instance!(name, key)
22
- define_change_enum_state_method_to_instance!(name, key)
23
- end
24
- end
25
-
26
- private
27
-
28
- def define_read_enum_values_method_to_class!(pluralized_name, enum_values)
29
- instance_variable_set("@#{pluralized_name}", enum_values)
30
- define_singleton_method pluralized_name do
31
- instance_variable_get "@#{pluralized_name}"
32
- end
33
- end
34
-
35
- def define_query_enum_state_method_to_instance!(enum_name, value_name)
36
- define_method "#{value_name}?" do
37
- current_value = instance_variable_get("@#{enum_name}")
38
- current_value == self.class.public_send(enum_name.to_s.pluralize.to_sym)[value_name]
39
- end
40
- end
41
-
42
- def define_change_enum_state_method_to_instance!(enum_name, value_name)
43
- define_method "#{value_name}!" do
44
- next_value = self.class.public_send(enum_name.to_s.pluralize.to_sym)[value_name]
45
- instance_variable_set("@#{enum_name}", next_value)
46
- public_send(enum_name)
47
- end
48
- end
49
-
50
- def define_read_enum_value_method_to_instance!(enum_name)
51
- define_method "#{enum_name}" do
52
- value = instance_variable_get("@#{enum_name}")
53
- self.class.public_send(enum_name.to_s.pluralize.to_sym).key(value)
54
- end
55
- end
56
-
57
- def define_write_enum_value_method_to_instance!(enum_name)
58
- define_method "#{enum_name}=" do |value|
59
- next_value =
60
- if value.is_a?(Symbol)
61
- self.class.public_send(enum_name.to_s.pluralize.to_sym)[value]
62
- else
63
- value
64
- end
65
- instance_variable_set("@#{enum_name}", next_value)
66
- end
15
+ enum_name, enum_values = single_size_hash.first
16
+ SimplerEnum::Generator.new(self, enum_name, enum_values).execute!
67
17
  end
68
18
  end
69
19
  end
@@ -0,0 +1,93 @@
1
+ module SimplerEnum
2
+ class Generator
3
+ def initialize(klass, enum_name, enum_values)
4
+ @klass = klass
5
+ @enum_name = enum_name
6
+ @enum_values = enum_values
7
+ end
8
+
9
+ def execute!
10
+ define_read_enum_values_method_to_class!
11
+
12
+ define_read_attribute!
13
+ define_write_attribute!
14
+
15
+ define_read_enum_value_method_to_instance!
16
+ define_write_enum_value_method_to_instance!
17
+
18
+ @enum_values.each do |key, _|
19
+ define_query_enum_state_method_to_instance!(key)
20
+ define_change_enum_state_method_to_instance!(key)
21
+ end
22
+ end
23
+
24
+ private
25
+
26
+ def define_read_enum_values_method_to_class!
27
+ @klass.class_exec(@enum_name.to_s.pluralize, @enum_values) do |pluralized_name, enum_values|
28
+ instance_variable_set("@#{pluralized_name}", enum_values)
29
+ define_singleton_method pluralized_name do
30
+ instance_variable_get "@#{pluralized_name}"
31
+ end
32
+ end
33
+ end
34
+
35
+ def define_write_attribute!
36
+ @klass.class_eval do
37
+ define_method :write_attribute do |key, val|
38
+ super rescue instance_variable_set("@#{key}", val) # rubocop:disable Style/RescueModifier
39
+ end
40
+ end
41
+ end
42
+
43
+ def define_read_attribute!
44
+ @klass.class_eval do
45
+ define_method :read_attribute do |key|
46
+ super rescue instance_variable_get("@#{key}") # rubocop:disable Style/RescueModifier
47
+ end
48
+ end
49
+ end
50
+
51
+ def define_read_enum_value_method_to_instance!
52
+ @klass.class_exec(@enum_name) do |enum_name|
53
+ define_method "#{enum_name}" do
54
+ value = read_attribute(enum_name)
55
+ self.class.public_send(enum_name.to_s.pluralize.to_sym).key(value)
56
+ end
57
+ end
58
+ end
59
+
60
+ def define_write_enum_value_method_to_instance!
61
+ @klass.class_exec(@enum_name) do |enum_name|
62
+ define_method "#{enum_name}=" do |value|
63
+ next_value =
64
+ if value.is_a?(Symbol)
65
+ self.class.public_send(enum_name.to_s.pluralize.to_sym)[value]
66
+ else
67
+ value
68
+ end
69
+ write_attribute(enum_name, next_value)
70
+ end
71
+ end
72
+ end
73
+
74
+ def define_query_enum_state_method_to_instance!(value_name)
75
+ @klass.class_exec(@enum_name) do |enum_name|
76
+ define_method "#{value_name}?" do
77
+ current_value = read_attribute(enum_name)
78
+ current_value == self.class.public_send(enum_name.to_s.pluralize.to_sym)[value_name]
79
+ end
80
+ end
81
+ end
82
+
83
+ def define_change_enum_state_method_to_instance!(value_name)
84
+ @klass.class_exec(@enum_name) do |enum_name|
85
+ define_method "#{value_name}!" do
86
+ next_value = self.class.public_send(enum_name.to_s.pluralize.to_sym)[value_name]
87
+ write_attribute(enum_name, next_value)
88
+ public_send(enum_name)
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end
@@ -1,3 +1,3 @@
1
1
  module SimplerEnum
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simpler_enum
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - necojackarc
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-11-10 00:00:00.000000000 Z
11
+ date: 2015-11-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -141,6 +141,7 @@ files:
141
141
  - bin/console
142
142
  - bin/setup
143
143
  - lib/simpler_enum.rb
144
+ - lib/simpler_enum/generator.rb
144
145
  - lib/simpler_enum/version.rb
145
146
  - simpler_enum.gemspec
146
147
  homepage: https://github.com/necojackarc/simpler_enum