simple_model 1.2.22 → 1.2.23
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.
- checksums.yaml +8 -8
- data/LICENSE.txt +1 -1
- data/benchmarks/simple_model.rb +2 -1
- data/lib/simple_model.rb +1 -1
- data/lib/simple_model/attributes.rb +28 -29
- data/lib/simple_model/base.rb +71 -72
- data/lib/simple_model/error_helpers.rb +8 -9
- data/lib/simple_model/extend_core.rb +47 -57
- data/lib/simple_model/simple_model_railtie.rb +1 -1
- data/lib/simple_model/validation.rb +4 -4
- data/lib/simple_model/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MTk1Y2IxMGU5Y2YxYzNhM2ZiZmIzNjVlN2E5MWUxMmQ1ZDkxNWNjYw==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZGU2ZjIxNGFkYzVlZTM3YjZjZDI2ODYyZmQzYTYwNzg0NmE0Mzk5MQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
Mjg4NzY3ZTViMjcwNjJjNWJhZDkxZmQ4YzViODdiNjVkMTYzZTQxZTU5YmRm
|
10
|
+
NDI1MGM2NGRiYTk4ZGQzMDRkYmI3MTg5YmYxMTlhMGI0ZjlkMjMzMzRkZTc1
|
11
|
+
YjU0ODM4OWQzN2U1OGI1ODBjYzQ3NGNiMTk3YzQ3NDlhNDVmNTk=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MzE0YzVkOTZkMmFhNTM1OTUyMGFiM2UyOTU5OWIxYWRkZDVjYzgwY2Y2ZWQ3
|
14
|
+
YjA3YmY0NWQ0MDA4MTJkZDI4MmVjZTBhODE1OWJlYTk4MjFmOWRjNzQzMzJm
|
15
|
+
YWNlZjE4MDJhYmViOTNjN2VjOTNmZDM5ZDMzZmQ3MTFjNTQwZmU=
|
data/LICENSE.txt
CHANGED
data/benchmarks/simple_model.rb
CHANGED
@@ -13,12 +13,13 @@ Benchmark.bm do |b|
|
|
13
13
|
BenchClass.new()
|
14
14
|
end
|
15
15
|
end
|
16
|
-
|
16
|
+
|
17
17
|
b.report("initialize with attrs") do
|
18
18
|
30000.times.each do
|
19
19
|
BenchClass.new(:num => 1, :dec => "12.4")
|
20
20
|
end
|
21
21
|
end
|
22
|
+
|
22
23
|
b.report("get") do
|
23
24
|
30000.times.each do
|
24
25
|
klass = BenchClass.new
|
data/lib/simple_model.rb
CHANGED
@@ -7,7 +7,7 @@ module SimpleModel
|
|
7
7
|
|
8
8
|
def initialize(*attrs)
|
9
9
|
attrs = attrs.extract_options!
|
10
|
-
attrs =
|
10
|
+
attrs = attributes_for_init(attrs)
|
11
11
|
attrs = self.class.before_initialize.call(self,attrs) if self.class.before_initialize
|
12
12
|
set(attrs)
|
13
13
|
self.class.after_initialize.call(self) if self.class.after_initialize
|
@@ -19,11 +19,11 @@ module SimpleModel
|
|
19
19
|
|
20
20
|
# Returns true if attribute has been initialized
|
21
21
|
def initialized?(attr)
|
22
|
-
|
22
|
+
attributes.key?(attr)
|
23
23
|
end
|
24
24
|
|
25
25
|
def get(attr)
|
26
|
-
|
26
|
+
send(attr)
|
27
27
|
end
|
28
28
|
alias :read :get
|
29
29
|
|
@@ -31,7 +31,7 @@ module SimpleModel
|
|
31
31
|
# set(:foo => "bar", :dime => 0.1)
|
32
32
|
def set(*attrs)
|
33
33
|
attrs.extract_options!.each do |attr,val|
|
34
|
-
|
34
|
+
send("#{attr}=",val)
|
35
35
|
end
|
36
36
|
end
|
37
37
|
alias :set_attributes :set
|
@@ -41,17 +41,17 @@ module SimpleModel
|
|
41
41
|
if allow_attribute_action?(val,options)
|
42
42
|
val = fetch_default_value(options[:default]) if (!options[:allow_blank] && options.key?(:default) && val.blank?)
|
43
43
|
val = options[:on_set].call(self,val) if options[:on_set] #(!options.key?(:on_set) || (val.blank? && !options[:allow_blank]) )
|
44
|
-
|
45
|
-
|
44
|
+
send("#{attr}_will_change!") if (initialized?(attr) && val != attributes[attr])
|
45
|
+
attributes[attr] = val
|
46
46
|
options[:after_set].call(self,val) if options[:after_set]
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
50
|
def get_attribute(attr)
|
51
|
-
val =
|
51
|
+
val = attributes[attr]
|
52
52
|
options = self.class.defined_attributes[attr] || {}
|
53
|
-
if (options.key?(:default) && (!
|
54
|
-
val =
|
53
|
+
if (options.key?(:default) && (!initialized?(attr) || (!options[:allow_blank] && val.blank?)))
|
54
|
+
val = attributes[attr] = fetch_default_value(options[:default])
|
55
55
|
end
|
56
56
|
if options[:on_get]
|
57
57
|
options[:on_get].call(self,val)
|
@@ -77,18 +77,17 @@ module SimpleModel
|
|
77
77
|
end
|
78
78
|
|
79
79
|
def fetch_default_value(arg)
|
80
|
-
return
|
80
|
+
return send(arg) if (arg.is_a?(Symbol) && self.respond_to?(arg))
|
81
81
|
arg
|
82
82
|
end
|
83
83
|
|
84
84
|
# Returns attribute that have defaults in a hash: {:attribute => "default value"}
|
85
85
|
# Checks for alias attributes to ensure they are not overwritten
|
86
|
-
def
|
87
|
-
d = attrs.with_indifferent_access
|
86
|
+
def attributes_for_init(attrs)
|
87
|
+
d = (attrs.is_a?(HashWithIndifferentAccess) ? attrs : attrs.with_indifferent_access )
|
88
88
|
self.class.defined_attributes.each do |k,v|
|
89
|
-
|
90
|
-
|
91
|
-
d[key] = fetch_default_value(v[:default])
|
89
|
+
if allow_init_default?(d,k,v)
|
90
|
+
d[k] = fetch_default_value(v[:default])
|
92
91
|
end
|
93
92
|
end
|
94
93
|
d
|
@@ -101,7 +100,7 @@ module SimpleModel
|
|
101
100
|
end
|
102
101
|
|
103
102
|
def attributes_have_alias?(attrs,attr)
|
104
|
-
!(self.class.alias_attributes.select{ |a, m| (m == attr && attrs.key?(a
|
103
|
+
!(self.class.alias_attributes.select{ |a, m| (m == attr.to_sym && attrs.key?(a)) }).empty?
|
105
104
|
end
|
106
105
|
|
107
106
|
def allow_attribute_action?(val,options)
|
@@ -131,8 +130,8 @@ module SimpleModel
|
|
131
130
|
end
|
132
131
|
|
133
132
|
# Rails 3.2 + required when searching for attributes in from inherited classes/models
|
134
|
-
def attribute(
|
135
|
-
|
133
|
+
def attribute(attr)
|
134
|
+
get_attribute(attr)
|
136
135
|
end
|
137
136
|
|
138
137
|
module ClassMethods
|
@@ -177,7 +176,7 @@ module SimpleModel
|
|
177
176
|
def new_with_store(session_hash)
|
178
177
|
nw = self.new()
|
179
178
|
nw.attributes = session_hash
|
180
|
-
nw.set(nw.send(:
|
179
|
+
nw.set(nw.send(:attributes_for_init,session_hash))
|
181
180
|
nw
|
182
181
|
end
|
183
182
|
|
@@ -198,7 +197,7 @@ module SimpleModel
|
|
198
197
|
end
|
199
198
|
|
200
199
|
def attribute_defined?(attr)
|
201
|
-
|
200
|
+
defined_attributes.key?(attr)
|
202
201
|
end
|
203
202
|
|
204
203
|
# The default settings for a SimpeModel class
|
@@ -221,15 +220,15 @@ module SimpleModel
|
|
221
220
|
# at once, so we must set @attribute_methods_generated to nil to allow the
|
222
221
|
# re-run to occur ONLY IN RAILS 3.0.
|
223
222
|
def add_defined_attribute(attr,options)
|
224
|
-
|
223
|
+
defined_attributes[attr] = options
|
225
224
|
@attribute_methods_generated = nil #if (ActiveModel::VERSION::MAJOR == 3 && ActiveModel::VERSION::MINOR == 0)
|
226
225
|
define_attribute_methods(defined_attributes_keys)
|
227
226
|
end
|
228
227
|
|
229
228
|
# We don't want to call define_attribute_methods on methods defined in the parent class
|
230
229
|
def defined_attributes_keys
|
231
|
-
dak =
|
232
|
-
dak = dak -
|
230
|
+
dak = defined_attributes.keys
|
231
|
+
dak = dak - superclass.defined_attributes.keys if superclass.respond_to?(:defined_attributes)
|
233
232
|
dak
|
234
233
|
end
|
235
234
|
|
@@ -276,13 +275,13 @@ module SimpleModel
|
|
276
275
|
alias_attributes[new_alias] = attr
|
277
276
|
|
278
277
|
define_method(new_alias) do
|
279
|
-
|
278
|
+
send(attr)
|
280
279
|
end
|
281
280
|
define_method("#{new_alias}?") do
|
282
|
-
|
281
|
+
send("#{attr}?")
|
283
282
|
end
|
284
283
|
define_method("#{new_alias.to_s}=") do |*args, &block|
|
285
|
-
|
284
|
+
send("#{attr}=",*args, &block)
|
286
285
|
end
|
287
286
|
end
|
288
287
|
|
@@ -299,7 +298,7 @@ module SimpleModel
|
|
299
298
|
# should return a hash to be set
|
300
299
|
# EX: lambda {|obj,attrs| attrs.select{|k,v| !v.blank?}}
|
301
300
|
def before_initialize=before_initialize
|
302
|
-
raise TypeError "before_initialize must be a lambda that accepts the
|
301
|
+
raise TypeError "before_initialize must be a lambda that accepts the attributes to be initialize" unless before_initialize.is_a?(Proc)
|
303
302
|
@before_initialize = before_initialize
|
304
303
|
end
|
305
304
|
|
@@ -322,8 +321,8 @@ module SimpleModel
|
|
322
321
|
# hack to keep things working when a class inherits from a super that
|
323
322
|
# has ActiveModel::Dirty included
|
324
323
|
def inherited(base)
|
325
|
-
base.defined_attributes =
|
326
|
-
base.alias_attributes =
|
324
|
+
base.defined_attributes = defined_attributes.merge(base.defined_attributes)
|
325
|
+
base.alias_attributes = alias_attributes.merge(base.alias_attributes)
|
327
326
|
super
|
328
327
|
# Rails 3.0 Hack
|
329
328
|
if (ActiveModel::VERSION::MAJOR == 3 && ActiveModel::VERSION::MINOR == 0)
|
data/lib/simple_model/base.rb
CHANGED
@@ -1,167 +1,166 @@
|
|
1
1
|
module SimpleModel
|
2
2
|
# Require all that active support we know and love
|
3
|
-
require 'active_support/time'
|
4
|
-
require 'active_support/core_ext/class/attribute'
|
5
|
-
require 'active_support/core_ext/class/attribute_accessors'
|
6
|
-
require 'active_support/core_ext/class/delegating_attributes'
|
7
|
-
require 'active_support/core_ext/class/attribute'
|
8
|
-
require 'active_support/core_ext/array/extract_options'
|
9
|
-
require 'active_support/core_ext/hash/deep_merge'
|
10
|
-
require 'active_support/core_ext/hash/indifferent_access'
|
11
|
-
require 'active_support/core_ext/hash/slice'
|
12
|
-
require 'active_support/core_ext/string/behavior'
|
13
|
-
require 'active_support/core_ext/kernel/singleton_class'
|
14
|
-
require 'active_support/core_ext/module/delegation'
|
15
|
-
require 'active_support/core_ext/module/introspection'
|
16
|
-
require 'active_support/core_ext/object/duplicable'
|
17
|
-
require 'active_support/core_ext/object/blank'
|
3
|
+
require 'active_support/time'
|
4
|
+
require 'active_support/core_ext/class/attribute'
|
5
|
+
require 'active_support/core_ext/class/attribute_accessors'
|
6
|
+
require 'active_support/core_ext/class/delegating_attributes'
|
7
|
+
require 'active_support/core_ext/class/attribute'
|
8
|
+
require 'active_support/core_ext/array/extract_options'
|
9
|
+
require 'active_support/core_ext/hash/deep_merge'
|
10
|
+
require 'active_support/core_ext/hash/indifferent_access'
|
11
|
+
require 'active_support/core_ext/hash/slice'
|
12
|
+
require 'active_support/core_ext/string/behavior'
|
13
|
+
require 'active_support/core_ext/kernel/singleton_class'
|
14
|
+
require 'active_support/core_ext/module/delegation'
|
15
|
+
require 'active_support/core_ext/module/introspection'
|
16
|
+
require 'active_support/core_ext/object/duplicable'
|
17
|
+
require 'active_support/core_ext/object/blank'
|
18
18
|
|
19
19
|
# == SimpleModel::Base
|
20
20
|
#
|
21
21
|
# Provides an interface for any class to build table-less models.
|
22
|
-
#
|
22
|
+
#
|
23
23
|
# Implements Validations, Callbacks and Dirty from ActiveModel, and data-type specific
|
24
24
|
# attribute definitions with default options. SimpleModel::Base is intended as
|
25
25
|
# an example, while it may be used in production, which it is on many of my apps
|
26
26
|
# today, it is recommend you use SimpleModel::Base as an example to implement your
|
27
27
|
# own model actions.
|
28
|
-
#
|
28
|
+
#
|
29
29
|
# == SimpleModel Actions:
|
30
|
-
#
|
30
|
+
#
|
31
31
|
# Model actions provide a tool for making use of Active Model callbacks. Each
|
32
|
-
# action creates an instance method representing the action, which calls the
|
33
|
-
# method(s) listed as symbols when defining the actions. Model actions also accept
|
34
|
-
# a rollback option, which is called if the action fails. If you plan to
|
32
|
+
# action creates an instance method representing the action, which calls the
|
33
|
+
# method(s) listed as symbols when defining the actions. Model actions also accept
|
34
|
+
# a rollback option, which is called if the action fails. If you plan to
|
35
35
|
# implement SimpleModel's actions, avoid naming you own methods "save", "destroy",
|
36
36
|
# "create", and "update", as these will override the methods defined by action.
|
37
|
-
#
|
37
|
+
#
|
38
38
|
# Available Actions:
|
39
39
|
# # save
|
40
40
|
# # update
|
41
41
|
# # create
|
42
42
|
# # destroy
|
43
|
-
#
|
43
|
+
#
|
44
44
|
# ==== Example
|
45
|
-
#
|
45
|
+
#
|
46
46
|
# class MyModel < SimpleModel::Base
|
47
47
|
# save :my_save, :rollback => :undo_save
|
48
48
|
# update :my_update, :rollback => :undo_update
|
49
49
|
# destroy :my_destory, :rollback => :undo_destory
|
50
50
|
# end
|
51
|
-
#
|
51
|
+
#
|
52
52
|
# A basic SimpleModel implementation might resemble
|
53
|
-
#
|
53
|
+
#
|
54
54
|
# class MyModel < SimpleModel::Base
|
55
|
-
#
|
55
|
+
#
|
56
56
|
# has_integers :first_int, :second_int, :default => 1
|
57
57
|
# has_times :now, :default => :get_now
|
58
|
-
#
|
58
|
+
#
|
59
59
|
# save :save_record, :rollback => :rollback_save
|
60
|
-
#
|
60
|
+
#
|
61
61
|
# def save_record
|
62
62
|
# puts "saved"
|
63
63
|
# true
|
64
64
|
# end
|
65
|
-
#
|
65
|
+
#
|
66
66
|
# def get_today
|
67
67
|
# Time.now
|
68
68
|
# end
|
69
|
-
#
|
69
|
+
#
|
70
70
|
# def rollback_save
|
71
71
|
# puts "rolled back"
|
72
72
|
# end
|
73
73
|
# end
|
74
|
-
|
74
|
+
|
75
75
|
class Base
|
76
76
|
include SimpleModel::Attributes
|
77
77
|
include SimpleModel::ErrorHelpers
|
78
|
-
#Use ActiveModel Resources
|
79
|
-
|
80
78
|
|
81
79
|
define_model_callbacks :save, :update, :create, :destroy
|
82
|
-
|
80
|
+
|
83
81
|
class << self
|
84
|
-
|
82
|
+
|
83
|
+
# Defines the model action's instance methods and applied defaults. For every
|
84
|
+
# action defined, we also define that actions ! method which raises exceptions
|
85
|
+
# when the action fails.
|
86
|
+
def define_model_action(methods,action,default_options={:validate => true})
|
87
|
+
default_options.merge!(methods.extract_options!)
|
88
|
+
actions = [action,"#{action}!".to_sym]
|
89
|
+
actions.each do |a|
|
90
|
+
define_method(a) do |opts = {}|
|
91
|
+
options = default_options.merge(opts)
|
92
|
+
options[:raise_exception] = a.to_s.match(/\!$/)
|
93
|
+
run_callbacks(action) do
|
94
|
+
run_model_action(methods,options)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
85
100
|
def save(*methods)
|
86
101
|
define_model_action(methods,:save)
|
87
102
|
end
|
88
|
-
|
103
|
+
|
89
104
|
def create(*methods)
|
90
105
|
define_model_action(methods,:create)
|
91
106
|
end
|
92
|
-
|
107
|
+
|
93
108
|
def update(*methods)
|
94
109
|
define_model_action(methods,:update)
|
95
110
|
end
|
96
|
-
|
111
|
+
|
97
112
|
# Destroy does not run normal validation in Rails, but with this we can if we choose to.
|
98
|
-
def destroy(*methods)
|
113
|
+
def destroy(*methods)
|
99
114
|
define_model_action(methods,:destroy, {:validate => false})
|
100
|
-
end
|
115
|
+
end
|
116
|
+
|
101
117
|
end
|
102
|
-
|
118
|
+
|
103
119
|
has_boolean :persisted
|
104
120
|
has_boolean :new_record, :default => true
|
105
121
|
has_attribute :id # may not be an integer
|
106
122
|
alias :saved? :persisted?
|
107
123
|
|
108
124
|
private
|
109
|
-
|
125
|
+
|
110
126
|
# Skeleton for action instance methods
|
111
127
|
def run_model_action(methods,options)
|
112
128
|
completed = true
|
113
|
-
if (!options[:validate] || (options[:validation_methods] && valid_using_other?(options[:validation_methods])) || self.valid?)
|
129
|
+
if (!options[:validate] || (options[:validation_methods] && valid_using_other?(options[:validation_methods])) || self.valid?)
|
114
130
|
methods.each do |method|
|
115
|
-
ran =
|
131
|
+
ran = send(method)
|
116
132
|
completed = ran unless ran
|
117
133
|
end
|
118
134
|
if completed
|
119
135
|
self.persisted = true
|
120
136
|
@previously_changed = changes
|
121
|
-
@changed_attributes.clear
|
137
|
+
@changed_attributes.clear
|
122
138
|
else
|
123
|
-
|
124
|
-
end
|
139
|
+
send(options[:rollback]) unless options[:rollback].blank?
|
140
|
+
end
|
125
141
|
else
|
126
142
|
completed = false
|
127
143
|
end
|
128
|
-
if !completed && options[:raise_exception]
|
144
|
+
if !completed && options[:raise_exception]
|
129
145
|
if !self.errors.blank?
|
130
146
|
raise ValidationError, self.errors.full_messages.join(" ")
|
131
147
|
else
|
132
148
|
raise ActionError, "failed action: #{methods.join(', ')}"
|
133
149
|
end
|
134
|
-
end
|
150
|
+
end
|
135
151
|
completed
|
136
|
-
end
|
137
|
-
|
152
|
+
end
|
153
|
+
|
138
154
|
# Run supplied methods as validation. Each method should return a boolean
|
139
155
|
# If using this option, to see if errors are present use object_name.errors.blank?,
|
140
|
-
# otherwise if you run object_name.valid? you will over write the errors
|
156
|
+
# otherwise if you run object_name.valid? you will over write the errors
|
141
157
|
# generated here.
|
142
158
|
def valid_using_other?(methods)
|
143
159
|
valid = true
|
144
160
|
methods.each do |method|
|
145
|
-
valid = false unless
|
161
|
+
valid = false unless send(method)
|
146
162
|
end
|
147
163
|
valid
|
148
|
-
end
|
149
|
-
|
150
|
-
# Defines the model action's instance methods and applied defaults. For every
|
151
|
-
# action defined, we also define that actions ! method which raises exceptions
|
152
|
-
# when the action fails.
|
153
|
-
def self.define_model_action(methods,action,default_options={:validate => true})
|
154
|
-
default_options.merge!(methods.extract_options!)
|
155
|
-
actions = [action,"#{action}!".to_sym]
|
156
|
-
actions.each do |a|
|
157
|
-
define_method(a) do |opts = {}|
|
158
|
-
options = default_options.merge(opts)
|
159
|
-
options[:raise_exception] = a.to_s.match(/\!$/)
|
160
|
-
self.run_callbacks(action) do
|
161
|
-
run_model_action(methods,options)
|
162
|
-
end
|
163
|
-
end
|
164
|
-
end
|
165
164
|
end
|
166
165
|
end
|
167
|
-
end
|
166
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module SimpleModel
|
2
2
|
module ErrorHelpers
|
3
|
-
|
3
|
+
|
4
4
|
attr_accessor :errors_count
|
5
5
|
|
6
6
|
def errors?
|
@@ -10,13 +10,12 @@ module SimpleModel
|
|
10
10
|
|
11
11
|
def errors_for_flash(options={})
|
12
12
|
#set defaults and overwrite
|
13
|
-
options = {
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
13
|
+
options = {:failed_action => "saving",
|
14
|
+
:id => 'errorExplanation',
|
15
|
+
:classes => ''}.merge!(options)
|
16
|
+
|
18
17
|
error_list = ""
|
19
|
-
|
18
|
+
|
20
19
|
# The active_model errors object is not a normal hash and the each method
|
21
20
|
# for the active_mode errors object does not perform as expected
|
22
21
|
# so make it a plain hash
|
@@ -39,7 +38,7 @@ module SimpleModel
|
|
39
38
|
value.uniq!
|
40
39
|
if value.length == 1
|
41
40
|
self.errors_count = (self.errors_count.to_i + 1)
|
42
|
-
error_items << "<li>#{key.to_s.titleize} #{value[0]}</li>"
|
41
|
+
error_items << "<li>#{key.to_s.titleize} #{value[0]}</li>"
|
43
42
|
else
|
44
43
|
error_items << "<li><ul>#{key.to_s.titleize} errors:"
|
45
44
|
value.each do |item|
|
@@ -78,6 +77,6 @@ module SimpleModel
|
|
78
77
|
end
|
79
78
|
error_string
|
80
79
|
end
|
81
|
-
|
80
|
+
|
82
81
|
end
|
83
82
|
end
|
@@ -1,16 +1,36 @@
|
|
1
1
|
module SimpleModel
|
2
|
+
module ToCurrencyS
|
3
|
+
def to_currency_s(symbol='$',rnd=2)
|
4
|
+
cs = self.round(rnd).abs.to_s
|
5
|
+
while cs.index('.') != (cs.length-3)
|
6
|
+
cs << '0'
|
7
|
+
end
|
8
|
+
comma = 6
|
9
|
+
while cs.length > (comma)
|
10
|
+
cs.insert((cs.length - comma), ",")
|
11
|
+
comma += 4
|
12
|
+
end
|
13
|
+
cs.insert(0,symbol) if symbol
|
14
|
+
if self < 0
|
15
|
+
cs.insert(0, "-")
|
16
|
+
end
|
17
|
+
cs
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
2
21
|
module ExtendCore
|
3
22
|
require 'time'
|
4
23
|
require 'date'
|
5
24
|
require 'bigdecimal'
|
6
25
|
require 'bigdecimal/util'
|
7
|
-
|
8
|
-
Float.class_eval do
|
26
|
+
|
27
|
+
Float.class_eval do
|
28
|
+
include ToCurrencyS
|
9
29
|
# that does not equal 0.0 is true
|
10
30
|
def to_b
|
11
|
-
|
31
|
+
zero?
|
12
32
|
end
|
13
|
-
|
33
|
+
|
14
34
|
# Rounds float to the precision specified
|
15
35
|
# 100.5235.round_to #=> 101.0
|
16
36
|
# 100.5235.round_to(1) #=> 101.5
|
@@ -25,26 +45,6 @@ module SimpleModel
|
|
25
45
|
def to_currency
|
26
46
|
self.to_d.round(2)
|
27
47
|
end
|
28
|
-
|
29
|
-
# Returns a string with representation of currency, rounded to nearest hundredth
|
30
|
-
def to_currency_s(symbol="$")
|
31
|
-
num = self.round_to(2).to_s
|
32
|
-
neg = num.include?("-")
|
33
|
-
while num.index('.') != (num.length-3)
|
34
|
-
num << '0'
|
35
|
-
end
|
36
|
-
comma = 6
|
37
|
-
while num.length > (comma)
|
38
|
-
num.insert((num.length - comma), ",")
|
39
|
-
comma += 4
|
40
|
-
end
|
41
|
-
num.insert(0,symbol)
|
42
|
-
if neg
|
43
|
-
num.delete!("-")
|
44
|
-
num.insert(0, "-")
|
45
|
-
end
|
46
|
-
num
|
47
|
-
end
|
48
48
|
|
49
49
|
def to_time
|
50
50
|
Time.at(self)
|
@@ -71,23 +71,19 @@ module SimpleModel
|
|
71
71
|
# * safe_date_string("12/31/2010") # => '2010-12-31'
|
72
72
|
# * safe_date_string("12/31/2010T23:30:25") # => '2010-12-31T23:30:25'
|
73
73
|
# * safe_date_string("12/31/2010 23:30:25") # => '2010-12-31 23:30:25'
|
74
|
-
# * safe_date_string("\/Date(1310669017000)\/") # =>
|
74
|
+
# * safe_date_string("\/Date(1310669017000)\/") # =>
|
75
75
|
def safe_datetime_string
|
76
76
|
safe_date = nil
|
77
77
|
if self[0..9].match(/^(0[1-9]|[1-9]|1[012])[- \/.]([1-9]|0[1-9]|[12][0-9]|3[01])[- \/.][0-9][0-9][0-9][0-9]/)
|
78
78
|
safe_date = ""
|
79
|
-
|
80
|
-
split = self.split("/")
|
81
|
-
else
|
82
|
-
split = self.split("-")
|
83
|
-
end
|
79
|
+
splt = split(/\-|\/|\./)
|
84
80
|
time = ""
|
85
|
-
if
|
86
|
-
time =
|
87
|
-
|
81
|
+
if splt[2].length > 4
|
82
|
+
time = splt[2][4..(splt[2].length - 1)]
|
83
|
+
splt[2] = splt[2][0..3]
|
88
84
|
end
|
89
|
-
if
|
90
|
-
safe_date << "#{
|
85
|
+
if splt.length == 3 && splt[2].length == 4
|
86
|
+
safe_date << "#{splt[2]}-#{splt[0]}-#{splt[1]}"
|
91
87
|
safe_date << "#{time}" unless time.nil? || time.to_s.length == 0
|
92
88
|
end
|
93
89
|
elsif self.match(/^\/Date\(/)
|
@@ -97,7 +93,7 @@ module SimpleModel
|
|
97
93
|
end
|
98
94
|
safe_date
|
99
95
|
end
|
100
|
-
|
96
|
+
|
101
97
|
# Use safe_datetime_string help with those pesky US date formats in Ruby 1.9
|
102
98
|
# or to change an integer string to date
|
103
99
|
def to_date
|
@@ -118,44 +114,38 @@ module SimpleModel
|
|
118
114
|
def to_f
|
119
115
|
gsub(/[^0-9\.\+\-]/, '').core_to_f
|
120
116
|
end
|
121
|
-
|
117
|
+
|
122
118
|
alias :core_to_d :to_d
|
123
|
-
|
119
|
+
|
124
120
|
def to_d
|
125
121
|
gsub(/[^0-9\.\+\-]/, '').core_to_d
|
126
122
|
end
|
127
123
|
alias :to_currency :to_d
|
128
|
-
|
124
|
+
|
129
125
|
end
|
130
|
-
|
126
|
+
|
131
127
|
BigDecimal.class_eval do
|
132
|
-
|
133
|
-
|
134
|
-
end
|
135
|
-
|
128
|
+
include ToCurrencyS
|
129
|
+
|
136
130
|
def to_b
|
137
|
-
|
131
|
+
zero?
|
138
132
|
end
|
139
133
|
end
|
140
|
-
|
141
134
|
Fixnum.class_eval do
|
142
|
-
|
143
|
-
|
144
|
-
end
|
145
|
-
|
135
|
+
include ToCurrencyS
|
136
|
+
|
146
137
|
unless Fixnum.instance_methods.include?(:to_b)
|
147
|
-
#Any value greater than 0 is true
|
148
138
|
def to_b
|
149
|
-
|
139
|
+
zero?
|
150
140
|
end
|
151
141
|
end
|
152
|
-
|
142
|
+
|
153
143
|
unless Fixnum.instance_methods.include?(:to_d)
|
154
144
|
def to_d
|
155
|
-
BigDecimal.new(
|
145
|
+
BigDecimal.new(self)
|
156
146
|
end
|
157
147
|
end
|
158
|
-
|
148
|
+
|
159
149
|
unless Fixnum.instance_methods.include?(:to_date)
|
160
150
|
def to_date
|
161
151
|
Time.at(self).to_date
|
@@ -176,7 +166,7 @@ module SimpleModel
|
|
176
166
|
end
|
177
167
|
unless NilClass.instance_methods.include?(:to_d)
|
178
168
|
def to_d
|
179
|
-
BigDecimal.new(
|
169
|
+
BigDecimal.new('')
|
180
170
|
end
|
181
171
|
end
|
182
172
|
end
|
@@ -195,4 +185,4 @@ module SimpleModel
|
|
195
185
|
end
|
196
186
|
end
|
197
187
|
end
|
198
|
-
end
|
188
|
+
end
|
@@ -25,13 +25,13 @@ module SimpleModel
|
|
25
25
|
end
|
26
26
|
end
|
27
27
|
end
|
28
|
-
|
28
|
+
|
29
29
|
def validates_length_of(*attr_names)
|
30
30
|
options = attr_names.extract_options!
|
31
31
|
|
32
32
|
attr_names.each do |attr|
|
33
33
|
break if conditional?(options)
|
34
|
-
|
34
|
+
|
35
35
|
att_method = send(attr)
|
36
36
|
unless att_method.blank?
|
37
37
|
errors.add(attr,(options[:message].blank? ? "must equal #{options[:is]} characters in length." : options[:message])) if options[:is] && att_method.to_s.length != options[:is]
|
@@ -59,8 +59,8 @@ module SimpleModel
|
|
59
59
|
private
|
60
60
|
def conditional?(options)
|
61
61
|
return true unless ((options[:if].blank? && options[:unless].blank?) ||
|
62
|
-
|
62
|
+
!options[:if].blank? && send(options[:if])) ||
|
63
63
|
(!options[:unless].blank? && !send(options[:unless]))
|
64
|
-
end
|
64
|
+
end
|
65
65
|
end
|
66
66
|
end
|
data/lib/simple_model/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simple_model
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.23
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joshua T Mckinney
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-12-
|
11
|
+
date: 2014-12-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|