dm_panlex 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 (44) hide show
  1. data/.gitignore +1 -0
  2. data/COPYNG +674 -0
  3. data/README.md +37 -0
  4. data/doc/panlex-db-design.pdf +0 -0
  5. data/lib/dm_panlex/models/ap.rb +28 -0
  6. data/lib/dm_panlex/models/apli.rb +13 -0
  7. data/lib/dm_panlex/models/av.rb +13 -0
  8. data/lib/dm_panlex/models/cp.rb +13 -0
  9. data/lib/dm_panlex/models/cu.rb +16 -0
  10. data/lib/dm_panlex/models/df.rb +15 -0
  11. data/lib/dm_panlex/models/dm.rb +14 -0
  12. data/lib/dm_panlex/models/dn.rb +17 -0
  13. data/lib/dm_panlex/models/ex.rb +17 -0
  14. data/lib/dm_panlex/models/i1.rb +12 -0
  15. data/lib/dm_panlex/models/lc.rb +13 -0
  16. data/lib/dm_panlex/models/lv.rb +22 -0
  17. data/lib/dm_panlex/models/md.rb +14 -0
  18. data/lib/dm_panlex/models/mi.rb +12 -0
  19. data/lib/dm_panlex/models/mn.rb +17 -0
  20. data/lib/dm_panlex/models/us.rb +16 -0
  21. data/lib/dm_panlex/models/wc.rb +14 -0
  22. data/lib/dm_panlex/models/wcex.rb +12 -0
  23. data/lib/dm_panlex.rb +26 -0
  24. data/panlex.gemspec +16 -0
  25. data/spec/dm_panlex/models/ap_spec.rb +75 -0
  26. data/spec/dm_panlex/models/apli_spec.rb +27 -0
  27. data/spec/dm_panlex/models/av_spec.rb +24 -0
  28. data/spec/dm_panlex/models/cp_spec.rb +27 -0
  29. data/spec/dm_panlex/models/cu_spec.rb +36 -0
  30. data/spec/dm_panlex/models/df_spec.rb +36 -0
  31. data/spec/dm_panlex/models/dm_spec.rb +30 -0
  32. data/spec/dm_panlex/models/dn_spec.rb +36 -0
  33. data/spec/dm_panlex/models/ex_spec.rb +39 -0
  34. data/spec/dm_panlex/models/i1_spec.rb +15 -0
  35. data/spec/dm_panlex/models/lc_spec.rb +24 -0
  36. data/spec/dm_panlex/models/lv_spec.rb +60 -0
  37. data/spec/dm_panlex/models/md_spec.rb +33 -0
  38. data/spec/dm_panlex/models/mi_spec.rb +21 -0
  39. data/spec/dm_panlex/models/mn_spec.rb +33 -0
  40. data/spec/dm_panlex/models/us_spec.rb +45 -0
  41. data/spec/dm_panlex/models/wc_spec.rb +30 -0
  42. data/spec/dm_panlex/models/wcex_spec.rb +21 -0
  43. data/spec/spec_helper.rb +7 -0
  44. metadata +136 -0
