code-box 1.0.1 → 1.1.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/Gemfile.lock +1 -1
- data/README.md +11 -3
- data/lib/code-box/code_attribute.rb +41 -14
- data/lib/code-box/version.rb +1 -1
- data/test/code-box/test_code_attribute.rb +29 -0
- data/test/resources/models.rb +6 -0
- data/test/resources/schema.rb +2 -0
- metadata +2 -2
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -75,9 +75,12 @@ Example
|
|
75
75
|
class Person
|
76
76
|
include CodeBox::CodeAttribute
|
77
77
|
|
78
|
-
attr_accessor :nationality_code
|
78
|
+
attr_accessor :nationality_code, :nationalities_code
|
79
79
|
|
80
|
-
code_attribute :nationality,
|
80
|
+
code_attribute :nationality, :lookup_type => :lookup
|
81
|
+
|
82
|
+
code_attribute :nationalities, :lookup_type => :lookup, :enum => :set, :class_name => 'Codes::Country'
|
83
|
+
# Will store countries as comma separated list of country codes, e.g. 'SUI,GER,USA'
|
81
84
|
end
|
82
85
|
|
83
86
|
# Note: Below class is a plain sample implementation. Code objects can be built easier with
|
@@ -304,11 +307,16 @@ Assuming we have an ActiveRecod code class with `code_attribute :code` we can de
|
|
304
307
|
|
305
308
|
## Changelog
|
306
309
|
|
310
|
+
### Version 1.1.0
|
311
|
+
* Type lookup has now :enum functionality. Supported is the type :set right now
|
312
|
+
|
313
|
+
### Version 1.0.1
|
314
|
+
* Fixed Constant creation. Checks for constants are limited to current scope.
|
315
|
+
|
307
316
|
### Version 1.0.0
|
308
317
|
* Whatever activerecord version you use - or not activerecord at all - simply use the gem version 1.0.0. There is
|
309
318
|
no dependency on activerecord anymore. You can use activerecord codes as described. TravisCI tests show proper working on activerecord 3.x and 4.x.
|
310
319
|
|
311
|
-
|
312
320
|
### Version 0.5.1
|
313
321
|
* Adding testing methods for codes objects. E.g. Code-Object with code 'my_code' get method `#codeObjectInstance.my_code?` defined.
|
314
322
|
* Method `.build_select_options` has been changed so you can pass in more flexible empty option configuration (see Readme).
|
@@ -40,9 +40,10 @@ module CodeBox
|
|
40
40
|
|
41
41
|
module ClassMethods
|
42
42
|
DefaultOptions = {
|
43
|
-
:
|
44
|
-
:
|
45
|
-
:
|
43
|
+
foreign_code_attribute: :code,
|
44
|
+
lookup_type: :i18n,
|
45
|
+
code_attribute_suffix: 'code',
|
46
|
+
enum: false,
|
46
47
|
}
|
47
48
|
|
48
49
|
def code_attribute(*code_names)
|
@@ -51,6 +52,9 @@ module CodeBox
|
|
51
52
|
lookup_type = opts.delete(:lookup_type)
|
52
53
|
code_attr_suffix = (opts.delete(:code_attribute_suffix) || "code").to_s
|
53
54
|
foreign_code_attr_name = opts.delete(:foreign_code_attribute)
|
55
|
+
enum = opts.delete(:enum)
|
56
|
+
|
57
|
+
|
54
58
|
|
55
59
|
code_names.each do |code_name|
|
56
60
|
opts_copy = opts.dup
|
@@ -59,18 +63,41 @@ module CodeBox
|
|
59
63
|
|
60
64
|
case lookup_type
|
61
65
|
when :lookup
|
62
|
-
class_eval <<-RUBY_
|
63
|
-
# getter
|
64
|
-
def #{code_name}
|
65
|
-
#{code_class_name}.for_code(#{code_attr_name})
|
66
|
-
end
|
67
66
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
67
|
+
case enum
|
68
|
+
when :set
|
69
|
+
class_eval <<-RUBY_
|
70
|
+
# getter
|
71
|
+
def #{code_name}
|
72
|
+
codes = #{code_attr_name}.split(',').map(&:strip)
|
73
|
+
codes.map{ |code| #{code_class_name}.for_code(code) }
|
74
|
+
end
|
75
|
+
|
76
|
+
# setter
|
77
|
+
def #{code_name}=(code)
|
78
|
+
code_objs = Array(code)
|
79
|
+
value = code_objs.map{ |code_obj| code_obj.#{foreign_code_attr_name} }.join(',')
|
80
|
+
self.#{code_attr_name} = value
|
81
|
+
end
|
82
|
+
RUBY_
|
83
|
+
when :binary
|
84
|
+
raise ArgumentError, "#:binary is not yet supported enum option"
|
85
|
+
when false
|
86
|
+
class_eval <<-RUBY_
|
87
|
+
# getter
|
88
|
+
def #{code_name}
|
89
|
+
#{code_class_name}.for_code(#{code_attr_name})
|
90
|
+
end
|
91
|
+
|
92
|
+
# setter
|
93
|
+
def #{code_name}=(code)
|
94
|
+
value = code.#{foreign_code_attr_name}
|
95
|
+
self.#{code_attr_name} = value
|
96
|
+
end
|
97
|
+
RUBY_
|
98
|
+
else
|
99
|
+
raise ArgumentError, "#{enum} is not a valid enum: option"
|
100
|
+
end
|
74
101
|
|
75
102
|
when :associated
|
76
103
|
association_options = opts_copy.merge({
|
data/lib/code-box/version.rb
CHANGED
@@ -107,4 +107,33 @@ class TestCodeAttribute < Test::Unit::TestCase
|
|
107
107
|
assert_equal(code_ch, code_client.country_2)
|
108
108
|
end
|
109
109
|
|
110
|
+
# :type => :lookup --------------------------------------------------------------------
|
111
|
+
def test_code_attribute_lookup_set_as_list_getter
|
112
|
+
Codes::Country.delete_all
|
113
|
+
|
114
|
+
code_ch = Codes::Country.create(:code => 'CH', :name => 'Switzerland')
|
115
|
+
code_de = Codes::Country.create(:code => 'DE', :name => 'Germany')
|
116
|
+
|
117
|
+
code_client = Codes::SampleClass.new(:countries_code => 'CH,DE')
|
118
|
+
|
119
|
+
assert_equal('CH,DE', code_client.countries_code)
|
120
|
+
assert_equal([code_ch, code_de], code_client.countries)
|
121
|
+
end
|
122
|
+
|
123
|
+
def test_code_attribute_lookup_set_as_list_getter
|
124
|
+
Codes::Country.delete_all
|
125
|
+
|
126
|
+
code_ch = Codes::Country.create(:code => 'CH', :name => 'Switzerland')
|
127
|
+
code_de = Codes::Country.create(:code => 'DE', :name => 'Germany')
|
128
|
+
|
129
|
+
code_client = Codes::SampleClass.new(:countries_code => 'IT')
|
130
|
+
countries = [code_ch, code_de]
|
131
|
+
code_client.countries = countries
|
132
|
+
code_client.save
|
133
|
+
|
134
|
+
assert_equal('CH,DE', code_client.countries_code)
|
135
|
+
assert_equal(countries, code_client.countries)
|
136
|
+
assert_equal('CH,DE', code_client.countries.map(&:code).join(','))
|
137
|
+
end
|
138
|
+
|
110
139
|
end
|
data/test/resources/models.rb
CHANGED
@@ -17,6 +17,8 @@ module Codes
|
|
17
17
|
code_attribute :ager_type, :lookup_type => :lookup, :foreign_code_attribute => 'code_id'
|
18
18
|
|
19
19
|
code_attribute :country_2, :lookup_type => :associated, :class_name => 'Codes::Country'
|
20
|
+
|
21
|
+
code_attribute :countries, :lookup_type => :lookup, :class_name => 'Codes::Country', :enum => :set
|
20
22
|
end
|
21
23
|
|
22
24
|
class CivilStatus
|
@@ -49,6 +51,10 @@ module Codes
|
|
49
51
|
|
50
52
|
class Country < ActiveRecord::Base
|
51
53
|
self.table_name = :codes_country
|
54
|
+
|
55
|
+
def self.for_code(code)
|
56
|
+
where('code= ?', code).first
|
57
|
+
end
|
52
58
|
end
|
53
59
|
|
54
60
|
|
data/test/resources/schema.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: code-box
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.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:
|
12
|
+
date: 2014-01-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activerecord
|