groovy 0.6.4 → 0.6.7
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/lib/groovy/model.rb +11 -3
- data/lib/groovy/schema.rb +8 -0
- data/lib/groovy/vector.rb +32 -23
- data/lib/groovy/version.rb +1 -1
- data/spec/model_spec.rb +15 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d24298885415bc4acd243ec853d839187216d3f3bf8be758e309168fb3a4b4a6
|
4
|
+
data.tar.gz: c8a743dab8efe577290c91688e5107114bd5c0c7a7153f79db4d6985ce4467dd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 156828c23af648e267cee9a761183dd49b7d16d783fb993cee0653a449340c23bd25c03162da6666f30cc3989978c196d671198ac8da041bace897aa1bb0419d
|
7
|
+
data.tar.gz: 100290a07dabdd5da4dacd586ff5571c08c433b4f182a91530eb31bc6d5c78b21960d056190d73054952e614e21e428018ea2f8bad9b2637633739929d1216e7
|
data/lib/groovy/model.rb
CHANGED
@@ -62,6 +62,10 @@ module Groovy
|
|
62
62
|
db_context[table_name]
|
63
63
|
end
|
64
64
|
|
65
|
+
def underscore_name
|
66
|
+
name.gsub(/([A-Z])/) { |x| "_#{x.downcase}" }.sub(/^_/, '')
|
67
|
+
end
|
68
|
+
|
65
69
|
def attribute_names
|
66
70
|
@attribute_names ||= schema.attribute_columns
|
67
71
|
end
|
@@ -349,10 +353,16 @@ module Groovy
|
|
349
353
|
@attributes
|
350
354
|
end
|
351
355
|
|
356
|
+
alias_method :attrs, :attributes
|
357
|
+
|
352
358
|
def inspect
|
353
359
|
"#<#{self.class.name} id:#{id.inspect} attributes:[#{self.class.attribute_names.join(', ')}]>"
|
354
360
|
end
|
355
361
|
|
362
|
+
def dump
|
363
|
+
pp attributes; nil
|
364
|
+
end
|
365
|
+
|
356
366
|
def new_record?
|
357
367
|
id.nil?
|
358
368
|
# _key.nil?
|
@@ -470,7 +480,6 @@ module Groovy
|
|
470
480
|
|
471
481
|
private
|
472
482
|
|
473
|
-
|
474
483
|
def get_record_attribute(key)
|
475
484
|
return if record.nil?
|
476
485
|
val = record[key]
|
@@ -507,7 +516,6 @@ module Groovy
|
|
507
516
|
end
|
508
517
|
end
|
509
518
|
|
510
|
-
|
511
519
|
def set_ref(name, obj, from_foreign = false)
|
512
520
|
# puts "Setting ref #{name} -> #{obj} (#{obj.class})"
|
513
521
|
|
@@ -565,7 +573,7 @@ module Groovy
|
|
565
573
|
# puts "Updating #{key} from #{values[0]} to #{values[1]}"
|
566
574
|
record[key] = values.last
|
567
575
|
end
|
568
|
-
self.class.set_timestamp(record, :updated_at)
|
576
|
+
self.class.set_timestamp(record, :updated_at) unless changes[:updated_at]
|
569
577
|
changes = {}
|
570
578
|
update_foreign_refs
|
571
579
|
fire_callbacks(:after_update)
|
data/lib/groovy/schema.rb
CHANGED
@@ -127,6 +127,14 @@ module Groovy
|
|
127
127
|
@spec[name.to_sym] = { type: :reference, args: [table_name, options] }
|
128
128
|
end
|
129
129
|
|
130
|
+
def one(name, table_name = nil, options = {})
|
131
|
+
reference(name, table_name, options)
|
132
|
+
end
|
133
|
+
|
134
|
+
def many(name, table_name = nil, options = {})
|
135
|
+
reference(name, table_name, options.merge(type: :vector))
|
136
|
+
end
|
137
|
+
|
130
138
|
def timestamps(opts = {})
|
131
139
|
column(:created_at, 'time')
|
132
140
|
column(:updated_at, 'time')
|
data/lib/groovy/vector.rb
CHANGED
@@ -26,20 +26,6 @@ module Groovy
|
|
26
26
|
|
27
27
|
alias_method :count, :size
|
28
28
|
|
29
|
-
# we redefine first and last to avoid having to perform a full query
|
30
|
-
|
31
|
-
def first
|
32
|
-
if obj = records.first
|
33
|
-
Model.initialize_from_record(obj)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
def last
|
38
|
-
if obj = records.last
|
39
|
-
Model.initialize_from_record(obj)
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
29
|
def each(&block)
|
44
30
|
items.each { |r| block.call(r) }
|
45
31
|
end
|
@@ -95,12 +81,30 @@ module Groovy
|
|
95
81
|
|
96
82
|
alias_method :<<, :push
|
97
83
|
|
98
|
-
[:
|
84
|
+
[:new, :create, :create!].each do |relation_method|
|
85
|
+
define_method relation_method do |attrs|
|
86
|
+
vector_model.public_send(relation_method, attrs.merge(object_name => obj))
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
[:find_by, :search, :where, :not, :sort_by, :limit, :offset, :paginate, :in_batches].each do |scope_method|
|
99
91
|
define_method scope_method do |*args, &block|
|
100
92
|
query.public_send(scope_method, *args, &block)
|
101
93
|
end
|
102
94
|
end
|
103
95
|
|
96
|
+
def first
|
97
|
+
if obj = records.first
|
98
|
+
Model.initialize_from_record(obj)
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
def last
|
103
|
+
if obj = records.last
|
104
|
+
Model.initialize_from_record(obj)
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
104
108
|
def ==(arr)
|
105
109
|
to_a == arr
|
106
110
|
end
|
@@ -108,21 +112,26 @@ module Groovy
|
|
108
112
|
private
|
109
113
|
attr_reader :obj, :key
|
110
114
|
|
111
|
-
def query
|
112
|
-
model = Model.model_from_table(key.capitalize)
|
113
|
-
obj_name = obj.class.name.downcase
|
114
|
-
model.query.where(obj_name => obj.id)
|
115
|
-
end
|
116
|
-
|
117
115
|
def method_missing(name, *args, &block)
|
118
|
-
|
119
|
-
if model.scopes.include?(name)
|
116
|
+
if vector_model.scopes.include?(name)
|
120
117
|
query.send(name)
|
121
118
|
else
|
122
119
|
super
|
123
120
|
end
|
124
121
|
end
|
125
122
|
|
123
|
+
def query
|
124
|
+
vector_model.query.where({ object_name => obj.id })
|
125
|
+
end
|
126
|
+
|
127
|
+
def object_name
|
128
|
+
obj.class.underscore_name # eg "product_brand"
|
129
|
+
end
|
130
|
+
|
131
|
+
def vector_model
|
132
|
+
@vector_model ||= Model.model_from_table(key.capitalize)
|
133
|
+
end
|
134
|
+
|
126
135
|
def remove_record(rec)
|
127
136
|
recs = obj.record[key].delete_if { |r| r == rec }
|
128
137
|
obj.record[key] = recs
|
data/lib/groovy/version.rb
CHANGED
data/spec/model_spec.rb
CHANGED
@@ -123,6 +123,21 @@ describe Groovy::Model do
|
|
123
123
|
end
|
124
124
|
|
125
125
|
describe '#save' do
|
126
|
+
|
127
|
+
it 'sets created_at/updated_at timestamps when necesssary' do
|
128
|
+
time = Time.parse('2012-12-12')
|
129
|
+
allow(Time).to receive(:now).and_return(time)
|
130
|
+
prod = TestProduct.create!(name: 'A product', price: 100)
|
131
|
+
expect(prod.created_at).to eq(time)
|
132
|
+
expect(prod.updated_at).to eq(time)
|
133
|
+
|
134
|
+
another_time = Time.parse('2024-12-12')
|
135
|
+
prod.updated_at = another_time
|
136
|
+
prod.save
|
137
|
+
|
138
|
+
expect(prod.reload.created_at).to eq(time)
|
139
|
+
expect(prod.updated_at).to eq(another_time)
|
140
|
+
end
|
126
141
|
end
|
127
142
|
|
128
143
|
describe '#delete' do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: groovy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tomás Pollak
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-12-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rroonga
|