openehr-rails 0.0.2 → 0.1.0

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