kartograph 0.0.8 → 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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4b117d28ec0561cefabaf740af34ebfb3cf48a68
4
- data.tar.gz: 8874d274b2b788ebbd2c0e79a748c29cdd226e25
3
+ metadata.gz: 0295131c24571bb5b97074b8c6ddb293d6e6e5c5
4
+ data.tar.gz: c54a19d0f60e9671b01f46dc7c3e22e9336f4a1d
5
5
  SHA512:
6
- metadata.gz: b36df369277c0088da9f2fa895ef0ed1640a3c369beab8fc8286480c5f47bc3b98a5fe5e62a19621fc60a5372519df07336a98ce5b1135c06c6c041254709e57
7
- data.tar.gz: ec90464e0b3402ac70249f44d96d5a78f19899c681674cb911043bbbc6b4e607eabaa1db7b03b9d5b590330d6050fedd7698caf27fa4450ad8a66b58bdf8cf00
6
+ metadata.gz: 1f9810e797d94884d70753280442945dd1c8a05fc956d0e545e81fed318fdf087468ad315b60ecc98a8bbd3967f8ad82a0234ace82b75ace8b1e9146f5e3c1d7
7
+ data.tar.gz: 31cd1b4efc22648129ee836936bd90e42ee428ae351526784ae3e307d7148e473558a3982768b8d9137e530d08a50622525410a3d40b5912cc4f1615b587276f
data/.gitignore CHANGED
@@ -20,3 +20,4 @@ tmp
20
20
  *.o
21
21
  *.a
22
22
  mkmf.log
23
+ .pairs
data/README.md CHANGED
@@ -36,6 +36,17 @@ user = User.new(name: 'Bobby Tables')
36
36
  json_for_create = UserMapping.representation_for(:create, user)
37
37
  ```
38
38
 
39
+ ### Rendering Collections as JSON
40
+
41
+ ```ruby
42
+ user = User.new(name: 'Bobby Tables')
43
+ users = Array.new(10, user)
44
+
45
+ json = UserMapping.represent_collection_for(:read, users)
46
+ ```
47
+
48
+ ---
49
+
39
50
  Some API's will give you the created resource back as JSON as well on a successful create. For that, you may do something like this:
40
51
 
41
52
  ```ruby
@@ -93,7 +104,7 @@ class UserMapping
93
104
 
94
105
  kartograph do
95
106
  mapping User
96
- root_key singular: 'user', plural: 'users' scopes: [:read]
107
+ root_key singular: 'user', plural: 'users', scopes: [:read]
97
108
  property :id, scopes: [:read]
98
109
  end
99
110
  end
@@ -0,0 +1,41 @@
1
+ require 'kartograph'
2
+ require 'pp'
3
+
4
+ class User < Struct.new(:id, :name, :comments)
5
+ end
6
+
7
+ class Comment < Struct.new(:id, :text)
8
+ end
9
+
10
+ class UserMapping
11
+ include Kartograph::DSL
12
+
13
+ kartograph do
14
+ mapping User
15
+
16
+ property :id, scopes: [:read]
17
+ property :name, scopes: [:read, :create]
18
+
19
+ property :comments, plural: true, scopes: [:read] do
20
+ mapping Comment
21
+
22
+ property :id, scopes: [:read]
23
+ property :text, scopes: [:read, :create]
24
+ end
25
+ end
26
+ end
27
+
28
+ user = User.new(1, 'he@he.com')
29
+ comment = Comment.new(12, 'aksjdfhasjkdfh')
30
+
31
+ user.comments = Array.new(3, comment)
32
+ users = Array.new(4, user)
33
+
34
+ json = UserMapping.represent_collection_for(:read, users)
35
+ puts "The JSON generated from that collection:"
36
+ puts json
37
+
38
+ users_again = UserMapping.extract_collection(json, :read)
39
+ puts "\n"
40
+ puts "And the JSON slurped back into an array:"
41
+ pp users_again
@@ -18,12 +18,15 @@ module Kartograph
18
18
  def representation_for(scope, object, dumper = JSON)
19
19
  drawed = Artist.new(object, @kartograph_map).draw(scope)
20
20
 
21
- retrieve_root_key(scope, :singular) do |root_key|
22
- # Reassign drawed if a root key exists
23
- drawed = { root_key => drawed }
21
+ dumper.dump(prepend_root_key(scope, :singular, drawed))
22
+ end
23
+
24
+ def represent_collection_for(scope, objects, dumper = JSON)
25
+ drawed_objects = objects.map do |object|
26
+ Artist.new(object, @kartograph_map).draw(scope)
24
27
  end
25
28
 
