collection-json 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -2,3 +2,4 @@
2
2
  .bundle
3
3
  Gemfile.lock
4
4
  pkg/*
5
+ .rvmrc
@@ -27,6 +27,7 @@ module CollectionJSON
27
27
  end
28
28
  end
29
29
  end
30
+ add_find_method(name, opts[:find_method]) if opts.has_key?(:find_method)
30
31
  end
31
32
 
32
33
  def self.root_node(value = nil)
@@ -55,6 +56,17 @@ module CollectionJSON
55
56
  end
56
57
 
57
58
  private
59
+ def self.add_find_method(name, opts)
60
+ opts = {method_name: opts} unless opts.is_a?(Hash)
61
+ opts[:key] ||= 'rel'
62
+ define_method(opts[:method_name]) do |*args|
63
+ send(name).select do |element|
64
+ value = element.send opts[:key]
65
+ args.include? value
66
+ end.first
67
+ end
68
+ end
69
+
58
70
  def skip_value?(value)
59
71
  value.nil? || value.respond_to?(:length) && value.length == 0
60
72
  end
@@ -12,13 +12,15 @@ module CollectionJSON
12
12
  attribute :version
13
13
  attribute :links,
14
14
  transform: lambda { |links| links.each.map { |l| Link.from_hash(l) }},
15
- default: []
15
+ default: [],
16
+ find_method: :link
16
17
  attribute :items,
17
18
  transform: lambda { |items| items.each.map { |i| Item.from_hash(i) }},
18
19
  default: []
19
20
  attribute :queries,
20
21
  transform: lambda { |queries| queries.each.map { |q| Query.from_hash(q) }},
21
- default: []
22
+ default: [],
23
+ find_method: :query
22
24
  attribute :template, transform: lambda { |template| Template.from_hash(template) }
23
25
  attribute :error, transform: lambda { |error| Error.from_hash(error) }
24
26
  end
@@ -6,10 +6,12 @@ module CollectionJSON
6
6
  class Item < Attribute
7
7
  attribute :href, transform: URI
8
8
  attribute :data,
9
- transform: lambda { |data| data.each.map { |d| Data.from_hash(d) }},
10
- default: []
9
+ transform: lambda { |data| data.each.map{ |d| Data.from_hash(d) }},
10
+ default: [],
11
+ find_method: {method_name: :datum, key: 'name'}
11
12
  attribute :links,
12
- transform: lambda { |links| links.each.map { |l| Link.from_hash(l) }},
13
- default: []
13
+ transform: lambda { |links| links.each.map { |l| Link.from_hash(l) }},
14
+ default: [],
15
+ find_method: :link
14
16
  end
15
17
  end
@@ -8,8 +8,9 @@ module CollectionJSON
8
8
  attribute :name
9
9
  attribute :prompt
10
10
  attribute :data,
11
- transform: lambda { |data| data.each.map { |d| Data.from_hash(d) }},
12
- default: []
11
+ transform: lambda { |data| data.each.map { |d| Data.from_hash(d) }},
12
+ default: [],
13
+ find_method: {method_name: :datum, key: 'name'}
13
14
 
14
15
  def build(params = {})
15
16
  URI(href).tap do |uri|
@@ -3,8 +3,9 @@ require_relative 'data'
3
3
  module CollectionJSON
4
4
  class Template < Attribute
5
5
  attribute :data,
6
- transform: lambda { |data| data.each.map { |d| Data.from_hash(d) }},
7
- default: []
6
+ transform: lambda { |data| data.each.map { |d| Data.from_hash(d) }},
7
+ default: [],
8
+ find_method: {method_name: :datum, key: 'name'}
8
9
 
9
10
  def build(params = {})
10
11
  {'template' => Hash.new}.tap do |hash|
@@ -1,3 +1,3 @@
1
1
  module CollectionJSON
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.3"
3
3
  end
@@ -47,8 +47,10 @@ describe CollectionJSON do
47
47
 
48
48
  response.href.should eq('/friends/')
49
49
  response.links.first.href.should eq("/friends/rss")
50
+ response.link('feed').href.should eq("/friends/rss")
50
51
  response.items.length.should eq(3)
51
52
  response.items.first.data.length.should eq(2)
53
+ response.items.first.datum('full-name').value.should eq("J. Doe")
52
54
  response.items.first.links.length.should eq(2)
53
55
  response.items.first.href.class.should eq(String)
54
56
  response.template.data.length.should eq(4)
@@ -56,6 +58,7 @@ describe CollectionJSON do
56
58
  response.queries.first.href.should eq("/friends/search")
57
59
  response.queries.first.data.length.should eq(1)
58
60
  response.queries.first.data.first.name.should eq('search')
61
+ response.query('search').prompt.should eq('Search')
59
62
  end
60
63
  end
61
64
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: collection-json
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-20 00:00:00.000000000 Z
12
+ date: 2012-04-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &70128058457800 !ruby/object:Gem::Requirement
16
+ requirement: &70202255799500 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,7 +21,7 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70128058457800
24
+ version_requirements: *70202255799500
25
25
  description: Lightweight gem for building Collection+JSON responses.
26
26
  email:
27
27
  - sebastian@uprise.co.nz