attrio 0.7.1 → 0.7.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: f38f08eb9c96c9bc68668f4b28bacece08cd119b
4
- data.tar.gz: 982476ccb901dc19c20c37f8f1509d5614ebda47
3
+ metadata.gz: c37cd18841fadc28823ecaa640d6305070784769
4
+ data.tar.gz: fbff0c3dac7fba2297dc760ba7483110cd15343c
5
5
  SHA512:
6
- metadata.gz: ccb357e02fcadfde2302b69f4c773379c75a980631cda62d043d2e4d1ffa12afd43417e09bea001c6826bffdd44a1f41193776f0130546850351e6b88e47eb88
7
- data.tar.gz: 8649db1c408b5db579bd4cc8775d642dbe71056e0ea7095b00587f8fa3089fe8b59bf0527305317b1ba0b18814f182ce391ff6fce756ec3eda2470c434c45c32
6
+ metadata.gz: abd5ad3981872e97d9d9c82702949583663265c4a20aef0c3844aa0793adaefb847a8e864e5884464c1a9ee960e56fb9d86eafba735f3dd0000d83fd117bed52
7
+ data.tar.gz: 5cc8f267baabd969c5d4d54a8eb0ee37260b542777f8a8a28987d63de7ddc3ab256f4ef9967d64e6bd7834d16a27b6bed23f25027d9ef1ddde7d1fe785099248
data/README.md CHANGED
@@ -29,7 +29,7 @@ Include Attrio into your class and then use `#define_attributes` block to declar
29
29
  ```ruby
30
30
  class User
31
31
  include Attrio
32
-
32
+
33
33
  define_attributes do
34
34
  attr :name, String
35
35
  attr :age, Integer
@@ -46,10 +46,10 @@ By default Attrio defines `#attributes` accessor which contains `Hash` with attr
46
46
  * reader method visibility
47
47
  * instance variable name
48
48
  * additional options
49
-
49
+
50
50
  ```ruby
51
51
  user = User.new
52
- user.attributes
52
+ user.attributes
53
53
  # => {
54
54
  # :name => #<Attrio::Attribute:0x007fc44e8ca680 @object=#<User:0x007fc44e8b2b48>, @name="name", @type=String, @options={}, @writer_method_name="name=", @writer_visibility=:public, @instance_variable_name="@name", @reader_method_name="name", @reader_visibility=:public>,
55
55
  # :age => #<Attrio::Attribute:0x007fc44e8d4c98 @object=#<User:0x007fc44e8b2b48>, @name="age", @type=Attrio::Types::Integer, @options={}, @writer_method_name="age=", @writer_visibility=:public, @instance_variable_name="@age", @reader_method_name="age", @reader_visibility=:public>,
@@ -71,17 +71,17 @@ Accessor name can be easily overridden by passing `:as` option to `define_attrib
71
71
  ```ruby
72
72
  class User
73
73
  include Attrio
74
-
74
+
75
75
  define_attributes :as => 'api_attributes' do
76
76
  attr :name, String
77
77
  attr :age, Integer
78
78
  attr :birthday, DateTime
79
79
  end
80
-
80
+
81
81
  define_attributes :as => 'settings' do
82
82
  attr :receives_notifications, Boolean, :default => true
83
83
  end
84
-
84
+
85
85
  end
86
86
  ```
87
87
 
@@ -113,7 +113,7 @@ class Page
113
113
  # default from a method name as symbol
114
114
  attr :editor_title, String, :default => :default_editor_title
115
115
  end
116
-
116
+
117
117
  def initialize(attributes = {})
118
118
  self.attributes = attributes
119
119
  end
@@ -129,7 +129,7 @@ class Page
129
129
  title
130
130
  else
131
131
  title.present? ? "UNPUBLISHED: #{title}" : "UNPUBLISHED"
132
- end
132
+ end
133
133
  end
134
134
  end
135
135
  ```
@@ -142,7 +142,7 @@ p = Page.new
142
142
  p.attributes[:editor_title].default?
143
143
  => true
144
144
  p.editor_title = 'PUBLISHED'
145
- => "PUBLISHED"
145
+ => "PUBLISHED"
146
146
  p.attributes[:editor_title].default?
147
147
  => false
148
148
  ```
@@ -163,7 +163,7 @@ module MassAssignment
163
163
  end
164
164
  end
165
165
 
166
- class City
166
+ class City
167
167
  include Attrio
