filemaker 0.0.10 → 0.0.11
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.
- 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
|