numbered_list 0.0.3 → 0.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.
- checksums.yaml +4 -4
- data/lib/numbered_list.rb +83 -81
- data/lib/numbered_list/item_value.rb +3 -1
- data/lib/numbered_list/marshall_base.rb +3 -1
- metadata +43 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 80cf710fa3e25cd38aba46fe6cd82b17821ab14d4d95dacce3c2a63a5537104b
|
4
|
+
data.tar.gz: 60c24f1eac0320eb8ddb0638468d9afde5911c489148baf2ed3c9ce4b2acd1d8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7acdc946c956c2cc2c82e0b02b39f3728f6ba25fb5fed3e39b31969bc9017291364491ea0637babf075074619539d35ce5abcaa8e57429ede6c7898bac4fef9e
|
7
|
+
data.tar.gz: 442cbb49b8e4b80f675faef0f84e100dc6988dcf83920925488adc6b254624021206595e99fd46993e86e60afaec6ea67b429c6d5f748df2533f6f353fd4fa99
|
data/lib/numbered_list.rb
CHANGED
@@ -1,120 +1,122 @@
|
|
1
|
+
require "rubygems"
|
2
|
+
require "active_record"
|
3
|
+
require "values"
|
1
4
|
require 'numbered_list/item_value'
|
5
|
+
require 'numbered_list/marshall_base'
|
6
|
+
module NumberedList
|
7
|
+
class List
|
8
|
+
attr_reader :item
|
2
9
|
|
3
|
-
|
4
|
-
attr_reader :item
|
10
|
+
delegate :formatted, :name, :description, :order_value, :to_item_description, to: :item
|
5
11
|
|
6
|
-
|
7
|
-
|
8
|
-
class BadType < StandardError
|
9
|
-
end
|
12
|
+
class BadType < StandardError
|
13
|
+
end
|
10
14
|
|
11
|
-
|
12
|
-
|
15
|
+
class DuplicateKey < StandardError
|
16
|
+
end
|
13
17
|
|
14
|
-
|
18
|
+
def self.reset_list!
|
15
19
|
|
16
|
-
|
20
|
+
list.values.each do |item|
|
17
21
|
|
18
|
-
|
22
|
+
if respond_to?(item.builder_method_name)
|
19
23
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
+
(
|
25
|
+
class << self;
|
26
|
+
self;
|
27
|
+
end).send(:remove_method, item.builder_method_name)
|
24
28
|
|
25
|
-
|
26
|
-
|
27
|
-
|
29
|
+
end #https://www.ruby-forum.com/topic/116025
|
30
|
+
if respond_to?(item.query_method_name)
|
31
|
+
remove_method item.query_method_name
|
32
|
+
end
|
28
33
|
end
|
34
|
+
@items = {}
|
29
35
|
end
|
30
|
-
@items = {}
|
31
|
-
end
|
32
36
|
|
33
|
-
|
34
|
-
|
35
|
-
|
37
|
+
def self.list
|
38
|
+
@items || {}
|
39
|
+
end
|
36
40
|
|
37
|
-
|
41
|
+
def self.add_item(item)
|
38
42
|
|
39
|
-
|
40
|
-
|
43
|
+
if list.has_key?(item.name)
|
44
|
+
raise DuplicateKey, "The key #{item.name} has already been registered."
|
45
|
+
end
|
46
|
+
@items ||= {}
|
47
|
+
@items[item.name] = item
|
41
48
|
end
|
42
|
-
@items ||= {}
|
43
|
-
@items[item.name] = item
|
44
|
-
end
|
45
49
|
|
46
|
-
|
50
|
+
def self.add_item_builder(item)
|
47
51
|
|
48
|
-
|
49
|
-
|
52
|
+
self.define_singleton_method(item.builder_method_name) do
|
53
|
+
self.new(item.name)
|
54
|
+
end
|
50
55
|
end
|
51
|
-
end
|
52
56
|
|
53
|
-
|
54
|
-
|
55
|
-
|
57
|
+
def self.add_item_query(item)
|
58
|
+
define_method(item.query_method_name) do
|
59
|
+
name == item.name
|
60
|
+
end
|
56
61
|
end
|
57
|
-
end
|
58
62
|
|
59
|
-
|
63
|
+
def self.item(item_values)
|
60
64
|
|
61
|
-
|
65
|
+
item = NumberedList::ItemValue.with(item_values)
|
62
66
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
+
add_item(item)
|
68
|
+
add_item_builder(item)
|
69
|
+
add_item_query(item)
|
70
|
+
class_exists = "#{self}::Marshall".constantize rescue nil #https://stackoverflow.com/a/32869926
|
67
71
|
|
68
|
-
|
69
|
-
|
72
|
+
add_marshall_class unless class_exists
|
73
|
+
end
|
70
74
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
75
|
+
def self.add_marshall_class
|
76
|
+
klass = self.const_set("Marshall", Class.new(NumberedList::MarshallBase))
|
77
|
+
original_class = self
|
78
|
+
klass.class_eval do
|
79
|
+
define_method(:value_class) do
|
80
|
+
return original_class
|
81
|
+
end
|
77
82
|
end
|
78
83
|
end
|
79
|
-
end
|
80
84
|
|
81
|
-
|
82
|
-
|
83
|
-
|
85
|
+
def initialize(name)
|
86
|
+
if !self.class.types.include?(name.to_s.upcase)
|
87
|
+
raise BadType, "'#{name}' Class #{name.class} is not a valid #{self.class.to_s}"
|
88
|
+
end
|
89
|
+
@item = self.class.find_item(name.to_s)
|
84
90
|
end
|
85
|
-
@item = self.class.find_item(name.to_s)
|
86
|
-
end
|
87
|
-
|
88
91
|
|
89
|
-
def self.find_item(key)
|
90
|
-
list && list.has_key?(key) ? list[key] : raise(BadType, "Unable to find the #{key}/#{key.class} for #{self.to_s} #{self.types} NumberedItem")
|
91
|
-
end
|
92
92
|
|
93
|
+
def self.find_item(key)
|
94
|
+
list && list.has_key?(key) ? list[key] : raise(BadType, "Unable to find the #{key}/#{key.class} for #{self.to_s} #{self.types} NumberedItem")
|
95
|
+
end
|
93
96
|
|
94
|
-
def self.description(label)
|
95
|
-
find_item(label).description
|
96
|
-
end
|
97
97
|
|
98
|
-
|
99
|
-
|
100
|
-
|
98
|
+
def self.description(label)
|
99
|
+
find_item(label).description
|
100
|
+
end
|
101
101
|
|
102
|
-
|
103
|
-
|
104
|
-
|
102
|
+
def self.as_objs
|
103
|
+
self.types.collect { |t| self.new(t) }
|
104
|
+
end
|
105
105
|
|
106
|
-
|
107
|
-
|
108
|
-
|
106
|
+
def ==(other)
|
107
|
+
other.to_s == self.to_s
|
108
|
+
end
|
109
109
|
|
110
|
-
|
111
|
-
|
112
|
-
|
110
|
+
def to_s
|
111
|
+
name
|
112
|
+
end
|
113
113
|
|
114
|
-
|
115
|
-
|
114
|
+
def to_str
|
115
|
+
to_s
|
116
|
+
end
|
116
117
|
|
118
|
+
def self.types
|
119
|
+
list.keys
|
120
|
+
end
|
117
121
|
end
|
118
|
-
|
119
|
-
|
120
|
-
end
|
122
|
+
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
|
2
|
-
|
2
|
+
module NumberedList
|
3
|
+
class ItemValue < Value.new(:name, :formatted, :order_value, :description)
|
3
4
|
def builder_method_name
|
4
5
|
method_name.to_sym
|
5
6
|
end
|
@@ -13,3 +14,4 @@
|
|
13
14
|
"#{formatted} :: #{description}"
|
14
15
|
end
|
15
16
|
end
|
17
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: numbered_list
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dirk Elmendorf
|
@@ -24,6 +24,48 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: values
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.8'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.8'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.7'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.7'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: values
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.8'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.8'
|
27
69
|
description: This is a simpler wrapper object to make it easy to build usefule Enum/Value
|
28
70
|
Objects
|
29
71
|
email: dirk@r26d.com
|