data/README.md ADDED
@@ -0,0 +1,37 @@
1
+ # dm\_panlex
2
+ This package is an ORM mapping of [Panlex](http://panlex.org) database using Ruby [Data mapper](http://datamapper.org).
3
+
4
+ ## Differences
5
+
6
+ Following are the only differences detected between the database created by this package (tested in PostgreSQL 9.1.6 on Debian Wheezy) and actual Panlex database:
7
+
8
+ * 'ON UPDATE CASCADE' in wcex-wc 1-n relation is not implemented because, as far as I know, dm-constraints can't do that without adding 'ON DELETE CASCADE'.
9
+ * A PK for cu(lv, co, loc, vb) is added because datamapper requires each model to have a PK. That makes cu(loc) field to be a required one even if it's not in original Panlex database. It forces as well cu(loc) and cu(loc) to be String instead of Text, as in MySQL a Text can't be a PK.
10
+ * Fields with 'character' type are changed to 'character varying'.
11
+ * PostgreSQL Cluster (http://www.postgresql.org/docs/8.1/static/sql-cluster.html) are not implemented.
12
+ * Unique indexes appear as 'UNIQUE' instead of 'UNIQUE CONSTRAINT' (don't know why).
13
+ * An 'index' is created for fields that are FK and haven't any index in the original Panlex database.
14
+ * Unique indexes are named 'unique\_\*' instead of '\*\_key'
15
+ * FK are named '\*\_fk' instead of '\_fkey'.
16
+ * When showing a table schema from the database, fields that 'belong to' some other table are listed as the last ones.
17
+
18
+ ## TO DO
19
+
20
+ * Solve some of the differences if it is really needed.
21
+
22
+ ## LICENSE
23
+
24
+ Copyright 2013 Marc Busqué - <marc@lamarciana.com>
25
+
26
+ This program is free software: you can redistribute it and/or modify
27
+ it under the terms of the GNU General Public License as published by
28
+ the Free Software Foundation, either version 3 of the License, or
29
+ (at your option) any later version.
30
+
31
+ This program is distributed in the hope that it will be useful,
32
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
33
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
34
+ GNU General Public License for more details.
35
+
36
+ You should have received a copy of the GNU General Public License
37
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
Binary file
@@ -0,0 +1,28 @@
1
+ module Dm_Panlex
2
+ class Ap
3
+ include DataMapper::Resource
4
+
5
+ storage_names[:default] = 'ap'
6
+
7
+ property :ap, Integer, :key => true
8
+ property :dt, Date, :field => 'dt', :required => true
9
+ property :tt, Text, :required => true, :unique_index => true
10
+ property :ur, Text
11
+ property :bn, Text
12
+ property :au, Text
13
+ property :ti, Text
14
+ property :pb, Text
15
+ property :yr, Integer, :min => -32768, :max => 32767
16
+ property :uq, Integer, :min => -32768, :max => 32767, :required => true
17
+ property :ui, Integer, :min => -32768, :max => 32767
18
+ property :ul, Text
19
+ property :ip, Text
20
+ property :co, Text
21
+ property :ad, Text
22
+
23
+ belongs_to :apli, :parent_key => :li, :child_key => :li
24
+
25
+ has n, :avs, :parent_key => :ap, :child_key => :ap, :constraint => :destroy
26
+ has n, :mns, :parent_key => :ap, :child_key => :ap
27
+ end
28
+ end
@@ -0,0 +1,13 @@
1
+ module Dm_Panlex
2
+ class Apli
3
+ include DataMapper::Resource
4
+
5
+ storage_names[:default] = 'apli'
6
+
7
+ property :id, Integer, :key => true
8
+ property :li, String, :length => 2, :required => true, :unique_index => true
9
+ property :pl, Text, :required => true, :unique_index => true
10
+
11
+ has n, :aps, :parent_key => :li, :child_key => :li
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ module Dm_Panlex
2
+ class Av
3
+ include DataMapper::Resource
4
+
5
+ storage_names[:default] = 'av'
6
+
7
+ property :ap, Integer, :key => true
8
+ property :lv, Integer, :key => true
9
+
10
+ belongs_to :ap, :parent_key => :ap, :child_key => :ap
11
+ belongs_to :lv, :parent_key => :lv, :child_key => :lv
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ module Dm_Panlex
2
+ class Cp
3
+ include DataMapper::Resource
4
+
5
+ storage_names[:default] = 'cp'
6
+
7
+ property :lv, Integer, :key => true, :unique_index => :cp_lv_key
8
+ property :c0, String, :length => 5, :key => true
9
+ property :c1, String, :length => 5, :required => true, :unique_index => :cp_lv_key
10
+
11
+ belongs_to :lv, :parent_key => :lv, :child_key => :lv
12
+ end
13
+ end
@@ -0,0 +1,16 @@
1
+ module Dm_Panlex
2
+ class Cu
3
+ include DataMapper::Resource
4
+
5
+ storage_names[:default] = 'cu'
6
+
7
+ #DataMapper requires a primary Key. It's not present in Panlex original database, but we assume it's the :cu_c0_key unique index. In MySQL a 'Text' field can't be a PK, so we change 'loc' and 'vb' to be 'String'
8
+ property :lv, Integer, :key => true, :required => true, :unique_index => [:cu_c0_key, :cu_c1_key]
9
+ property :c0, String, :length => 5, :key => true, :required => true, :unique_index => :cu_c0_key
10
+ property :c1, String, :length => 5, :required => true, :unique_index => :cu_c1_key
11
+ property :loc, String, :length => 255, :key => true, :unique_index => [:cu_c0_key, :cu_c1_key]
12
+ property :vb, String, :length => 255, :key => true, :required => true, :unique_index => [:cu_c0_key, :cu_c1_key]
13
+
14
+ belongs_to :lv, :parent_key => :lv, :child_key => :lv
15
+ end
16
+ end
@@ -0,0 +1,15 @@
1
+ module Dm_Panlex
2
+ class Df
3
+ include DataMapper::Resource
4
+
5
+ storage_names[:default] = 'df'
6
+
7
+ property :df, Integer, :key => true
8
+ property :mn, Integer, :required => true, :unique_index => :df_mn_key
9
+ property :lv, Integer, :required => true, :unique_index => :df_mn_key
10
+ property :tt, Text, :required => true, :unique_index => :df_mn_key
11
+
12
+ belongs_to :lv, :parent_key => :lv, :child_key => :lv
13
+ belongs_to :mn, :parent_key => :mn, :child_key => :mn
14
+ end
15
+ end
@@ -0,0 +1,14 @@
1
+ module Dm_Panlex
2
+ class Dm
3
+ include DataMapper::Resource
4
+
5
+ storage_names[:default] = 'dm'
6
+
7
+ property :dm, Integer, :key => true
8
+ property :mn, Integer, :required => true, :unique_index => :dm_mn_key
9
+ property :ex, Integer, :required => true, :unique_index => :dm_mn_key
10
+
11
+ belongs_to :ex, :parent_key => :ex, :child_key => :ex
12
+ belongs_to :mn, :parent_key => :mn, :child_key => :mn
13
+ end
14
+ end
@@ -0,0 +1,17 @@
1
+ module Dm_Panlex
2
+ class Dn
3
+ include DataMapper::Resource
4
+
5
+ storage_names[:default] = 'dn'
6
+
7
+ property :dn, Integer, :key => true
8
+ property :mn, Integer, :required => true, :unique_index => :dm_mn_ex_key, :index => true
9
+ property :ex, Integer, :required => true, :unique_index => :dm_mn_ex_key, :index => true
10
+
11
+ belongs_to :ex, :parent_key => :ex, :child_key => :ex
12
+ belongs_to :mn, :parent_key => :mn, :child_key => :mn
13
+
14
+ has n, :mds, :parent_key => :dn, :child_key => :dn
15
+ has n, :wcs, :parent_key => :dn, :child_key => :dn
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ module Dm_Panlex
2
+ class Ex
3
+ include DataMapper::Resource
4
+
5
+ storage_names[:default] = 'ex'
6
+
7
+ property :ex, Integer, :key => true
8
+ property :lv, Integer, :required => true, :unique_index => :ex_lv_tt_key, :index => true
9
+ property :tt, Text, :required => true, :unique_index => :ex_lv_tt_key, :index => true
10
+ property :td, Text, :required => true, :index => true
11
+
12
+ belongs_to :lv, :parent_key => :lv, :child_key => :lv
13
+
14
+ has n, :dms, :parent_key => :ex, :child_key => :ex
15
+ has n, :dns, :parent_key => :ex, :child_key => :ex
16
+ end
17
+ end
@@ -0,0 +1,12 @@
1
+ module Dm_Panlex
2
+ class I1
3
+ include DataMapper::Resource
4
+
5
+ storage_names[:default] = 'i1'
6
+
7
+ property :iso1, String, :length => 2, :key => true
8
+ property :iso3, String, :length => 3, :required => true
9
+
10
+ belongs_to :lc, :parent_key => :lc, :child_key => :iso3
11
+ end
12
+ end
@@ -0,0 +1,13 @@
1
+ module Dm_Panlex
2
+ class Lc
3
+ include DataMapper::Resource
4
+
5
+ storage_names[:default] = 'lc'
6
+
7
+ property :lc, String, :length => 3, :key => true
8
+ property :tp, String, :length => 1, :required => true
9
+
10
+ has n, :i1s, :parent_key => :lc, :child_key => :iso3
11
+ has n, :lvs, :parent_key => :lc, :child_key => :lc
12
+ end
13
+ end
@@ -0,0 +1,22 @@
1
+ module Dm_Panlex
2
+ class Lv
3
+ include DataMapper::Resource
4
+
5
+ storage_names[:default] = 'lv'
6
+
7
+ property :lv, Integer, :key => true
8
+ property :lc, String, :length => 3, :required => true, :unique_index => :lv_lc_key
9
+ property :vc, Integer, :min => -32768, :max => 32767, :required => true, :unique_index => :lv_lc_key
10
+ property :sy, Boolean, :required => true, :default => true
11
+ property :am, Boolean, :required => true, :default => true
12
+ property :tt, Text, :required => true
13
+
14
+ belongs_to :lc, :parent_key => :lc, :child_key => :lc
15
+
16
+ has n, :avs, :parent_key => :lv, :child_key => :lv, :constraint => :destroy
17
+ has n, :cps, :parent_key => :lv, :child_key => :lv
18
+ has n, :cus, :parent_key => :lv, :child_key => :lv
19
+ has n, :dfs, :parent_key => :lv, :child_key => :lv
20
+ has n, :exs, :parent_key => :lv, :child_key => :lv
21
+ end
22
+ end
@@ -0,0 +1,14 @@
1
+ module Dm_Panlex
2
+ class Md
3
+ include DataMapper::Resource
4
+
5
+ storage_names[:default] = 'md'
6
+
7
+ property :md, Integer, :key => true
8
+ property :dn, Integer, :required => true, :unique_index => :md_dn_key
9
+ property :vb, Text, :required => true, :unique_index => :md_dn_key
10
+ property :vl, Text, :required => true, :unique_index => :md_dn_key
11
+
12
+ belongs_to :dn, :parent_key => :dn, :child_key => :dn
13
+ end
14
+ end
@@ -0,0 +1,12 @@
1
+ module Dm_Panlex
2
+ class Mi
3
+ include DataMapper::Resource
4
+
5
+ storage_names[:default] = 'mi'
6
+
7
+ property :mn, Integer, :key => true
8
+ property :tt, Text, :required => true
9
+
10
+ belongs_to :mn, :parent_key => :mn, :child_key => :mn
11
+ end
12
+ end
@@ -0,0 +1,17 @@
1
+ module Dm_Panlex
2
+ class Mn
3
+ include DataMapper::Resource
4
+
5
+ storage_names[:default] = 'mn'
6
+
7
+ property :mn, Integer, :key => true
8
+ property :ap, Integer, :required => true, :index => true
9
+
10
+ belongs_to :ap, :parent_key => :ap, :child_key => :ap
11
+
12
+ has n, :dfs, :parent_key => :mn, :child_key => :mn
13
+ has n, :dms, :parent_key => :mn, :child_key => :mn
14
+ has n, :dns, :parent_key => :mn, :child_key => :mn
15
+ has n, :mis, :parent_key => :mn, :child_key => :mn
16
+ end
17
+ end
@@ -0,0 +1,16 @@
1
+ module Dm_Panlex
2
+ class Us
3
+ include DataMapper::Resource
4
+
5
+ storage_names[:default] = 'us'
6
+
7
+ property :us, Integer, :key => true
8
+ property :dt, Date, :field => 'dt', :required => true
9
+ property :nm, Text
10
+ property :al, Text, :required => true, :unique_index => true
11
+ property :sm, Text
12
+ property :ht, Text
13
+ property :ok, Boolean, :required => true, :default => false
14
+ property :ad, Boolean, :required => true, :default => false
15
+ end
16
+ end
@@ -0,0 +1,14 @@
1
+ module Dm_Panlex
2
+ class Wc
3
+ include DataMapper::Resource
4
+
5
+ storage_names[:default] = 'wc'
6
+
7
+ property :wc, Integer, :key => true
8
+ property :dn, Integer, :required => true, :unique_index => :wc_dn_key
9
+ property :ex, Integer, :required => true, :unique_index => :wc_dn_key
10
+
11
+ belongs_to :dn, :parent_key => :dn, :child_key => :dn
12
+ belongs_to :wcex, :parent_key => :ex, :child_key => :ex
13
+ end
14
+ end
@@ -0,0 +1,12 @@
1
+ module Dm_Panlex
2
+ class Wcex
3
+ include DataMapper::Resource
4
+
5
+ storage_names[:default] = 'wcex'
6
+
7
+ property :ex, Integer, :key => true
8
+ property :tt, Text, :required => true, :unique_index => true
9
+
10
+ has n, :wcs, :parent_key => :ex, :child_key => :ex
11
+ end
12
+ end
data/lib/dm_panlex.rb ADDED
@@ -0,0 +1,26 @@
1
+ %w[
2
+ data_mapper
3
+ ].each do |lib|
4
+ require lib
5
+ end
6
+
7
+ require 'dm_panlex/models/ap'
8
+ require 'dm_panlex/models/apli'
9
+ require 'dm_panlex/models/av'
10
+ require 'dm_panlex/models/cp'
11
+ require 'dm_panlex/models/cu'
12
+ require 'dm_panlex/models/df'
13
+ require 'dm_panlex/models/dm'
14
+ require 'dm_panlex/models/dn'
15
+ require 'dm_panlex/models/ex'
16
+ require 'dm_panlex/models/i1'
17
+ require 'dm_panlex/models/lc'
18
+ require 'dm_panlex/models/lv'
19
+ require 'dm_panlex/models/md'
20
+ require 'dm_panlex/models/mi'
21
+ require 'dm_panlex/models/mn'
22
+ require 'dm_panlex/models/us'
23
+ require 'dm_panlex/models/wc'
24
+ require 'dm_panlex/models/wcex'
25
+
26
+ DataMapper.finalize
data/panlex.gemspec ADDED
@@ -0,0 +1,16 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'dm_panlex'
3
+ s.version = '0.1.0'
4
+ s.summary = 'Data mapper models for the Panlex database'
5
+ s.description = 'https://github.com/laMarciana/dm_panlex/'
6
+ s.license = ''
7
+ s.homepage = 'https://github.com/laMarciana/dm_panlex/'
8
+ s.authors = ['Marc Busqué']
9
+ s.email = 'marc@lamarciana.com'
10
+ s.files = `git ls-files`.split("\n")
11
+
12
+ s.add_runtime_dependency "data_mapper", "~>1.2"
13
+
14
+ s.add_development_dependency "rspec", "~>2.11"
15
+ s.add_development_dependency "dm-rspec", "~>0.2"
16
+ end
@@ -0,0 +1,75 @@
1
+ require 'spec_helper'
2
+
3
+ module Dm_Panlex
4
+ describe Ap, "Approvers" do
5
+ it "has a property id (ap)" do
6
+ should have_property :ap
7
+ end
8
+ it "has a property registration date (dt)" do
9
+ should have_property :dt
10
+ end
11
+ it "has a property label (tt)" do
12
+ should have_property :tt
13
+ end
14
+ it "has a property URI (ur)" do
15
+ should have_property :ur
16
+ end
17
+ it "has a property ISBN (bn)" do
18
+ should have_property :bn
19
+ end
20
+ it "has a property author (au)" do
21
+ should have_property :au
22
+ end
23
+ it "has a property title (ti)" do
24
+ should have_property :ti
25
+ end
26
+ it "has a property monograph publisher or serial title, volume, and page range (pb)" do
27
+ should have_property :pb
28
+ end
29
+ it "has a property year of publication (yr)" do
30
+ should have_property :yr
31
+ end
32
+ it "has a property quality in editor's judgement (uq)" do
33
+ should have_property :uq
34
+ end
35
+ it "has a property numeric ID specified by the user (ui)" do
36
+ should have_property :ui
37
+ end
38
+ it "has a property miscellaneous information (ul)" do
39
+ should have_property :ul
40
+ end
41
+ it "has a property type of offered license (li)" do
42
+ should have_property :li
43
+ end
44
+ it "has a property summary of intellectual-property claim (ip)" do
45
+ should have_property :ip
46
+ end
47
+ it "has a property name of apparent intellectual-property claimant (co)" do
48
+ should have_property :co
49
+ end
50
+ it "has a property SMTP address for licensing correspondence (ad)" do
51
+ should have_property :ad
52
+ end
53
+ it "is not valid without an id" do
54
+ should validate_presence_of :ap
55
+ end
56
+ it "is not valid without a registration date" do
57
+ should validate_presence_of :dt
58
+ end
59
+ it "is not valid without a label" do
60
+ should validate_presence_of :tt
61
+ end
62
+ it "is not valid without a quality in editor's judgement" do
63
+ should validate_presence_of :uq
64
+ end
65
+ it "belongs to an approver license (apli)" do
66
+ should belong_to :apli
67
+ end
68
+ it "has many approver varieties (av)" do
69
+ should have_many :avs
70
+ end
71
+ it "has many meanings (mn)" do
72
+ should have_many :mns
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ module Dm_Panlex
4
+ describe Apli, "Approver license" do
5
+ it "has a property id (id)" do
6
+ should have_property :id
7
+ end
8
+ it "has a property type code (li)" do
9
+ should have_property :li
10
+ end
11
+ it "has a property text of the type's PanLex expression (pl)" do
12
+ should have_property :pl
13
+ end
14
+ it "is not valid without an id" do
15
+ should validate_presence_of :id
16
+ end
17
+ it "is not valid without a type code" do
18
+ should validate_presence_of :li
19
+ end
20
+ it "is not valid without a text of the type's PanLex expression" do
21
+ should validate_presence_of :pl
22
+ end
23
+ it "has many approvers (ap)" do
24
+ should have_many :aps
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ module Dm_Panlex
4
+ describe Av, "Approver variety" do
5
+ it "has a property approver (ap)" do
6
+ should have_property :ap
7
+ end
8
+ it "has a property variety (lv)" do
9
+ should have_property :lv
10
+ end
11
+ it "is not valid without an approver" do
12
+ should validate_presence_of :ap
13
+ end
14
+ it "is not valid without a variety" do
15
+ should validate_presence_of :lv
16
+ end
17
+ it "belongs to an approver (ap)" do
18
+ should belong_to :ap
19
+ end
20
+ it "belongs to a language variety (lv)" do
21
+ should belong_to :lv
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ module Dm_Panlex
4
+ describe Cp, "Approved characters" do
5
+ it "has a property variety (lv)" do
6
+ should have_property :lv
7
+ end
8
+ it "has a property start of character range (c0)" do
9
+ should have_property :c0
10
+ end
11
+ it "has a property end of character range (c1)" do
12
+ should have_property :c1
13
+ end
14
+ it "is not valid without a variety" do
15
+ should validate_presence_of :lv
16
+ end
17
+ it "is not valid without a start of character range" do
18
+ should validate_presence_of :c0
19
+ end
20
+ it "is not valid without an end of character range" do
21
+ should validate_presence_of :c1
22
+ end
23
+ it "belongs to a language variety (lv)" do
24
+ should belong_to :lv
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,36 @@
1
+ require 'spec_helper'
2
+
3
+ module Dm_Panlex
4
+ describe Cu, "Exemplar characters" do
5
+ it "has a property variety (lv)" do
6
+ should have_property :lv
7
+ end
8
+ it "has a property start of character range (c0)" do
9
+ should have_property :c0
10
+ end
11
+ it "has a property end of character range (c1)" do
12
+ should have_property :c1
13
+ end
14
+ it "has a property locale (loc)" do
15
+ should have_property :loc
16
+ end
17
+ it "has a property variable (vb)" do
18
+ should have_property :vb
19
+ end
20
+ it "is not valid without a variety" do
21
+ should validate_presence_of :lv
22
+ end
23
+ it "is not valid without a start of character range" do
24
+ should validate_presence_of :c0
25
+ end
26
+ it "is not valid without an end of character range" do
27
+ should validate_presence_of :c1
28
+ end
29
+ it "is not valid without a variable" do
30
+ should validate_presence_of :vb
31
+ end
32
+ it "belongs to a language variety (lv)" do
33
+ should belong_to :lv
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,36 @@
1
+ require 'spec_helper'
2
+
3
+ module Dm_Panlex
4
+ describe Df, "Definition" do
5
+ it "has a property id (df)" do
6
+ should have_property :df
7
+ end
8
+ it "has a property meaning (mn)" do
9
+ should have_property :mn
10
+ end
11
+ it "has a property variety of the text (lv)" do
12
+ should have_property :lv
13
+ end
14
+ it "has a property text (tt)" do
15
+ should have_property :tt
16
+ end
17
+ it "is not valid without an id" do
18
+ should validate_presence_of :df
19
+ end
20
+ it "is not valid without a meaning" do
21
+ should validate_presence_of :mn
22
+ end
23
+ it "is not valid without a variety of the text" do
24
+ should validate_presence_of :lv
25
+ end
26
+ it "is not valid without a text" do
27
+ should validate_presence_of :tt
28
+ end
29
+ it "belongs to a language variety (lv)" do
30
+ should belong_to :lv
31
+ end
32
+ it "belongs to a meaning (mn)" do
33
+ should belong_to :mn
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ module Dm_Panlex
4
+ describe Dm, "Domain descriptors" do
5
+ it "has a property id (dm)" do
6
+ should have_property :dm
7
+ end
8
+ it "has a property meaning (mn)" do
9
+ should have_property :mn
10
+ end
11
+ it "has a property expression (ex)" do
12
+ should have_property :ex
13
+ end
14
+ it "is not valid without an id" do
15
+ should validate_presence_of :dm
16
+ end
17
+ it "is not valid without a meaning" do
18
+ should validate_presence_of :mn
19
+ end
20
+ it "is not valid without an expression" do
21
+ should validate_presence_of :ex
22
+ end
23
+ it "belongs to an expression (ex)" do
24
+ should belong_to :ex
25
+ end
26
+ it "belongs to a meaning (mn)" do
27
+ should belong_to :mn
28
+ end
29
+ end
30
+ end