dcidev_active_record 0.0.8 → 0.0.11
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +41 -1
- data/lib/dcidev_active_record.rb +17 -3
- data/lib/nested_attribute_helper.rb +14 -0
- metadata +8 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 016dea935c8d62a764c1b5488347d03199304974da1942e868189d446e4ac99e
|
4
|
+
data.tar.gz: 62e529217307601d18c3ba0d341ccb90d25e600d50ee13ce7bffdb1706a78850
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '0886cfce0c6b68ad19035839121a950e578f3a682e84b6b3e986dbdbdbbe64dcbb625cf0f283d8fe44dc82d4528602ac0d2431ceedd7e080c6a4f8928488d8f9'
|
7
|
+
data.tar.gz: 70cd0e8ce9ed0ec43393d36e68b4b8c9410b0299cb2ae90373a9c320130c19754f01abc7d97b9f81b7a6843bee3a5507f5a37e3563c8f49f6ccd65fb3b69886a
|
data/README.md
CHANGED
@@ -1 +1,41 @@
|
|
1
|
-
|
1
|
+
# How to Use
|
2
|
+
add `DB= mysql / postgresql` to your `.env` file
|
3
|
+
|
4
|
+
# Features
|
5
|
+
|
6
|
+
### Query Scope Filtering
|
7
|
+
```ruby
|
8
|
+
model.between_date(column, start_date, end_date)
|
9
|
+
model.before_or_equal_to_date(date, date)
|
10
|
+
model.after_or_equal_to_date(column, date)
|
11
|
+
model.at_time(column, time)
|
12
|
+
model.mysql_json_contains(column, key, value)
|
13
|
+
```
|
14
|
+
|
15
|
+
### Class Method
|
16
|
+
```ruby
|
17
|
+
# initialize using hash, the model is not saved yet
|
18
|
+
Model.new_from_params(params)
|
19
|
+
|
20
|
+
# convert from UTC to server date
|
21
|
+
Model.mysql_date_builder(column)
|
22
|
+
|
23
|
+
# convert from UTC to server time
|
24
|
+
Model.mysql_time_builder(column)
|
25
|
+
|
26
|
+
# same as above but for postgresql
|
27
|
+
Model.postgresql_date_builder(column)
|
28
|
+
Model.postgresql_time_builder(column)
|
29
|
+
```
|
30
|
+
|
31
|
+
### Instance Method
|
32
|
+
```ruby
|
33
|
+
# update a record using hash parameter
|
34
|
+
# if set_nil = true, the unspesified column will be automatically be set to nil
|
35
|
+
model.update_by_params(params, set_nil = true)
|
36
|
+
|
37
|
+
# available for one-many relationship
|
38
|
+
# replace all child of this model with specified value from array
|
39
|
+
# set model accepts_nested_attributes_for :child,allow_destroy: true
|
40
|
+
model.replace_child_from_array(new_child = [], column_name: "", child_name: "")
|
41
|
+
```
|
data/lib/dcidev_active_record.rb
CHANGED
@@ -105,19 +105,33 @@ module DcidevActiveRecord
|
|
105
105
|
"TIME(CONVERT_TZ(#{field}, '+00:00', '#{Time.now.in_time_zone(Time.zone.name.to_s).formatted_offset}'))"
|
106
106
|
end
|
107
107
|
|
108
|
-
def
|
108
|
+
def pgsql_date_builder(field)
|
109
109
|
"DATE(#{field}::TIMESTAMPTZ AT TIME ZONE '#{Time.zone.now.formatted_offset}'::INTERVAL)"
|
110
110
|
end
|
111
111
|
|
112
|
-
def
|
112
|
+
def pgsql_time_builder(field)
|
113
113
|
"#{field}::TIMESTAMPTZ AT TIME ZONE '#{Time.zone.now.formatted_offset}'"
|
114
114
|
end
|
115
115
|
|
116
116
|
def db_like_string(db)
|
117
|
-
return 'ILIKE' if db == '
|
117
|
+
return 'ILIKE' if db == 'pgsql'
|
118
118
|
return 'LIKE' if db == 'mysql'
|
119
119
|
end
|
120
120
|
end
|
121
|
+
|
122
|
+
def init_nested_attributes(reflections)
|
123
|
+
reflections.each do |r|
|
124
|
+
define_method("#{r}_attributes=") do |attr|
|
125
|
+
if attr.present?
|
126
|
+
children = []
|
127
|
+
attr.each do |child|
|
128
|
+
children << r.classify.constantize.find_or_initialize_by(child)
|
129
|
+
end
|
130
|
+
eval("self.#{r} = children")
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
121
135
|
end
|
122
136
|
|
123
137
|
ActiveRecord::Base.send(:include, DcidevActiveRecord)
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module NestedAttributeHelper
|
2
|
+
def init_nested_attributes(reflections)
|
3
|
+
reflections.each do |r|
|
4
|
+
define_method("#{r}_attributes=") do |attr|
|
5
|
+
if attr.present?
|
6
|
+
children = []
|
7
|
+
attr.each do |child|
|
8
|
+
children << r.classify.constantize.find_or_initialize_by(child)
|
9
|
+
end
|
10
|
+
eval("self.#{r} = children")
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dcidev_active_record
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Punto Damar P
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-05-30 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Testing phase
|
14
14
|
email:
|
@@ -19,10 +19,11 @@ extra_rdoc_files: []
|
|
19
19
|
files:
|
20
20
|
- README.md
|
21
21
|
- lib/dcidev_active_record.rb
|
22
|
-
|
22
|
+
- lib/nested_attribute_helper.rb
|
23
|
+
homepage:
|
23
24
|
licenses: []
|
24
25
|
metadata: {}
|
25
|
-
post_install_message:
|
26
|
+
post_install_message:
|
26
27
|
rdoc_options: []
|
27
28
|
require_paths:
|
28
29
|
- lib
|
@@ -37,8 +38,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
37
38
|
- !ruby/object:Gem::Version
|
38
39
|
version: '0'
|
39
40
|
requirements: []
|
40
|
-
rubygems_version: 3.
|
41
|
-
signing_key:
|
41
|
+
rubygems_version: 3.0.3.1
|
42
|
+
signing_key:
|
42
43
|
specification_version: 4
|
43
44
|
summary: This gem extends ActiveRecord features
|
44
45
|
test_files: []
|