code-box 0.3.0 → 0.3.1

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 (0.3.0)
4
+ code-box (0.3.1)
5
5
  activerecord (~> 3.0)
6
6
 
7
7
  GEM
data/README.md CHANGED
@@ -67,6 +67,8 @@ Example
67
67
  code_attribute :nationality, :lookup_type => :lookup
68
68
  end
69
69
 
70
+ # Note: Below class is a plain sample implementation. Code objects can be built easier with
71
+ # 'ActsAsCode' include (see below)
70
72
  class Code::Nationality
71
73
  attr_accessor :code, :name
72
74
 
@@ -79,7 +81,7 @@ Example
79
81
  The include will create the following method in Person:
80
82
 
81
83
  `#nationality` Will return the nationality object looked up using the method '.for_code' on the code class.
82
- Translation then can be done within this class with the first method described above.
84
+ Translation then can be done within this class with the first method described above ('acts_as_code' facilitates this as well).
83
85
 
84
86
 
85
87
 
@@ -90,9 +92,11 @@ The code value is interpreted as a foreign key on an associated AR Code object.
90
92
  class Person < ActiveRecord::Base
91
93
  include CodeBox::CodeAttribute
92
94
 
93
- code_attribute :nationality, :lookup_type => :activerecord
95
+ code_attribute :nationality, :lookup_type => :associated
94
96
  end
95
97
 
98
+ # Note: Below class is a plain sample implementation. Code objects can be built easier with
99
+ # 'ActsAsCode' include (see below)
96
100
  class Code::Nationality < ActiveRecord::Base
97
101
  # has attribute 'code' of type string
98
102
  end
@@ -106,19 +110,98 @@ The include and code specification will create the following methods in Person:
106
110
  :foreign_key => :nationality_code,
107
111
  :primary_key => :code
108
112
 
113
+ Above options can be overwritten in the 'code_attribute' option.
109
114
 
110
- ## Configuration details
111
115
 
112
- ### Lookup through I18n
113
- ... to be completed
114
116
 
115
- ### Lookup through code object
116
- ... to be completed
117
+ ### Defining code classes (acts_as_code)
117
118
 
118
- ### Lookup through associated AR Code Object
119
- ... to be completed
119
+ As describe above code_attributes can reference code objects if the `code_attribute` is of type `:associated` or `:lookup`.
120
120
 
121
+ Making an code object `acts_as_code` provides the following features:
121
122
 
123
+ * `&#35;translated_code(locale=I18n.locale, *other_locale_options)
124
+ Translates the code stored in `code`
125
+
126
+ * `&#35;translated_code(locale=I18n.locale, *other_locale_options)`
127
+ Translates the code stored in `code`
128
+
129
+ * `.translate_code(code, *options)`
130
+ Translates a single code if `code` is a code, an array of codes of `code` is an array.
131
+ If code is an array the option :build => :zip can be used to build a select option capable array (e.g `[['Switzerland', 'SUI'],['Germany', 'GER'],['Denmark', 'DEN']]`)
132
+
133
+ * `.for_code(code)
134
+ Answers the code object for the given code (fetched from cache)
135
+
136
+ * `.clear_code_cache`
137
+ Clears the cache so its build up on need from all codes from scratch
138
+
139
+
140
+ __Note:__ The code name can be configures using the `:code_attribute` option.
141
+ `:code_attribute => :iso_code` leads to methods like #translate_iso_code etc.
142
+
143
+
144
+ #### Plain old ruby object codes (:poro)
145
+
146
+ Assuming we have a simple ruby class with default code attribute 'code' we can defined such a class like
147
+
148
+ class Codes::MySpecificCode
149
+ include CodeBox::ActsAsCode
150
+
151
+ # Above include cretes the following:
152
+ #
153
+ # attr_accessor :code
154
+ #
155
+ # def initialize(code)
156
+ # @code = code
157
+ # end
158
+ #
159
+ # def self.all
160
+ # raise "Sublass responsibility. You should implement '.all' returning all codes"
161
+ # end
162
+
163
+ # @return [Array] List if all code objects (instances of this)
164
+ def self.all
165
+ # you need to implement this
166
+ end
167
+
168
+ end
169
+
170
+ Configuration options are:
171
+
172
+ :type => :poro #(default, other :active_record)
173
+ :code_attribute => :code #(default) or any other name as symbol
174
+
175
+
176
+
177
+ #### ActiveRecod code objects (:active_record)
178
+
179
+ Assuming we have an ActiveRecod code class with `code_attribute :code` we can defined such a class like
180
+
181
+ class Codes::MySpecificCode < ActiveRecord::Base
182
+ include CodeBox::ActsAsCode[:type => :active_record]
183
+
184
+ # Above include cretes the following:
185
+ #
186
+ # validates_presence_of :code
187
+ # validates_uniqueness_of :code
188
+ #
189
+ # default_scope order('code')
190
+
191
+ end
192
+
193
+ Configuration options are:
194
+
195
+ :type => :active_record # other :poro(default)
196
+ :code_attribute => :code # (default) or any other name as symbol
197
+ :polymorphic => false # (default). If `true` the uniqueness validation is scope by the attribute `type`
198
+ :uniqueness_case_sensitive => true # (default). If `false` the the uniqueness validation is case insensitive
199
+ :position_attr => :position # If present, the order when fetching the codes is done with this expression (default scope - means - if you want to omit the order used `unscoped` on any AR operation).
200
+
201
+
202
+
203
+ ### Examples
204
+ TO BE DONE…
122
205
 
123
206
  ## Contributing
124
207
 
@@ -140,7 +140,7 @@ module CodeBox
140
140
  class_eval <<-CODE
141
141
  attr_accessor :#{code_attr}
142
142
 
143
- def self.initialize(#{code_attr})
143
+ def initialize(#{code_attr})
144
144
  self.#{code_attr} = #{code_attr}
145
145
  end
146
146
 
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module CodeBox
4
- VERSION = "0.3.0"
4
+ VERSION = "0.3.1"
5
5
  end
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: 0.3.0
4
+ version: 0.3.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -119,7 +119,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
119
119
  version: '0'
120
120
  segments:
121
121
  - 0
122
- hash: -1456200753415907069
122
+ hash: -268048192927979465
123
123
  required_rubygems_version: !ruby/object:Gem::Requirement
124
124
  none: false
125
125
  requirements:
@@ -128,7 +128,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
128
128
  version: '0'
129
129
  segments:
130
130
  - 0
131
- hash: -1456200753415907069
131
+ hash: -268048192927979465
132
132
  requirements: []
133
133
  rubyforge_project:
134
134
  rubygems_version: 1.8.21