jinda 0.5.1 → 0.5.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -13,15 +13,15 @@
13
13
 
14
14
  %h2 Recently tested with:
15
15
  %ul
16
- %li Rubygems 2.6.3
17
- %li Rails 6.0.1
16
+ %li Rubygems 2.7.0
17
+ %li Rails 6.0.2
18
18
  %li rails new YOURAPP --skip-test-unit --skip-bundle --skip-active-record --skip-javascript --skip-turbolinks
19
19
  %li (rails new YOURAPP -BOTJ)
20
20
 
21
21
 
22
22
  %h2 Installation
23
23
  %ul
24
- %li add gem 'jinda', '0.5.1'
24
+ %li add gem 'jinda', '0.5.2'
25
25
  %li bundle
26
26
  %li rails generate jinda:install
27
27
  %li (run all with "sh install.sh" )
@@ -44,9 +44,10 @@
44
44
  <node CREATED="1275790679363" ID="ID_829325467" MODIFIED="1511159696044" TEXT="link: logs: /jinda/logs"/>
45
45
  <node CREATED="1507573166973" ID="ID_351025910" MODIFIED="1511159700908" TEXT="link: docs: /jinda/doc"/>
46
46
  </node>
47
- <node CREATED="1273706796854" FOLDED="true" ID="ID_1003882979" MODIFIED="1583097155227" TEXT="devs: Developer">
47
+ <node CREATED="1273706796854" ID="ID_1003882979" MODIFIED="1588557018609" TEXT="devs: Developer">
48
48
  <node CREATED="1275373154914" ID="ID_340725299" MODIFIED="1275373158632" TEXT="role:d"/>
49
49
  <node CREATED="1275788317299" ID="ID_716276608" MODIFIED="1511159716471" TEXT="link: error_logs: /jinda/error_logs"/>
50
+ <node CREATED="1275788317299" ID="ID_1570419198" MODIFIED="1587858894833" TEXT="link: notice_logs: /jinda/notice_logs"/>
50
51
  </node>
51
52
  <node CREATED="1493393619430" ID="ID_554831343" MODIFIED="1584996526651" TEXT="notes: Notes">
52
53
  <node CREATED="1493489768542" ID="ID_737469676" MODIFIED="1581383331288" TEXT="link:My Notes: /notes/my">
@@ -22,7 +22,7 @@ require 'active_support/core_ext'
22
22
  #
23
23
  # xvar is (become) global variable of current program including user, runseq, and services
24
24
  #
25
- ################################################################################
25
+ ########################################################################]
26
26
 
27
27
 
28
28
  module Jinda
@@ -30,6 +30,155 @@ module Jinda
30
30
  require "rexml/document"
31
31
  include REXML
32
32
  # methods from application_controller
