jinda 0.5.1 → 0.5.2

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.
@@ -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