openehr-rails 0.0.2 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/README.rdoc +13 -0
  3. data/Rakefile +1 -16
  4. data/lib/generators/openehr/assets/assets_generator.rb +28 -0
  5. data/lib/generators/openehr/assets/templates/javascript.js +1 -0
  6. data/lib/generators/openehr/assets/templates/stylesheet.css.scss +3 -0
  7. data/lib/generators/openehr/controller/controller_generator.rb +10 -9
  8. data/lib/generators/openehr/controller/templates/controller.rb +71 -10
  9. data/lib/generators/openehr/helper/helper_generator.rb +17 -0
  10. data/lib/generators/openehr/helper/templates/helper.rb +2 -0
  11. data/lib/generators/openehr/i18n/i18n_generator.rb +29 -33
  12. data/lib/generators/openehr/i18n/templates/i18n.rb +3 -3
  13. data/lib/generators/openehr/i18n/templates/language.yml +8 -3
  14. data/lib/generators/openehr/install/install_generator.rb +6 -9
  15. data/lib/generators/openehr/migration/migration_generator.rb +24 -9
  16. data/lib/generators/openehr/migration/templates/archetypes.rb +10 -0
  17. data/lib/generators/openehr/migration/templates/rms.rb +16 -0
  18. data/lib/generators/openehr/model/model_generator.rb +108 -7
  19. data/lib/generators/openehr/model/templates/activemodel.rb +71 -0
  20. data/lib/generators/openehr/model/templates/archetype.rb +3 -0
  21. data/lib/generators/openehr/model/templates/rm.rb +3 -0
  22. data/lib/generators/openehr/scaffold/scaffold_generator.rb +182 -109
  23. data/lib/generators/openehr/scaffold/templates/_form.html.erb +1 -1
  24. data/lib/generators/openehr/scaffold/templates/application.html.erb +14 -0
  25. data/lib/generators/openehr/scaffold/templates/application_controller.rb +1 -0
  26. data/lib/generators/openehr/scaffold/templates/edit.html.erb +3 -3
  27. data/lib/generators/openehr/scaffold/templates/index.html.erb +4 -4
  28. data/lib/generators/openehr/scaffold/templates/inflections.rb +3 -0
  29. data/lib/generators/openehr/scaffold/templates/layout.css.scss +4 -0
  30. data/lib/generators/openehr/scaffold/templates/new.html.erb +5 -0
  31. data/lib/generators/openehr/scaffold/templates/show.html.erb +2 -2
  32. data/lib/generators/openehr.rb +67 -49
  33. data/lib/openehr-rails/version.rb +1 -1
  34. data/lib/openehr-rails.rb +1 -1
  35. data/openehr-rails.gemspec +1 -5
  36. data/spec/generator_helper.rb +3 -0
  37. data/spec/generators/openehr/archetyped_base_spec.rb +53 -35
  38. data/spec/generators/openehr/assets/assets_generator_spec.rb +37 -0
  39. data/spec/generators/openehr/controller/controller_generator_spec.rb +20 -4
  40. data/spec/generators/openehr/helper/helper_generator_spec.rb +23 -0
  41. data/spec/generators/openehr/i18n/i18n_generator_spec.rb +49 -50
  42. data/spec/generators/openehr/install/install_generator_spec.rb +3 -3
  43. data/spec/generators/openehr/migration/migration_generator_spec.rb +18 -7
  44. data/spec/generators/openehr/model/model_generator_spec.rb +54 -0
  45. data/spec/generators/openehr/scaffold/scaffold_generator_spec.rb +121 -48
  46. data/spec/spec_helper.rb +6 -6
  47. metadata +26 -68
  48. data/Guardfile +0 -15
  49. data/db/seeds.rb +0 -7
  50. data/lib/assets/.gitkeep +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: eb28457735ac8ff463f890b40d259fda64eb01c1
4
- data.tar.gz: bf1d603f93bbbcefa970f17ad275dbd530ef258a
3
+ metadata.gz: cfed038e81c640ca3a4dfa779acc3dab8186419d
4
+ data.tar.gz: 0bc27386d4b70565c240c87d12bbe69b85465680
5
5
  SHA512:
