simpler_enum 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
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