restful_objects 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. checksums.yaml +8 -8
  2. data/README.md +3 -2
  3. data/bin/restful_server.rb +0 -0
  4. data/lib/restful_objects/action_description.rb +96 -82
  5. data/lib/restful_objects/action_list.rb +17 -17
  6. data/lib/restful_objects/collection_description.rb +47 -47
  7. data/lib/restful_objects/collection_list.rb +17 -17
  8. data/lib/restful_objects/domain_model.rb +83 -79
  9. data/lib/restful_objects/http_response.rb +11 -11
  10. data/lib/restful_objects/link_generator.rb +104 -104
  11. data/lib/restful_objects/object.rb +20 -20
  12. data/lib/restful_objects/object_actions.rb +134 -134
  13. data/lib/restful_objects/object_base.rb +10 -0
  14. data/lib/restful_objects/object_collections.rb +84 -84
  15. data/lib/restful_objects/object_list.rb +16 -16
  16. data/lib/restful_objects/object_macros.rb +35 -35
  17. data/lib/restful_objects/object_properties.rb +78 -78
  18. data/lib/restful_objects/parameter_description.rb +60 -60
  19. data/lib/restful_objects/parameter_description_list.rb +15 -15
  20. data/lib/restful_objects/property_description.rb +68 -68
  21. data/lib/restful_objects/property_list.rb +17 -17
  22. data/lib/restful_objects/service.rb +21 -21
  23. data/lib/restful_objects/service_list.rb +55 -55
  24. data/lib/restful_objects/type.rb +110 -110
  25. data/lib/restful_objects/type_list.rb +30 -30
  26. data/lib/restful_objects/user.rb +30 -30
  27. data/lib/restful_objects/version.rb +1 -1
  28. data/spec/integration/domain-types_actions_spec.rb +43 -43
  29. data/spec/integration/domain-types_collections_spec.rb +45 -45
  30. data/spec/integration/domain-types_properties_spec.rb +41 -41
  31. data/spec/integration/server-root_spec.rb +98 -98
  32. data/spec/spec_helper.rb +52 -52
  33. data/spec/unit/object_actions_spec.rb +380 -380
  34. data/spec/unit/object_collections_spec.rb +190 -190
  35. data/spec/unit/object_properties_spec.rb +215 -206
  36. data/spec/unit/object_spec.rb +228 -228
  37. data/spec/unit/service_spec.rb +125 -125
  38. data/spec/unit/type_list_spec.rb +37 -37
  39. metadata +2 -2