6
- metadata.gz: 3a3af84044fe580253e9be69960443644ab62f4f7f9bedb10ed8d2ab1052c2489d287f7454de331e92664a2e6deb18a4ed063f13b2cdfd6e2b59dd159382f84c
7
- data.tar.gz: 801e8187ca7351a868e4a25aa213b932350d2b0880a8e464b808aded1fd9a871aebafd386231f65b99910acdf9cd8ec4ade8674fd57268f19096f2165fb7a891
6
+ metadata.gz: 5cbdeb723527d686a2988738cc89b51871d2dac17b57b620bce3816837bb72e72c69ab62a6a78485f85cbf1b323f7b7725d44842743a321ed737ed1cb0353cfc
7
+ data.tar.gz: 53a15cc57f55b62ea9def0ced5db4d218d70e0c24842edc84310ab15fbbc0641cbd797206b8915292e60e61a8ec6cd3b800d668019520808e67db396526bdf14
data/README.rdoc CHANGED
@@ -1,8 +1,21 @@
1
+ {<img src="https://travis-ci.org/skoba/openehr-ruby.png?branch=master" alt="Build Status" />}[https://travis-ci.org/skoba/openehr-ruby]
1
2
  == Synopsys
2
3
 
3
4
  This is a support library for openEHR on Rails implementation and
4
5
  still working exeperimental codes.
5
6
 
7
+ == Requirements
8
+
9
+ * Supports Ruby 1.9.3, 2.0.0 or equivalents.
10
+ * Developed with CRuby 2.0.0, 1.9.3 on FreeBSD and Linux.
11
+ * Ruby 1.8 or earlier are no longer supported.
12
+
13
+ == Usage
14
+
15
+ This library provide scaffold generator on archetype clinical domain
16
+ concepts.
17
+
18
+
6
19
  == License
7
20
  This product is under Apache 2.0 license
8
21
 
data/Rakefile CHANGED
@@ -7,27 +7,12 @@ require 'rubygems'
7
7
  require 'bundler'
8
8
  require "bundler/gem_tasks"
9
9
  require 'rake'
10
-
11
10
  require 'rspec/core'
12
11
  require 'rspec/core/rake_task'
12
+
13
13
  RSpec::Core::RakeTask.new(:spec) do |spec|
14
14
  spec.pattern = FileList['spec/**/*_spec.rb']
15
15
  end
16
16
 
17
- RSpec::Core::RakeTask.new(:rcov) do |spec|
18
- spec.pattern = 'spec/**/*_spec.rb'
19
- spec.rcov = true
20
- end
21
-
22
17
  task :default => :spec
23
18
 
24
- require 'rdoc/task'
25
- Rake::RDocTask.new do |rdoc|
26
- version = File.exist?('VERSION') ? File.read('VERSION') : ""
27
-
28
- rdoc.rdoc_dir = 'rdoc'
29
- rdoc.title = "openehr-rails #{version}"
30
- rdoc.rdoc_files.include('README*')
31
- rdoc.rdoc_files.include('lib/**/*.rb')
32
- end
33
-
@@ -0,0 +1,28 @@
1
+ require 'generators/openehr'
2
+ require 'rails/generators/rails/scaffold/scaffold_generator'
3
+
4
+ module Openehr
5
+ module Generators
6
+ class AssetsGenerator < ArchetypedBase
7
+ source_root File.expand_path("../templates", __FILE__)
8
+
9
+ def create_assets_directory
10
+ empty_directory 'app/assets'
11
+ end
12
+
13
+ def copy_css
14
+ dir = ::Rails::Generators::ScaffoldGenerator.source_root
15
+ cssfile = File.join(dir, 'scaffold.css')
16
+ create_file 'app/assets/stylesheets/scaffold.css', File.read(cssfile)
17
+ end
18
+
19
+ def create_scss
20
+ template 'stylesheet.css.scss', File.join('app/assets/stylesheets', "#{model_name}.css.scss")
21
+ end
22
+
23
+ def create_coffeescript
24
+ template 'javascript.js', File.join('app/assets/javascripts', "#{model_name}.js.coffee")
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1 @@
1
+ # Javascript template
@@ -0,0 +1,3 @@
1
+ /*
2
+ Stylesheet for scaffold
3
+ */
@@ -1,15 +1,16 @@
1
- module OpenEHR
2
- module Rails
3
- module Generators
4
- class ControllerGenerator < ::Rails::Generators::NamedBase
5
- argument :actions, :type => :array, :default => [], :bannar => 'action action'
6
- desc <<DESC
1
+ require 'generators/openehr'
2
+
3
+ module Openehr
4
+ module Generators
5
+ class ControllerGenerator < ArchetypedBase
6
+ source_root File.expand_path("../templates", __FILE__)
7
+
8
+ desc <<DESC
7
9
  generate controler from template and archetype
8
10
  DESC
9
11
 
10
- def create_controller
11
- template 'controller.rb', File.join('app/controllers', class_path, "#{file_name}_controller.rb")
12
- end
12
+ def create_controller
13
+ template 'controller.rb', File.join('app/controllers', "#{controller_name}_controller.rb")
13
14
  end
14
15
  end
15
16
  end
@@ -1,13 +1,74 @@
1
- <% if namespaced? -%>
2
- require_dependency "<%= namespaced_file_path %>/application_controller"
1
+ class <%= controller_class_name %> < ApplicationController
2
+ before_action :set_<%= controller_name %>, only: [:show, :edit, :update, :destroy]
3
3
 
4
- <% end -%>
5
- <% module_namespacing do -%>
6
- class <%= class_name %>Controller < ApplicationController
7
- <% actions.each do |action| -%>
8
- def <%= action %>
4
+ # GET /<%= controller_class_name %>
5
+ # GET /<%= controller_class_name %>.json
6
+ def index
7
+ @<%= model_name %> = <%= model_class_name %>.all
9
8
  end
10
- <%= "\n" unless action == actions.last -%>
11
- <% end -%>
9
+
10
+ # GET /<%= controller_name %>/1
11
+ # GET /<%= controller_name %>/1.json
12
+ def show
13
+ end
14
+
15
+ # GET /<%= controller_name %>/new
16
+ def new
17
+ @<%= model_name %> = <%= model_class_name %>.new
18
+ end
19
+
20
+ # GET /<%= controller_name %>/1/edit
21
+ def edit
22
+ end
23
+
24
+ # POST /<%= controller_name %>
25
+ # POST /<%= controller_name %>.json
26
+ def create
27
+ @<%= model_name %> = <%= model_class_name %>.new(<%= model_name %>_params)
28
+
29
+ respond_to do |format|
30
+ if @<%= model_name %>.save
31
+ format.html { redirect_to @<%= controller_name %>, notice: '<%= archetype_name %> was successfully created.' }
32
+ format.json { render action: 'show', status: :created, location: @<%= controller_name %> }
33
+ else
34
+ format.html { render action: 'new' }
35
+ format.json { render json: @<%= controller_name %>, status: :unprocessable_entity }
36
+ end
37
+ end
38
+ end
39
+
40
+ # PATCH/PUT /<%= controller_name %>/1
41
+ # PATCH/PUT /<%= controller_name %>/1.json
42
+ def update
43
+ respond_to do |format|
44
+ if @<%= model_name %>.update(<%= model_name %>_params)
45
+ format.html { redirect_to @<%= controller_name %>, notice: '<%= archetype_name %> updated.' }
46
+ format.json { head :no_content }
47
+ else
48
+ format.html { render action: 'edit' }
49
+ format.json { render json: @<%= model_name %>.errors, status: :unprocessable_entity }
50
+ end
51
+ end
52
+ end
53
+
54
+ # DELETE /<%= controller_name %>/1
55
+ # DELETE /<%= controller_name %>/1.json
56
+ def destroy
57
+ @<%= model_name %>.destroy
58
+ respond_to do |format|
59
+ format.html { redirect_to <%= controller_name %>_index_url }
60
+ format.json { head :no_content }
61
+ end
62
+ end
63
+
64
+ private
65
+ # Use callbacks to share common setup or constraints between actions.
66
+ def set_<%= controller_name %>
67
+ @<%= model_name %> = <%= model_class_name %>.find(params[:id])
68
+ end
69
+
70
+ # Never trust parameters from the scary internet, only allow the white list through.
71
+ def <%= model_name %>_params
72
+ params[:<%= model_name %>]
73
+ end
12
74
  end
13
- <% end -%>
@@ -0,0 +1,17 @@
1
+ require 'generators/openehr'
2
+
3
+ module Openehr
4
+ module Generators
5
+ class HelperGenerator < ArchetypedBase
6
+ source_root File.expand_path("../templates", __FILE__)
7
+
8
+ def create_helper_directory
9
+ empty_directory 'app/helpers'
10
+ end
11
+
12
+ def copy_helper_file
13
+ template 'helper.rb', File.join('app/helpers', "#{model_name}_helper.rb")
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,2 @@
1
+ module <%= model_class_name %>Helper
2
+ end
@@ -5,48 +5,44 @@ require 'openehr/parser'
5
5
  require 'locale/info'
6
6
  require 'generators/openehr'
7
7
 
8
- module OpenEHR
9
- module Rails
10
- module Generators
11
- class I18nGenerator < ArchetypedBase
12
- source_root File.expand_path '../templates', __FILE__
8
+ module Openehr
9
+ module Generators
10
+ class I18nGenerator < ArchetypedBase
11
+ source_root File.expand_path '../templates', __FILE__
13
12
 
14
- def create_i18n_file
15
- @original_language = original_language
16
- @translations = translations
17
- template 'i18n.rb', 'config/initializers/i18n.rb'
18
- end
13
+ def create_i18n_file
14
+ template 'i18n.rb', 'config/initializers/i18n.rb'
15
+ end
19
16
 
20
- def create_yaml_files
21
- @controller_path = archetype.archetype_id.value.underscore
22
- archetype.ontology.term_definitions.each do |code, terms|
23
- @language_code = code
24
- @terms = terms.map do |atcode, term|
25
- {atcode: atcode, item: term.items['text']}
26
- end
27
- template 'language.yml', "config/locales/#{@language_code}.yml"
17
+ def create_yaml_files
18
+ archetype.ontology.term_definitions.each do |code, terms|
19
+ @language_code = code
20
+ @terms = terms.map do |atcode, term|
21
+ {atcode: atcode, item: term.items['text']}
28
22
  end
23
+ template 'language.yml', "config/locales/#{@language_code}.yml"
29
24
  end
25
+ end
30
26
 
31
- private
32
- def original_language
33
- { code: original_language_code,
34
- text: language_name(original_language_code) }
35
- end
27
+ protected
28
+ def original_language
29
+ { code: original_language_code,
30
+ text: language_name(original_language_code) }
31
+ end
36
32
 
37
- def original_language_code
38
- archetype.original_language.code_string
39
- end
33
+ def original_language_code
34
+ archetype.original_language.code_string
35
+ end
40
36
 
41
- def translations
42
- archetype.translations.each_key.map do |code|
43
- { code: code, text: language_name(code) }
44
- end
37
+ def translations
38
+ archetype.translations.each_key.map do |code|
39
+ { code: code, text: language_name(code) }
45
40
  end
41
+ end
46
42
 
47
- def language_name(code)
48
- Locale::Info.get_language(code).name
49
- end
43
+ def language_name(code)
44
+ lang_name = Locale::Info.get_language(code)
45
+ lang_name ? lang_name.name : code
50
46
  end
51
47
  end
52
48
  end
@@ -1,6 +1,6 @@
1
- I18n.default_locale = :<%= @original_language[:code] %>
1
+ I18n.default_locale = :<%= original_language[:code] %>
2
2
 
3
3
  LANGUAGES = [
4
- ['<%= @original_language[:text] %>', '<%= @original_language[:code] %>'],
5
- <% @translations.each do |t|%> ['<%= t[:text] %>', '<%= t[:code] %>'],
4
+ ['<%= original_language[:text] %>', '<%= original_language[:code] %>'],
5
+ <% translations.each do |t|%> ['<%= t[:text] %>', '<%= t[:code] %>'],
6
6
  <% end %>]
@@ -1,10 +1,15 @@
1
1
  <%= @language_code %>:
2
+ date: # month name and date format should be customized as you need.
3
+ month_names: [~, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
4
+ order: [year, month, day]
2
5
  layouts:
3
6
  application:
4
- <%= @controller_path %>:
7
+ <%= controller_name %>:
5
8
  index: &ontology
6
- <% @terms.each do |term| %> <%= term[:atcode] %>: "<%= term[:item] %>"
7
- <% end %> new: *ontology
9
+ <% @terms.each do |term| -%>
10
+ <%= term[:atcode] %>: "<%= term[:item] %>"
11
+ <% end -%>
12
+ new: *ontology
8
13
  form: *ontology
9
14
  show: *ontology
10
15
  edit: *ontology
@@ -1,16 +1,13 @@
1
- module OpenEHR
2
- module Rails
3
- module Generators
4
- class InstallGenerator < ::Rails::Generators::Base
5
-
6
- desc <<DESC
1
+ module Openehr
2
+ module Generators
3
+ class InstallGenerator < ::Rails::Generators::Base
4
+ desc <<DESC
7
5
  Description:
8
6
  setup openEHR environment with archetype directory.
9
7
  DESC
10
8
 
11
- def create_archetype_directory
12
- empty_directory 'app/archetypes'
13
- end
9
+ def create_archetype_directory
10
+ empty_directory 'app/archetypes'
14
11
  end
15
12
  end
16
13
  end
@@ -1,16 +1,31 @@
1
1
  require 'generators/openehr'
2
2
  require 'rails/generators/active_record'
3
+ require 'rails/generators/migration'
4
+ require 'rails/generators/base'
3
5
 
4
- module OpenEHR
5
- module Rails
6
- module Generators
7
- class MigrationGenerator < ::ActiveRecord::Generators::Base
8
- argument :attributes
9
- source_root File.expand_path("./templates", __FILE__)
6
+ module Openehr
7
+ module Generators
8
+ class MigrationGenerator < ::Rails::Generators::Base
9
+ include ::Rails::Generators::Migration
10
10
 
11
- def copy_archetype_migration
12
-
13
- end
11
+ source_root File.expand_path("../templates", __FILE__)
12
+
13
+ def make_directory
14
+ empty_directory 'db/migrate'
15
+ end
16
+
17
+ def copy_archetype_migration
18
+ migration_template 'archetypes.rb', 'db/migrate/create_archetypes.rb'
19
+ end
20
+
21
+ def copy_rm_migration
22
+ migration_template 'rms.rb', 'db/migrate/create_rms.rb'
23
+ end
24
+
25
+ private
26
+ def self.next_migration_number(dirname)
27
+ next_migration_number = current_migration_number(dirname) + 1
28
+ ActiveRecord::Migration.next_migration_number(next_migration_number)
14
29
  end
15
30
  end
16
31
  end
@@ -0,0 +1,10 @@
1
+ class CreateArchetypes < ActiveRecord::Migration
2
+ def change
3
+ create_table :archetypes do |t|
4
+ t.string :archetypeid
5
+ t.string :uid
6
+
7
+ t.timestamps
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,16 @@
1
+ class CreateRms < ActiveRecord::Migration
2
+ def change
3
+ create_table :rms do |t|
4
+ t.string :node_id
5
+ t.string :path
6
+ t.references :archetype, index: true
7
+ t.string :text_value
8
+ t.float :num_value
9
+ t.date :date_value
10
+ t.time :time_value
11
+ t.boolean :bool_value
12
+
13
+ t.timestamps
14
+ end
15
+ end
16
+ end
@@ -1,16 +1,117 @@
1
1
  require 'generators/openehr'
2
2
 
3
- module OpenEHR
4
- module Rails
5
- module Generators
6
- class ModelGenerator < Base
7
- desc "generate archetype model and migragion file"
3
+ module Openehr
4
+ module Generators
5
+ class ModelGenerator < ArchetypedBase
6
+ source_root File.expand_path("../templates", __FILE__)
7
+ desc "generate archetype model and migragion file"
8
8
 
9
-
9
+ def create_empty_directory
10
+ empty_directory File.join('app/models')
11
+ end
12
+
13
+ def generate_rm
14
+ template 'rm.rb', File.join('app/models', 'rm.rb')
15
+ end
16
+
17
+ def generate_archetype
18
+ template 'archetype.rb', File.join('app/models', 'archetype.rb')
19
+ end
20
+
21
+ def generate_archtype_based_active_model
22
+ template 'activemodel.rb', File.join('app/models', "#{model_name}.rb")
23
+ end
10
24
 
11
- def create_migration_file
25
+ protected
26
+ def atcodes(cobj)
27
+ case cobj.rm_type_name
28
+ when 'ELEMENT'
29
+ add_atcode_methods cobj
30
+ when 'EVENT'
31
+ add_event cobj
32
+ when 'INTERVAL_EVENT'
33
+ add_event cobj
34
+ else
35
+ add_data_component cobj
12
36
  end
13
37
  end
38
+
39
+ def add_data_component(cobj)
40
+ html = ''
41
+ if cobj.respond_to? :attributes
42
+ html += cobj.attributes.inject('') do |form, attr|
43
+ if attr.respond_to? :children
44
+ form += attr.children.inject('') do |h, child|
45
+ child_atcode = atcodes child
46
+ unless child_atcode.nil?
47
+ h += child_atcode
48
+ end
49
+ h
50
+ end
51
+ end
52
+ form
53
+ end
54
+ end
55
+ html
56
+ end
57
+
58
+ def add_event(cobj)
59
+ add_interval_event(cobj) + add_data_component(cobj)
60
+ end
61
+
62
+ def add_interval_event(cobj)
63
+ atcode = cobj.node_id
64
+ path = cobj.path+ "/value"
65
+ atval = "#{atcode}model.text_value"
66
+ atform(atcode, path, atval, 'text_value')
67
+ end
68
+
69
+ def add_atcode_methods(cobj)
70
+ atcode = cobj.node_id
71
+ val = cobj.attributes.select {|attr| attr.rm_attribute_name == 'value'}[0]
72
+ path = val.path
73
+ type = case val.children[0].rm_type_name
74
+ when 'DvQuantity', 'DV_QUANTITY'
75
+ 'num_value'
76
+ when 'DvText', 'DV_TEXT'
77
+ 'text_value'
78
+ when 'DvCodedText', "DV_CODED_TEXT"
79
+ 'text_value'
80
+ when 'DvDate', 'DV_DATE'
81
+ 'date_value'
82
+ when 'DvTime', 'DvTime'
83
+ 'time_value'
84
+ when 'DvDateTime', 'DvDateTime'
85
+ 'datetime_value'
86
+ else
87
+ 'text_value'
88
+ end
89
+ if val.children[0].rm_type_name == 'DV_CODED_TEXT' ||
90
+ val.children[0].rm_type_name == 'DvCodedText'
91
+ atval = "translate(#{atcode}model.#{type})"
92
+ else
93
+ atval = "#{atcode}model.#{type}"
94
+ end
95
+ atform(atcode, path, atval, type)
96
+ end
97
+
98
+ def atform(atcode, path, atval, type)
99
+ return <<ATFORM
100
+ def #{atcode}model
101
+ @#{atcode} ||= confat('#{atcode}', '#{path}')
102
+ end
103
+
104
+ def #{atcode}
105
+ #{atval}
106
+ end
107
+
108
+ def #{atcode}=(#{atcode})
109
+ #{atcode}model.#{type} = #{atcode}
110
+ end
111
+
112
+ ATFORM
113
+ end
14
114
  end
15
115
  end
16
116
  end
117
+
@@ -0,0 +1,71 @@
1
+ require 'securerandom'
2
+ class <%= model_class_name %>
3
+ include ActiveModel::Model
4
+
5
+ def self.create(attributes = {})
6
+ <%= model_class_name %>.new(attributes)
7
+ end
8
+
9
+ def self.all
10
+ Archetype.where(archetypeid: '<%= archetype_name %>').to_a.map do |archetype|
11
+ <%= model_class_name %>.new(archetype: archetype)
12
+ end
13
+ end
14
+
15
+ def self.find(id)
16
+ <%= model_class_name %>.new(archetype: Archetype.find(id))
17
+ end
18
+
19
+ def self.build(params)
20
+ <%= model_class_name %>.new(params)
21
+ end
22
+
23
+ def save
24
+ archetype.rms.inject(archetype.save, :&) {|rm| rm.save}
25
+ end
26
+
27
+ def persisted?
28
+ archetype.persisted?
29
+ end
30
+
31
+ def destroy
32
+ archetype.destroy
33
+ end
34
+
35
+ def update(attributes)
36
+ self.attributes=attributes
37
+ end
38
+
39
+ def attributes=(attributes)
40
+ attributes.each do |k, v|
41
+ send("#{k}=", v )
42
+ end
43
+ end
44
+
45
+ def id
46
+ archetype.id
47
+ end
48
+
49
+ def id=(id)
50
+ self.archetype = Archetype.find(id)
51
+ end
52
+
53
+ def archetype
54
+ @archetype ||= Archetype.new(archetypeid: '<%= archetype_name %>', uid: SecureRandom.uuid)
55
+ end
56
+
57
+ def archetype=(archetype)
58
+ @archetype = archetype
59
+ end
60
+
61
+ <%= add_data_component(archetype.definition) %>
62
+ private
63
+ def confat(node_id, path)
64
+ archetype.rms.find_by(:node_id => node_id) ||
65
+ archetype.rms.build(:node_id => node_id, :path => path)
66
+ end
67
+
68
+ def translate(term)
69
+ I18n.translate("<%= controller_name %>.index.#{term}")
70
+ end
71
+ end
@@ -0,0 +1,3 @@
1
+ class Archetype < ActiveRecord::Base
2
+ has_many :rms, dependent: :destroy
3
+ end
@@ -0,0 +1,3 @@
1
+ class Rm < ActiveRecord::Base
2
+ belongs_to :archetype
3
+ end