33
+
34
+ ########################################################################]
35
+ # Each Service at one moment will create one xmain
36
+ ########################################################################]
37
+ def create_xmain(service)
38
+ c = name2camel(service.module.code)
39
+ custom_controller= "#{c}Controller"
40
+ params["return"] = request.env['HTTP_REFERER']
41
+ Jinda::Xmain.create :service=>service,
42
+ :start=>Time.now,
43
+ :name=>service.name,
44
+ :ip=> get_ip,
45
+ :status=>'I', # init
46
+ :user=>current_ma_user,
47
+ :xvars=> {
48
+ :service_id=>service.id,
49
+ :p=>params.to_unsafe_h,
50
+ :id=>params[:id],
51
+ :user_id=>current_ma_user.try(:id),
52
+ :custom_controller=>custom_controller,
53
+ :host=>request.host,
54
+ :referer=>request.env['HTTP_REFERER']
55
+ }
56
+ end
57
+ def clear_xmains
58
+ Jinda::Xmain.where(:status =>{'$in'=>['R','I']}).update_all(:status=>'X')
59
+ redirect_to action:"pending"
60
+ end
61
+ def ajax_notice
62
+ if notice=Jinda::Notice.recent(current_ma_user, request.env["REMOTE_ADDR"])
63
+ notice.update_attribute :unread, false
64
+ js = "notice('#{notice.message}');"
65
+ else
66
+ js = ""
67
+ end
68
+ render plain: "<script>#{js}</script>"
69
+ end
70
+
71
+ ########################################################################]
72
+ # Each xmain will create many run_seq as many as steps and form_steps
73
+ ########################################################################]
74
+ #
75
+ ############################## @runseq ################################]
76
+ # @runseq => #<Jinda::Runseq _id: 5df31912a54d758417a7afc9,
77
+ # created_at: 2019-12-13 04:52:34 UTC,
78
+ # updated_at: 2019-12-13 04:52:43 UTC,
79
+ # user_id: nil,
80
+ # xmain_id: BSON::ObjectId('5df31912a54d758417a7afc7'),
81
+ # action: "do",
82
+ # status: "R",
83
+ # code: "create",
84
+ # name: "Create Article",
85
+ # role: "",
86
+ # rule: "true",
87
+ # rstep: 2,
88
+ # form_step: 1,
89
+ # start: 2019-12-13 04:52:43 UTC,
90
+ # stop: nil,
91
+ # end: true,
92
+ # xml: "<node CREATED='1493419491125' ID='ID_1687683396' MODIFIED='1493483244848' TEXT='create: Create Article'><icon BUILTIN='bookmark'/></node>",
93
+ # ip: nil>
94
+ ########################################################################]
95
+
96
+ def create_runseq(xmain)
97
+ @xvars= xmain.xvars
98
+ default_role= get_default_role
99
+ xml= xmain.service.xml
100
+ root = REXML::Document.new(xml).root
101
+ i= 0; j= 0 # i= step, j= form_step
102
+ root.elements.each('node') do |activity|
103
+ text= activity.attributes['TEXT']
104
+ next if ma_comment?(text)
105
+ next if text =~/^rule:\s*/
106
+ action= freemind2action(activity.elements['icon'].attributes['BUILTIN']) if activity.elements['icon']
107
+ return false unless action
108
+ i= i + 1
109
+ output_ma_display= false
110
+ if action=='output'
111
+ ma_display= get_option_xml("display", activity)
112
+ if ma_display && !affirm(ma_display)
113
+ output_ma_display= false
114
+ else
115
+ output_ma_display= true
116
+ end
117
+ end
118
+ j= j + 1 if (action=='form' || output_ma_display)
119
+ @xvars['referer'] = activity.attributes['TEXT'] if action=='redirect'
120
+ if action!= 'if' && !text.blank?
121
+ scode, name= text.split(':', 2)
122
+ name ||= scode; name.strip!
123
+ code= name2code(scode)
124
+ else
125
+ code= text
126
+ name= text
127
+ end
128
+ role= get_option_xml("role", activity) || default_role
129
+ rule= get_option_xml("rule", activity) || "true"
130
+ runseq= Jinda::Runseq.create :xmain=>xmain.id,
131
+ :name=> name, :action=> action,
132
+ :code=> code, :role=>role.upcase, :rule=> rule,
133
+ :rstep=> i, :form_step=> j, :status=>'I',
134
+ :xml=>activity.to_s
135
+ xmain.current_runseq= runseq.id if i==1
136
+ end
137
+ @xvars['total_steps']= i
138
+ @xvars['total_form_steps']= j
139
+ end
140
+
141
+ def init_vars(xmain)
142
+ @xmain= Jinda::Xmain.find xmain
143
+ @xvars= @xmain.xvars
144
+ @runseq= @xmain.runseqs.find @xmain.current_runseq
145
+ # authorize?
146
+ @xvars['current_step']= @runseq.rstep
147
+ @xvars['referrer']= request.referrer
148
+ session[:xmain_id]= @xmain.id
149
+ session[:runseq_id]= @runseq.id
150
+ unless params[:action]=='run_call'
151
+ @runseq.start ||= Time.now
152
+ @runseq.status= 'R' # running
153
+ @runseq.save
154
+ end
155
+ $xmain= @xmain; $xvars= @xvars
156
+ $runseq_id= @runseq.id
157
+ $user_id= current_ma_user.try(:id)
158
+ end
159
+ def init_vars_by_runseq(runseq_id)
160
+ @runseq= Jinda::Runseq.find runseq_id
161
+ @xmain= @runseq.xmain
162
+ @xvars= @xmain.xvars
163
+ #@xvars[:current_step]= @runseq.rstep
164
+ @runseq.start ||= Time.now
165
+ @runseq.status= 'R' # running
166
+ @runseq.save
167
+ end
168
+
169
+ def document
170
+ doc = Jinda::Doc.find params[:id]
171
+ if doc.cloudinary
172
+ require 'net/http'
173
+ require "uri"
174
+ uri = URI.parse(doc.url)
175
+ data = Net::HTTP.get_response(uri)
176
+ send_data(data.body, :filename=>doc.filename, :type=>doc.content_type, :disposition=>"inline")
177
+ else
178
+ data= read_binary(doc.url)
179
+ send_data(data, :filename=>doc.filename, :type=>doc.content_type, :disposition=>"inline")
180
+ end
181
+ end
33
182
  def b(s)