@@ -1,60 +1,60 @@
1
- module RestfulObjects
2
- class ParameterDescription
3
- include LinkGenerator
4
-
5
- attr_reader :id, :name, :number, :kind_type, :type
6
- attr_accessor :friendly_name, :description, :optional, :max_length, :pattern, :format
7
-
8
- def initialize(id, definition, number)
9
- @id = id
10
- @name = id
11
-
12
- if definition.is_a? Array # [type, options]
13
- if [:string, :int, :decimal, :date, :blob].include?(definition.first) # scalar
14
- @kind_type = :scalar
15
- @type = definition.first
16
- elsif definition.first.is_a?(Class) # object type
17
- @kind_type = :object
18
- @type = definition.first.name
19
- elsif definition.first.is_a?(Strign) # object type
20
- @kind_type = :object
21
- @type = definition.first
22
- else
23
- raise "unssuported parameter definition type #{definition.class}"
24
- end
25
- options = definition.last
26
- elsif definition.is_a? Symbol # scalar type
27
- @kind_type = :scalar
28
- @type = definition
29
- raise "result type for scalar '#{@type}' unssuported" if not [:string, :int, :decimal, :date, :blob].include?(@type)
30
- elsif definition.is_a? String # object type
31
- @kind_type = :object
32
- @type = definition
33
- elsif definition.is_a? Class # object type
34
- @kind_type = :object
35
- @type = definition.to_s
36
- else
37
- raise "unssuported parameter definition type #{definition.class}"
38
- end
39
-
40
- options ||= {}
41
- @number = options[:number] || number
42
- @friendly_name = options[:friendly_name] || id
43
- @description = options[:description] || id
44
- @optional = options[:optional].nil? ? true : options[:optional]
45
- @max_length = options[:max_length]
46
- @pattern = options[:pattern]
47
- end
48
-
49
- def metadata
50
- result = { 'friendlyName' => friendly_name,
51
- 'description' => description,
52
- 'optional' => optional,
53
- 'returnType' => type }
54
- result['maxLength'] = max_length if max_length
55
- result['pattern'] = pattern if pattern
56
- result['format'] = format if format
57
- result
58
- end
59
- end
60
- end
1
+ module RestfulObjects
2
+ class ParameterDescription
3
+ include LinkGenerator
4
+
5
+ attr_reader :id, :name, :number, :kind_type, :type
6
+ attr_accessor :friendly_name, :description, :optional, :max_length, :pattern, :format
7
+
8
+ def initialize(id, definition, number)
9
+ @id = id
10
+ @name = id
11
+
12
+ if definition.is_a? Array # [type, options]
13
+ if [:string, :int, :decimal, :date, :blob].include?(definition.first) # scalar
14
+ @kind_type = :scalar
15
+ @type = definition.first
16
+ elsif definition.first.is_a?(Class) # object type
17
+ @kind_type = :object
18
+ @type = definition.first.name
19
+ elsif definition.first.is_a?(Strign) # object type
20
+ @kind_type = :object
21
+ @type = definition.first
22
+ else
23
+ raise "unssuported parameter definition type #{definition.class}"
24
+ end
25
+ options = definition.last
26
+ elsif definition.is_a? Symbol # scalar type
27
+ @kind_type = :scalar
28
+ @type = definition
29
+ raise "result type for scalar '#{@type}' unssuported" if not [:string, :int, :decimal, :date, :blob].include?(@type)
30
+ elsif definition.is_a? String # object type
31
+ @kind_type = :object
32
+ @type = definition
33
+ elsif definition.is_a? Class # object type
34
+ @kind_type = :object
35
+ @type = definition.to_s
36
+ else
37
+ raise "unssuported parameter definition type #{definition.class}"
38
+ end
39
+
40
+ options ||= {}
41
+ @number = options[:number] || number
42
+ @friendly_name = options[:friendly_name] || id
43
+ @description = options[:description] || id
44
+ @optional = options[:optional].nil? ? true : options[:optional]
45
+ @max_length = options[:max_length]
46
+ @pattern = options[:pattern]
47
+ end
48
+
49
+ def metadata
50
+ result = { 'friendlyName' => friendly_name,
51
+ 'description' => description,
52
+ 'optional' => optional,
53
+ 'returnType' => type }
54
+ result['maxLength'] = max_length if max_length
55
+ result['pattern'] = pattern if pattern
56
+ result['format'] = format if format
57
+ result
58
+ end
59
+ end
60
+ end
@@ -1,15 +1,15 @@
1
- module RestfulObjects
2
- class ParameterDescriptionList
3
- extend Forwardable
4
-
5
- def initialize
6
- @parameters = Hash.new
7
- end
8
-
9
- def add(id, definition)
10
- @parameters[id] = ParameterDescription.new(id, definition, count + 1)
11
- end
12
-
13
- def_delegators :@parameters, :[], :each, :include?, :count, :empty?
14
- end
15
- end
1
+ module RestfulObjects
2
+ class ParameterDescriptionList
3
+ extend Forwardable
4
+
5
+ def initialize
6
+ @parameters = Hash.new
7
+ end
8
+
9
+ def add(id, definition)
10
+ @parameters[id] = ParameterDescription.new(id, definition, count + 1)
11
+ end
12
+
13
+ def_delegators :@parameters, :[], :each, :include?, :count, :empty?
14
+ end
15
+ end
@@ -1,68 +1,68 @@
1
- module RestfulObjects
2
- class PropertyDescription
3
- include LinkGenerator
4
-
5
- attr_accessor :id, :domain_type, :return_type, :friendly_name, :description, :optional, :read_only, :member_order,
6
- :max_length, :disabled_reason, :pattern
7
-
8
- def initialize(id, domain_type, return_type, options)
9
- raise "property type #{return_type} usupported" if not [:string, :int, :decimal, :date, :blob].include?(return_type)
10
-
11
- @id = id
12
- @domain_type = domain_type
13
- @return_type = return_type
14
- @friendly_name = options[:friendly_name] || id
15
- @description = options[:description] || id
16
- @optional = options[:optional].nil? ? true : options[:optional]
17
- @read_only = options[:read_only].nil? ? false : options[:read_only]
18
- @member_order = options[:member_order] || 1
19
- @max_length = options[:max_length]
20
- @disabled_reason = options[:disabled_reason] || 'read-only property' if read_only
21
- @pattern = options[:pattern]
22
- end
23
-
24
- def get_representation
25
- representation = {
26
- 'id' => @id,
27
- 'optional' => optional,
28
- 'memberOrder' => @member_order,
29
- 'links' => [
30
- link_to(:self, "/domain-types/#{@domain_type}/properties/#{@id}", :property_description),
31
- link_to(:up, "/domain-types/#{@domain_type}", :domain_type),
32
- link_to(:return_type, "/domain-types/#{@return_type}", :domain_type)
33
- ],
34
- 'extensions' => {}
35
- }
36
-
37
- representation['friendlyName'] = friendly_name if friendly_name
38
- representation['description'] = description if description
39
-
40
- representation.to_json
41
- end
42
-
43
- def metadata
44
- result = { 'friendlyName' => friendly_name,
45
- 'description' => description,
46
- 'returnType' => return_type,
47
- 'format' => format,
48
- 'optional' => optional,
49
- 'memberOrder' => member_order }
50
- result['maxLength'] = max_length if max_length
51
- result['pattern'] = pattern if pattern
52
- result
53
- end
54
-
55
- def format
56
- case return_type
57
- when :string
58
- 'string'
59
- end
60
- end
61
-
62
- def get_value_as_json
63
- { 'id' =>
64
- { 'value' => '' }
65
- }.to_json
66
- end
67
- end
68
- end
1
+ module RestfulObjects
2
+ class PropertyDescription
3
+ include LinkGenerator
4
+
5
+ attr_accessor :id, :domain_type, :return_type, :friendly_name, :description, :optional, :read_only, :member_order,
6
+ :max_length, :disabled_reason, :pattern
7
+
8
+ def initialize(id, domain_type, return_type, options)
9
+ raise "property type #{return_type} usupported" if not [:string, :int, :bool, :decimal, :date, :blob].include?(return_type)
10
+
11
+ @id = id
12
+ @domain_type = domain_type
13
+ @return_type = return_type
14
+ @friendly_name = options[:friendly_name] || id
15
+ @description = options[:description] || id
16
+ @optional = options[:optional].nil? ? true : options[:optional]
17
+ @read_only = options[:read_only].nil? ? false : options[:read_only]
18
+ @member_order = options[:member_order] || 1
19
+ @max_length = options[:max_length]
20
+ @disabled_reason = options[:disabled_reason] || 'read-only property' if read_only
21
+ @pattern = options[:pattern]
22
+ end
23
+
24
+ def get_representation
25
+ representation = {
26
+ 'id' => @id,
27
+ 'optional' => optional,
28
+ 'memberOrder' => @member_order,
29
+ 'links' => [
30
+ link_to(:self, "/domain-types/#{@domain_type}/properties/#{@id}", :property_description),
31
+ link_to(:up, "/domain-types/#{@domain_type}", :domain_type),
32
+ link_to(:return_type, "/domain-types/#{@return_type}", :domain_type)
33
+ ],
34
+ 'extensions' => {}
35
+ }
36
+
37
+ representation['friendlyName'] = friendly_name if friendly_name
38
+ representation['description'] = description if description
39
+
40
+ representation.to_json
41
+ end
42
+
43
+ def metadata
44
+ result = { 'friendlyName' => friendly_name,
45
+ 'description' => description,
46
+ 'returnType' => return_type,
47
+ 'format' => format,
48
+ 'optional' => optional,
49
+ 'memberOrder' => member_order }
50
+ result['maxLength'] = max_length if max_length
51
+ result['pattern'] = pattern if pattern
52
+ result
53
+ end
54
+
55
+ def format
56
+ case return_type
57
+ when :string
58
+ 'string'
59
+ end
60
+ end
61
+
62
+ def get_value_as_json
63
+ { 'id' =>
64
+ { 'value' => '' }
65
+ }.to_json
66
+ end
67
+ end
68
+ end
@@ -1,17 +1,17 @@
1
- module RestfulObjects
2
- class PropertyList
3
- extend Forwardable
4
-
5
- def initialize(domain_type)
6
- @properties = Hash.new
7
- @domain_type = domain_type
8
- end
9
-
10
- def add(id, return_type, options = {})
11
- options[:member_order] ||= count + 1
12
- @properties[id] = PropertyDescription.new(id, @domain_type, return_type, options)
13
- end
14
-
15
- def_delegators :@properties, :[], :each, :include?, :count, :empty?
16
- end
17
- end
1
+ module RestfulObjects
2
+ class PropertyList
3
+ extend Forwardable
4
+
5
+ def initialize(domain_type)
6
+ @properties = Hash.new
7
+ @domain_type = domain_type
8
+ end
9
+
10
+ def add(id, return_type, options = {})
11
+ options[:member_order] ||= count + 1
12
+ @properties[id] = PropertyDescription.new(id, @domain_type, return_type, options)
13
+ end
14
+
15
+ def_delegators :@properties, :[], :each, :include?, :count, :empty?
16
+ end
17
+ end
@@ -1,21 +1,21 @@
1
- module RestfulObjects
2
- module Service
3
- include LinkGenerator
4
-
5
- def self.included(base)
6
- RestfulObjects::DomainModel.current.types.add(base.name)
7
-
8
- base.class_eval do
9
- extend ObjectMacros
10
- include ObjectBase
11
- include ObjectActions
12
-
13
- def rs_register_in_model
14
- # do_nothing
15
- end
16
- end
17
-
18
- RestfulObjects::DomainModel.current.services.register(base)
19
- end
20
- end
21
- end
1
+ module RestfulObjects
2
+ module Service
3
+ include LinkGenerator
4
+
5
+ def self.included(base)
6
+ RestfulObjects::DomainModel.current.types.add(base.name)
7
+
8
+ base.class_eval do
9
+ extend ObjectMacros
10
+ include ObjectBase
11
+ include ObjectActions
12
+
13
+ def rs_register_in_model
14
+ # do_nothing
15
+ end
16
+ end
17
+
18
+ RestfulObjects::DomainModel.current.services.register(base)
19
+ end
20
+ end
21
+ end
@@ -1,55 +1,55 @@
1
- module RestfulObjects
2
- class ServiceList
3
- extend Forwardable
4
- include LinkGenerator
5
-
6
- def initialize(base_url)
7
- @services = Hash.new
8
- @base_url = base_url
9
- end
10
-
11
- def register(service)
12
- raise 'service registration should be done with a class' if not service.is_a? Class
13
- @services[service.name] = service
14
- end
15
-
16
- def get_list
17
- representation = {
18
- 'links' => [
19
- link_to(:self, '/services', :services),
20
- link_to(:up, '/', :homepage),
21
- ],
22
- 'value' => generate_values,
23
- 'extensions' => { }
24
- }.to_json
25
- end
26
-
27
- def [](key)
28
- value = @services[key]
29
- if value.is_a? Class
30
- value = value.new
31
- @services[key] = value
32
- end
33
- value
34
- end
35
-
36
- def_delegators :@services, :each, :include?, :count, :empty?, :clear
37
-
38
- private
39
-
40
- def generate_values
41
- ensure_all_created
42
- values = []
43
- each do |name, service|
44
- element = link_to(:service, "/services/#{name}", :object, service_id: name)
45
- element['title'] = service.title
46
- values << element
47
- end
48
- values
49
- end
50
-
51
- def ensure_all_created
52
- @services.each { |name, value| @services[name] = value.new if value.is_a? Class }
53
- end
54
- end
55
- end
1
+ module RestfulObjects
2
+ class ServiceList
3
+ extend Forwardable
4
+ include LinkGenerator
5
+
6
+ def initialize(base_url)
7
+ @services = Hash.new
8
+ @base_url = base_url
9
+ end
10
+
11
+ def register(service)
12
+ raise 'service registration should be done with a class' if not service.is_a? Class
13
+ @services[service.name] = service
14
+ end
15
+
16
+ def get_list
17
+ representation = {
18
+ 'links' => [
19
+ link_to(:self, '/services', :services),
20
+ link_to(:up, '/', :homepage),
21
+ ],
22
+ 'value' => generate_values,
23
+ 'extensions' => { }
24
+ }.to_json
25
+ end
26
+
27
+ def [](key)
28
+ value = @services[key]
29
+ if value.is_a? Class
30
+ value = value.new
31
+ @services[key] = value
32
+ end
33
+ value
34
+ end
35
+
36
+ def_delegators :@services, :each, :include?, :count, :empty?, :clear
37
+
38
+ private
39
+
40
+ def generate_values
41
+ ensure_all_created
42
+ values = []
43
+ each do |name, service|
44
+ element = link_to(:service, "/services/#{name}", :object, service_id: name)
45
+ element['title'] = service.title
46
+ values << element
47
+ end
48
+ values
49
+ end
50
+
51
+ def ensure_all_created
52
+ @services.each { |name, value| @services[name] = value.new if value.is_a? Class }
53
+ end
54
+ end
55
+ end