ruby-xcdm 0.0.3 → 0.0.4
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.
- data/lib/ruby-xcdm.rb +21 -17
- data/lib/xcdm/entity.rb +23 -4
- data/lib/xcdm/schema.rb +36 -18
- data/lib/xcdm/version.rb +1 -1
- data/test/entity_test.rb +2 -1
- data/test/schema_test.rb +5 -4
- metadata +2 -4
- data/test/test_schema.rb +0 -19
data/lib/ruby-xcdm.rb
CHANGED
@@ -3,27 +3,31 @@ require 'xcdm/entity'
|
|
3
3
|
|
4
4
|
if defined?(Motion::Project::Config)
|
5
5
|
|
6
|
-
|
6
|
+
if File.directory?(File.join(App.config.project_dir, "schemas"))
|
7
|
+
namespace :schema do
|
7
8
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
9
|
+
desc "Clear the datamodel outputs"
|
10
|
+
task :clean do
|
11
|
+
files = Dir.glob(File.join(App.config.project_dir, 'resources', App.config.name) + ".{momd,xcdatamodeld}")
|
12
|
+
files.each do |f|
|
13
|
+
rm_rf f
|
14
|
+
end
|
13
15
|
end
|
14
|
-
end
|
15
16
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
17
|
+
desc "Generate the xcdatamodel file"
|
18
|
+
task :build => :clean do
|
19
|
+
Dir.chdir App.config.project_dir
|
20
|
+
if `xcodebuild -version` =~ /Xcode (\d.\d+)/
|
21
|
+
xcode_version = $1
|
22
|
+
else
|
23
|
+
raise "could not determine xcode version"
|
24
|
+
end
|
25
|
+
runner = XCDM::Schema::Runner.new( App.config.name, "schemas", "resources", App.config.sdk_version)
|
26
|
+
App.info "Generating", "Data Model #{App.config.name}"
|
27
|
+
runner.load_all { |schema, file| App.info "Loading", file }
|
28
|
+
runner.write_all { |schema, file| App.info "Writing", file }
|
29
|
+
end
|
23
30
|
end
|
24
31
|
end
|
25
32
|
|
26
|
-
task :"build:simulator" => :"schema:build"
|
27
|
-
task :"build:device" => :"schema:build"
|
28
|
-
|
29
33
|
end
|
data/lib/xcdm/entity.rb
CHANGED
@@ -27,7 +27,8 @@ module XCDM
|
|
27
27
|
attr_reader :name, :properties, :relationships, :class_name
|
28
28
|
|
29
29
|
|
30
|
-
def initialize(name, options = {})
|
30
|
+
def initialize(schema, name, options = {})
|
31
|
+
@schema = schema
|
31
32
|
@name = name
|
32
33
|
@class_name = options[:class_name] || name
|
33
34
|
@properties = []
|
@@ -92,15 +93,33 @@ module XCDM
|
|
92
93
|
end
|
93
94
|
|
94
95
|
def belongs_to(name, options = {})
|
95
|
-
|
96
|
+
case @schema.xcode_version
|
97
|
+
when /4\..*/
|
98
|
+
options = {maxCount: 1, minCount: 1, plural_inverse: true}.merge(options)
|
99
|
+
else
|
100
|
+
options = {maxCount: 1, plural_inverse: true}.merge(options)
|
101
|
+
end
|
102
|
+
relationship(name, options)
|
96
103
|
end
|
97
104
|
|
98
105
|
def has_one(name, options = {})
|
99
|
-
|
106
|
+
case @schema.xcode_version
|
107
|
+
when /4\..*/
|
108
|
+
options = {maxCount: 1, minCount: 1}.merge(options)
|
109
|
+
else
|
110
|
+
options = {maxCount: 1}.merge(options)
|
111
|
+
end
|
112
|
+
relationship(name, options)
|
100
113
|
end
|
101
114
|
|
102
115
|
def has_many(name, options = {})
|
103
|
-
|
116
|
+
case @schema.xcode_version
|
117
|
+
when /4\..*/
|
118
|
+
options = {maxCount: -1, minCount: 1}.merge(options)
|
119
|
+
else
|
120
|
+
options = {toMany: true}.merge(options)
|
121
|
+
end
|
122
|
+
relationship(name, options)
|
104
123
|
end
|
105
124
|
|
106
125
|
|
data/lib/xcdm/schema.rb
CHANGED
@@ -4,17 +4,19 @@ require 'fileutils'
|
|
4
4
|
require 'plist'
|
5
5
|
|
6
6
|
module XCDM
|
7
|
+
|
7
8
|
class Schema
|
8
9
|
|
9
|
-
attr_reader :version, :entities
|
10
|
+
attr_reader :version, :entities, :xcode_version
|
10
11
|
|
11
|
-
def initialize(version)
|
12
|
+
def initialize(version, xcode_version)
|
12
13
|
@version = version
|
14
|
+
@xcode_version = xcode_version
|
13
15
|
@entities = []
|
14
16
|
end
|
15
17
|
|
16
18
|
def entity(name, options = {}, &block)
|
17
|
-
@entities << Entity.new(name, options).tap { |e| e.instance_eval(&block) }
|
19
|
+
@entities << Entity.new(self, name, options).tap { |e| e.instance_eval(&block) }
|
18
20
|
end
|
19
21
|
|
20
22
|
def to_xml(builder = nil)
|
@@ -23,17 +25,31 @@ module XCDM
|
|
23
25
|
|
24
26
|
builder.instruct! :xml, :standalone => 'yes'
|
25
27
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
28
|
+
if xcode_version =~ /5\.x/
|
29
|
+
attrs = {
|
30
|
+
name: "",
|
31
|
+
userDefinedModelVersionIdentifier: version,
|
32
|
+
type: "com.apple.IDECoreDataModeler.DataModel",
|
33
|
+
documentVersion: "1.0",
|
34
|
+
lastSavedToolsVersion: "3389",
|
35
|
+
systemVersion: "12E55",
|
36
|
+
minimumToolsVersion: "Xcode 5",
|
37
|
+
macOSVersion: "Automatic",
|
38
|
+
iOSVersion: "Automatic"
|
39
|
+
}
|
40
|
+
else
|
41
|
+
attrs = {
|
42
|
+
name: "",
|
43
|
+
userDefinedModelVersionIdentifier: version,
|
44
|
+
type: "com.apple.IDECoreDataModeler.DataModel",
|
45
|
+
documentVersion: "1.0",
|
46
|
+
lastSavedToolsVersion: "2061",
|
47
|
+
systemVersion: "12D78",
|
48
|
+
minimumToolsVersion: "Xcode 4.3",
|
49
|
+
macOSVersion: "Automatic",
|
50
|
+
iOSVersion: "Automatic"
|
51
|
+
}
|
52
|
+
end
|
37
53
|
|
38
54
|
builder.model(attrs) do |builder|
|
39
55
|
entities.each do |entity|
|
@@ -45,13 +61,15 @@ module XCDM
|
|
45
61
|
class Loader
|
46
62
|
|
47
63
|
attr_reader :schemas
|
64
|
+
attr_reader :xcode_version
|
48
65
|
|
49
|
-
def initialize
|
66
|
+
def initialize(xcode_version)
|
67
|
+
@xcode_version = xcode_version
|
50
68
|
@schemas = []
|
51
69
|
end
|
52
70
|
|
53
71
|
def schema(version, &block)
|
54
|
-
@found_schema = Schema.new(version).tap { |s| s.instance_eval(&block) }
|
72
|
+
@found_schema = Schema.new(version, xcode_version).tap { |s| s.instance_eval(&block) }
|
55
73
|
@schemas << @found_schema
|
56
74
|
end
|
57
75
|
|
@@ -65,11 +83,11 @@ module XCDM
|
|
65
83
|
end
|
66
84
|
|
67
85
|
class Runner
|
68
|
-
def initialize(name, inpath, outpath)
|
86
|
+
def initialize(name, inpath, outpath, xcode_version)
|
69
87
|
@inpath = inpath
|
70
88
|
@name = name
|
71
89
|
@container_path = File.join(outpath, "#{name}.xcdatamodeld")
|
72
|
-
@loader = Loader.new
|
90
|
+
@loader = Loader.new(xcode_version)
|
73
91
|
end
|
74
92
|
|
75
93
|
def datamodel_file(version)
|
data/lib/xcdm/version.rb
CHANGED
data/test/entity_test.rb
CHANGED
data/test/schema_test.rb
CHANGED
@@ -8,12 +8,13 @@ module XCDM
|
|
8
8
|
class SchemaTest < Test::Unit::TestCase
|
9
9
|
|
10
10
|
def test_initialize
|
11
|
-
s = Schema.new("0.0.1")
|
11
|
+
s = Schema.new("0.0.1", "4.6")
|
12
12
|
assert_equal "0.0.1", s.version
|
13
|
+
assert_equal "4.6", s.xcode_version
|
13
14
|
end
|
14
15
|
|
15
16
|
def test_entity
|
16
|
-
s = Schema.new("0.0.1")
|
17
|
+
s = Schema.new("0.0.1", "4.6")
|
17
18
|
entity = nil
|
18
19
|
s.entity("MyType") { entity = self; nil }
|
19
20
|
assert entity.is_a?(Entity), "Block should be executed in context of the new entity"
|
@@ -23,7 +24,7 @@ module XCDM
|
|
23
24
|
def test_loader
|
24
25
|
fixture = File.join(File.dirname(__FILE__), 'fixtures', '001_baseline.rb')
|
25
26
|
|
26
|
-
loader = Schema::Loader.new
|
27
|
+
loader = Schema::Loader.new("4.6")
|
27
28
|
schema = loader.load_file(fixture)
|
28
29
|
assert_not_nil schema
|
29
30
|
assert_equal '0.0.1', schema.version
|
@@ -33,7 +34,7 @@ module XCDM
|
|
33
34
|
|
34
35
|
def test_to_xml
|
35
36
|
in_fixture = File.join(File.dirname(__FILE__), 'fixtures', '001_baseline.rb')
|
36
|
-
loader = Schema::Loader.new
|
37
|
+
loader = Schema::Loader.new("4.6")
|
37
38
|
schema = loader.load_file(in_fixture)
|
38
39
|
|
39
40
|
out_fixture = File.join(File.dirname(__FILE__), 'fixtures', 'Article.xcdatamodeld', 'Article.xcdatamodel', 'contents')
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-xcdm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-08-14 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: builder
|
@@ -134,7 +134,6 @@ files:
|
|
134
134
|
- test/fixtures/001_baseline.rb
|
135
135
|
- test/fixtures/Article.xcdatamodeld/Article.xcdatamodel/contents
|
136
136
|
- test/schema_test.rb
|
137
|
-
- test/test_schema.rb
|
138
137
|
homepage: https://github.com/infinitered/ruby-xcdm
|
139
138
|
licenses:
|
140
139
|
- MIT
|
@@ -165,4 +164,3 @@ test_files:
|
|
165
164
|
- test/fixtures/001_baseline.rb
|
166
165
|
- test/fixtures/Article.xcdatamodeld/Article.xcdatamodel/contents
|
167
166
|
- test/schema_test.rb
|
168
|
-
- test/test_schema.rb
|
data/test/test_schema.rb
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
|
2
|
-
require 'test/unit'
|
3
|
-
require 'schema'
|
4
|
-
|
5
|
-
class SchemaTest < Test::Unit::TestCase
|
6
|
-
|
7
|
-
def test_initialize
|
8
|
-
s = Schema.new("0.0.1")
|
9
|
-
assert_equal "0.0.1", s.version
|
10
|
-
end
|
11
|
-
|
12
|
-
def test_entity
|
13
|
-
s = Schema.new("0.0.1")
|
14
|
-
e = s.entity("MyType") { |e| assert e.is_a?(Entity) }
|
15
|
-
assert e.is_a?(Entity)
|
16
|
-
end
|
17
|
-
|
18
|
-
|
19
|
-
end
|