34
183
  "<b>#{s}</b>".html_safe
35
184
  end
@@ -41,9 +190,9 @@ module Jinda
41
190
  end
42
191
 
43
192
  def refresh_to(url='/', option={})
44
- if option[:alert]
45
- ma_log option[:alert]
46
- end
193
+ if option[:alert]
194
+ ma_log option[:alert]
195
+ end
47
196
  # skip #
48
197
  # Rails 5.2 not allow to use js inline call
49
198
  render inline: "<script>window.location.replace('#{url}')</script>"
@@ -156,7 +305,7 @@ module Jinda
156
305
  xml= @service.xml
157
306
  step1 = REXML::Document.new(xml).root.elements['node']
158
307
  role= get_option_xml("role", step1) || ""
159
- # rule= get_option_xml("rule", step1) || true
308
+ # rule= get_option_xml("rule", step1) || true
160
309
  return true if role==""
161
310
  unless current_ma_user
162
311
  return role.blank?
@@ -168,13 +317,13 @@ module Jinda
168
317
  def ma_log(message)
169
318
  # Jinda::Notice.create :message => ERB::Util.html_escape(message.gsub("`","'")),
170
319
  # :unread=> true, :ip=> ($ip || request.env["REMOTE_ADDR"])
171
- if session[:user_id]
172
- Jinda::Notice.create :message => ERB::Util.html_escape(message.gsub("`","'")),
173
- :user_id => $user.id, :unread=> true, :ip=>request.env["REMOTE_ADDR"]
174
- else
175
- Jinda::Notice.create :message => ERB::Util.html_escape(message.gsub("`","'")),
176
- :unread=> true, :ip=>request.env["REMOTE_ADDR"]
177
- end
320
+ if session[:user_id]
321
+ Jinda::Notice.create :message => ERB::Util.html_escape(message.gsub("`","'")),
322
+ :user_id => $user.id, :unread=> true, :ip=>request.env["REMOTE_ADDR"]
323
+ else
324
+ Jinda::Notice.create :message => ERB::Util.html_escape(message.gsub("`","'")),
325
+ :unread=> true, :ip=>request.env["REMOTE_ADDR"]
326
+ end
178
327
  end
179
328
 
180
329
  alias :ma_notice :ma_log
@@ -241,7 +390,7 @@ module Jinda
241
390
  # end
242
391
  #@user ||= User.find_by_auth_token!(cookies[:auth_token]) if cookies[:auth_token]
243
392
  @user ||= User.where(:auth_token => cookies[:auth_token]).first if cookies[:auth_token]
244
- return @user
393
+ return @user
245
394
  end
246
395
 
247
396
  def ui_action?(s)
@@ -256,7 +405,7 @@ module Jinda
256
405
  # ""
257
406
  # end
258
407
  # end
259
-
408
+
260
409
  # ##########################################################################
261
410
  #
262
411
  # Create / Update Modules, Runseqs, Services from XML
@@ -286,9 +435,9 @@ module Jinda
286
435
  module_code= code.to_code
287
436
  menu_icon = m_icon(m)
288
437
 
289
- # ##########################################################################
290
- # First Node eg: Module Name
291
- # ##########################################################################
438
+ # ##########################################################################
439
+ # First Node eg: Module Name
440
+ # ##########################################################################
292
441
  # create or update to GmaModule
293
442
  ma_module= Jinda::Module.find_or_create_by :code=>module_code
294
443
  ma_module.update_attributes :uid=>ma_module.id.to_s, :icon=>menu_icon
@@ -298,9 +447,9 @@ module Jinda
298
447
  mseq += 1
299
448
  seq= 0
300
449
 
