simple_model 1.2.8 → 1.2.9

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 CHANGED
@@ -1,4 +1,4 @@
1
- source "http://rubygems.org"
1
+ source "https://rubygems.org"
2
2
 
3
3
 
4
4
  # Specify your gem's dependencies in simple_model.gemspec
data/gemfiles/3.0.gemfile CHANGED
@@ -5,4 +5,4 @@ gem 'activemodel','~> 3.0.1'
5
5
  gem 'debugger', :platform => 'ruby'
6
6
  gem 'ruby-debug', :platform => 'jruby'
7
7
 
8
- gemspec :path=>"../"
8
+ gemspec :path => "../"
data/gemfiles/3.1.gemfile CHANGED
@@ -5,4 +5,4 @@ gem 'activemodel','~> 3.1.1'
5
5
  gem 'debugger', :platform => 'ruby'
6
6
  gem 'ruby-debug', :platform => 'jruby'
7
7
 
8
- gemspec :path=>"../"
8
+ gemspec :path => "../"
data/gemfiles/3.2.gemfile CHANGED
@@ -5,4 +5,4 @@ gem 'activemodel','~> 3.2.1'
5
5
  gem 'debugger', :platform => 'ruby'
6
6
  gem 'ruby-debug', :platform => 'jruby'
7
7
 
8
- gemspec :path=>"../"
8
+ gemspec :path => "../"
@@ -2,32 +2,32 @@ module SimpleModel
2
2
  module Attributes
3
3
  include ExtendCore
4
4
  extend ActiveSupport::Concern
5
- include ActiveModel::AttributeMethods
6
-
7
- def initialize(*attrs)
8
- attrs = attrs.extract_options!
5
+ include ActiveModel::AttributeMethods
6
+
7
+ def initialize(*attrs)
8
+ attrs = attrs.extract_options!
9
9
  attrs = attributes_with_for_init(attrs)
10
10
  attrs = self.class.before_initialize.call(self,attrs) if self.class.before_initialize
11
11
  set(attrs)
12
12
  self.class.after_initialize.call(self) if self.class.after_initialize
13
13
  end
14
-
14
+
15
15
  # Returns true if attribute has been initialized
16
16
  def initialized?(attr)
17
17
  attributes.key?(attr.to_sym)
18
18
  end
19
-
19
+
20
20
  def attributes
21
21
  @attributes ||= HashWithIndifferentAccess.new
22
22
  end
23
-
23
+
24
24
  def attributes=attrs
25
25
  @attributes = attrs
26
26
  end
27
-
27
+
28
28
  def get(attr)
29
29
  self.send(attr)
30
- end
30
+ end
31
31
  alias :read :get
32
32
 
33
33
  # Accepts a hash where the keys are methods and the values are values to be set.
@@ -38,14 +38,14 @@ module SimpleModel
38
38
  end
39
39
  end
40
40
  alias :set_attributes :set
41
-
41
+
42
42
  private
43
-
43
+
44
44
  def fetch_default_value(arg)
45
45
  return self.send(arg) if (arg.is_a?(Symbol) && self.respond_to?(arg))
46
46
  arg
47
47
  end
48
-
48
+
49
49
  # Returns attribute that have defaults in a hash: {:attrbute => "default value"}
50
50
  # Checks for alias attributes to ensure they are not overwritten
51
51
  def attributes_with_for_init(attrs)
@@ -57,13 +57,13 @@ module SimpleModel
57
57
  end
58
58
  d
59
59
  end
60
-
60
+
61
61
  def allow_set_default?(d,k,v)
62
62
  (v[:default] && v[:initialize] && (d[k].blank? && (self.class.alias_attributes[k].blank? || d.key?(self.class.alias_attributes[k]) && d[self.class.alias_attributes[k]].blank?)))
63
63
  end
64
-
64
+
65
65
  private
66
-
66
+
67
67
  def allow_attribute_action?(obj,val,options)
68
68
  return true if (options[:if].blank? && options[:unless].blank?)
69
69
  b = true
@@ -85,18 +85,18 @@ module SimpleModel
85
85
  b = (b && !options[:unless].call(obj,val)) if options[:unless].is_a?(Proc)
86
86
  b
87
87
  end
88
-
88
+
89
89
  # Rails 3.2 + required when searching for attributes in from inherited classes/cmodles
90
90
  def attribute(name)
91
91
  attributes[name.to_sym]
92
92
  end
93
-
94
- module ClassMethods
93
+
94
+ module ClassMethods
95
95
  # Creates a new instance where the attributes store is set to object
96
96
  # provided, which allows one to pass a session store hash or any other
97
97
  # hash-like object to be used for persistance. Typically used for modeling
98
98
  # session stores for authorization or shopping carts
99
- # EX:
99
+ # EX:
100
100
  # class ApplicationController < ActionController::Base
101
101
  # def session_user
102
102
  # session[:user] ||= {}
@@ -111,23 +111,23 @@ module SimpleModel
111
111
  new.set(new.send(:attributes_with_for_init,session_hash))
112
112
  new
113
113
  end
114
-
114
+
115
115
  def alias_attributes
116
116
  @alias_attributes ||= {}.with_indifferent_access
117
117
  end
118
-
118
+
119
119
  def alias_attributes=alias_attributes
120
120
  @alias_attributes = alias_attributes
121
121
  end
122
-
122
+
123
123
  def defined_attributes
124
124
  @defined_attributes ||= {}.with_indifferent_access
125
125
  end
126
-
126
+
127
127
  def defined_attributes=defined_attributes
128
128
  @defined_attributes = defined_attributes
129
129
  end
130
-
130
+
131
131
  # The default settings for a SimpeModel class
132
132
  # Options:
133
133
  # * :on_set - accepts a lambda that is run when an attribute is set
@@ -138,17 +138,17 @@ module SimpleModel
138
138
  # * :allow_blank - when set to false, if an attributes value is blank attempts to set the default value, defaults to true
139
139
  def default_attribute_settings
140
140
  @default_attribute_settings ||= {:attributes_method => :attributes,
141
- :on_set => lambda {|obj,attr| attr},
142
- :on_get => lambda {|obj,attr| attr},
143
- :allow_blank => true,
144
- :initialize => true
145
- }
141
+ :on_set => lambda {|obj,attr| attr},
142
+ :on_get => lambda {|obj,attr| attr},
143
+ :allow_blank => true,
144
+ :initialize => true
145
+ }
146
146
  end
147
-
147
+
148
148
  def default_attribute_settings=default_attribute_settings
149
149
  @default_attribute_settings = default_attribute_settings
150
150
  end
151
-
151
+
152
152
  # We want to re-run define_attribute_methods since attributes are not all defined
153
153
  # at once, so we must set @attribute_methods_generated to nil to allow the
154
154
  # re-run to occur ONLY IN RAILS 3.0.
@@ -157,17 +157,17 @@ module SimpleModel
157
157
  @attribute_methods_generated = nil #if (ActiveModel::VERSION::MAJOR == 3 && ActiveModel::VERSION::MINOR == 0)
158
158
  define_attribute_methods(self.defined_attributes.keys)
159
159
  end
160
-
160
+
161
161
  # builds the setter and getter methods
162
162
  def create_attribute_methods(attributes,options)
163
- unless attributes.blank?
163
+ unless attributes.blank?
164
164
  attributes.each do |attr|
165
165
  define_reader_with_options(attr,options)
166
166
  define_setter_with_options(attr,options)
167
167
  end
168
168
  end
169
169
  end
170
-
170
+
171
171
  def define_reader_with_options(attr,options)
172
172
  add_defined_attribute(attr,options)
173
173
  options = default_attribute_settings.merge(options) if options[:on_get].blank?
@@ -181,43 +181,43 @@ module SimpleModel
181
181
  define_method("#{attr.to_s}?") do
182
182
  val = self.send(attr)
183
183
  if val.respond_to?(:to_b)
184
- val = val.to_b
184
+ val = val.to_b
185
185
  else
186
186
  val = !val.blank? if val.respond_to?(:blank?)
187
187
  end
188
188
  val
189
189
  end
190
190
  end
191
-
191
+
192
192
  # Creates setter methods for the provided attributes
193
- # On set, it will mark the attribute as changed if the attributes has been
193
+ # On set, it will mark the attribute as changed if the attributes has been
194
194
  # initialized.
195
195
  def define_setter_with_options(attr,options)
196
196
  add_defined_attribute(attr,options)
197
- options = default_attribute_settings.merge(options) if (options[:on_set].blank? || options[:after_set].blank?)
197
+ options = default_attribute_settings.merge(options) if (options[:on_set].blank? || options[:after_set].blank?)
198
198
  define_method("#{attr.to_s}=") do |val|
199
199
  if allow_attribute_action?(self,val,options)
200
- val = fetch_default_value(options[:default]) if (!options[:allow_blank] && options.key?(:default) && val.blank?)
200
+ val = fetch_default_value(options[:default]) if (!options[:allow_blank] && options.key?(:default) && val.blank?)
201
201
  val = options[:on_set].call(self,val) unless (val.blank? && !options[:allow_blank] )
202
202
  will_change = "#{attr}_will_change!".to_sym
203
- self.send(will_change) if (initialized?(attr) && val != self.attributes[attr])
203
+ self.send(will_change) if (initialized?(attr) && val != self.attributes[attr])
204
204
  self.attributes[attr] = val