26
- dumper.dump(drawed)
29
+ dumper.dump(prepend_root_key(scope, :plural, drawed_objects))
27
30
  end
28
31
 
29
32
  def extract_single(content, scope, loader = JSON)
@@ -51,12 +54,21 @@ module Kartograph
51
54
  end
52
55
 
53
56
  private
57
+ def prepend_root_key(scope, plurality, payload)
58
+ retrieve_root_key(scope, plurality) do |root_key|
59
+ # Reassign drawed if a root key exists
60
+ payload = { root_key => payload }
61
+ end
62
+
63
+ payload
64
+ end
54
65
 
55
66
  def retrieve_root_key(scope, type, &block)
56
67
  if root_key = @kartograph_map.root_key_for(scope, type)
57
68
  yield root_key
58
69
  end
59
70
  end
71
+
60
72
  end
61
73
  end
62
74
  end
@@ -1,4 +1,4 @@
1
1
  module Kartograph
2
- VERSION = "0.0.8"
2
+ VERSION = "0.1.0"
3
3
  end
4
4
 
@@ -48,6 +48,49 @@ describe Kartograph::DSL do
48
48
  end
49
49
  end
50
50
 
51
+ describe '.represent_collection_for' do
52
+ include_context 'DSL Objects'
53
+
54
+ let(:users) { Array.new(3, object) }
55
+
56
+ subject(:parsed) do
57
+ json = mapped.represent_collection_for(:read, users)
58
+ JSON.parse(json)
59
+ end
60
+
61
+ it 'returns the objects as a collection' do
62
+ json = mapped.represent_collection_for(:read, users)
63
+ parsed = JSON.parse(json)
64
+
65
+ expect(parsed).to be_an(Array)
66
+ expect(parsed.size).to be(3)
67
+
68
+ expect(parsed[0]['id']).to eq(users[0].id)
69
+ expect(parsed[0]['name']).to eq(users[0].name)
70
+ expect(parsed[1]['id']).to eq(users[1].id)
71
+ expect(parsed[1]['name']).to eq(users[1].name)
72
+ end
73
+
74
+ context 'with a root key' do
75
+ it "includes the root key" do
76
+ root_key_name = "the_root_key"
77
+
78
+ mapped.kartograph do
79
+ root_key plural: root_key_name, scopes: [:read]
80
+ end
81
+
82
+ expect(parsed).to be_an(Hash)
83
+ expect(parsed.keys.first).to eq(root_key_name)
84
+
85
+ parsed_array = parsed[root_key_name]
86
+ expect(parsed_array[0]['id']).to eq(users[0].id)
87
+ expect(parsed_array[0]['name']).to eq(users[0].name)
88
+ expect(parsed_array[1]['id']).to eq(users[1].id)
89
+ expect(parsed_array[1]['name']).to eq(users[1].name)
90
+ end
91
+ end
92
+ end
93
+
51
94
  describe '.extract_single' do
52
95
  include_context 'DSL Objects'
53
96
  let(:json) do
@@ -1 +1,2 @@
1
- DummyUser = Struct.new(:id, :name, :comment, :email)
1
+ class DummyUser < Struct.new(:id, :name, :comment, :email)
2
+ end
metadata CHANGED
@@ -1,69 +1,69 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kartograph
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Ross
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-13 00:00:00.000000000 Z
11
+ date: 2014-10-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.6'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.6'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ~>
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
47
  version: 3.0.0
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ~>
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: 3.0.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: pry
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '>='
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '>='
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  description: Kartograph makes it easy to generate and convert JSON. It's intention
@@ -75,13 +75,14 @@ executables: []
75
75
  extensions: []
76
76
  extra_rdoc_files: []
77
77
  files:
78
- - .gitignore
79
- - .rspec
80
- - .travis.yml
78
+ - ".gitignore"
79
+ - ".rspec"
80
+ - ".travis.yml"
81
81
  - Gemfile
82
82
  - LICENSE.txt
83
83
  - README.md
84
84
  - Rakefile
85
+ - examples/collection_representation.rb
85
86
  - examples/domains.rb
86
87
  - examples/representation_for.rb
87
88
  - kartograph.gemspec
@@ -117,12 +118,12 @@ require_paths:
117
118
  - lib
118
119
  required_ruby_version: !ruby/object:Gem::Requirement
119
120
  requirements:
120
- - - '>='
121
+ - - ">="
121
122
  - !ruby/object:Gem::Version
122
123
  version: '0'
123
124
  required_rubygems_version: !ruby/object:Gem::Requirement
124
125
  requirements:
125
- - - '>='
126
+ - - ">="
126
127
  - !ruby/object:Gem::Version
127
128
  version: '0'
128
129
  requirements: []