filemaker 0.0.10 → 0.0.11
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/filemaker/model/builder.rb +4 -23
- data/lib/filemaker/model/persistable.rb +1 -14
- data/lib/filemaker/model/relations/belongs_to.rb +4 -0
- data/lib/filemaker/model/relations/has_many.rb +4 -0
- data/lib/filemaker/version.rb +1 -1
- data/spec/filemaker/model/builder_spec.rb +43 -0
- data/spec/support/models.rb +12 -0
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b2df8ff23dfbe366d62b061a11f6df38bb57d77c
|
4
|
+
data.tar.gz: 92524e645975cd4e6bd65186eb596789033bda7e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5d3d539088833432a862aa56e010c568f0ee20085fbde57266eeccd5d59159bc6bad112bea84cf118801be03fee28bd5eff0566a88257e03c9954fd0ca7168be
|
7
|
+
data.tar.gz: 87fb6a1df1e0c6c9779a45d2b7ef8d5f950f1c32d98c228a80bc69375e163cf13824e4458ad141538c08d9f554ecce3a08235a82414784707e62d6798ee3cf87
|
@@ -9,32 +9,13 @@ module Filemaker
|
|
9
9
|
models = []
|
10
10
|
|
11
11
|
resultset.each do |record|
|
12
|
-
|
13
|
-
|
14
|
-
object.instance_variable_set('@new_record', false)
|
15
|
-
object.instance_variable_set('@record_id', record.record_id)
|
16
|
-
object.instance_variable_set('@mod_id', record.mod_id)
|
17
|
-
object.instance_variable_set('@portals', record.portals)
|
18
|
-
|
19
|
-
record.keys.each do |fm_field_name|
|
20
|
-
# record.keys are all lowercase
|
21
|
-
field = klass.find_field_by_name(fm_field_name)
|
22
|
-
next unless field
|
23
|
-
|
24
|
-
# Because we are using ActiveModel::Dirty, so we hydrate directly.
|
25
|
-
object.attributes[field.name] = field.coerce(record[fm_field_name])
|
26
|
-
end
|
27
|
-
|
28
|
-
models << object
|
12
|
+
models << build(record, klass.new)
|
29
13
|
end
|
30
14
|
|
31
15
|
models
|
32
16
|
end
|
33
17
|
|
34
|
-
def
|
35
|
-
record = resultset.first
|
36
|
-
object = klass.new
|
37
|
-
|
18
|
+
def build(record, object)
|
38
19
|
object.instance_variable_set('@new_record', false)
|
39
20
|
object.instance_variable_set('@record_id', record.record_id)
|
40
21
|
object.instance_variable_set('@mod_id', record.mod_id)
|
@@ -42,10 +23,10 @@ module Filemaker
|
|
42
23
|
|
43
24
|
record.keys.each do |fm_field_name|
|
44
25
|
# record.keys are all lowercase
|
45
|
-
field =
|
26
|
+
field = object.class.find_field_by_name(fm_field_name)
|
46
27
|
next unless field
|
47
28
|
|
48
|
-
object.
|
29
|
+
object.attributes[field.name] = field.coerce(record[fm_field_name])
|
49
30
|
end
|
50
31
|
|
51
32
|
object
|
@@ -91,20 +91,7 @@ module Filemaker
|
|
91
91
|
|
92
92
|
# If you have calculated field from FileMaker, it will be replaced.
|
93
93
|
def replace_new_data(resultset)
|
94
|
-
|
95
|
-
|
96
|
-
@new_record = false
|
97
|
-
@record_id = record.record_id
|
98
|
-
@mod_id = record.mod_id
|
99
|
-
|
100
|
-
record.keys.each do |fm_field_name|
|
101
|
-
# record.keys are all lowercase
|
102
|
-
field = self.class.find_field_by_name(fm_field_name)
|
103
|
-
next unless field
|
104
|
-
|
105
|
-
# Because we are using ActiveModel::Dirty, so we hydrate directly.
|
106
|
-
attributes[field.name] = field.coerce(record[fm_field_name])
|
107
|
-
end
|
94
|
+
FileMaker::Model::Builder.build(resultset.first, self)
|
108
95
|
end
|
109
96
|
end
|
110
97
|
end
|
@@ -21,6 +21,10 @@ module Filemaker
|
|
21
21
|
if key_value.blank?
|
22
22
|
@target = nil
|
23
23
|
else
|
24
|
+
# Single `=` match whole word or (match empty)
|
25
|
+
# Double `==` match entire field
|
26
|
+
# If the field value contains underscore or space like 'FM_notified'
|
27
|
+
# or 'FM notified', a single `=` may not match correctly.
|
24
28
|
@target = target_class.where(reference_key => "=#{key_value}").first
|
25
29
|
end
|
26
30
|
end
|
@@ -70,6 +70,10 @@ module Filemaker
|
|
70
70
|
if key_value.blank?
|
71
71
|
@target = nil # Or should we return empty array?
|
72
72
|
else
|
73
|
+
# Single `=` match whole word or (match empty)
|
74
|
+
# Double `==` match entire field
|
75
|
+
# If the field value contains underscore or space like 'FM_notified'
|
76
|
+
# or 'FM notified', a single `=` may not match correctly.
|
73
77
|
@target = target_class.where(reference_key => "=#{key_value}")
|
74
78
|
end
|
75
79
|
end
|
data/lib/filemaker/version.rb
CHANGED
@@ -0,0 +1,43 @@
|
|
1
|
+
describe Filemaker::Model::Builder do
|
2
|
+
|
3
|
+
let(:model) { Job }
|
4
|
+
let(:server) { Object.new }
|
5
|
+
let(:xml) { import_xml_as_string('jobs.xml') }
|
6
|
+
let(:resultset) { Filemaker::Resultset.new(server, xml) }
|
7
|
+
|
8
|
+
context '.build' do
|
9
|
+
|
10
|
+
let(:subject) {
|
11
|
+
Filemaker::Model::Builder.build(resultset.first, model.new)
|
12
|
+
}
|
13
|
+
|
14
|
+
it 'has portals' do
|
15
|
+
expect(subject.portals.keys).to eq([])
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'has a status' do
|
19
|
+
expect(subject.status).to eq("open")
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'has an jdid' do
|
23
|
+
expect(subject.jdid).to eq("JID1122")
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'has a modify_date' do
|
27
|
+
expect(subject.modify_date).to eq(Date.parse('2014-08-12'))
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
context '.collection' do
|
32
|
+
|
33
|
+
let(:subject) {
|
34
|
+
Filemaker::Model::Builder.collection(resultset, model)
|
35
|
+
}
|
36
|
+
|
37
|
+
it 'is an array of Jobs' do
|
38
|
+
subject.each do |job|
|
39
|
+
expect(job.class).to be(model)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
data/spec/support/models.rb
CHANGED
@@ -18,6 +18,18 @@ class Post
|
|
18
18
|
string :candidate_id, :email
|
19
19
|
end
|
20
20
|
|
21
|
+
class Job
|
22
|
+
include Filemaker::Model
|
23
|
+
|
24
|
+
database :jobs
|
25
|
+
layout :jobs
|
26
|
+
|
27
|
+
string :status
|
28
|
+
string :jdid, fm_name: 'JDID'
|
29
|
+
date :modify_date, fm_name: 'modify date'
|
30
|
+
|
31
|
+
end
|
32
|
+
|
21
33
|
class MyModel
|
22
34
|
include Filemaker::Model
|
23
35
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: filemaker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- mech
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-03-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -203,6 +203,7 @@ files:
|
|
203
203
|
- spec/filemaker/error_spec.rb
|
204
204
|
- spec/filemaker/layout_spec.rb
|
205
205
|
- spec/filemaker/metadata/field_spec.rb
|
206
|
+
- spec/filemaker/model/builder_spec.rb
|
206
207
|
- spec/filemaker/model/criteria_spec.rb
|
207
208
|
- spec/filemaker/model/relations_spec.rb
|
208
209
|
- spec/filemaker/model_spec.rb
|
@@ -242,7 +243,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
242
243
|
version: '0'
|
243
244
|
requirements: []
|
244
245
|
rubyforge_project:
|
245
|
-
rubygems_version: 2.4.
|
246
|
+
rubygems_version: 2.4.6
|
246
247
|
signing_key:
|
247
248
|
specification_version: 4
|
248
249
|
summary: A Ruby wrapper to FileMaker XML API.
|
@@ -252,6 +253,7 @@ test_files:
|
|
252
253
|
- spec/filemaker/error_spec.rb
|
253
254
|
- spec/filemaker/layout_spec.rb
|
254
255
|
- spec/filemaker/metadata/field_spec.rb
|
256
|
+
- spec/filemaker/model/builder_spec.rb
|
255
257
|
- spec/filemaker/model/criteria_spec.rb
|
256
258
|
- spec/filemaker/model/relations_spec.rb
|
257
259
|
- spec/filemaker/model_spec.rb
|