205
- options[:after_set].call(self,val) if options[:after_set]
205
+ options[:after_set].call(self,val) if options[:after_set]
206
206
  end
207
207
  end
208
208
  end
209
-
209
+
210
210
  AVAILABLE_ATTRIBUTE_METHODS = {
211
211
  :has_attribute => {:alias => :has_attributes},
212
212
  :has_boolean => {:cast_to => :to_b, :alias => :has_booleans},
213
213
  :has_currency => {:cast_to => :to_d, :alias => :has_currencies},
214
- :has_date => {:cast_to => :to_date, :alias => :has_dates} ,
215
- :has_decimal => {:cast_to => :to_d, :alias => :has_decimals},
216
- :has_float => {:cast_to => :to_f, :alias => :has_floats},
214
+ :has_date => {:cast_to => :to_date, :alias => :has_dates} ,
215
+ :has_decimal => {:cast_to => :to_d, :alias => :has_decimals},
216
+ :has_float => {:cast_to => :to_f, :alias => :has_floats},
217
217
  :has_int => {:cast_to => :to_i, :alias => :has_ints},
218
- :has_time => {:cast_to => :to_time, :alias => :has_times}
218
+ :has_time => {:cast_to => :to_time, :alias => :has_times}
219
219
  }
220
-
220
+
221
221
  AVAILABLE_ATTRIBUTE_METHODS.each do |method,method_options|
222
222
  define_method(method) do |*attributes|
223
223
  options = default_attribute_settings.merge(attributes.extract_options!)
@@ -226,19 +226,19 @@ module SimpleModel
226
226
  end
227
227
  module_eval("alias #{method_options[:alias]} #{method}")
228
228
  end
229
-
229
+
230
230
  # Creates alias setter and getter for the supplied attribute using the supplied alias
231
231
  # See spec for example.
232
232
  def alias_attribute(new_alias,attribute)
233
233
  alias_attributes[attribute] = new_alias
234
- define_method(new_alias) do
234
+ define_method(new_alias) do
235
235
  self.send(attribute)
236
236
  end
237
237
  define_method("#{new_alias.to_s}=") do |*args, &block|
238
238
  self.send("#{attribute.to_s}=",*args, &block)
239
239
  end
240
240
  end
241
-
241
+
242
242
  # A hook to perform actions on the pending attributes or the object before
243
243
  # the pending attributes have been initialized.
244
244
  # Expects an lambda that accept the object, the pending attributes hash and
@@ -247,66 +247,62 @@ module SimpleModel
247
247
  def before_initialize
248
248
  @before_initialize
249
249
  end
250
-
250
+
251
251
  # Expects an lambda that accept the object, the pending attributes hash and
252
252
  # should return a hash to be set
253
- # EX: lambda {|obj,attrs| attrs.select{|k,v| !v.blank?}}
253
+ # EX: lambda {|obj,attrs| attrs.select{|k,v| !v.blank?}}
254
254
  def before_initialize=before_initialize
255
255
  raise TypeError "before_initialize must be a lambda that accepts the attirbutes to be initialize" unless before_initialize.is_a?(Proc)
256
256
  @before_initialize = before_initialize
257
257
  end
258
-
258
+
259
259
  # A hook to perform actions after all attributes have been initialized
260
260
  # Expects an lambda that accept the object and the pending attributes hash
261
261
  # EX: lambda{|obj| puts "initialized"}
262
262
  def after_initialize
263
263
  @after_initialize
264
264
  end
265
-
265
+
266
266
  # Expects an lambda that accept the object and the pending attributes hash
267
267
  # EX: lambda{|obj| puts "initialized"}
268
268
  def after_initialize=after_initialize
269
269
  raise TypeError "after_initalize must be a Proc" unless after_initialize.is_a?(Proc)
270
270
  @after_initialize = after_initialize
271
271
  end
272
-
273
-
274
-
272
+
273
+
274
+
275
275
  # Must inherit super's defined_attributes and alias_attributes
276
276
  # Rails 3.0 does some weird stuff with ActiveModel::Dirty so we need a
277
- # hack to keep things working when a class in inherits from a super that
277
+ # hack to keep things working when a class inherits from a super that
278
278
  # has ActiveModel::Dirty included
279
279
  def inherited(base)
280
+ super
280
281
  # Rails 3.0 Hack
281
- if (ActiveModel::VERSION::MAJOR == 3 && ActiveModel::VERSION::MINOR == 0)
282
+ if (ActiveModel::VERSION::MAJOR == 3 && ActiveModel::VERSION::MINOR == 0)
282
283
  base.attribute_method_suffix '_changed?', '_change', '_will_change!', '_was'
283
284
  base.attribute_method_affix :prefix => 'reset_', :suffix => '!'
284
285
  end