168
168
  include MassAssignment
169
169
 
@@ -204,12 +204,12 @@ user.address.city.name
204
204
 
205
205
  ### Methods visibility
206
206
 
207
- Don't want your accessors to be public? Visibility can be overridden easily.
207
+ Don't want your accessors to be public? Visibility can be overridden easily.
208
208
 
209
209
  ```ruby
210
210
  class User
211
211
  include Attrio
212
-
212
+
213
213
  define_attributes do
214
214
  attr :name, String, :writer => :protected
215
215
  attr :secret_rating, Integer, :reader => :private
@@ -224,8 +224,8 @@ Any Ruby class can be passed as type to Attrio. If this class responds to `typec
224
224
  ```ruby
225
225
  class Klass
226
226
  include Attrio
227
-
228
- define_attributes do
227
+
228
+ define_attributes do
229
229
  attr :custom_attribute, CustomClass
230
230
  end
231
231
  end
@@ -240,10 +240,10 @@ By default boolean typecasts 'yes', '1', 1, 'true' as `TrueClass` and all other
240
240
  ```ruby
241
241
  class Klass
242
242
  include Attrio
243
-
243
+
244
244
  define_attributes do
245
245
  attr :boolean_attribute, Boolean
246
-
246
+
247
247
  attr :custom_boolean_attribute, Boolean, :yes => ['ja', '1', 1]
248
248
  # attr :custom_boolean_attribute, Boolean, :yes_values => ['ja', '1', 1]
249
249
  # attr :custom_boolean_attribute, Boolean, :no => ['nein', '0', 0]
@@ -259,12 +259,12 @@ These three class have similar behaviour and options. By passing `:format` optio
259
259
  ```ruby
260
260
  class Klass
261
261
  include Attrio
262
-
262
+
263
263
  define_attributes do
264
264
  attr :date_attribute, Date
265
265
  attr :time_attribute, Time
266
266
  attr :date_time_attribute, DateTime
267
-
267
+
268
268
  attr :custom_date_time_attribute, DateTime, :format => '%m/%d/%y-%H:%M:%S-%z'
269
269
  end
270
270
  end
@@ -277,7 +277,7 @@ Attribute will be typecasted using `to_f` method.
277
277
  ```ruby
278
278
  class Klass
279
279
  include Attrio
280
-
280
+
281
281
  define_attributes do
282
282
  attr :float_attribute, Float
283
283
  end
@@ -293,7 +293,7 @@ Optional `:base` parameter can be passed, during the typecast attribute will be
293
293
  ```ruby
294
294
  class Klass
295
295
  include Attrio
296
-
296
+
297
297
  define_attributes do
298
298
  attr :integer_attribute, Integer
299
299
  attr :custom_integer_attribute, Integer, :base => 2
@@ -305,12 +305,12 @@ end
305
305
 
306
306
  Attribute will be typecasted using `to_sym` method.
307
307
 
308
- If Optional `:underscore` parameter is passed, then attribute value will be downcased and underscored before calling `to_sym`.
308
+ If Optional `:underscore` parameter is passed, then attribute value will be downcased and underscored before calling `to_sym`.
309
309
 
310
310
  ```ruby
311
311
  class Klass
312
312
  include Attrio
313
-
313
+
314
314
  define_attributes do
315
315
  attr :symbol_attribute, Symbol
316
316
  attr :custom_symbol_attribute, Symbol, :underscore => true
