has-meta 0.8.2 → 0.9.0
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 +4 -4
- data/Gemfile.lock +1 -1
- data/changelog.md +5 -0
- data/db/migrate/2_add_datetime_value_to_meta_data.rb +5 -0
- data/lib/has_meta/instance_methods.rb +3 -2
- data/lib/has_meta/meta_data.rb +51 -3
- data/lib/has_meta/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 6449bf1d52f37f801937de1aa1dc88860cf438a0d8af2327ca515bd4e7b74beb
|
|
4
|
+
data.tar.gz: 786bd5e56684b80b714800ae2fcf38f32477c12dc8e8ad0492f3c70a7fd1da4e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: c68307d445a2da8111c8a9318e4b0e0433233d7b94074b21c8c274c300e234706a49e31ff1cb698129c43109ce69d9a03de5e001c59d9ee4d865423456ea77bb
|
|
7
|
+
data.tar.gz: 616fb1958da452a0fadb480b09898a8f4d886f162e40e293dd84436f24554b07a142d01237e96798f13908ca3026016655e4df421ee7e148a674f7461d48a3b7
|
data/Gemfile.lock
CHANGED
data/changelog.md
ADDED
|
@@ -5,11 +5,12 @@ module HasMeta
|
|
|
5
5
|
self.meta_data.where(key: key.to_s).try(:first).try(:value)
|
|
6
6
|
end
|
|
7
7
|
|
|
8
|
-
def meta_set key, value
|
|
8
|
+
def meta_set key, value, options={}
|
|
9
9
|
return meta_destroy key if value.nil? or value == ''
|
|
10
10
|
|
|
11
11
|
meta = self.meta_data.where(key: key.to_s).first_or_create
|
|
12
|
-
meta.value = value
|
|
12
|
+
# meta.value = value
|
|
13
|
+
meta.send :value=, value, options
|
|
13
14
|
meta
|
|
14
15
|
end
|
|
15
16
|
|
data/lib/has_meta/meta_data.rb
CHANGED
|
@@ -7,11 +7,16 @@ module HasMeta
|
|
|
7
7
|
attr_reader :data_type
|
|
8
8
|
|
|
9
9
|
def value
|
|
10
|
-
@value ||= value_attributes.compact.values.pop
|
|
10
|
+
@value ||= convert_type value_attributes.compact.values.pop
|
|
11
11
|
end
|
|
12
12
|
|
|
13
|
-
def value= value
|
|
14
|
-
|
|
13
|
+
def value= value, options={}
|
|
14
|
+
if options[:as]
|
|
15
|
+
@data_type = options[:as]
|
|
16
|
+
@value = value
|
|
17
|
+
else
|
|
18
|
+
@data_type, @value = resolve_data_type! value
|
|
19
|
+
end
|
|
15
20
|
set_attribute
|
|
16
21
|
end
|
|
17
22
|
|
|
@@ -40,6 +45,22 @@ module HasMeta
|
|
|
40
45
|
|
|
41
46
|
private
|
|
42
47
|
|
|
48
|
+
def convert_type value
|
|
49
|
+
begin
|
|
50
|
+
if value =~ /^-?\d+/ and value.to_i > 2000000000
|
|
51
|
+
value.to_i
|
|
52
|
+
elsif value =~ /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} (\+|-)\d{4}$/
|
|
53
|
+
value.to_time
|
|
54
|
+
elsif value =~ /^\d{4}-\d{2}-\d{2}$/
|
|
55
|
+
value.to_date
|
|
56
|
+
else
|
|
57
|
+
value
|
|
58
|
+
end
|
|
59
|
+
rescue
|
|
60
|
+
value
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
43
64
|
def self.value_hash_for value
|
|
44
65
|
data_type, value = resolve_data_type! value
|
|
45
66
|
{"#{data_type}_value": value}
|
|
@@ -58,15 +79,39 @@ module HasMeta
|
|
|
58
79
|
return :decimal, value
|
|
59
80
|
when ->(x) {x.kind_of? Date}
|
|
60
81
|
return :date, value
|
|
82
|
+
when ->(x) {x.acts_like? :time}
|
|
83
|
+
if has_datetime_column?
|
|
84
|
+
return :datetime, value
|
|
85
|
+
else
|
|
86
|
+
return :text, value
|
|
87
|
+
end
|
|
61
88
|
when ->(x) {x.respond_to? :id}
|
|
62
89
|
return :integer, value.id
|
|
63
90
|
else
|
|
64
91
|
return :integer, value.to_i if value =~ /^-?\d+$/
|
|
65
92
|
return :decimal, value.to_f if value =~ /^-?\d*\.\d+$/
|
|
93
|
+
return :date, value.to_date if date_try_convert value
|
|
94
|
+
return :datetime, value.to_datetime if has_datetime_column? and datetime_try_convert(value)
|
|
66
95
|
return :text, value
|
|
67
96
|
end
|
|
68
97
|
end
|
|
69
98
|
|
|
99
|
+
def self.date_try_convert value
|
|
100
|
+
begin
|
|
101
|
+
value.to_date if value =~ /^\d{4}-\d{2}-\d{2}$/
|
|
102
|
+
rescue
|
|
103
|
+
nil
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def self.datetime_try_convert value
|
|
108
|
+
begin
|
|
109
|
+
value.to_datetime if value =~ /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} (\+|-)\d{4}$/
|
|
110
|
+
rescue
|
|
111
|
+
nil
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
|
|
70
115
|
def resolve_data_type! value
|
|
71
116
|
self.class.resolve_data_type! value
|
|
72
117
|
end
|
|
@@ -88,5 +133,8 @@ module HasMeta
|
|
|
88
133
|
self[:"#{@data_type}_value"] = @value
|
|
89
134
|
end
|
|
90
135
|
|
|
136
|
+
def self.has_datetime_column?
|
|
137
|
+
self.column_names.include? 'datetime_value'
|
|
138
|
+
end
|
|
91
139
|
end
|
|
92
140
|
end
|
data/lib/has_meta/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: has-meta
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.9.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Dan Drust
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2018-02-
|
|
11
|
+
date: 2018-02-09 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activerecord
|
|
@@ -84,7 +84,9 @@ files:
|
|
|
84
84
|
- Rakefile
|
|
85
85
|
- bin/console
|
|
86
86
|
- bin/setup
|
|
87
|
+
- changelog.md
|
|
87
88
|
- db/migrate/1_has_meta_migration.rb
|
|
89
|
+
- db/migrate/2_add_datetime_value_to_meta_data.rb
|
|
88
90
|
- has-meta.gemspec
|
|
89
91
|
- lib/has-meta.rb
|
|
90
92
|
- lib/has_meta/data_mover.rb
|