qooxview 1.9.11 → 1.9.13.pre.10
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/qooxview/additions.rb +2 -1
- data/lib/qooxview/entity.rb +3 -3
- data/lib/qooxview/helpers/config_base.rb +1 -1
- data/lib/qooxview/helpers/permission.rb +2 -1
- data/lib/qooxview/storage_handler.rb +7 -2
- data/lib/qooxview/storage_type.rb +3 -0
- data/lib/qooxview/storages/csv.rb +13 -7
- data/lib/qooxview/storages/sqlite.rb +18 -3
- data/lib/qooxview/view.rb +3 -3
- data/qooxview.gemspec +3 -3
- data/test/entities/databases.rb +1 -1
- data/test/qv_sqlite.rb +13 -0
- data/test/qv_store_csv.rb +21 -7
- data/test/test.rb +1 -1
- metadata +7 -9
- data/.ruby-version +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b9dc1d652ab06b076f0a8c32b3ec1c26d7b0ebb4
|
4
|
+
data.tar.gz: 5dc2b0fe255e8273113bedc2a40d849fefee3b5c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 805aab3ebb9df5f49ea40dabd5e40ee3aa338686ceeb9c770174716590c5de955977d9c88e423b44b4d870f524c864d6bf1df2646feac64869c19926e0a4eefd
|
7
|
+
data.tar.gz: 83862647d06e66de41811fb6239d84770907365c06aa863d874e94c7f1832d34660c71b30238a141f819e59821c04522ca79c5000c1ccc5d6771e7bfd8eb4ef0
|
data/lib/qooxview/additions.rb
CHANGED
data/lib/qooxview/entity.rb
CHANGED
@@ -31,7 +31,7 @@ class Entities < RPCQooxdooService
|
|
31
31
|
def initialize
|
32
32
|
begin
|
33
33
|
@data_class = eval(singular(self.class.name))
|
34
|
-
rescue Exception
|
34
|
+
rescue Exception
|
35
35
|
# Just in case the data-class is not created yet
|
36
36
|
eval("class #{singular(self.class.name)} < Entity\nend", TOPLEVEL_BINDING)
|
37
37
|
@data_class = eval(singular(self.class.name))
|
@@ -173,7 +173,7 @@ class Entities < RPCQooxdooService
|
|
173
173
|
# instantiated - useful for stuff like long LDAP-lists...
|
174
174
|
def get_data_instance(k)
|
175
175
|
return nil if !k
|
176
|
-
if k.class
|
176
|
+
if k.class.to_s !~ /(Integer|Fixnum)/
|
177
177
|
dputs(0) { 'This is very bad' }
|
178
178
|
dputs(0) { "value k is #{k.inspect} - #{k.class}" }
|
179
179
|
dputs(0) { "caller-stack is #{caller}" }
|
@@ -582,7 +582,7 @@ class Entity
|
|
582
582
|
if not raw and e
|
583
583
|
v = @proxy.get_value(f)
|
584
584
|
|
585
|
-
if e.class
|
585
|
+
if (e.class.to_s =~ /(Integer|Fixnum)/) && v && v.dtype == 'entity'
|
586
586
|
dputs(5) { "Getting instance for #{v.inspect}" }
|
587
587
|
dputs(5) { "Getting instance with #{e.class} - #{e.inspect}" }
|
588
588
|
dputs(5) { "Field = #{field}; id = #{@id}" }
|
@@ -150,7 +150,7 @@ class ConfigBase < Entity
|
|
150
150
|
end
|
151
151
|
|
152
152
|
def save_block_to_object(block, obj)
|
153
|
-
dputs(3) { "Pushing block #{block} to object #{obj
|
153
|
+
dputs(3) { "Pushing block #{block} to object #{obj}" }
|
154
154
|
ConfigBases.get_block_fields(block).each { |f|
|
155
155
|
value = data_get(f)
|
156
156
|
dputs(3) { "Setting #{f} in #{block} to #{value}" }
|
@@ -82,6 +82,7 @@ class Permission
|
|
82
82
|
end
|
83
83
|
|
84
84
|
def self.can_view( permission, view )
|
85
|
+
# dputs_func
|
85
86
|
action = view.to_s.gsub( /^View\./, '' )
|
86
87
|
dputs( 4 ){ "Does #{permission.inspect} allow to do #{action} knowing #{@@view.inspect} and #{@@parent.inspect}" }
|
87
88
|
if not permission or permission.length == 0
|
@@ -89,7 +90,7 @@ class Permission
|
|
89
90
|
end
|
90
91
|
|
91
92
|
permission.to_a.each{|p|
|
92
|
-
perm_list = self.getViewParent( p )
|
93
|
+
perm_list = self.getViewParent( p.to_s )
|
93
94
|
dputs( 5 ){ "p is #{p} and perm_list is #{perm_list.inspect}" }
|
94
95
|
perm_list.each{|pl|
|
95
96
|
type, data = pl.split(':')
|
@@ -217,6 +217,7 @@ module StorageHandler
|
|
217
217
|
end
|
218
218
|
|
219
219
|
def create(args, allow_double = false)
|
220
|
+
# dputs_func
|
220
221
|
oldload = @loading
|
221
222
|
@loading = true
|
222
223
|
if args.class != Hash
|
@@ -263,7 +264,7 @@ module StorageHandler
|
|
263
264
|
end
|
264
265
|
|
265
266
|
def save_data(d)
|
266
|
-
#dputs_func
|
267
|
+
# dputs_func
|
267
268
|
dputs(5) { "Saving #{d.inspect}" }
|
268
269
|
d.to_sym!
|
269
270
|
if d.has_key? @data_field_id
|
@@ -292,6 +293,10 @@ module StorageHandler
|
|
292
293
|
dputs(3) { "Deleting id #{id}" }
|
293
294
|
@data.delete(id)
|
294
295
|
@data_instances.delete(id)
|
296
|
+
@storage.each{|k, di|
|
297
|
+
di.delete id
|
298
|
+
}
|
299
|
+
@changed = true
|
295
300
|
end
|
296
301
|
|
297
302
|
def set_entry(id, field, v)
|
@@ -416,7 +421,7 @@ module StorageHandler
|
|
416
421
|
@keys = {}
|
417
422
|
@storage.each { |k, di|
|
418
423
|
dputs(5) { "Loading #{k} at #{di.name} with #{di.inspect}" }
|
419
|
-
@data.merge!(di.load) { |
|
424
|
+
@data.merge!(di.load) { |_, o, n| o.merge(n) }
|
420
425
|
dputs(5) { "Loaded #{@data.inspect} for #{self.name}" }
|
421
426
|
}
|
422
427
|
if @data.length == 0 && respond_to?(:init)
|
@@ -30,7 +30,7 @@ class CSV < StorageType
|
|
30
30
|
# Saves the data stored, optionally takes an index to say
|
31
31
|
# which data needs to be saved
|
32
32
|
def save(data)
|
33
|
-
#dputs_func
|
33
|
+
# dputs_func
|
34
34
|
@add_only ?
|
35
35
|
dputs(5) { "Not saving data for #{@name}" } :
|
36
36
|
@mutex.synchronize {
|
@@ -54,12 +54,16 @@ class CSV < StorageType
|
|
54
54
|
|
55
55
|
tmpfile = "#{@csv_file}_tmp"
|
56
56
|
File.open(tmpfile, 'w') { |f|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
57
|
+
if data.length == 0
|
58
|
+
f << '{}'
|
59
|
+
else
|
60
|
+
data_each(data) { |d|
|
61
|
+
write_line(f, d)
|
62
|
+
if di = @entity.data_instances[d[@data_field_id]]
|
63
|
+
di.changed = false
|
64
|
+
end
|
65
|
+
}
|
66
|
+
end
|
63
67
|
}
|
64
68
|
FileUtils.mv tmpfile, @csv_file
|
65
69
|
#%x[ sync ]
|
@@ -115,6 +119,7 @@ class CSV < StorageType
|
|
115
119
|
# loads the data
|
116
120
|
def load
|
117
121
|
# Go and fetch eventual existing data from the file
|
122
|
+
# dputs_func
|
118
123
|
dputs(3) { "Starting to load #{@csv_file}" }
|
119
124
|
@mutex.synchronize {
|
120
125
|
cleanup if Dir.glob("#{@csv_file}*").size > 1
|
@@ -125,6 +130,7 @@ class CSV < StorageType
|
|
125
130
|
data = {}
|
126
131
|
File.open(file, 'r').readlines().each { |l|
|
127
132
|
dputs(5) { "Reading line #{l}" }
|
133
|
+
l == '{}' and next
|
128
134
|
# Convert the keys in the lines back to Symbols
|
129
135
|
data_parse = JSON.parse(l)
|
130
136
|
data_csv = {}
|
@@ -23,9 +23,9 @@ class SQLite < StorageType
|
|
23
23
|
FileUtils.mkdir_p(@sqlite_dir)
|
24
24
|
@name_file = name_file
|
25
25
|
@db_file = File.join(@sqlite_dir, @name_file)
|
26
|
-
#
|
26
|
+
# ActiveRecord::Base.logger = Logger.new('debug.log')
|
27
27
|
ActiveRecord::Migration.verbose = false
|
28
|
-
#ActiveRecord::Base.logger = Logger.new(STDERR)
|
28
|
+
# ActiveRecord::Base.logger = Logger.new(STDERR)
|
29
29
|
|
30
30
|
@mutex_es = Mutex.new
|
31
31
|
|
@@ -66,6 +66,7 @@ class SQLite < StorageType
|
|
66
66
|
@mutex_es.synchronize {
|
67
67
|
dputs(3) { "Saving #{@entries_save.count} entries in #{@db_class}" }
|
68
68
|
@entries_save.each_value { |v|
|
69
|
+
dputs(4){"Saving #{db_class} #{v.inspect} - #{v.id}"}
|
69
70
|
v.save
|
70
71
|
}
|
71
72
|
@entries_save = {}
|
@@ -74,11 +75,12 @@ class SQLite < StorageType
|
|
74
75
|
|
75
76
|
def set_entry(data, field, value)
|
76
77
|
@mutex_es.synchronize {
|
78
|
+
# dp "#{db_class} #{data.inspect} #{field} #{value}"
|
77
79
|
dputs(5) { "Searching id #{data.inspect}" }
|
78
80
|
if @entries[data]
|
79
81
|
@entries[data].save
|
80
82
|
end
|
81
|
-
dat = @db_class.
|
83
|
+
dat = @db_class.find(data)
|
82
84
|
# dat = @db_class.first(:conditions => {@data_field_id => data})
|
83
85
|
# dp @entries[data]
|
84
86
|
# dp dat
|
@@ -98,6 +100,7 @@ class SQLite < StorageType
|
|
98
100
|
# Each new entry is directly stored, helping somewhat if the program or the
|
99
101
|
# computer crashes
|
100
102
|
def data_create(data)
|
103
|
+
# dputs_func
|
101
104
|
dputs(5) { "Creating early data #{data.inspect} with #{data.class}" }
|
102
105
|
dputs(5) { "hello for #{data.inspect}" }
|
103
106
|
dputs(5) { "db_class is #{@db_class.inspect}" }
|
@@ -170,6 +173,17 @@ class SQLite < StorageType
|
|
170
173
|
end
|
171
174
|
end
|
172
175
|
|
176
|
+
def delete(id)
|
177
|
+
entry = @db_class.find_by(id: id)
|
178
|
+
if entry != nil
|
179
|
+
entry.destroy
|
180
|
+
@entries[id].delete
|
181
|
+
if e = @entries_save[id]
|
182
|
+
e.delete
|
183
|
+
end
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
173
187
|
def self.with_all_sqlites
|
174
188
|
RPCQooxdooService.entities { |e|
|
175
189
|
e.storage.each { |storage_name, storage_class|
|
@@ -204,6 +218,7 @@ class SQLite < StorageType
|
|
204
218
|
e.load
|
205
219
|
e.loading = false
|
206
220
|
u = Users.match_by_name('local')
|
221
|
+
dputs(2){"User is #{u}"}
|
207
222
|
end
|
208
223
|
}
|
209
224
|
end
|
data/lib/qooxview/view.rb
CHANGED
@@ -36,7 +36,7 @@ class Object
|
|
36
36
|
begin
|
37
37
|
@deep_cloning = true
|
38
38
|
val = val.deep_clone
|
39
|
-
rescue TypeError
|
39
|
+
rescue TypeError, RuntimeError
|
40
40
|
next
|
41
41
|
ensure
|
42
42
|
@deep_cloning = false
|
@@ -596,7 +596,7 @@ class View < RPCQooxdooService
|
|
596
596
|
ret = []
|
597
597
|
args.keys.each { |a|
|
598
598
|
if l = layout_find(a)
|
599
|
-
dputs(3) { "found layout for #{a}" }
|
599
|
+
dputs(3) { "found layout #{l} for #{a}" }
|
600
600
|
ret += reply(:update, a => args[a])
|
601
601
|
end
|
602
602
|
}
|
@@ -824,7 +824,7 @@ class View < RPCQooxdooService
|
|
824
824
|
end
|
825
825
|
|
826
826
|
# Gets the request and converts the ids of the Entites back to
|
827
|
-
# the objects they once were - which makes life much more easy...
|
827
|
+
# the objects they once were - which makes life much more easy...
|
828
828
|
def parse_request(method, session, params)
|
829
829
|
#dputs_func
|
830
830
|
dputs(3) { "Parsing #{params.inspect}" }
|
data/qooxview.gemspec
CHANGED
@@ -4,14 +4,14 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
6
|
spec.name = 'qooxview'
|
7
|
-
spec.version
|
7
|
+
spec.version = '1.9.13-10'
|
8
8
|
spec.authors = ['Linus Gasser']
|
9
|
-
spec.email
|
9
|
+
spec.email = 'ineiti.blue'
|
10
10
|
spec.summary = %q{Implements a ruby-backend for QooxDoo.org}
|
11
11
|
spec.description = %q{This is a very simple framework to create small
|
12
12
|
frontends in a webserver}
|
13
13
|
spec.homepage = 'https://github.com/ineiti/qooxview'
|
14
|
-
spec.license
|
14
|
+
spec.license = 'GPL-3.0'
|
15
15
|
|
16
16
|
spec.files = `if [ -d '.git' ]; then git ls-files -z; fi`.split("\x0")
|
17
17
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
data/test/entities/databases.rb
CHANGED
data/test/qv_sqlite.rb
CHANGED
@@ -70,4 +70,17 @@ class TC_SQLite < Test::Unit::TestCase
|
|
70
70
|
assert_equal 300, one.money
|
71
71
|
assert_equal 500, two.money
|
72
72
|
end
|
73
|
+
|
74
|
+
def test_rm_add
|
75
|
+
dp 'deleting'
|
76
|
+
assert_not_equal nil, Entities.Movements.find_by_desc('pain')
|
77
|
+
@m2.delete
|
78
|
+
assert_equal nil, Entities.Movements.find_by_desc('pain')
|
79
|
+
Entities.delete_all_data(true)
|
80
|
+
Entities.load_all
|
81
|
+
assert_equal nil, Entities.Movements.find_by_desc('pain')
|
82
|
+
dp 'recreating'
|
83
|
+
@m2 = Entities.Movements.create( :desc => 'mappa', :money => 250 )
|
84
|
+
assert_equal 250, @m2.money
|
85
|
+
end
|
73
86
|
end
|
data/test/qv_store_csv.rb
CHANGED
@@ -7,12 +7,12 @@ class TC_Store_CSV < Test::Unit::TestCase
|
|
7
7
|
|
8
8
|
dputs(2) { 'Setting up data' }
|
9
9
|
@admin = Persons.create(:first_name => 'admin', :pass => 'super123',
|
10
|
-
|
10
|
+
:address => 'cdlf 24', :credit => 10000)
|
11
11
|
Courses.create(:first_name => 'base_1010', :start => '1.10.2010')
|
12
12
|
@base_1011 = Courses.create(:first_name => 'base_1011', :start => '1.11.2010',
|
13
|
-
|
13
|
+
:teacher => @admin)
|
14
14
|
@dummies_one = Dummies.create(:first_name => 'one', :phone => '111',
|
15
|
-
|
15
|
+
:no_cache => '123')
|
16
16
|
dputs(2) { 'Finished setting up data' }
|
17
17
|
end
|
18
18
|
|
@@ -43,8 +43,8 @@ class TC_Store_CSV < Test::Unit::TestCase
|
|
43
43
|
|
44
44
|
def test_backup_count
|
45
45
|
(0..5).each { |i|
|
46
|
-
assert(
|
47
|
-
|
46
|
+
assert(get_persons_csv.size == i,
|
47
|
+
"We don't have #{i} files, but #{get_persons_csv.size}: #{get_persons_csv.inspect}")
|
48
48
|
@admin.first_name = "admin#{i}"
|
49
49
|
Entities.save_all
|
50
50
|
}
|
@@ -53,8 +53,8 @@ class TC_Store_CSV < Test::Unit::TestCase
|
|
53
53
|
|
54
54
|
def test_dirty_data
|
55
55
|
(0..5).each { |i|
|
56
|
-
assert(
|
57
|
-
|
56
|
+
assert(get_persons_csv.size == i,
|
57
|
+
"We don't have #{i} files, but #{get_persons_csv.size}: #{get_persons_csv.inspect}")
|
58
58
|
@admin.first_name = "admin#{i}"
|
59
59
|
Entities.save_all
|
60
60
|
}
|
@@ -83,4 +83,18 @@ class TC_Store_CSV < Test::Unit::TestCase
|
|
83
83
|
Entities.load_all
|
84
84
|
assert_equal 1, get_persons_csv.count, get_persons_csv
|
85
85
|
end
|
86
|
+
|
87
|
+
def test_empty_file
|
88
|
+
assert_equal 1, Persons.search_all_.length
|
89
|
+
Entities.save_all
|
90
|
+
|
91
|
+
dputs(2) { 'deleting admin' }
|
92
|
+
@admin.delete
|
93
|
+
assert_equal 0, Persons.search_all_.length
|
94
|
+
Entities.save_all
|
95
|
+
|
96
|
+
dputs(2) { 'loading everything again' }
|
97
|
+
Entities.load_all
|
98
|
+
assert_equal 0, Persons.search_all_.length
|
99
|
+
end
|
86
100
|
end
|
data/test/test.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: qooxview
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.9.
|
4
|
+
version: 1.9.13.pre.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Linus Gasser
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-10-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: helper_classes
|
@@ -349,15 +349,13 @@ dependencies:
|
|
349
349
|
description: |-
|
350
350
|
This is a very simple framework to create small
|
351
351
|
frontends in a webserver
|
352
|
-
email:
|
353
|
-
- ineiti@linusetviviane.ch
|
352
|
+
email: ineiti.blue
|
354
353
|
executables:
|
355
354
|
- test_ldap.rb
|
356
355
|
extensions: []
|
357
356
|
extra_rdoc_files: []
|
358
357
|
files:
|
359
358
|
- ".project"
|
360
|
-
- ".ruby-version"
|
361
359
|
- Gemfile
|
362
360
|
- Gemfile.lock
|
363
361
|
- LICENSE.txt
|
@@ -967,7 +965,7 @@ files:
|
|
967
965
|
- test/views/print.rb
|
968
966
|
homepage: https://github.com/ineiti/qooxview
|
969
967
|
licenses:
|
970
|
-
-
|
968
|
+
- GPL-3.0
|
971
969
|
metadata: {}
|
972
970
|
post_install_message:
|
973
971
|
rdoc_options: []
|
@@ -980,12 +978,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
980
978
|
version: '0'
|
981
979
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
982
980
|
requirements:
|
983
|
-
- - "
|
981
|
+
- - ">"
|
984
982
|
- !ruby/object:Gem::Version
|
985
|
-
version:
|
983
|
+
version: 1.3.1
|
986
984
|
requirements: []
|
987
985
|
rubyforge_project:
|
988
|
-
rubygems_version: 2.6.
|
986
|
+
rubygems_version: 2.6.13
|
989
987
|
signing_key:
|
990
988
|
specification_version: 4
|
991
989
|
summary: Implements a ruby-backend for QooxDoo.org
|
data/.ruby-version
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
2.4.1
|