@@ -341,7 +341,7 @@ Attrio adds its own `#inspect` method when included to the class. This overridde
341
341
  ```ruby
342
342
  class Klass
343
343
  include Attrio
344
-
344
+
345
345
  define_attributes :inspect => false do
346
346
  attr :attribute, String
347
347
  end
@@ -369,6 +369,7 @@ Contributors:
369
369
 
370
370
  * [Igor Alexandrov](http://igor-alexandrov.github.com/)
371
371
  * [Julia Egorova](https://github.com/vankiru)
372
+ * [Dmitry Radionov](https://github.com/Gikls)
372
373
 
373
374
  ## License
374
375
 
@@ -25,7 +25,7 @@ module Attrio
25
25
  klass.send :define_method, options[:method_name] do |value|
26
26
  if !value.nil?
27
27
  value = if type.respond_to?(:typecast) && type.respond_to?(:typecasted?)
28
- type.typecasted?(value) ? value : type.typecast(*[value, options])
28
+ type.typecasted?(value, options) ? value : type.typecast(*[value, options])
29
29
  else
30
30
  type == Hash && value.is_a?(Hash) ? value : type.new(value)
31
31
  end
@@ -5,8 +5,7 @@ module Attrio
5
5
  class Array < Base
6
6
  def self.typecast(value, options = {})
7
7
  begin
8
- array = value.respond_to?(:split) ? value.split(options[:split]) : Attrio::Helpers.to_a(value)
9
-
8
+ array = (!value.is_a?(Array) && value.respond_to?(:split)) ? value.split(options[:split]) : Attrio::Helpers.to_a(value).flatten!
10
9
  if options[:element].present?
11
10
  type = Attrio::AttributesParser.cast_type(self.element_type(options[:element]))
12
11
  options = self.element_options(options[:element])
@@ -26,8 +25,13 @@ module Attrio
26
25
  end
27
26
  end
28
27
 
29
- def self.typecasted?(value)
30
- value.is_a? ::Array
28
+ def self.typecasted?(value, options = {})
29
+ if options[:element].present?
30
+ type = Attrio::AttributesParser.cast_type(self.element_type(options[:element]))
31
+ value.is_a?(::Array) && !value.any?{ |e| !e.is_a?(type) }
32
+ else
33
+ value.is_a?(::Array)
34
+ end
31
35
  end
32
36
 
33
37
  protected
@@ -9,7 +9,7 @@ module Attrio
9
9
  raise NotImplementedError
10
10
  end
11
11
 
12
- def self.typecasted?(value)
12
+ def self.typecasted?(value, options = {})
13
13
  false
14
14
  end
15
15
 
@@ -14,7 +14,7 @@ module Attrio
14
14
  end
15
15
  end
16
16
 
17
- def self.typecasted?(value)
17
+ def self.typecasted?(value, options = {})
18
18
  value.is_a?(TrueClass) || value.is_a?(FalseClass)
19
19
  end
20
20
 
@@ -11,7 +11,7 @@ module Attrio
11
11
  end
12
12
  end
13
13
 
14
- def self.typecasted?(value)
14
+ def self.typecasted?(value, options = {})
15
15
  value.is_a? ::Date
16
16
  end
17
17
  end
@@ -11,7 +11,7 @@ module Attrio
11
11
  end
12
12
  end
13
13
 
14
- def self.typecasted?(value)
14
+ def self.typecasted?(value, options = {})
15
15
  value.is_a? ::DateTime
16
16
  end
17
17
  end
@@ -11,7 +11,7 @@ module Attrio
11
11
  end
12
12
  end
13
13
 
14
- def self.typecasted?(value)
14
+ def self.typecasted?(value, options = {})
15
15
  value.is_a? ::Float
16
16
  end
17
17
  end
@@ -14,7 +14,7 @@ module Attrio
14
14
  end
15
15
  end
16
16
 
17
- def self.typecasted?(value)
17
+ def self.typecasted?(value, options = {})
18
18
  value.is_a? ::Integer
19
19
  end
20
20
  end
@@ -26,7 +26,7 @@ module Attrio
26
26
  end
27
27
  end
28
28
 
29
- def self.typecasted?(value)
29
+ def self.typecasted?(value, options = {})
30
30
  value.is_a? ::Set
31
31
  end
32
32
  end
@@ -12,7 +12,7 @@ module Attrio
12
12
  end
13
13
  end
14
14
 
15
- def self.typecasted?(value)
15
+ def self.typecasted?(value, options = {})
16
16
  value.is_a? ::Symbol
17
17
  end
18
18
  end
@@ -11,7 +11,7 @@ module Attrio
11
11
  end
12
12
  end
13
13
 
14
- def self.typecasted?(value)
14
+ def self.typecasted?(value, options = {})
15
15
  value.is_a? ::Time
16
16
  end
17
17
  end
@@ -4,7 +4,7 @@ module Attrio
4
4
  module Version
5
5
  MAJOR = 0
6
6
  MINOR = 7
7
- PATCH = 1
7
+ PATCH = 2
8
8
  BUILD = nil
9
9
 
10
10
  STRING = [MAJOR, MINOR, PATCH, BUILD].compact.join('.')
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: attrio
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.1
4
+ version: 0.7.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Igor Alexandrov
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-11-17 00:00:00.000000000 Z
12
+ date: 2014-03-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec