knjrbfw 0.0.111 → 0.0.113
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/knjrbfw.gemspec +3 -7
- data/lib/knj/image.rb +61 -50
- data/lib/knj/scripts/php_to_rb_helper.rb +13 -20
- data/lib/knj/web.rb +135 -136
- metadata +2 -6
- data/lib/knj/datarow.rb +0 -873
- data/lib/knj/datarow_custom.rb +0 -153
- data/lib/knj/scripts/process_meta_exec.rb +0 -144
- data/lib/knj/translations.rb +0 -133
data/lib/knj/datarow_custom.rb
DELETED
@@ -1,153 +0,0 @@
|
|
1
|
-
require "#{$knjpath}event_handler"
|
2
|
-
|
3
|
-
class Knj::Datarow_custom
|
4
|
-
#Used to determine if this is a knj-datarow-object.
|
5
|
-
def is_knj?
|
6
|
-
return true
|
7
|
-
end
|
8
|
-
|
9
|
-
#Initializes variables on the class from objects.
|
10
|
-
def self.datarow_init(d)
|
11
|
-
@@ob = d.ob
|
12
|
-
@@db = d.db
|
13
|
-
end
|
14
|
-
|
15
|
-
def self.has_one(arr)
|
16
|
-
arr.each do |val|
|
17
|
-
methodname = nil
|
18
|
-
colname = nil
|
19
|
-
classname = nil
|
20
|
-
|
21
|
-
if val.is_a?(Symbol)
|
22
|
-
classname = val
|
23
|
-
methodname = val.to_s.downcase.to_sym
|
24
|
-
colname = "#{val.to_s.downcase}_id".to_sym
|
25
|
-
elsif val.is_a?(Array)
|
26
|
-
classname, colname, methodname = *val
|
27
|
-
elsif val.is_a?(Hash)
|
28
|
-
classname, colname, methodname = val[:class], val[:col], val[:method]
|
29
|
-
else
|
30
|
-
raise "Unknown argument-type: '#{arr.class.name}'."
|
31
|
-
end
|
32
|
-
|
33
|
-
methodname = classname.to_s.downcase if !methodname
|
34
|
-
colname = "#{classname.to_s.downcase}_id".to_sym if !colname
|
35
|
-
|
36
|
-
define_method(methodname) do
|
37
|
-
return @@ob.get_try(self, colname, classname)
|
38
|
-
end
|
39
|
-
|
40
|
-
methodname_html = "#{methodname.to_s}_html".to_sym
|
41
|
-
define_method(methodname_html) do |*args|
|
42
|
-
obj = self.send(methodname)
|
43
|
-
return @@ob.events.call(:no_html, classname) if !obj
|
44
|
-
|
45
|
-
raise "Class '#{classname}' does not have a 'html'-method." if !obj.respond_to?(:html)
|
46
|
-
return obj.html(*args)
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
def self.events
|
52
|
-
if !@events
|
53
|
-
@events = Knj::Event_handler.new
|
54
|
-
@events.add_event(:name => :add, :connections_max => 1)
|
55
|
-
@events.add_event(:name => :update, :connections_max => 1)
|
56
|
-
@events.add_event(:name => :data_from_id, :connections_max => 1)
|
57
|
-
@events.add_event(:name => :delete, :connections_max => 1)
|
58
|
-
end
|
59
|
-
|
60
|
-
return @events
|
61
|
-
end
|
62
|
-
|
63
|
-
def self.classname
|
64
|
-
self.name.split("::").last
|
65
|
-
end
|
66
|
-
|
67
|
-
def self.add(d)
|
68
|
-
return @events.call(:add, d)
|
69
|
-
end
|
70
|
-
|
71
|
-
def self.table
|
72
|
-
return self.name.split("::").last
|
73
|
-
end
|
74
|
-
|
75
|
-
def deleted?
|
76
|
-
return true if !@data
|
77
|
-
return false
|
78
|
-
end
|
79
|
-
|
80
|
-
def table
|
81
|
-
return self.class.table
|
82
|
-
end
|
83
|
-
|
84
|
-
def initialize(data, args)
|
85
|
-
if data.is_a?(Hash)
|
86
|
-
@data = Knj::ArrayExt.hash_sym(data)
|
87
|
-
@id = self.id
|
88
|
-
else
|
89
|
-
@id = data
|
90
|
-
self.reload
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
def reload
|
95
|
-
raise "No 'data_from_id'-event connected to class." if !self.class.events.connected?(:data_from_id)
|
96
|
-
data = self.class.events.call(:data_from_id, Knj::Hash_methods.new(:id => @id))
|
97
|
-
raise "No data was received from the event: 'data_from_id'." if !data
|
98
|
-
raise "Data expected to be a hash but wasnt: '#{data.class.name}'." if !data.is_a?(Hash)
|
99
|
-
@data = Knj::ArrayExt.hash_sym(data)
|
100
|
-
end
|
101
|
-
|
102
|
-
def update(data)
|
103
|
-
ret = self.class.events.call(:update, Knj::Hash_methods.new(:object => self, :data => data))
|
104
|
-
self.reload
|
105
|
-
return ret
|
106
|
-
end
|
107
|
-
|
108
|
-
#Returns a key from the hash that this object is holding or raises an error if it doesnt exist.
|
109
|
-
def [](key)
|
110
|
-
raise "No data spawned on object." if !@data
|
111
|
-
raise "No such key: '#{key}'. Available keys are: '#{@data.keys.sort.join(", ")}'." if !@data.key?(key)
|
112
|
-
return @data[key]
|
113
|
-
end
|
114
|
-
|
115
|
-
#Returns the ID of the object.
|
116
|
-
def id
|
117
|
-
return self[:id]
|
118
|
-
end
|
119
|
-
|
120
|
-
#Returns the name of the object, which can be taken from various data or various defined methods.
|
121
|
-
def name
|
122
|
-
if @data.key?(:title)
|
123
|
-
return @data[:title]
|
124
|
-
elsif @data.key?(:name)
|
125
|
-
return @data[:name]
|
126
|
-
end
|
127
|
-
|
128
|
-
obj_methods = self.class.instance_methods(false)
|
129
|
-
[:name, :title].each do |method_name|
|
130
|
-
return self.method(method_name).call if obj_methods.index(method_name)
|
131
|
-
end
|
132
|
-
|
133
|
-
raise "Couldnt figure out the title/name of the object on class #{self.class.name}."
|
134
|
-
end
|
135
|
-
|
136
|
-
alias :title :name
|
137
|
-
|
138
|
-
def delete
|
139
|
-
self.class.events.call(:delete, Knj::Hash_methods.new(:object => self))
|
140
|
-
end
|
141
|
-
|
142
|
-
def destroy
|
143
|
-
@data = nil
|
144
|
-
end
|
145
|
-
|
146
|
-
def each(&args)
|
147
|
-
return @data.each(&args)
|
148
|
-
end
|
149
|
-
|
150
|
-
def to_hash
|
151
|
-
return @data.clone
|
152
|
-
end
|
153
|
-
end
|
@@ -1,144 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby1.9.1
|
2
|
-
|
3
|
-
Dir.chdir(File.dirname(__FILE__))
|
4
|
-
require "../../knjrbfw"
|
5
|
-
require "knj/process"
|
6
|
-
require "knj/process_meta"
|
7
|
-
require "knj/strings"
|
8
|
-
|
9
|
-
objects = {}
|
10
|
-
@process = Knj::Process.new(
|
11
|
-
:out => $stdout,
|
12
|
-
:in => $stdin,
|
13
|
-
:listen => true,
|
14
|
-
:debug => false,
|
15
|
-
:on_rec => proc{|d, &block|
|
16
|
-
obj = d.obj
|
17
|
-
block_res = nil
|
18
|
-
|
19
|
-
if obj.is_a?(Hash) and obj.key?("args")
|
20
|
-
obj["args"] = Knj::Process_meta.args_parse_back(obj["args"], objects)
|
21
|
-
end
|
22
|
-
|
23
|
-
if obj.is_a?(Hash)
|
24
|
-
if obj["type"] == "spawn_object"
|
25
|
-
raise "An object by that name already exists: '#{obj["var_name"]}'." if objects.key?(obj["var_name"])
|
26
|
-
|
27
|
-
#Fix new integer.
|
28
|
-
if obj["class_name"].to_s == "Integer" or obj["class_name"].to_s == "Fixnum"
|
29
|
-
objects[obj["var_name"]] = obj["args"].first.to_i
|
30
|
-
elsif obj["class_name"].to_s == "{}" and obj["args"].first.is_a?(Hash)
|
31
|
-
objects[obj["var_name"]] = obj["args"].first
|
32
|
-
else
|
33
|
-
class_obj = Knj::Strings.const_get_full(obj["class_name"])
|
34
|
-
objects[obj["var_name"]] = class_obj.new(*obj["args"])
|
35
|
-
end
|
36
|
-
|
37
|
-
d.answer("type" => "success")
|
38
|
-
elsif obj["type"] == "proxy_from_call"
|
39
|
-
raise "No 'var_name' was given in arguments." if !obj["var_name"]
|
40
|
-
raise "No object by that name when trying to do 'proxy_from_call': '#{obj["proxy_obj"]}' in '#{objects}'." if !objects.key?(obj["proxy_obj"])
|
41
|
-
obj_to_call = objects[obj["proxy_obj"]]
|
42
|
-
res = obj_to_call.__send__(obj["method_name"], *obj["args"])
|
43
|
-
objects[obj["var_name"]] = res
|
44
|
-
|
45
|
-
d.answer("type" => "success")
|
46
|
-
elsif obj["type"] == "proxy_from_eval"
|
47
|
-
res = eval(obj["str"])
|
48
|
-
objects[obj["var_name"]] = res
|
49
|
-
d.answer("type" => "success")
|
50
|
-
elsif obj["type"] == "proxy_from_static"
|
51
|
-
const = Knj::Strings.const_get_full(obj["const"])
|
52
|
-
res = const.__send__(obj["method_name"], *obj["args"])
|
53
|
-
objects[obj["var_name"]] = res
|
54
|
-
d.answer("type" => "success")
|
55
|
-
elsif obj["type"] == "call_object"
|
56
|
-
raise "Invalid var-name: '#{obj["var_name"]}'." if obj["var_name"].to_s.strip.length <= 0
|
57
|
-
|
58
|
-
obj_to_call = objects[obj["var_name"]]
|
59
|
-
raise "No object by that name: '#{obj["var_name"]}'." if !obj
|
60
|
-
res = obj_to_call.__send__(obj["method_name"], *obj["args"])
|
61
|
-
res = nil if obj["capture_return"] == false
|
62
|
-
d.answer("type" => "call_object_success", "result" => res)
|
63
|
-
elsif obj["type"] == "call_object_buffered"
|
64
|
-
raise "Invalid var-name: '#{obj["var_name"]}'." if obj["var_name"].to_s.strip.length <= 0
|
65
|
-
|
66
|
-
obj_to_call = objects[obj["var_name"]]
|
67
|
-
raise "No object by that name: '#{obj["var_name"]}'." if !obj
|
68
|
-
capt_return = obj["capture_return"]
|
69
|
-
|
70
|
-
if capt_return != false
|
71
|
-
ret = []
|
72
|
-
else
|
73
|
-
ret = nil
|
74
|
-
end
|
75
|
-
|
76
|
-
obj["args"].each do |args|
|
77
|
-
if capt_return != false
|
78
|
-
ret << obj_to_call.__send__(obj["method_name"], *args)
|
79
|
-
else
|
80
|
-
obj_to_call.__send__(obj["method_name"], *args)
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
d.answer("type" => "call_object_success", "result" => res)
|
85
|
-
elsif obj["type"] == "call_object_block"
|
86
|
-
raise "Invalid var-name: '#{obj["var_name"]}'." if obj["var_name"].to_s.strip.length <= 0
|
87
|
-
res = nil
|
88
|
-
|
89
|
-
begin
|
90
|
-
raise Errno::ENOENT, "No object by that name: '#{obj["var_name"]}' in '#{objects}'." if !objects.key?(obj["var_name"])
|
91
|
-
obj_to_call = objects[obj["var_name"]]
|
92
|
-
raise "No object by that name: '#{obj["var_name"]}'." if !obj
|
93
|
-
|
94
|
-
res = obj_to_call.__send__(obj["method_name"], *obj["args"]) do |*args|
|
95
|
-
block_res = block.call(*args) if block
|
96
|
-
end
|
97
|
-
ensure
|
98
|
-
#This has to be ensured, because this block wont be runned any more after enumerable has been broken...
|
99
|
-
res = nil if obj["capture_return"] == false
|
100
|
-
d.answer("type" => "call_object_success", "result" => res)
|
101
|
-
end
|
102
|
-
elsif obj["type"] == "unset"
|
103
|
-
raise "Invalid var-name: '#{obj["var_name"]}'." if obj["var_name"].to_s.strip.length <= 0
|
104
|
-
raise Errno::ENOENT, "Var-name didnt exist when trying to unset: '#{obj["var_name"]}'." if !objects.key?(obj["var_name"])
|
105
|
-
objects.delete(obj["var_name"])
|
106
|
-
d.answer("type" => "unset_success")
|
107
|
-
elsif obj["type"] == "unset_multiple"
|
108
|
-
err = nil
|
109
|
-
obj["var_names"].each do |var_name|
|
110
|
-
err = [ArgumentError, "Invalid var-name: '#{var_name}'."] if var_name.to_s.strip.length <= 0
|
111
|
-
err = [Errno::ENOENT, "Var-name didnt exist when trying to unset: '#{var_name}'."] if !objects.key?(var_name)
|
112
|
-
objects.delete(var_name)
|
113
|
-
end
|
114
|
-
|
115
|
-
raise err[0], err[1] if err
|
116
|
-
d.answer("type" => "unset_success")
|
117
|
-
elsif obj["type"] == "static"
|
118
|
-
const = Knj::Strings.const_get_full(obj["const"])
|
119
|
-
res = const.__send__(obj["method_name"], *obj["args"], &block)
|
120
|
-
res = nil if obj["capture_return"] == false
|
121
|
-
d.answer("type" => "call_const_success", "result" => res)
|
122
|
-
elsif obj["type"] == "str_eval"
|
123
|
-
res = eval(obj["str"])
|
124
|
-
d.answer("type" => "call_eval_success", "result" => res)
|
125
|
-
elsif obj["type"] == "exit"
|
126
|
-
d.answer("type" => "exit_success")
|
127
|
-
sleep 0.1
|
128
|
-
@process.destroy
|
129
|
-
exit
|
130
|
-
elsif obj["type"] == "process_data"
|
131
|
-
d.answer("type" => "process_data_success", "pid" => Process.pid)
|
132
|
-
else
|
133
|
-
raise "Didnt know how to handle hash: '#{Php4r.print_r(obj, true)}'."
|
134
|
-
end
|
135
|
-
else
|
136
|
-
raise "Unknown object: '#{obj.class.name}'."
|
137
|
-
end
|
138
|
-
|
139
|
-
block_res
|
140
|
-
}
|
141
|
-
)
|
142
|
-
|
143
|
-
print "process_meta_started\n"
|
144
|
-
@process.join
|
data/lib/knj/translations.rb
DELETED
@@ -1,133 +0,0 @@
|
|
1
|
-
class Knj::Translations
|
2
|
-
attr_accessor :args, :db, :ob, :cache
|
3
|
-
|
4
|
-
def initialize(args)
|
5
|
-
@args = args
|
6
|
-
|
7
|
-
raise "No DB given." if !@args[:db]
|
8
|
-
@db = @args[:db]
|
9
|
-
|
10
|
-
@ob = Knj::Objects.new(
|
11
|
-
:db => @args[:db],
|
12
|
-
:extra_args => [self],
|
13
|
-
:class_path => File.dirname(__FILE__),
|
14
|
-
:module => Knj::Translations,
|
15
|
-
:require => false,
|
16
|
-
:datarow => true
|
17
|
-
)
|
18
|
-
end
|
19
|
-
|
20
|
-
#Returns the translated value for an object by the given key.
|
21
|
-
def get(obj, key, args = {})
|
22
|
-
return "" if !obj
|
23
|
-
|
24
|
-
if args[:locale]
|
25
|
-
locale = args[:locale].to_sym
|
26
|
-
else
|
27
|
-
locale = @args[:locale].to_sym
|
28
|
-
end
|
29
|
-
|
30
|
-
#Force to symbol to save memory when caching.
|
31
|
-
key = key.to_sym
|
32
|
-
|
33
|
-
#Set-get the cache-hash for the object.
|
34
|
-
if !obj.instance_variable_defined?("@knj_translations_cache")
|
35
|
-
obj.instance_variable_set("@knj_translations_cache", {})
|
36
|
-
end
|
37
|
-
|
38
|
-
cache = obj.instance_variable_get("@knj_translations_cache")
|
39
|
-
|
40
|
-
#Return from cache if set.
|
41
|
-
if cache.key?(key) and cache[key].key?(locale)
|
42
|
-
return cache[key][locale]
|
43
|
-
end
|
44
|
-
|
45
|
-
trans = @ob.list(:Translation, {
|
46
|
-
"object_class" => obj.class.name,
|
47
|
-
"object_id" => obj.id,
|
48
|
-
"key" => key,
|
49
|
-
"locale" => locale
|
50
|
-
})
|
51
|
-
|
52
|
-
if trans.empty?
|
53
|
-
print "Nothing found - returning empty string.\n" if @args[:debug] or args[:debug]
|
54
|
-
return ""
|
55
|
-
end
|
56
|
-
|
57
|
-
trans.each do |tran|
|
58
|
-
if !cache[key]
|
59
|
-
cache[key] = {
|
60
|
-
locale => tran[:value]
|
61
|
-
}
|
62
|
-
elsif !cache[key][locale]
|
63
|
-
cache[key][locale] = tran[:value]
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
return cache[key][locale]
|
68
|
-
end
|
69
|
-
|
70
|
-
#Sets translations for an object by the given hash-keys and hash-values.
|
71
|
-
def set(obj, values, args = {})
|
72
|
-
#Reset cache to reflect the updates when read next time.
|
73
|
-
obj.instance_variable_set("@knj_translations_cache", {})
|
74
|
-
|
75
|
-
if args[:locale]
|
76
|
-
locale = args[:locale]
|
77
|
-
else
|
78
|
-
locale = @args[:locale]
|
79
|
-
end
|
80
|
-
|
81
|
-
values.each do |key, val|
|
82
|
-
trans = @ob.get_by(:Translation, {
|
83
|
-
"object_id" => obj.id,
|
84
|
-
"object_class" => obj.class.name,
|
85
|
-
"key" => key,
|
86
|
-
"locale" => locale
|
87
|
-
})
|
88
|
-
|
89
|
-
if trans
|
90
|
-
trans.update(:value => val)
|
91
|
-
else
|
92
|
-
@ob.add(:Translation, {
|
93
|
-
:object => obj,
|
94
|
-
:key => key,
|
95
|
-
:locale => locale,
|
96
|
-
:value => val
|
97
|
-
})
|
98
|
-
end
|
99
|
-
end
|
100
|
-
end
|
101
|
-
|
102
|
-
#Deletes all translations for a given object.
|
103
|
-
def delete(obj)
|
104
|
-
classn = obj.class.name
|
105
|
-
objid = obj.id.to_s
|
106
|
-
|
107
|
-
if obj.instance_variable_defined?("@knj_translations_cache")
|
108
|
-
cache = obj.instance_variable_get("@knj_translations_cache")
|
109
|
-
end
|
110
|
-
|
111
|
-
trans = @ob.list(:Translation, {
|
112
|
-
"object_id" => obj.id,
|
113
|
-
"object_class" => obj.class.name
|
114
|
-
})
|
115
|
-
trans.each do |tran|
|
116
|
-
#Delete the cache if defined on the object.
|
117
|
-
cache.delete(tran[:key].to_sym) if cache and cache.key?(tran[:key].to_sym)
|
118
|
-
|
119
|
-
#Delete the translation object.
|
120
|
-
@ob.delete(tran)
|
121
|
-
end
|
122
|
-
end
|
123
|
-
end
|
124
|
-
|
125
|
-
class Knj::Translations::Translation < Knj::Datarow
|
126
|
-
def self.add(d)
|
127
|
-
if d.data[:object]
|
128
|
-
d.data[:object_class] = d.data[:object].class.name
|
129
|
-
d.data[:object_id] = d.data[:object].id
|
130
|
-
d.data.delete(:object)
|
131
|
-
end
|
132
|
-
end
|
133
|
-
end
|