301
- # ##########################################################################
302
- # Second Nodes eg: Role, Link otherwise Services
303
- # ##########################################################################
450
+ # ##########################################################################
451
+ # Second Nodes eg: Role, Link otherwise Services
452
+ # ##########################################################################
304
453
  m.each_element('node') do |s|
305
454
  service_name= s.attributes["TEXT"].to_s
306
455
  scode, sname= service_name.split(':', 2)
@@ -323,9 +472,9 @@ module Jinda
323
472
  protected_services << ma_service.uid
324
473
  else
325
474
 
326
- # ##########################################################################
327
- # Second and Third Nodes eg: Role, Normal Services
328
- # ##########################################################################
475
+ # ##########################################################################
476
+ # Second and Third Nodes eg: Role, Normal Services
477
+ # ##########################################################################
329
478
  # normal service
330
479
  step1 = s.elements['node']
331
480
  role= get_option_xml("role", step1) || ""
@@ -381,7 +530,7 @@ module Jinda
381
530
  ########################################################################
382
531
  # Jinda Rake Task #
383
532
  ########################################################################
384
-
533
+
385
534
  def gen_views
386
535
  t = ["*** generate ui ***"]
387
536
 
@@ -394,7 +543,7 @@ module Jinda
394
543
  unless gen_view_file_exist?(dir)
395
544
  gen_view_mkdir(dir,t)
396
545
  end
397
-
546
+
398
547
  if s.code=='link'
399
548
  f= "app/views/#{s.module.code}/index.haml"
400
549
  $afile << f
@@ -405,7 +554,7 @@ module Jinda
405
554
  end
406
555
  next
407
556
  end
408
-
557
+
409
558
  dir ="app/views/#{s.module.code}/#{s.code}"
410
559
  unless gen_view_file_exist?(dir)
411
560
  gen_view_mkdir(dir,t)
@@ -449,18 +598,18 @@ module Jinda
449
598
 
450
599
  def process_models
451
600
 
452
- # app= get_app
453
- # t= ["process models"]
454
- # xml map sample from index.mm
455
- # node @CREATED=1273819432637 @ID=ID_1098419600 @MODIFIED=1334737006485 @TEXT=Jinda
456
- # node @CREATED=1273819462973 @ID=ID_282419531 @MODIFIED=1493705904561 @POSITION=right @TEXT=services
457
- # node @CREATED=1273819465949 @FOLDED=true @ID=ID_855471610 @MODIFIED=1493768913078 @POSITION=right @TEXT=roles
458
- # node @CREATED=1273819456867 @ID=ID_1677010054 @MODIFIED=1493418874718 @POSITION=left @TEXT=models
459
- # node @CREATED=1292122118499 @FOLDED=true @ID=ID_1957754752 @MODIFIED=1493705885123 @TEXT=person
460
- # node @CREATED=1292122236285 @FOLDED=true @ID=ID_959987887 @MODIFIED=1493768919147 @TEXT=address
461
- # node @CREATED=1493418879485 @ID=ID_1995497233 @MODIFIED=1493718770637 @TEXT=article
462
- # node @CREATED=1493418915637 @ID=ID_429078131 @MODIFIED=1493418930081 @TEXT=comment
463
-
601
+ # app= get_app
602
+ # t= ["process models"]
603
+ # xml map sample from index.mm
604
+ # node @CREATED=1273819432637 @ID=ID_1098419600 @MODIFIED=1334737006485 @TEXT=Jinda
605
+ # node @CREATED=1273819462973 @ID=ID_282419531 @MODIFIED=1493705904561 @POSITION=right @TEXT=services
606
+ # node @CREATED=1273819465949 @FOLDED=true @ID=ID_855471610 @MODIFIED=1493768913078 @POSITION=right @TEXT=roles
607
+ # node @CREATED=1273819456867 @ID=ID_1677010054 @MODIFIED=1493418874718 @POSITION=left @TEXT=models
608
+ # node @CREATED=1292122118499 @FOLDED=true @ID=ID_1957754752 @MODIFIED=1493705885123 @TEXT=person
609
+ # node @CREATED=1292122236285 @FOLDED=true @ID=ID_959987887 @MODIFIED=1493768919147 @TEXT=address
610
+ # node @CREATED=1493418879485 @ID=ID_1995497233 @MODIFIED=1493718770637 @TEXT=article
611
+ # node @CREATED=1493418915637 @ID=ID_429078131 @MODIFIED=1493418930081 @TEXT=comment
612
+
464
613
  models= @app.elements["//node[@TEXT='models']"] || REXML::Document.new
465
614
  models.each_element('node') do |model|
466
615
  # t << "= "+model.attributes["TEXT"]
@@ -468,14 +617,14 @@ module Jinda
468
617
  next if model_name.comment?
469
618
  model_code= name2code(model_name)
470
619
  model_file= "#{Rails.root}/app/models/#{model_code}.rb"
471
-
620
+
472
621
  if File.exists?(model_file)
473
622
  doc= File.read(model_file)
474
623
  else
475
624
  system("rails generate model #{model_code}")
476
625
  doc= File.read(model_file)
477
626
  end
478
-
627
+
479
628
  doc = add_utf8(doc)
480
629
  attr_hash= make_fields(model)
481
630
  doc = add_jinda(doc, attr_hash)
@@ -492,14 +641,14 @@ module Jinda
492
641
  def add_jinda(doc, attr_hash)
493
642
  if doc =~ /#{@btext}/
494
643
  s1,s2,s3= doc.partition(/ #{@btext}.*#{@etext}\n/m)
495
- s2= ""
644
+ s2= ""
496
645
  else
497
646
  s1,s2,s3= doc.partition("include Mongoid::Document\n")
498
647
  end
499
648
  doc= s1+s2+ <<-EOT
500
649
  #{@btext}
501
650
  include Mongoid::Timestamps
502
- EOT
651
+ EOT
503
652
 
504
653
  attr_hash.each do |a|
505
654
  # doc+= "\n*****"+a.to_s+"\n"
@@ -592,8 +741,8 @@ module Jinda
592
741
  ########################################################################
593
742
  # END code from jinda.rake #
594
743
  ########################################################################
595
-
596
-
744
+
745
+
597
746
  ########################################################################
598
747
  # Methods to be overrided by gemhelp #
599
748
  # for Rspec Test
@@ -613,7 +762,7 @@ module Jinda
613
762
  t << "create file #{f}"
614
763
  end
615
764
  ########################################################################
616
-
765
+
617
766
  def controller_exists?(modul)
618
767
  File.exists? "#{Rails.root}/app/controllers/#{modul}_controller.rb"
619
768
  end
@@ -659,7 +808,7 @@ module Jinda
659
808
  node.each_element("icon") do |mn|
660
809
  mcons << mn.attributes["BUILTIN"]
661
810
  end
662
- ticon = mcons[0].to_s
811
+ ticon = mcons[0].to_s
663
812
  return ticon
664
813
  end
665
814
 
@@ -689,8 +838,8 @@ module Jinda
689
838
 
690
839
  def freemind2action(s)
691
840
  case s.downcase
692
- #when 'bookmark' # Excellent
693
- # 'call'
841
+ #when 'bookmark' # Excellent
842
+ # 'call'
694
843
  when 'bookmark' # Excellent
695
844
  'do'
696
845
  when 'attach' # Look here
@@ -741,9 +890,9 @@ class String
741
890
  end
742
891
  def to_code
743
892
  s= self.dup
744
- # s.downcase!
745
- # s.gsub! /[\s\-_]/, ""
746
- # s
893
+ # s.downcase!
894
+ # s.gsub! /[\s\-_]/, ""
895
+ # s
747
896
  code, name = s.split(':')
748
897
  code.downcase.strip.gsub(' ','_').gsub(/[^#_\/a-zA-Z0-9]/,'')
749
898
  end
@@ -759,9 +908,9 @@ module ActionView
759
908
  end
760
909
  end
761
910
  class FormBuilder
762
- def date_select_thai(method)
763
- self.date_select method, :use_month_names=>THAI_MONTHS, :order=>[:day, :month, :year]
764
- end
911
+ def date_select_thai(method)
912
+ self.date_select method, :use_month_names=>THAI_MONTHS, :order=>[:day, :month, :year]
913
+ end
765
914
  def date_field(method, options = {})
766
915
  default= options[:default] || self.object.send(method) || Date.today
767
916
  data_options= ({"mode"=>"calbox"}).merge(options)
@@ -852,7 +1001,7 @@ module ActionView
852
1001
  init_map();
853
1002
  });
854
1003
  </script>
855
- EOT
1004
+ EOT
856
1005
  out.html_safe
857
1006
  end
858
1007
  end