code-box 1.0.1 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- code-box (1.0.1)
4
+ code-box (1.1.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
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, :lookup_type => :lookup
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
- :foreign_code_attribute => :code,
44
- :lookup_type => :i18n,
45
- :code_attribute_suffix => 'code'
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
- # setter
69
- def #{code_name}=(code)
70
- value = code.#{foreign_code_attr_name}
71
- #{code_attr_name} = value
72
- end
73
- RUBY_
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({
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module CodeBox
4
- VERSION = "1.0.1"
4
+ VERSION = "1.1.0"
5
5
  end
@@ -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
@@ -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
 
@@ -11,6 +11,8 @@ ActiveRecord::Schema.define(:version => 0) do
11
11
  t.string :ager_type_code
12
12
 
13
13
  t.string :country_2_code
14
+
15
+ t.string :countries_code
14
16
  end
15
17
 
16
18
  create_table :codes_country, :force => true do |t|
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.1
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: 2013-09-25 00:00:00.000000000 Z
12
+ date: 2014-01-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord