json-response 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -2,19 +2,42 @@ require "ostruct"
2
2
  require "json"
3
3
 
4
4
  module JSONResponse
5
- VERSION = "0.0.1"
5
+ VERSION = "0.0.2"
6
6
  extend self
7
7
 
8
- def define(name)
9
- yield (registry[name] = OpenStruct.new)
8
+ def counters
9
+ @counters ||= Hash.new(0)
10
+ end
11
+
12
+ def next(name)
13
+ counters[name] += 1
14
+ end
15
+
16
+ class JSONStruct < OpenStruct
17
+ def initialize(&block)
18
+ super
19
+ @block = block
20
+ end
21
+
22
+ def next(name)
23
+ JSONResponse.next(name)
24
+ end
25
+
26
+ def build
27
+ self.tap { |s| @block.call(s) }.marshal_dump
28
+ end
29
+ end
30
+
31
+ def define(name, &block)
32
+ registry[name] = JSONStruct.new(&block)
10
33
  end
11
34
 
12
35
  def build(name, options={})
13
- JSON.generate(registry[name].marshal_dump.merge(options))
36
+ JSON.generate(registry[name].build.merge(options))
14
37
  end
15
38
 
16
39
  def attributes_for(name, options={})
17
- registry[name].marshal_dump.merge(options)
40
+ registry[name].build.merge(options)
18
41
  end
19
42
 
20
43
  private
@@ -2,14 +2,20 @@ require File.dirname(__FILE__) + '/spec_helper'
2
2
 
3
3
  describe JSONResponse, ".build" do
4
4
  before do
5
- JSONResponse.define(:person) { |p| p.name = "Dave" }
5
+ JSONResponse.define(:person) { |p| p.id = JSONResponse.next(:id); p.name = "Dave" }
6
6
  end
7
7
 
8
8
  it "builds json strings from definitions" do
9
- JSONResponse.build(:person).should == "{\"name\":\"Dave\"}"
9
+ JSONResponse.build(:person).should == '{"id":1,"name":"Dave"}'
10
10
  end
11
11
 
12
12
  it "builds a hash of attributes from definitions" do
13
- JSONResponse.attributes_for(:person).should == {name: "Dave"}
13
+ JSONResponse.attributes_for(:person).should == {id: 2, name: "Dave"}
14
+ end
15
+
16
+ it "supports counters" do
17
+ count = JSONResponse.counters[:id]
18
+ JSONResponse.attributes_for(:person)[:id].should == count + 1
19
+ JSONResponse.attributes_for(:person)[:id].should == count + 2
14
20
  end
15
21
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: json-response
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
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: 2011-08-11 00:00:00.000000000Z
12
+ date: 2011-11-29 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &2152529240 !ruby/object:Gem::Requirement
16
+ requirement: &2157080820 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,7 +21,7 @@ dependencies:
21
21
  version: 2.6.0
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *2152529240
24
+ version_requirements: *2157080820
25
25
  description: Define factories to be built as JSON.
26
26
  email:
27
27
  - me@mattenoble.com
@@ -56,10 +56,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
56
56
  version: '0'
57
57
  requirements: []
58
58
  rubyforge_project:
59
- rubygems_version: 1.8.7
59
+ rubygems_version: 1.8.10
60
60
  signing_key:
61
61
  specification_version: 3
62
62
  summary: Define factories to be built as JSON.
63
63
  test_files:
64
64
  - spec/json_response_spec.rb
65
65
  - spec/spec_helper.rb
66
+ has_rdoc: