jinda 0.5.5 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (25) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/lib/generators/jinda/install_generator.rb +6 -3
  4. data/lib/generators/jinda/templates/app/controllers/jinda_org/application_controller.rb +0 -1
  5. data/lib/generators/jinda/templates/app/controllers/jinda_org/articles_controller.rb +60 -35
  6. data/lib/generators/jinda/templates/app/controllers/jinda_org/comments_controller.rb +12 -10
  7. data/lib/generators/jinda/templates/app/jinda/index.mm +16 -6
  8. data/lib/generators/jinda/templates/app/jinda/template/index.mm +366 -0
  9. data/lib/generators/jinda/templates/app/views/articles/edit.haml +7 -7
  10. data/lib/generators/jinda/templates/app/views/articles/index.haml +2 -2
  11. data/lib/generators/jinda/templates/app/views/articles/my.haml +3 -3
  12. data/lib/generators/jinda/templates/app/views/articles/new_article/form_article.html.erb +3 -3
  13. data/lib/generators/jinda/templates/app/views/articles/show.html.haml +4 -3
  14. data/lib/generators/jinda/templates/app/views/jinda/_menu.haml +2 -1
  15. data/lib/generators/jinda/templates/app/views/jinda/index.html.haml +51 -41
  16. data/lib/generators/jinda/templates/app/views/layouts/_head.html.erb +7 -10
  17. data/lib/generators/jinda/templates/app/views/layouts/{_metatag.html.erb → _meta_tag.html.erb} +0 -0
  18. data/lib/generators/jinda/templates/app/views/layouts/jqm/_full.haml +1 -9
  19. data/lib/generators/jinda/templates/app/views/notes/new/new_note.html.erb +1 -1
  20. data/lib/jinda/helpers.rb +2 -1
  21. data/lib/jinda/version.rb +1 -1
  22. data/lib/jquery.validate.js +1293 -0
  23. metadata +5 -5
  24. data/lib/generators/jinda/templates/app/views/layouts/_meta_tags.html.erb +0 -5
  25. data/lib/generators/jinda/templates/app/views/new.html.erb +0 -7
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 22a5bc38b0cb1b8d762c12992113c2c7ff7a32a561ffa40e2d0bffc33c4ef3ab
4
- data.tar.gz: 72e62d233e7caf07a108b7a2a1cdfba7b837724215332a66e625c950f806c9f7
3
+ metadata.gz: 2e04cd357d30062a6b765e150ef9ed68f727431fd8aa38d95b89bc6c6724adff
4
+ data.tar.gz: 82d27af5714824521aca90a0250177a615cfb4a7c75c7d925f3d9d6b9dddf876
5
5
  SHA512:
6
- metadata.gz: 1eb303b8a9a49ff57fc98dcbceeb12982bd2f7686fc653b996da5212ee8189a9d3a66f7809db839d85f5e45e278f43c54e90deeab74b83aa268b0fbae0ef220d
7
- data.tar.gz: 9ce2e36e149bcde4620bcdb1cb29a0b38847055c8ae746af0dfc4201e866cdfbe4a07460f9957354fc1f5023427ed4348c012233b50e648d847d6f28068817b6
6
+ metadata.gz: 8764b341b8ff83145342f8bef2463deb743f9e357db9174ed0459e017433ceb1d791ec267fbd90a66aae97eacc13f90cfeab3da9a60f00872f97f53e8eb55002
7
+ data.tar.gz: 9d96d1c74a3a99822de78c346537fc744a15fdeb6cd9c6a414011cf8b80f20751b35dc6143bb737dd6c5a8ce8b05969c17b768872306bb0dbdda2b293f412327
data/README.md CHANGED
@@ -40,7 +40,7 @@ app without ActiveRecord
40
40
 
41
41
  ## Add jinda to your Gemfile:
42
42
 
43
- gem 'jinda', '~> 0.5.5'
43
+ gem 'jinda', '~> 0.6.0'
44
44
 
45
45
  For Development (most updated)
46
46
 
@@ -110,15 +110,18 @@ module Jinda
110
110
  route "resources :users"
111
111
  route "resources :docs"
112
112
  route "resources :notes"
113
- route "resources :articles"
113
+ route "resources :comments"
114
+ route "resources :articles do resources :comments end"
114
115
  route "get '/jinda/document/:id' => 'jinda#document'"
115
116
  route "get '/notes/destroy/:id' => 'notes#destroy'"
116
117
  route "get '/notes/my/destroy/:id' => 'notes#destroy'"
117
118
  route "get '/docs/my/destroy' => 'docs#destroy'"
118
119
  route "get '/notes/my' => 'notes/my'"
119
120
  route "get '/docs/my' => 'docs/my'"
121
+ route "get '/articles/edit' => 'articles/edit'"
122
+ route "get '/articles/show' => 'articles/show'"
120
123
  route "get '/articles/my/destroy' => 'articles#destroy'"
121
- route "get '/articles/my' => 'articles/my'"
124
+ route "get '/articles/my' => 'articles#my'"
122
125
  route "get '/logout' => 'sessions#destroy', :as => 'logout'"
123
126
  route "get '/auth/failure' => 'sessions#destroy'"
124
127
  route "get '/auth/:provider/callback' => 'sessions#create'"
@@ -130,7 +133,7 @@ module Jinda
130
133
  route "post '/jinda/init' => 'jinda#init'"
131
134
  route "jinda_methods.each do \|aktion\| get \"/jinda/\#\{aktion\}\" => \"jinda#\#\{aktion\}\" end"
132
135
  route "jinda_methods += ['error_logs', 'notice_logs', 'cancel', 'run_output', 'end_output']"
133
- route "jinda_methods += ['run_redirect', 'run_direct_to']"
136
+ route "jinda_methods += ['run_redirect', 'run_direct_to','run_if']"
134
137
  route "jinda_methods += ['init', 'run', 'run_mail', 'document', 'run_do', 'run_form', 'end_form']"
135
138
  route "jinda_methods = ['pending', 'status', 'search', 'doc', 'doc_print', 'logs', 'ajax_notice']"
136
139
  route "\# start jiinda method routes"
@@ -1,5 +1,4 @@
1
1
  class ApplicationController < ActionController::Base
2
- # https://www.cookieshq.co.uk/posts/easy-seo-metatags-with-rails-4#a-word-about-turbolinks
3
2
  before_action :prepare_meta_tags, if: -> { request.get? }
4
3
  # CSRF protection is turned on with the protect_from_forgery method.
5
4
  protect_from_forgery unless: -> { request.format.json? }
@@ -1,23 +1,30 @@
1
1
  class ArticlesController < ApplicationController
2
- before_action :load_article, only: [:show,]
3
- before_action :load_edit_article, only: [:edit, :destroy]
4
- before_action :load_comments, only: [:show]
2
+ before_action :load_articles, except: [:destroy]
3
+ before_action :load_my_articles, only: [:my]
4
+ before_action :load_article, only: [:destroy, :edit]
5
5
 
6
6
  def index
7
- @articles = Article.desc(:created_at).page(params[:page]).per(10)
7
+ # before_action
8
8
  end
9
9
 
10
- def show
10
+ def my
11
+ # before_action
12
+ end
13
+
14
+ def show
15
+ @article = Article.find(params[:article_id])
16
+ @comments = @article.comments.desc(:created_at).page(params[:page]).per(10)
11
17
  prepare_meta_tags(title: @article.title,
12
18
  description: @article.text,
13
19
  keywords: @article.keywords)
14
20
  end
15
21
 
16
22
  def edit
17
- @page_title = 'Member Login'
23
+ @page_title = 'Edit Article'
18
24
  end
19
25
 
20
26
  def create
27
+ # Use Jinda $xvars
21
28
  @article = Article.new(
22
29
  title: $xvars["form_article"]["title"],
23
30
  text: $xvars["form_article"]["text"],
@@ -27,51 +34,69 @@ class ArticlesController < ApplicationController
27
34
  @article.save!
28
35
  end
29
36
 
30
- def my
31
- @articles = Article.where(user_id: current_ma_user).desc(:created_at).page(params[:page]).per(10)
32
- @page_title = 'Member Login'
37
+ def update
38
+ @article = Article.find(params[:id])
39
+ @article.update(
40
+ title: params["article"]["title"],
41
+ text: params["article"]["text"],
42
+ keywords: params["article"]["keywords"],
43
+ body: params["article"]["body"]
44
+ )
45
+ redirect_to :action=> 'show', :article_id => @article.id
33
46
  end
34
47
 
35
- def update
36
- # $xvars["select_article"] and $xvars["edit_article"]
37
- # These are variables with params when called
38
- # They contain everything that we get their forms select_article and edit_article
39
-
40
- article_id = $xvars["select_article"] ? $xvars["select_article"]["title"] : $xvars["p"]["article_id"]
41
- @article = Article.find(article_id)
42
- @article.update(title: $xvars["edit_article"]["title"],
43
- text: $xvars["edit_article"]["text"],
44
- keywords: $xvars["edit_article"]["keywords"],
45
- body: $xvars["edit_article"]["body"]
48
+ def j_update
49
+ # Use Jinda $xvars
50
+ @article_id = $xvars["select_article"] ? $xvars["select_article"]["title"] : $xvars["p"]["article_id"]
51
+ @article = Article.find_by :id => @article_id
52
+ @article.update(title: $xvars["edit_article"]["article"]["title"],
53
+ text: $xvars["edit_article"]["article"]["text"],
54
+ keywords: $xvars["edit_article"]["article"]["keywords"],
55
+ body: $xvars["edit_article"]["article"]["body"]
46
56
  )
47
57
  end
48
58
 
49
59
  def destroy
50
- #
51
- # duplicated from jinda_controller
52
- # Expected to use in jinda)controller
53
- current_ma_user = User.where(:auth_token => cookies[:auth_token]).first if cookies[:auth_token]
54
-
55
- if Rails.env.test? #Temp solution until fix test of current_ma_user
56
- current_ma_user = $xvars["current_ma_user"]
57
- #current_ma_user = @article.user
58
- end
60
+ # Use Rails
61
+ # before_action
59
62
 
60
- if current_ma_user.role.upcase.split(',').include?("A") || current_ma_user == @article.user
63
+ if current_admin? || current_ma_user == @article.user
61
64
  @article.destroy
62
65
  end
63
66
 
64
- redirect_to :action=>'my'
67
+ action = (current_admin? ? 'index' : 'my')
68
+ redirect_to :action=> (current_admin? ? 'index' : 'my')
65
69
  end
66
70
 
67
71
  private
72
+
73
+ def current_admin?
74
+ if current_ma_user.role.upcase.split(',').include?("A")
75
+ return true
76
+ else
77
+ return false
78
+ end
79
+ end
68
80
 
69
- def load_edit_article
70
- @article = Article.find(params.require(:article_id))
81
+
82
+ def load_articles
83
+ @articles = Article.desc(:created_at).page(params[:page]).per(10)
71
84
  end
72
-
85
+
86
+ def load_my_articles
87
+ @my_articles = @articles.where(user: current_ma_user)
88
+ end
89
+
73
90
  def load_article
74
- @article = Article.find(params.permit(:id))
91
+ @article = Article.find(params[:article_id])
92
+ end
93
+
94
+ def article_params
95
+ params[:article_id]
96
+ end
97
+
98
+ def load_edit_article
99
+ @article = Article.find(params.require(:article).permit(:article_id))
75
100
  end
76
101
 
77
102
  def load_comments
@@ -1,17 +1,19 @@
1
1
  class CommentsController < ApplicationController
2
2
 
3
3
  def create
4
- # $xvars['p'] is the query parameters like params in rails guide:
5
- # private
6
- # def comment_params
7
- # params.require(:comment).permit(:commenter, :body)
8
- # end
9
- #
10
- @article = Article.find($xvars['p']['comment']['article_id'])
11
- @comment = @article.comments.new(
12
- body: $xvars['p']['comment']['body'],
13
- user_id: $xvars["user_id"])
4
+ @article = Article.find(article_params["article_id"])
5
+ @comment = @article.comments.new(comment_params)
14
6
  @comment.save!
7
+ redirect_to controller: 'articles', action: 'show', article_id: @article
15
8
  end
16
9
 
10
+ private
11
+
12
+ def article_params
13
+ params.require(:comment).permit(:article_id)
14
+ end
15
+
16
+ def comment_params
17
+ params.require(:comment).permit(:body, :article_id, :user_id)
18
+ end
17
19
  end
@@ -49,7 +49,7 @@
49
49
  <node CREATED="1275788317299" ID="ID_716276608" MODIFIED="1511159716471" TEXT="link: error_logs: /jinda/error_logs"/>
50
50
  <node CREATED="1275788317299" ID="ID_1570419198" MODIFIED="1587858894833" TEXT="link: notice_logs: /jinda/notice_logs"/>
51
51
  </node>
52
- <node CREATED="1589756777499" ID="ID_853155456" MODIFIED="1589772589662" TEXT="docs: Document">
52
+ <node CREATED="1589756777499" FOLDED="true" ID="ID_853155456" MODIFIED="1592785016438" TEXT="docs: Document">
53
53
  <node CREATED="1589757073388" ID="ID_1938238774" MODIFIED="1589772640862" TEXT="link: My Document: /docs/my">
54
54
  <node CREATED="1589757125861" ID="ID_521286668" MODIFIED="1589757136547" TEXT="role:m"/>
55
55
  </node>
@@ -87,7 +87,7 @@
87
87
  </node>
88
88
  </node>
89
89
  </node>
90
- <node CREATED="1493393619430" FOLDED="true" ID="ID_554831343" MODIFIED="1591392794806" TEXT="notes: Notes">
90
+ <node CREATED="1493393619430" ID="ID_554831343" MODIFIED="1592926786394" TEXT="notes: Notes">
91
91
  <node CREATED="1493489768542" ID="ID_737469676" MODIFIED="1589772615102" TEXT="link:My Notes: /notes/my">
92
92
  <node CREATED="1493490295677" ID="ID_514416082" MODIFIED="1493490302239" TEXT="role:m"/>
93
93
  </node>
@@ -151,7 +151,7 @@
151
151
  </node>
152
152
  </node>
153
153
  </node>
154
- <node CREATED="1493393619430" FOLDED="true" ID="ID_328863650" MODIFIED="1591392789585" TEXT="articles: Article">
154
+ <node CREATED="1493393619430" ID="ID_328863650" MODIFIED="1592785024002" TEXT="articles: Article">
155
155
  <node CREATED="1493419096527" ID="ID_1521905276" MODIFIED="1493478060121" TEXT="link: All Articles: /articles"/>
156
156
  <node CREATED="1493489768542" FOLDED="true" ID="ID_1376361427" MODIFIED="1589757167952" TEXT="link: My article: /articles/my">
157
157
  <node CREATED="1493490295677" ID="ID_628476988" MODIFIED="1493490302239" TEXT="role:m"/>
@@ -179,9 +179,14 @@
179
179
  <icon BUILTIN="attach"/>
180
180
  <node CREATED="1493479557266" ID="ID_1681993437" MODIFIED="1493479561055" TEXT="role:m"/>
181
181
  </node>
182
- <node CREATED="1493419735921" ID="ID_1575963748" MODIFIED="1493489477505" TEXT="update: Update Article">
182
+ <node CREATED="1493419735921" ID="ID_1575963748" MODIFIED="1593286858918" TEXT="j_update: Update Article">
183
183
  <icon BUILTIN="bookmark"/>
184
184
  </node>
185
+ <node CREATED="1591278861459" ID="ID_863187878" MODIFIED="1591319807025" TEXT="/articles/my">
186
+ <arrowlink DESTINATION="ID_863187878" ENDARROW="Default" ENDINCLINATION="0;0;" ID="Arrow_ID_604727235" STARTARROW="None" STARTINCLINATION="0;0;"/>
187
+ <linktarget COLOR="#b0b0b0" DESTINATION="ID_863187878" ENDARROW="Default" ENDINCLINATION="0;0;" ID="Arrow_ID_604727235" SOURCE="ID_863187878" STARTARROW="None" STARTINCLINATION="0;0;"/>
188
+ <icon BUILTIN="forward"/>
189
+ </node>
185
190
  </node>
186
191
  <node CREATED="1495246388313" ID="ID_1861034169" MODIFIED="1585001527103" TEXT="xedit_article: xEdit Article">
187
192
  <icon BUILTIN="button_cancel"/>
@@ -189,12 +194,12 @@
189
194
  <icon BUILTIN="attach"/>
190
195
  <node CREATED="1495246517185" ID="ID_1224073606" MODIFIED="1495246522964" TEXT="role:m"/>
191
196
  </node>
192
- <node CREATED="1495246466176" ID="ID_1635586443" MODIFIED="1495266959360" TEXT="update: Update Article">
197
+ <node CREATED="1495246466176" ID="ID_1635586443" MODIFIED="1593286876869" TEXT="j_update: Update Article">
193
198
  <icon BUILTIN="bookmark"/>
194
199
  </node>
195
200
  </node>
196
201
  </node>
197
- <node CREATED="1493664700564" FOLDED="true" ID="ID_704959130" MODIFIED="1591392798294" TEXT="comments: Comment">
202
+ <node CREATED="1493664700564" ID="ID_704959130" MODIFIED="1592950100226" TEXT="comments: Comment">
198
203
  <icon BUILTIN="button_cancel"/>
199
204
  <node CREATED="1493665155709" ID="ID_1973520751" MODIFIED="1591392666652" TEXT="new_comment: New Comment">
200
205
  <icon BUILTIN="button_cancel"/>
@@ -202,6 +207,11 @@
202
207
  <icon BUILTIN="bookmark"/>
203
208
  <node CREATED="1493665231940" ID="ID_1645532530" MODIFIED="1493665237018" TEXT="role:m"/>
204
209
  </node>
210
+ <node CREATED="1591278861459" ID="ID_170265872" MODIFIED="1591319807025" TEXT="/articles/my">
211
+ <arrowlink DESTINATION="ID_170265872" ENDARROW="Default" ENDINCLINATION="0;0;" ID="Arrow_ID_1468117" STARTARROW="None" STARTINCLINATION="0;0;"/>
212
+ <linktarget COLOR="#b0b0b0" DESTINATION="ID_170265872" ENDARROW="Default" ENDINCLINATION="0;0;" ID="Arrow_ID_1468117" SOURCE="ID_170265872" STARTARROW="None" STARTINCLINATION="0;0;"/>
213
+ <icon BUILTIN="forward"/>
214
+ </node>
205
215
  </node>
206
216
  <node CREATED="1494393494180" ID="ID_1101205873" MODIFIED="1495275996686" TEXT="role:m"/>
207
217
  </node>
@@ -0,0 +1,366 @@
1
+ <map version="1.0.1">
2
+ <!-- To view this file, download free mind mapping software FreeMind from http://freemind.sourceforge.net -->
3
+ <node CREATED="1273819432637" ID="ID_1098419600" MODIFIED="1334737006485" TEXT="Jinda">
4
+ <node CREATED="1273819462973" ID="ID_282419531" MODIFIED="1589756758387" POSITION="right" TEXT="services">
5
+ <node CREATED="1275756501221" FOLDED="true" ID="ID_1720745721" MODIFIED="1583097151076" TEXT="users:User">
6
+ <node CREATED="1278491598711" ID="ID_1662699954" MODIFIED="1494393920347" TEXT="role:m"/>
7
+ <node CREATED="1279700865182" ID="ID_1266797279" MODIFIED="1357798847781" TEXT="link:info: /users"/>
8
+ <node CREATED="1319015338880" ID="ID_189841353" MODIFIED="1528215866339" TEXT="link:pending tasks: /jinda/pending"/>
9
+ <node CREATED="1275905802131" ID="ID_154000410" MODIFIED="1355422418892" TEXT="user:edit">
10
+ <node CREATED="1275756515843" ID="ID_1108188320" MODIFIED="1330477833918" TEXT="enter_user:edit">
11
+ <icon BUILTIN="attach"/>
12
+ <node CREATED="1282816887988" ID="ID_1767357871" MODIFIED="1282817769412" TEXT="rule:login? &amp;&amp; own_xmain?"/>
13
+ </node>
14
+ <node CREATED="1275756530989" ID="ID_1221806432" MODIFIED="1282822205361" TEXT="update_user">
15
+ <icon BUILTIN="bookmark"/>
16
+ </node>
17
+ </node>
18
+ <node CREATED="1275756504750" ID="ID_1382277695" MODIFIED="1355422424108" TEXT="pwd:change password">
19
+ <node CREATED="1275756515843" ID="ID_1559014937" MODIFIED="1330477842311" TEXT="enter: edit">
20
+ <icon BUILTIN="attach"/>
21
+ <node CREATED="1282816887988" ID="ID_2948144" MODIFIED="1282817769412" TEXT="rule:login? &amp;&amp; own_xmain?"/>
22
+ </node>
23
+ <node CREATED="1275756530989" ID="ID_1566171053" MODIFIED="1275756553762" TEXT="change_password">
24
+ <icon BUILTIN="bookmark"/>
25
+ </node>
26
+ </node>
27
+ </node>
28
+ <node CREATED="1275752678377" ID="ID_1348489452" MODIFIED="1588883079396" TEXT="admins:Admin">
29
+ <node CREATED="1275752688167" ID="ID_229996461" MODIFIED="1275752690948" TEXT="role:a"/>
30
+ <node CREATED="1282722836614" ID="ID_1213363124" MODIFIED="1330477902602" TEXT="edit_role:edit user role">
31
+ <node CREATED="1282722862918" ID="ID_1190117882" MODIFIED="1330477922159" TEXT="select_user:select user">
32
+ <icon BUILTIN="attach"/>
33
+ <node CREATED="1282722901932" ID="ID_1859523490" MODIFIED="1282722903469" TEXT="role:a"/>
34
+ </node>
35
+ <node CREATED="1282722868801" ID="ID_1325872490" MODIFIED="1330477926538" TEXT="edit_role:edit role">
36
+ <icon BUILTIN="attach"/>
37
+ <node CREATED="1282722901932" ID="ID_1992100954" MODIFIED="1282722903469" TEXT="role:a"/>
38
+ </node>
39
+ <node CREATED="1282722907306" ID="ID_1709875397" MODIFIED="1282722922669" TEXT="update_role">
40
+ <icon BUILTIN="bookmark"/>
41
+ </node>
42
+ </node>
43
+ <node CREATED="1273913393454" ID="ID_1088166839" MODIFIED="1511159690490" TEXT="link: pending tasks: /jinda/pending"/>
44
+ <node CREATED="1275790679363" ID="ID_829325467" MODIFIED="1511159696044" TEXT="link: logs: /jinda/logs"/>
45
+ <node CREATED="1507573166973" ID="ID_351025910" MODIFIED="1511159700908" TEXT="link: docs: /jinda/doc"/>
46
+ </node>
47
+ <node CREATED="1273706796854" ID="ID_1003882979" MODIFIED="1588964401951" TEXT="devs: Developer">
48
+ <node CREATED="1275373154914" ID="ID_340725299" MODIFIED="1275373158632" TEXT="role:d"/>
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"/>
51
+ </node>
52
+ <node CREATED="1589756777499" FOLDED="true" ID="ID_853155456" MODIFIED="1592785016438" TEXT="docs: Document">
53
+ <node CREATED="1589757073388" ID="ID_1938238774" MODIFIED="1589772640862" TEXT="link: My Document: /docs/my">
54
+ <node CREATED="1589757125861" ID="ID_521286668" MODIFIED="1589757136547" TEXT="role:m"/>
55
+ </node>
56
+ <node CREATED="1589756879955" ID="ID_899042293" MODIFIED="1589910229085" TEXT="doc_new: New Document">
57
+ <node CREATED="1589756946117" ID="ID_1840278804" MODIFIED="1589910235469" TEXT="doc_form: Doc Form">
58
+ <icon BUILTIN="attach"/>
59
+ <node CREATED="1589757054618" ID="ID_642998203" MODIFIED="1589757059003" TEXT="role: m"/>
60
+ </node>
61
+ <node CREATED="1589757264764" ID="ID_1352102524" MODIFIED="1589772413612" TEXT="doc_update: Doc update">
62
+ <icon BUILTIN="bookmark"/>
63
+ </node>
64
+ </node>
65
+ <node CREATED="1493419562726" ID="ID_339628868" MODIFIED="1590424956484" TEXT="doc_edit: Edit Document">
66
+ <icon BUILTIN="button_cancel"/>
67
+ <node CREATED="1493419577933" ID="ID_801950372" MODIFIED="1590180699851" TEXT="doc_select: Select Document">
68
+ <icon BUILTIN="attach"/>
69
+ <node CREATED="1493479602815" ID="ID_761787946" MODIFIED="1493479606921" TEXT="role:m"/>
70
+ </node>
71
+ <node CREATED="1493419612720" ID="ID_1190499756" MODIFIED="1590180735204" TEXT="doc_edit: Edit Document">
72
+ <icon BUILTIN="attach"/>
73
+ <node CREATED="1493479557266" ID="ID_1216426484" MODIFIED="1493479561055" TEXT="role:m"/>
74
+ </node>
75
+ <node CREATED="1581400438157" ID="ID_447781815" MODIFIED="1590180242343" TEXT="doc_update: Doc_update">
76
+ <icon BUILTIN="bookmark"/>
77
+ </node>
78
+ </node>
79
+ <node CREATED="1495246388313" ID="ID_278169779" MODIFIED="1590180135106" TEXT="doc_xedit: Doc_hidden_menu">
80
+ <icon BUILTIN="button_cancel"/>
81
+ <node CREATED="1493419612720" ID="ID_541432768" MODIFIED="1590180160498" TEXT="doc_edit: Edit">
82
+ <icon BUILTIN="attach"/>
83
+ <node CREATED="1493479557266" ID="ID_1339913531" MODIFIED="1493479561055" TEXT="role:m"/>
84
+ </node>
85
+ <node CREATED="1581400438157" ID="ID_802199910" MODIFIED="1590180242343" TEXT="doc_update: Doc_update">
86
+ <icon BUILTIN="bookmark"/>
87
+ </node>
88
+ </node>
89
+ </node>
90
+ <node CREATED="1493393619430" ID="ID_554831343" MODIFIED="1592926786394" TEXT="notes: Notes">
91
+ <node CREATED="1493489768542" ID="ID_737469676" MODIFIED="1589772615102" TEXT="link:My Notes: /notes/my">
92
+ <node CREATED="1493490295677" ID="ID_514416082" MODIFIED="1493490302239" TEXT="role:m"/>
93
+ </node>
94
+ <node CREATED="1493419257021" ID="ID_553734932" MODIFIED="1591278856955" TEXT="new: New Note">
95
+ <node CREATED="1493419299004" ID="ID_723334321" MODIFIED="1581351169990" TEXT="new_note: New ">
96
+ <icon BUILTIN="attach"/>
97
+ <node CREATED="1493479075294" ID="ID_1009521360" MODIFIED="1493479079687" TEXT="role:m"/>
98
+ </node>
99
+ <node CREATED="1493419491125" ID="ID_1125779183" MODIFIED="1581180747700" TEXT="create: Create">
100
+ <icon BUILTIN="bookmark"/>
101
+ </node>
102
+ <node CREATED="1591278861459" ID="ID_985992723" MODIFIED="1591319329198" TEXT="/notes/my">
103
+ <arrowlink DESTINATION="ID_985992723" ENDARROW="Default" ENDINCLINATION="0;0;" ID="Arrow_ID_650435572" STARTARROW="None" STARTINCLINATION="0;0;"/>
104
+ <linktarget COLOR="#b0b0b0" DESTINATION="ID_985992723" ENDARROW="Default" ENDINCLINATION="0;0;" ID="Arrow_ID_650435572" SOURCE="ID_985992723" STARTARROW="None" STARTINCLINATION="0;0;"/>
105
+ <icon BUILTIN="forward"/>
106
+ </node>
107
+ </node>
108
+ <node CREATED="1493419562726" FOLDED="true" ID="ID_1241171950" MODIFIED="1591278847249" TEXT="edit: Edit">
109
+ <node CREATED="1493419577933" ID="ID_1790163920" MODIFIED="1581350888992" TEXT="select_note: Select">
110
+ <icon BUILTIN="attach"/>
111
+ <node CREATED="1493479602815" ID="ID_1289003986" MODIFIED="1493479606921" TEXT="role:m"/>
112
+ </node>
113
+ <node CREATED="1493419612720" ID="ID_938262436" MODIFIED="1581350996674" TEXT="edit_note: Edit">
114
+ <icon BUILTIN="attach"/>
115
+ <node CREATED="1493479557266" ID="ID_211108947" MODIFIED="1493479561055" TEXT="role:m"/>
116
+ </node>
117
+ <node CREATED="1493419735921" ID="ID_1581002301" MODIFIED="1581180869775" TEXT="update: Update">
118
+ <icon BUILTIN="bookmark"/>
119
+ </node>
120
+ </node>
121
+ <node CREATED="1495246388313" FOLDED="true" ID="ID_320521408" MODIFIED="1591278851391" STYLE="fork" TEXT="delete:Delete">
122
+ <edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
123
+ <node CREATED="1493419577933" ID="ID_1631275659" MODIFIED="1581350942681" TEXT="select_note: Select">
124
+ <icon BUILTIN="attach"/>
125
+ <node CREATED="1493479602815" ID="ID_851238107" MODIFIED="1493479606921" TEXT="role:m"/>
126
+ </node>
127
+ <node CREATED="1495246466176" ID="ID_1347765598" MODIFIED="1581799929028" TEXT="delete: Delete">
128
+ <icon BUILTIN="bookmark"/>
129
+ </node>
130
+ </node>
131
+ <node CREATED="1581531446494" FOLDED="true" ID="ID_1325232876" MODIFIED="1591278853597" TEXT="mail: Mail">
132
+ <node CREATED="1493419577933" FOLDED="true" ID="ID_1817148049" MODIFIED="1581531563343" TEXT="select_note: Select">
133
+ <icon BUILTIN="attach"/>
134
+ <node CREATED="1493479602815" ID="ID_1650154281" MODIFIED="1493479606921" TEXT="role:m"/>
135
+ </node>
136
+ <node CREATED="1581531468872" ID="ID_379926448" MODIFIED="1581564690354" TEXT="display_mail: Dsiplay Mail">
137
+ <icon BUILTIN="attach"/>
138
+ </node>
139
+ <node CREATED="1581564346466" ID="ID_1981382192" MODIFIED="1581564388041" TEXT="mail: Mail">
140
+ <icon BUILTIN="bookmark"/>
141
+ </node>
142
+ </node>
143
+ <node CREATED="1495246388313" FOLDED="true" ID="ID_807216843" MODIFIED="1590180066630" TEXT="xedit: Future use">
144
+ <icon BUILTIN="button_cancel"/>
145
+ <node CREATED="1493419612720" ID="ID_6864095" MODIFIED="1584999031935" TEXT="edit_note: Edit">
146
+ <icon BUILTIN="attach"/>
147
+ <node CREATED="1493479557266" ID="ID_297597260" MODIFIED="1493479561055" TEXT="role:m"/>
148
+ </node>
149
+ <node CREATED="1581400438157" ID="ID_1206027492" MODIFIED="1581400464170" TEXT="update: Update">
150
+ <icon BUILTIN="bookmark"/>
151
+ </node>
152
+ </node>
153
+ </node>
154
+ <node CREATED="1493393619430" ID="ID_328863650" MODIFIED="1592785024002" TEXT="articles: Article">
155
+ <node CREATED="1493419096527" ID="ID_1521905276" MODIFIED="1493478060121" TEXT="link: All Articles: /articles"/>
156
+ <node CREATED="1493489768542" FOLDED="true" ID="ID_1376361427" MODIFIED="1589757167952" TEXT="link: My article: /articles/my">
157
+ <node CREATED="1493490295677" ID="ID_628476988" MODIFIED="1493490302239" TEXT="role:m"/>
158
+ </node>
159
+ <node CREATED="1493419257021" ID="ID_1355420049" MODIFIED="1588619429446" TEXT="new_article: New Article">
160
+ <node CREATED="1493419299004" ID="ID_1468250197" MODIFIED="1493419428686" TEXT="form_article: New Article">
161
+ <icon BUILTIN="attach"/>
162
+ <node CREATED="1493479075294" ID="ID_1145618514" MODIFIED="1493479079687" TEXT="role:m"/>
163
+ </node>
164
+ <node CREATED="1493419491125" ID="ID_1687683396" MODIFIED="1493483244848" TEXT="create: Create Article">
165
+ <icon BUILTIN="bookmark"/>
166
+ </node>
167
+ <node CREATED="1591278861459" ID="ID_657878492" MODIFIED="1591319807025" TEXT="/articles/my">
168
+ <arrowlink DESTINATION="ID_657878492" ENDARROW="Default" ENDINCLINATION="0;0;" ID="Arrow_ID_883618983" STARTARROW="None" STARTINCLINATION="0;0;"/>
169
+ <linktarget COLOR="#b0b0b0" DESTINATION="ID_657878492" ENDARROW="Default" ENDINCLINATION="0;0;" ID="Arrow_ID_883618983" SOURCE="ID_657878492" STARTARROW="None" STARTINCLINATION="0;0;"/>
170
+ <icon BUILTIN="forward"/>
171
+ </node>
172
+ </node>
173
+ <node CREATED="1493419562726" ID="ID_922854639" MODIFIED="1590180584955" TEXT="edit_article: Edit Article">
174
+ <node CREATED="1493419577933" ID="ID_938626803" MODIFIED="1538329139586" TEXT="select_article: Select Article">
175
+ <icon BUILTIN="attach"/>
176
+ <node CREATED="1493479602815" ID="ID_753056881" MODIFIED="1493479606921" TEXT="role:m"/>
177
+ </node>
178
+ <node CREATED="1493419612720" ID="ID_661682947" MODIFIED="1493524438941" TEXT="edit_article: Edit Article">
179
+ <icon BUILTIN="attach"/>
180
+ <node CREATED="1493479557266" ID="ID_1681993437" MODIFIED="1493479561055" TEXT="role:m"/>
181
+ </node>
182
+ <node CREATED="1493419735921" ID="ID_1575963748" MODIFIED="1593286858918" TEXT="j_update: Update Article">
183
+ <icon BUILTIN="bookmark"/>
184
+ </node>
185
+ <node CREATED="1591278861459" ID="ID_863187878" MODIFIED="1591319807025" TEXT="/articles/my">
186
+ <arrowlink DESTINATION="ID_863187878" ENDARROW="Default" ENDINCLINATION="0;0;" ID="Arrow_ID_604727235" STARTARROW="None" STARTINCLINATION="0;0;"/>
187
+ <linktarget COLOR="#b0b0b0" DESTINATION="ID_863187878" ENDARROW="Default" ENDINCLINATION="0;0;" ID="Arrow_ID_604727235" SOURCE="ID_863187878" STARTARROW="None" STARTINCLINATION="0;0;"/>
188
+ <icon BUILTIN="forward"/>
189
+ </node>
190
+ </node>
191
+ <node CREATED="1495246388313" ID="ID_1861034169" MODIFIED="1585001527103" TEXT="xedit_article: xEdit Article">
192
+ <icon BUILTIN="button_cancel"/>
193
+ <node CREATED="1495246432533" ID="ID_91386173" MODIFIED="1495267233398" TEXT="edit_article: Edit Article">
194
+ <icon BUILTIN="attach"/>
195
+ <node CREATED="1495246517185" ID="ID_1224073606" MODIFIED="1495246522964" TEXT="role:m"/>
196
+ </node>
197
+ <node CREATED="1495246466176" ID="ID_1635586443" MODIFIED="1593286876869" TEXT="j_update: Update Article">
198
+ <icon BUILTIN="bookmark"/>
199
+ </node>
200
+ </node>
201
+ </node>
202
+ <node CREATED="1493664700564" ID="ID_704959130" MODIFIED="1592950100226" TEXT="comments: Comment">
203
+ <icon BUILTIN="button_cancel"/>
204
+ <node CREATED="1493665155709" ID="ID_1973520751" MODIFIED="1591392666652" TEXT="new_comment: New Comment">
205
+ <icon BUILTIN="button_cancel"/>
206
+ <node CREATED="1493665192413" ID="ID_345629058" MODIFIED="1493665226422" TEXT="create">
207
+ <icon BUILTIN="bookmark"/>
208
+ <node CREATED="1493665231940" ID="ID_1645532530" MODIFIED="1493665237018" TEXT="role:m"/>
209
+ </node>
210
+ <node CREATED="1591278861459" ID="ID_170265872" MODIFIED="1591319807025" TEXT="/articles/my">
211
+ <arrowlink DESTINATION="ID_170265872" ENDARROW="Default" ENDINCLINATION="0;0;" ID="Arrow_ID_1468117" STARTARROW="None" STARTINCLINATION="0;0;"/>
212
+ <linktarget COLOR="#b0b0b0" DESTINATION="ID_170265872" ENDARROW="Default" ENDINCLINATION="0;0;" ID="Arrow_ID_1468117" SOURCE="ID_170265872" STARTARROW="None" STARTINCLINATION="0;0;"/>
213
+ <icon BUILTIN="forward"/>
214
+ </node>
215
+ </node>
216
+ <node CREATED="1494393494180" ID="ID_1101205873" MODIFIED="1495275996686" TEXT="role:m"/>
217
+ </node>
218
+ <node CREATED="1489875563330" FOLDED="true" ID="ID_1495015891" MODIFIED="1507248509212" TEXT="ctrs: ctrs&amp; Menu">
219
+ <node CREATED="1489875583646" ID="ID_1796125628" MODIFIED="1494393464288" TEXT="role:a"/>
220
+ <node CREATED="1275905802131" ID="ID_1960607342" MODIFIED="1489938927874" TEXT="vfolder1:Sub Menu 1">
221
+ <node CREATED="1275756515843" ID="ID_328242903" MODIFIED="1489939229748" TEXT="viewfile1: Title 1">
222
+ <icon BUILTIN="attach"/>
223
+ <node CREATED="1282816887988" ID="ID_1479413309" MODIFIED="1282817769412" TEXT="rule:login? &amp;&amp; own_xmain?"/>
224
+ </node>
225
+ <node CREATED="1275756515843" ID="ID_1316819449" MODIFIED="1490683859703" TEXT="viewfile2: Title 2">
226
+ <icon BUILTIN="attach"/>
227
+ <node CREATED="1282816887988" ID="ID_1510989172" MODIFIED="1282817769412" TEXT="rule:login? &amp;&amp; own_xmain?"/>
228
+ </node>
229
+ <node CREATED="1275756530989" ID="ID_171099141" MODIFIED="1489939276491" TEXT="update_viewfile1">
230
+ <icon BUILTIN="bookmark"/>
231
+ </node>
232
+ </node>
233
+ <node CREATED="1275756504750" ID="ID_914236141" MODIFIED="1489939000929" TEXT="vfolder2:Title 2">
234
+ <node CREATED="1275756515843" ID="ID_1222970183" MODIFIED="1489939293714" TEXT="viewfile2: Title 2">
235
+ <icon BUILTIN="attach"/>
236
+ <node CREATED="1282816887988" ID="ID_1312913420" MODIFIED="1282817769412" TEXT="rule:login? &amp;&amp; own_xmain?"/>
237
+ </node>
238
+ </node>
239
+ </node>
240
+ <node CREATED="1494172726642" ID="ID_925257043" MODIFIED="1494172755433" TEXT="sitemap: Sitemap">
241
+ <node CREATED="1494172758253" ID="ID_961056168" MODIFIED="1494172797972" TEXT="sitemap: Sitemap"/>
242
+ <node CREATED="1494393494180" ID="ID_242460166" MODIFIED="1494393504971" TEXT="role:a"/>
243
+ </node>
244
+ <node CREATED="1493393619430" FOLDED="true" ID="ID_35210833" MODIFIED="1591392800862" TEXT="api/v1/notes: Notes API ">
245
+ <node CREATED="1493489768542" ID="ID_1053900670" MODIFIED="1591074318558" TEXT="link:My Notes: /api/v1/notes/my">
246
+ <icon BUILTIN="button_cancel"/>
247
+ <node CREATED="1493490295677" ID="ID_1597553308" MODIFIED="1493490302239" TEXT="role:m"/>
248
+ </node>
249
+ <node CREATED="1493419257021" ID="ID_1182560700" MODIFIED="1581180635669" TEXT="new: New Note">
250
+ <node CREATED="1493419299004" ID="ID_840380967" MODIFIED="1581351169990" TEXT="new_note: New ">
251
+ <icon BUILTIN="attach"/>
252
+ <node CREATED="1493479075294" ID="ID_10690659" MODIFIED="1493479079687" TEXT="role:m"/>
253
+ </node>
254
+ <node CREATED="1493419491125" ID="ID_924027059" MODIFIED="1581180747700" TEXT="create: Create">
255
+ <icon BUILTIN="bookmark"/>
256
+ </node>
257
+ </node>
258
+ <node CREATED="1493419562726" ID="ID_963001770" MODIFIED="1581180788218" TEXT="edit: Edit">
259
+ <node CREATED="1493419612720" ID="ID_1362613316" MODIFIED="1581350996674" TEXT="edit_note: Edit">
260
+ <icon BUILTIN="attach"/>
261
+ <node CREATED="1493479557266" ID="ID_1838104057" MODIFIED="1493479561055" TEXT="role:m"/>
262
+ </node>
263
+ <node CREATED="1493419735921" ID="ID_1445882396" MODIFIED="1581180869775" TEXT="update: Update">
264
+ <icon BUILTIN="bookmark"/>
265
+ </node>
266
+ </node>
267
+ <node CREATED="1495246388313" ID="ID_918406528" MODIFIED="1581340759604" STYLE="fork" TEXT="delete:Delete">
268
+ <edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
269
+ <node CREATED="1493419577933" ID="ID_809771470" MODIFIED="1581350942681" TEXT="select_note: Select">
270
+ <icon BUILTIN="attach"/>
271
+ <node CREATED="1493479602815" ID="ID_1160875526" MODIFIED="1493479606921" TEXT="role:m"/>
272
+ </node>
273
+ <node CREATED="1495246466176" ID="ID_506410154" MODIFIED="1581799929028" TEXT="delete: Delete">
274
+ <icon BUILTIN="bookmark"/>
275
+ </node>
276
+ </node>
277
+ </node>
278
+ </node>
279
+ <node CREATED="1273819465949" FOLDED="true" ID="ID_855471610" MODIFIED="1583097143651" POSITION="right" TEXT="roles">
280
+ <node CREATED="1273819847470" ID="ID_1681080231" MODIFIED="1330477307826" TEXT="m: member"/>
281
+ <node CREATED="1273819855875" ID="ID_1429503284" MODIFIED="1330477311102" TEXT="a: admin"/>
282
+ <node CREATED="1273819859775" ID="ID_568365839" MODIFIED="1330477315009" TEXT="d: developer"/>
283
+ </node>
284
+ <node CREATED="1273819456867" FOLDED="true" ID="ID_1677010054" MODIFIED="1591392810437" POSITION="left" TEXT="models">
285
+ <node CREATED="1292122118499" FOLDED="true" ID="ID_1957754752" MODIFIED="1493705885123" TEXT="person">
286
+ <node CREATED="1292122135809" ID="ID_1617970069" MODIFIED="1332878659106" TEXT="fname"/>
287
+ <node CREATED="1292122150362" ID="ID_1200135538" MODIFIED="1332878662388" TEXT="lname"/>
288
+ <node CREATED="1332876694150" ID="ID_1770958985" MODIFIED="1332876730552" TEXT="sex: integer">
289
+ <node CREATED="1332878665790" ID="ID_793089342" MODIFIED="1332878668499" TEXT="1: male"/>
290
+ <node CREATED="1332878669085" ID="ID_1796007763" MODIFIED="1332878673144" TEXT="2: female"/>
291
+ </node>
292
+ <node CREATED="1292123322429" ID="ID_1509464300" MODIFIED="1332878620176" TEXT="belongs_to :address">
293
+ <icon BUILTIN="edit"/>
294
+ </node>
295
+ <node CREATED="1292122156430" ID="ID_604231613" MODIFIED="1292122161324" TEXT="dob: date"/>
296
+ <node CREATED="1286576968143" ID="ID_936807610" MODIFIED="1332878681362" TEXT="phone"/>
297
+ <node CREATED="1290823140269" ID="ID_1957301629" MODIFIED="1332878684453" TEXT="photo"/>
298
+ </node>
299
+ <node CREATED="1292122236285" FOLDED="true" ID="ID_959987887" MODIFIED="1493768919147" TEXT="address">
300
+ <node CREATED="1292122254622" ID="ID_430517150" MODIFIED="1355422372241" TEXT="address_street"/>
301
+ <node CREATED="1355422373525" ID="ID_1797865138" MODIFIED="1355422378352" TEXT="city"/>
302
+ <node CREATED="1355422378959" ID="ID_1964490487" MODIFIED="1355422380765" TEXT="state"/>
303
+ <node CREATED="1355422381231" ID="ID_1226075540" MODIFIED="1355422382748" TEXT="zip"/>
304
+ <node CREATED="1332876680122" ID="ID_65427990" MODIFIED="1332876682148" TEXT="phone"/>
305
+ <node CREATED="1292243471343" ID="ID_1859608350" MODIFIED="1310195256623" TEXT="lat: float"/>
306
+ <node CREATED="1292243477436" ID="ID_48497260" MODIFIED="1310195262534" TEXT="lng: float"/>
307
+ </node>
308
+ <node CREATED="1493418879485" FOLDED="true" ID="ID_1995497233" MODIFIED="1583097163789" TEXT="article">
309
+ <node CREATED="1493418891110" ID="ID_364756011" MODIFIED="1493418905253" TEXT="title"/>
310
+ <node CREATED="1493418906868" ID="ID_1676483995" MODIFIED="1493418911919" TEXT="text"/>
311
+ <node CREATED="1493487131376" ID="ID_1334057464" MODIFIED="1538328284823" TEXT="belongs_to :user, :class_name =&gt; &quot;User&quot;">
312
+ <icon BUILTIN="edit"/>
313
+ </node>
314
+ <node CREATED="1493705838166" ID="ID_408271104" MODIFIED="1493705877062" TEXT="has_many :comments">
315
+ <icon BUILTIN="edit"/>
316
+ </node>
317
+ <node CREATED="1493718773517" ID="ID_944554146" MODIFIED="1493718808965" TEXT="validates :title, :text, :user_id, presence: true">
318
+ <icon BUILTIN="edit"/>
319
+ </node>
320
+ <node CREATED="1494181636998" ID="ID_229502630" MODIFIED="1494181660419" TEXT="body"/>
321
+ <node CREATED="1497913676275" ID="ID_404103076" MODIFIED="1497913685065" TEXT="keywords"/>
322
+ </node>
323
+ <node CREATED="1493418915637" FOLDED="true" ID="ID_429078131" MODIFIED="1583097162517" TEXT="comment">
324
+ <node CREATED="1493418939760" ID="ID_1251093062" MODIFIED="1493418943423" TEXT="body"/>
325
+ <node CREATED="1493418945686" ID="ID_911071644" MODIFIED="1493418986711" TEXT="belongs_to :article">
326
+ <icon BUILTIN="edit"/>
327
+ </node>
328
+ <node CREATED="1493643129947" ID="ID_588013696" MODIFIED="1493643146424" TEXT="belongs_to :user">
329
+ <icon BUILTIN="edit"/>
330
+ </node>
331
+ <node CREATED="1493718512191" ID="ID_173203253" MODIFIED="1493718583874" TEXT="validates :body, :user_id, :article_id, presence: true">
332
+ <icon BUILTIN="edit"/>
333
+ </node>
334
+ </node>
335
+ <node CREATED="1494040082403" FOLDED="true" ID="ID_864577403" MODIFIED="1583097161145" TEXT="picture">
336
+ <node CREATED="1494040091583" ID="ID_679208099" MODIFIED="1494040119098" TEXT="picture"/>
337
+ <node CREATED="1494040120208" ID="ID_1266154874" MODIFIED="1494040125130" TEXT="description"/>
338
+ <node CREATED="1493487131376" ID="ID_1422817360" MODIFIED="1493487186856" TEXT="belongs_to :user">
339
+ <icon BUILTIN="edit"/>
340
+ </node>
341
+ </node>
342
+ <node CREATED="1581177067029" FOLDED="true" ID="ID_1450593753" MODIFIED="1583089083450" TEXT="note">
343
+ <node CREATED="1581243923100" ID="ID_537548385" MODIFIED="1581243965554" TEXT="include Mongoid::Attributes::Dynamic">
344
+ <icon BUILTIN="edit"/>
345
+ </node>
346
+ <node CREATED="1581177848957" ID="ID_1611227370" MODIFIED="1581177857470" TEXT="title"/>
347
+ <node CREATED="1581177867775" ID="ID_88547965" MODIFIED="1581177883555" TEXT="body"/>
348
+ <node CREATED="1493643129947" ID="ID_1655403736" MODIFIED="1493643146424" TEXT="belongs_to :user">
349
+ <icon BUILTIN="edit"/>
350
+ </node>
351
+ <node CREATED="1581984419312" ID="ID_1934899110" MODIFIED="1581985586488" TEXT="before_validation :ensure_title_has_a_value ">
352
+ <icon BUILTIN="edit"/>
353
+ </node>
354
+ <node CREATED="1581495182445" ID="ID_1430552418" MODIFIED="1581985664674" TEXT="validates :title, length: { maximum: (MAX_TITLE_LENGTH = 30), message: &quot;Must be less than 30 characters&quot; }, presence: true">
355
+ <icon BUILTIN="edit"/>
356
+ </node>
357
+ <node CREATED="1581495221779" ID="ID_1231500988" MODIFIED="1581985709585" TEXT="validates :body, length: { maximum: (MAX_BODY_LENGTH = 1000), message: &quot;Must be less than 1000 characters&quot;} ">
358
+ <icon BUILTIN="edit"/>
359
+ </node>
360
+ <node CREATED="1581986280028" ID="ID_1069060625" MODIFIED="1581987310544" TEXT="private&#xa; def ensure_title_has_a_value&#xa; if title.blank?&#xa; self.title = body[0..(MAX_TITLE_LENGTH-1)] unless body.blank?&#xa; end&#xa; end&#xa; &#xa;">
361
+ <icon BUILTIN="edit"/>
362
+ </node>
363
+ </node>
364
+ </node>
365
+ </node>
366
+ </map>