jsonrpc2 0.0.5 → 0.0.6

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.
@@ -1,4 +1,5 @@
1
1
  require 'cgi'
2
+ require 'time'
2
3
  module JSONRPC2
3
4
  # HTML output helpers for browseable API interface
4
5
  module HTML
@@ -100,6 +101,12 @@ HTML5
100
101
  0
101
102
  when /^Array/
102
103
  []
104
+ when 'Time'
105
+ "00:00"
106
+ when 'DateTime'
107
+ Time.at(0).iso8601
108
+ when 'Date'
109
+ '1970-01-01'
103
110
  else
104
111
  {}
105
112
  end
@@ -1,3 +1,5 @@
1
+ require 'date'
2
+
1
3
  module JSONRPC2
2
4
  # Types are checked against textual descriptions of the contents:
3
5
  #
@@ -15,6 +17,9 @@ module JSONRPC2
15
17
  # * CustomType - A defined custom object type
16
18
  module Types
17
19
  module_function
20
+ DateTimeRegex = %r"([0-9]{4})(-([0-9]{2})(-([0-9]{2})(T([0-9]{2}):([0-9]{2})(:([0-9]{2})(\.([0-9]+))?)?(Z|(([-+])([0-9]{2}):([0-9]{2})))?)?)?)?"
21
+ DateRegex = %r'\A\d{4}-\d{2}-\d{2}\z'
22
+ TimeRegex = %r'\A\d{2}:\d{2}(?:\.\d{1,4})?\z'
18
23
 
19
24
  # Checks that object is of given type (and that any custom types
20
25
  # comply with interface)
@@ -45,6 +50,12 @@ module JSONRPC2
45
50
  object.is_a?(Hash)
46
51
  when 'Array'
47
52
  object.is_a?(Array)
53
+ when 'Date'
54
+ object.is_a?(String) && DateRegex.match(object) || object.is_a?(Date)
55
+ when 'Time'
56
+ object.is_a?(String) && TimeRegex.match(object) || object.is_a?(Time)
57
+ when 'DateTime'
58
+ object.is_a?(String) && DateTimeRegex.match(object) || object.is_a?(Time)
48
59
  when /\AArray\[(.*)\]\z/
49
60
  object.is_a?(Array) && object.all? { |value| valid?(interface, $1, value) }
50
61
  when 'Value', 'Any', 'void'
@@ -1,5 +1,5 @@
1
1
  # JSONRPC2 namespace module
2
2
  module JSONRPC2
3
3
  # Version
4
- VERSION = "0.0.5"
4
+ VERSION = "0.0.6"
5
5
  end
@@ -0,0 +1,28 @@
1
+ require 'test/unit'
2
+ $: << File.join(File.dirname(__FILE__),'../lib')
3
+ require 'jsonrpc2/types'
4
+
5
+ InterfaceTestContainer = Struct.new("InterfaceTestContainer", :types)
6
+
7
+ class TestTypes < Test::Unit::TestCase
8
+ def setup
9
+ complex = JSONRPC2::JsonObjectType.new('Complex1',[])
10
+ complex.string('field1', 'Field 1')
11
+
12
+ container = JSONRPC2::JsonObjectType.new('Container', [])
13
+ container.field('complex', 'Complex', 'Complex field')
14
+
15
+ container2 = JSONRPC2::JsonObjectType.new('Container2', [])
16
+ container2.field('complex', 'Array[Complex]', 'Complex fields')
17
+ @interface = InterfaceTestContainer.new('Complex' => complex, 'Container' => container, 'Container2' => container2)
18
+ end
19
+ def test_complex_types
20
+ assert(JSONRPC2::Types.valid?(@interface, 'Complex', {'field1' => "Foo"}))
21
+ assert(! JSONRPC2::Types.valid?(@interface, 'Complex', {'field1' => 3}))
22
+
23
+ assert(JSONRPC2::Types.valid?(@interface, 'Container', { 'complex' => { 'field1' => 'Foo' } }))
24
+
25
+ assert(JSONRPC2::Types.valid?(@interface, 'Container2', { 'complex' => [{ 'field1' => 'Foo' }] }))
26
+ assert(!JSONRPC2::Types.valid?(@interface, 'Container2', { 'complex' => [{ 'field1' => false }] }))
27
+ end
28
+ end
metadata CHANGED
@@ -1,124 +1,101 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: jsonrpc2
3
- version: !ruby/object:Gem::Version
4
- hash: 21
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.6
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 0
9
- - 5
10
- version: 0.0.5
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Geoff Youngs
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2012-07-19 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2012-08-24 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: httpclient
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
24
17
  none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- hash: 3
29
- segments:
30
- - 0
31
- version: "0"
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
32
22
  type: :runtime
33
- version_requirements: *id001
34
- - !ruby/object:Gem::Dependency
35
- name: json
36
23
  prerelease: false
37
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: json
32
+ requirement: !ruby/object:Gem::Requirement
38
33
  none: false
39
- requirements:
40
- - - ">="
41
- - !ruby/object:Gem::Version
42
- hash: 3
43
- segments:
44
- - 0
45
- version: "0"
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
46
38
  type: :runtime
47
- version_requirements: *id002
48
- - !ruby/object:Gem::Dependency
49
- name: RedCloth
50
39
  prerelease: false
51
- requirement: &id003 !ruby/object:Gem::Requirement
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: RedCloth
48
+ requirement: !ruby/object:Gem::Requirement
52
49
  none: false
53
- requirements:
54
- - - ">="
55
- - !ruby/object:Gem::Version
56
- hash: 3
57
- segments:
58
- - 0
59
- version: "0"
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
60
54
  type: :runtime
61
- version_requirements: *id003
62
- - !ruby/object:Gem::Dependency
63
- name: thor
64
55
  prerelease: false
65
- requirement: &id004 !ruby/object:Gem::Requirement
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: thor
64
+ requirement: !ruby/object:Gem::Requirement
66
65
  none: false
67
- requirements:
68
- - - ">="
69
- - !ruby/object:Gem::Version
70
- hash: 3
71
- segments:
72
- - 0
73
- version: "0"
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
74
70
  type: :runtime
75
- version_requirements: *id004
76
- description: |+
77
- == Description
78
-
79
- A Rack compatible JSON-RPC2 server domain specific language (DSL) - allows JSONRPC APIs to be
80
- defined as mountable Rack applications with inline documentation, authentication and type checking.
81
-
82
- e.g.
83
-
84
- class Calculator < JSONRPC2::Interface
85
- title "JSON-RPC2 Calculator"
86
- introduction "This interface allows basic maths calculations via JSON-RPC2"
87
- auth_with JSONRPC2::BasicAuth.new({'user' => 'secretword'})
88
-
89
- section 'Simple Ops' do
90
- desc 'Multiply two numbers'
91
- param 'a', 'Number', 'a'
92
- param 'b', 'Number', 'b'
93
- result 'Number', 'a * b'
94
- def mul args
95
- args['a'] * args['b']
96
- end
97
-
98
- desc 'Add numbers'
99
- example "Calculate 1 + 1 = 2", :params => { 'a' => 1, 'b' => 1}, :result => 2
100
-
101
- param 'a', 'Number', 'First number'
102
- param 'b', 'Number', 'Second number'
103
- optional 'c', 'Number', 'Third number'
104
- result 'Number', 'a + b + c'
105
- def sum args
106
- val = args['a'] + args['b']
107
- val += args['c'] if args['c']
108
- val
109
- end
110
- end
111
- end
112
-
113
- email:
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ description: ! "== Description\n\nA Rack compatible JSON-RPC2 server domain specific
79
+ language (DSL) - allows JSONRPC APIs to be \ndefined as mountable Rack applications
80
+ with inline documentation, authentication and type checking.\n\ne.g.\n\n class
81
+ Calculator < JSONRPC2::Interface\n title \"JSON-RPC2 Calculator\"\n introduction
82
+ \"This interface allows basic maths calculations via JSON-RPC2\"\n auth_with
83
+ JSONRPC2::BasicAuth.new({'user' => 'secretword'})\n\n section 'Simple Ops' do\n
84
+ \ desc 'Multiply two numbers'\n param 'a', 'Number', 'a'\n param
85
+ 'b', 'Number', 'b'\n result 'Number', 'a * b'\n def mul args\n args['a']
86
+ * args['b']\n end\n\n desc 'Add numbers'\n example \"Calculate
87
+ 1 + 1 = 2\", :params => { 'a' => 1, 'b' => 1}, :result => 2\n\n param 'a',
88
+ 'Number', 'First number'\n param 'b', 'Number', 'Second number'\n optional
89
+ 'c', 'Number', 'Third number'\n result 'Number', 'a + b + c'\n def
90
+ sum args\n val = args['a'] + args['b']\n val += args['c'] if args['c']\n
91
+ \ val\n end\n end\n end\n\n"
92
+ email:
114
93
  - git@intersect-uk.co.uk
115
- executables:
94
+ executables:
116
95
  - jsonrpc2
117
96
  extensions: []
118
-
119
97
  extra_rdoc_files: []
120
-
121
- files:
98
+ files:
122
99
  - .gitignore
123
100
  - Gemfile
124
101
  - README.markdown
@@ -135,39 +112,30 @@ files:
135
112
  - lib/jsonrpc2/textile.rb
136
113
  - lib/jsonrpc2/types.rb
137
114
  - lib/jsonrpc2/version.rb
115
+ - test/test_types.rb
138
116
  homepage: http://github.com/geoffyoungs/jsonrpc2
139
117
  licenses: []
140
-
141
118
  post_install_message:
142
119
  rdoc_options: []
143
-
144
- require_paths:
120
+ require_paths:
145
121
  - lib
146
- required_ruby_version: !ruby/object:Gem::Requirement
122
+ required_ruby_version: !ruby/object:Gem::Requirement
147
123
  none: false
148
- requirements:
149
- - - ">="
150
- - !ruby/object:Gem::Version
151
- hash: 3
152
- segments:
153
- - 0
154
- version: "0"
155
- required_rubygems_version: !ruby/object:Gem::Requirement
124
+ requirements:
125
+ - - ! '>='
126
+ - !ruby/object:Gem::Version
127
+ version: '0'
128
+ required_rubygems_version: !ruby/object:Gem::Requirement
156
129
  none: false
157
- requirements:
158
- - - ">="
159
- - !ruby/object:Gem::Version
160
- hash: 3
161
- segments:
162
- - 0
163
- version: "0"
130
+ requirements:
131
+ - - ! '>='
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
164
134
  requirements: []
165
-
166
135
  rubyforge_project:
167
- rubygems_version: 1.8.15
136
+ rubygems_version: 1.8.24
168
137
  signing_key:
169
138
  specification_version: 3
170
139
  summary: JSON-RPC2 server DSL
171
140
  test_files: []
172
-
173
141
  has_rdoc: