ember_data_active_model_parser 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 31076fab33df0652b49cf8644852ed956e01eefe
4
- data.tar.gz: b6899da4c8032f5ff839d015c940d6ad0b229dad
3
+ metadata.gz: 28d493d89fdd39959771b48b3adffbdd2ce42e95
4
+ data.tar.gz: 344f3ebeea6af632994cee0da8a6318948422373
5
5
  SHA512:
6
- metadata.gz: 3f99b3e115f000e221f71e6563a2ce51f6cdddfc79ce1e961f5a9f0bfe612fe67bce76f6525f31fe555de267a84d283ca6fd59d79feb793bab446b18909b2efa
7
- data.tar.gz: 052262df9b34f76a0ed2e38b21ecb4514f5eeadaa416f0470ed5154ebe4ca0ac55b0d6f20bdbd2b845a87ceee08f0ebd117015c13d397b07c588cdf46ef124ad
6
+ metadata.gz: 5101a5950f89c699c79f43639baecdfe9759817033c93cdc1ec8a0cbbffe0e6253c0af4251ecf7e44a0ef961c702910f1ca8270c9066b9bc82699a12478b03ec
7
+ data.tar.gz: b7ee138fc70ff60673febbbd50d81503ede74a9e7447feff1ca7e9c9c73a5f8bc726cc80a712d2c486db728913572e58c40a19aadf405bfbc7e9967f098a4f77
data/.travis.yml ADDED
@@ -0,0 +1,8 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.0
4
+ - 2.1
5
+ - 2.2
6
+ script:
7
+ - bundle exec rspec
8
+
data/README.md CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
  This is a middleware for [Her](http://her-rb.org/) which makes it possible to consume API endpoints used by ember-data's [ActiveModelAdapter](http://emberjs.com/api/data/classes/DS.ActiveModelAdapter.html). You can read more about the data format in the ember-data's [docs](http://emberjs.com/api/data/classes/DS.ActiveModelAdapter.html)
4
4
 
5
+ ## Status
6
+
7
+ [![Build status](https://travis-ci.org/valo/ember_data_active_model_parser.svg)](https://travis-ci.org/valo/ember_data_active_model_parser)
8
+
5
9
  ## Installation
6
10
 
7
11
  Add this line to your application's Gemfile:
@@ -28,7 +28,7 @@ module EmberDataActiveModelParser
28
28
  def walk_hash(hash)
29
29
  hash.keys.each do |key|
30
30
  if association_ids_key(key, hash[key])
31
- handle_association_ids(hash, hash.delete(key), association_name(key))
31
+ handle_association_ids(hash, hash[key], association_name(key))
32
32
  end
33
33
  end
34
34
  end
@@ -42,14 +42,14 @@ module EmberDataActiveModelParser
42
42
  }
43
43
  }
44
44
  when Fixnum
45
- hash[association_name.to_sym] = {
46
- association_name.to_sym => association_array(association_name).find { |association_item| association_item[:id] == association_ids }
47
- }
45
+ hash[association_name.to_sym] = association_array(association_name).find { |association_item| association_item[:id] == association_ids }
46
+ when nil
47
+ hash[association_name.to_sym] = nil
48
48
  end
49
49
  end
50
50
 
51
51
  def association_ids_key(key, value)
52
- key.to_s =~ /(.+)_id(s?)$/ && association_array(association_name(key)) && (value.is_a?(Array) || value.is_a?(Fixnum))
52
+ key.to_s =~ /(.+)_id(s?)$/ && association_array(association_name(key)) && (value.is_a?(Array) || value.is_a?(Fixnum) || value.nil?)
53
53
  end
54
54
 
55
55
  def association_name(key)
@@ -1,3 +1,3 @@
1
1
  module EmberDataActiveModelParser
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -26,7 +26,7 @@ describe EmberDataActiveModelParser::EmbedAssociations do
26
26
  end
27
27
  let(:expected_json) do
28
28
  {
29
- project: { id: 1, name: "Shop list", tasks: { tasks: tasks } },
29
+ project: { id: 1, name: "Shop list", tasks: { tasks: tasks }, task_ids: [1,2,3] },
30
30
  tasks: tasks
31
31
  }
32
32
  end
@@ -79,22 +79,25 @@ describe EmberDataActiveModelParser::EmbedAssociations do
79
79
  [{
80
80
  id: 1,
81
81
  name: "Milk",
82
- project: { project: projects[0] }
82
+ project: projects[0],
83
+ project_id: projects[0][:id]
83
84
  },
84
85
  {
85
86
  id: 2,
86
87
  name: "Bread",
87
- project: { project: projects[0] }
88
+ project: projects[0],
89
+ project_id: projects[0][:id]
88
90
  },
89
91
  {
90
92
  id: 3,
91
93
  name: "Butter",
92
- project: { project: projects[1] }
94
+ project: projects[1],
95
+ project_id: projects[1][:id]
93
96
  }]
94
97
  end
95
98
 
96
99
  let(:expected_projects) do
97
- [{ id: 1, name: "Shop list", tasks: { tasks: expected_tasks[0, 2] } }, { id: 2, name: "Other Shop list", tasks: { tasks: expected_tasks[2, 3] } }]
100
+ [{ id: 1, name: "Shop list", tasks: { tasks: expected_tasks[0, 2] }, task_ids: [1,2] }, { id: 2, name: "Other Shop list", tasks: { tasks: expected_tasks[2, 3] }, task_ids: [3] }]
98
101
  end
99
102
 
100
103
  let(:expected_json) do
@@ -110,7 +113,6 @@ describe EmberDataActiveModelParser::EmbedAssociations do
110
113
  end
111
114
  end
112
115
 
113
-
114
116
  context "with an object with some associations that have associations" do
115
117
  let(:tasks) do
116
118
  [{
@@ -122,6 +124,11 @@ describe EmberDataActiveModelParser::EmbedAssociations do
122
124
  id: 2,
123
125
  name: "Bread",
124
126
  author_id: 2
127
+ },
128
+ {
129
+ id: 3,
130
+ name: "Cheese",
131
+ author_id: nil
125
132
  }]
126
133
  end
127
134
 
@@ -129,12 +136,20 @@ describe EmberDataActiveModelParser::EmbedAssociations do
129
136
  [{
130
137
  id: 1,
131
138
  name: "Milk",
132
- author: { author: authors[0] }
139
+ author: authors[0],
140
+ author_id: 1
133
141
  },
134
142
  {
135
143
  id: 2,
136
144
  name: "Bread",
137
- author: { author: authors[1] }
145
+ author: authors[1],
146
+ author_id: 2
147
+ },
148
+ {
149
+ id: 3,
150
+ name: "Cheese",
151
+ author: nil,
152
+ author_id: nil
138
153
  }]
139
154
  end
140
155
 
@@ -151,14 +166,14 @@ describe EmberDataActiveModelParser::EmbedAssociations do
151
166
 
152
167
  let(:json) do
153
168
  {
154
- project: { id: 1, name: "Shop list", task_ids: [1,2] },
169
+ project: { id: 1, name: "Shop list", task_ids: [1, 2, 3] },
155
170
  tasks: tasks,
156
171
  authors: authors
157
172
  }
158
173
  end
159
174
  let(:expected_json) do
160
175
  {
161
- project: { id: 1, name: "Shop list", tasks: { tasks: expected_tasks } },
176
+ project: { id: 1, name: "Shop list", tasks: { tasks: expected_tasks }, task_ids: [1, 2, 3] },
162
177
  tasks: expected_tasks,
163
178
  authors: authors
164
179
  }
@@ -0,0 +1,85 @@
1
+ require 'spec_helper'
2
+ require 'her'
3
+ require 'active_support/core_ext/object/json'
4
+
5
+ class Project
6
+ include Her::Model
7
+
8
+ parse_root_in_json true, format: :active_model_serializers
9
+
10
+ has_many :tasks
11
+ has_one :organization
12
+ end
13
+
14
+ class Task
15
+ include Her::Model
16
+
17
+ parse_root_in_json true, format: :active_model_serializers
18
+ end
19
+
20
+ class Organization
21
+ include Her::Model
22
+
23
+ parse_root_in_json true, format: :active_model_serializers
24
+ end
25
+
26
+
27
+ describe "Parsing" do
28
+ let(:tasks) do
29
+ [{
30
+ id: 1,
31
+ name: "Milk",
32
+ },
33
+ {
34
+ id: 2,
35
+ name: "Bread"
36
+ },
37
+ {
38
+ id: 3,
39
+ name: "Butter"
40
+ }]
41
+ end
42
+
43
+ let(:organizations) do
44
+ [{
45
+ id: 1,
46
+ name: "ACME Inc."
47
+ }]
48
+ end
49
+
50
+ let(:project_response) do
51
+ {
52
+ project: { id: 1, name: "Shop list", task_ids: [1,2,3], organization_id: 1 },
53
+ tasks: tasks,
54
+ organizations: organizations
55
+ }.to_json
56
+ end
57
+
58
+ before do
59
+ stub_api_for(Project) do |stub|
60
+ stub.get("/projects/1") { |env| [200, {}, project_response] }
61
+ end
62
+ stub_api_for(Organization) { }
63
+ stub_api_for(Task) { }
64
+ end
65
+
66
+ describe :find do
67
+ let(:project) { Project.find(1) }
68
+
69
+ it "has an array of tasks" do
70
+ expect(project.tasks).to be_an(Array)
71
+ end
72
+
73
+ it "has the correct number of tasks" do
74
+ expect(project.tasks.length).to eq(tasks.length)
75
+ end
76
+
77
+ it "has an organization" do
78
+ expect(project.organization).to be_an(Organization)
79
+ end
80
+
81
+ it "assigns the correct organization" do
82
+ expect(project.organization.id).to eq(organizations[0][:id])
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,15 @@
1
+ # spec/spec_helper.rb
2
+ RSpec.configure do |config|
3
+ config.include(Module.new do
4
+ def stub_api_for(klass)
5
+ klass.use_api (api = Her::API.new)
6
+
7
+ # Here, you would customize this for your own API (URL, middleware, etc)
8
+ # like you have done in your application’s initializer
9
+ api.setup url: "http://api.example.com" do |c|
10
+ c.use EmberDataActiveModelParser::Middleware
11
+ c.adapter(:test) { |s| yield(s) }
12
+ end
13
+ end
14
+ end)
15
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ember_data_active_model_parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Valentin Mihov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-17 00:00:00.000000000 Z
11
+ date: 2015-01-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: her
@@ -75,6 +75,7 @@ extensions: []
75
75
  extra_rdoc_files: []
76
76
  files:
77
77
  - ".gitignore"
78
+ - ".travis.yml"
78
79
  - Gemfile
79
80
  - LICENSE.txt
80
81
  - README.md
@@ -84,6 +85,8 @@ files:
84
85
  - lib/ember_data_active_model_parser/embed_associations.rb
85
86
  - lib/ember_data_active_model_parser/version.rb
86
87
  - spec/embed_associations_spec.rb
88
+ - spec/her_parsing_spec.rb
89
+ - spec/spec_helper.rb
87
90
  homepage: https://github.com/valo/ember_data_active_model_parser
88
91
  licenses:
89
92
  - MIT
@@ -110,3 +113,5 @@ specification_version: 4
110
113
  summary: A parser for Her compatible with ember-data's active_model_serializers format
111
114
  test_files:
112
115
  - spec/embed_associations_spec.rb
116
+ - spec/her_parsing_spec.rb
117
+ - spec/spec_helper.rb