285
- base.send(:include, ActiveModel::Dirty)
286
-
287
- unless (ActiveModel::VERSION::MAJOR == 3 && ActiveModel::VERSION::MINOR == 0)
288
- self.defined_attributes.each do |attr,options|
289
- base.create_attribute_methods([attr],options)
290
- end
286
+ base.defined_attributes = self.defined_attributes.merge(base.defined_attributes)
287
+ base.alias_attributes = self.alias_attributes.merge(base.alias_attributes)
288
+ base.defined_attributes.each do |attr,options|
289
+ base.create_attribute_methods([attr],options) #unless base.instance_methods.include?(attr.to_sym)
291
290
  end
292
-
293
- base.alias_attributes = self.alias_attributes.merge(base.alias_attributes )
294
- super
295
291
  end
296
292
  end
297
-
298
- # Rails 3.0 does some weird stuff with ActiveModel::Dirty so we need a
299
- # hack to keep things working when a class includes a module that has
293
+
294
+ # Rails 3.0 does some weird stuff with ActiveModel::Dirty so we need a
295
+ # hack to keep things working when a class includes a module that has
300
296
  # ActiveModel::Dirty included
301
297
  def self.included(base)
302
- base.extend(Attributes::ClassMethods)
303
- base.send(:include, ActiveModel::Dirty)
298
+ base.extend(Attributes::ClassMethods)
299
+ base.send(:include, ActiveModel::Dirty)
304
300
  base.send(:include, ActiveModel::Validations)
305
301
  base.send(:include, ActiveModel::Conversion)
306
302
  base.extend ActiveModel::Naming
307
303
  base.extend ActiveModel::Callbacks
308
304
  base.send(:include, ActiveModel::Validations::Callbacks)
309
-
305
+
310
306
  # Rails 3.0 Hack
311
307
  if (ActiveModel::VERSION::MAJOR == 3 && ActiveModel::VERSION::MINOR == 0)
312
308
  base.attribute_method_suffix '_changed?', '_change', '_will_change!', '_was'
@@ -314,4 +310,4 @@ module SimpleModel
314
310
  end
315
311
  end
316
312
  end
317
- end
313
+ end
@@ -64,6 +64,7 @@ module SimpleModel
64
64
  end
65
65
 
66
66
  def puralize_errors_string(array)
67
+ array = array.to_a if array.is_a?(ActiveModel::Errors)
67
68
  s = "error"
68
69
  s << "s" if array.length > 1
69
70
  s
@@ -1,3 +1,3 @@
1
1
  module SimpleModel
2
- VERSION = "1.2.8"
2
+ VERSION = "1.2.9"
3
3
  end
@@ -1,4 +1,4 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper.rb')
1
+ require 'spec_helper.rb'
2
2
 
3
3
  describe SimpleModel::Attributes do
4
4
  before(:all) do
@@ -246,7 +246,7 @@ describe SimpleModel::Attributes do
246
246
  end
247
247
  end
248
248
  it "should merge defined attributes when class are inhereted" do
249
- NewerBase.defined_attributes[:bar].blank?.should be_false
249
+ NewerBase.defined_attributes[:bar].should_not be_nil
250
250
  n = NewerBase.new
251
251
  n.respond_to?(:bar_will_change!).should be_true
252
252
  end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper.rb'
2
+
3
+ class FooErrorClass < SimpleModel::Base
4
+ end
5
+
6
+ describe SimpleModel::ErrorHelpers do
7
+ describe '#errors_for_flash' do
8
+ it "should not raise error" do
9
+ f = FooErrorClass.new
10
+ f.errors.add(:foo, "something not great")
11
+ f.errors.add(:bar, "doh")
12
+ lambda {f.errors_for_flash}.should_not raise_error
13
+ end
14
+ end
15
+ end
@@ -1,4 +1,4 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
1
+ require 'spec_helper.rb'
2
2
 
3
3
  describe SimpleModel do
4
4
  context 'action methods' do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_model
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.8
4
+ version: 1.2.9
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-03-04 00:00:00.000000000 Z
12
+ date: 2013-04-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -104,6 +104,7 @@ files:
104
104
  - lib/simple_model/version.rb
105
105
  - simple_model.gemspec
106
106
  - spec/attributes_spec.rb
107
+ - spec/error_helpers_spec.rb
107
108
  - spec/extend_core_spec.rb
108
109
  - spec/simple_model_spec.rb
109
110
  - spec/spec_helper.rb
@@ -133,6 +134,7 @@ specification_version: 3
133
134
  summary: Simpifies building tableless models or models backed by webservices
134
135
  test_files:
135
136
  - spec/attributes_spec.rb
137
+ - spec/error_helpers_spec.rb
136
138
  - spec/extend_core_spec.rb
137
139
  - spec/simple_model_spec.rb
138
140
  - spec/spec_helper.rb