surrealist 0.0.7 → 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: 7b1db1906a694049f0d30a384b863248a565fa98
4
- data.tar.gz: 249561f2fe8bb08ca93fd04c9a48fbc111b4d5f3
3
+ metadata.gz: '091867794245edb01f2db4525118b6bd26ca2282'
4
+ data.tar.gz: 00e8caac256b36ecb436c83adec4337381ffafdf
5
5
  SHA512:
6
- metadata.gz: a89eaf9e476152176d26c25f9475606a7372abb07a1295cb9eb51192934973673800ff116af6e6a3591ca2d7785c60b8a635cb2062c7a339e503c253da96c732
7
- data.tar.gz: 2bed8315135646784faf8b3dc60c186654e136cc6c1416f65a00aed3753c0943094cef7eff0168f5c6feeeb5833a931689189a76d18a031605301cf27d926e9b
6
+ metadata.gz: 6f58c5d69d760da83b2e87c480d679791d908944abcbc5c027187e473b45bf1124d6a50c416501fb547a38f0e9c1c1585f03ed0157e1b6d2044a455579b4a135
7
+ data.tar.gz: 6f47c88860840afa21276c62d17bf56dd8845f1867d598fdbbe2594d12dfe39b24ee05d8b9ffe32a3c30c75c2fb4739ae39850867e720f6db6d898ffbfe1b152
data/CHANGELOG.md CHANGED
@@ -1,4 +1,8 @@
1
1
  # 0.0.6
2
2
  * Add `build_schema` instance method that builds hash from the schema without serializing it to json.
3
- * Allow nil values by default
4
- * Allow nested objects
3
+ * Allow nil values by default.
4
+ * Allow nested objects.
5
+
6
+ # 0.1.0
7
+ * Change `schema` class method to `json_schema` due to compatibility issues with other gems.
8
+ * Fix schema mutability issue
data/README.md CHANGED
@@ -5,7 +5,7 @@
5
5
  [![Gem Version](https://badge.fury.io/rb/surrealist.svg)](https://rubygems.org/gems/surrealist)
6
6
 
7
7
  A gem that provides DSL for serialization of plain old Ruby objects to JSON in a declarative style
8
- by defining a `schema`. It also provides a trivial type checking in the runtime before serialization.
8
+ by defining a `json_schema`. It also provides a trivial type checking in the runtime before serialization.
9
9
  [Yard documentation](http://www.rubydoc.info/github/nesaulov/surrealist/master)
10
10
 
11
11
  ## Current status
@@ -48,7 +48,7 @@ that will be used for type-checks.
48
48
  class Person
49
49
  include Surrealist
50
50
 
51
- schema do
51
+ json_schema do
52
52
  {
53
53
  foo: String,
54
54
  bar: Integer,
@@ -78,7 +78,7 @@ Person.new.surrealize
78
78
  class Person
79
79
  include Surrealist
80
80
 
81
- schema do
81
+ json_schema do
82
82
  {
83
83
  foo: String,
84
84
  name: String,
@@ -105,7 +105,7 @@ Person.find_by(email: 'example@email.com').surrealize
105
105
  class CreditCard
106
106
  include Surrealist
107
107
 
108
- schema do
108
+ json_schema do
109
109
  { number: Integer }
110
110
  end
111
111
 
@@ -125,7 +125,7 @@ a corresponding method defined in the object.
125
125
  class Car
126
126
  include Surrealist
127
127
 
128
- schema do
128
+ json_schema do
129
129
  { weight: Integer }
130
130
  end
131
131
  end
@@ -3,6 +3,7 @@
3
3
  module Surrealist
4
4
  # A class that builds a hash from the schema and type-checks the values.
5
5
  class Builder
6
+ # TODO: refactor methods so they don't take so much arguments
6
7
  class << self
7
8
  # A method that goes recursively through the schema hash, defines the values and type-checks them.
8
9
  #
@@ -19,7 +19,7 @@ module Surrealist
19
19
  # class User
20
20
  # include Surrealist
21
21
  #
22
- # schema do
22
+ # json_schema do
23
23
  # {
24
24
  # foo: String,
25
25
  # bar: Integer,
@@ -38,7 +38,7 @@ module Surrealist
38
38
  # class Person
39
39
  # include Surrealist
40
40
  #
41
- # schema do
41
+ # json_schema do
42
42
  # {
43
43
  # foo: String,
44
44
  # nested: {
@@ -54,7 +54,7 @@ module Surrealist
54
54
  # Person.new.surrealize
55
55
  # # => "{\"foo\":\"A string\",\"nested\":{\"bar\":42}}"
56
56
  # # For more examples see README
57
- def schema(&_block)
57
+ def json_schema(&_block)
58
58
  SchemaDefiner.call(self, yield)
59
59
  end
60
60
  end
@@ -3,23 +3,19 @@
3
3
  module Surrealist
4
4
  # A class that defines a method on the object that stores the schema.
5
5
  class SchemaDefiner
6
- # Defines a method on the object that stores the schema.
6
+ # Defines an instance variable on the object that stores the schema.
7
7
  #
8
8
  # @param [Object] klass class of the object that needs to be surrealized.
9
9
  #
10
10
  # @param [Hash] hash the schema defined in the object's class.
11
11
  #
12
- # @return [Method] +__surrealist_schema+ method that stores the schema of the object.
12
+ # @return [Hash] +@__surrealist_schema+ variable that stores the schema of the object.
13
13
  #
14
14
  # @raise +Surrealist::InvalidSchemaError+ if schema was defined not through a hash.
15
15
  def self.call(klass, hash)
16
16
  raise Surrealist::InvalidSchemaError, 'Schema should be defined as a hash' unless hash.is_a?(Hash)
17
17
 
18
- klass.instance_eval do
19
- define_method '__surrealist_schema' do
20
- hash
21
- end
22
- end
18
+ klass.instance_variable_set('@__surrealist_schema', hash)
23
19
  end
24
20
  end
25
21
  end
@@ -2,5 +2,5 @@
2
2
 
3
3
  module Surrealist
4
4
  # Defines the version of Surrealist
5
- VERSION = '0.0.7'
5
+ VERSION = '0.1.0'
6
6
  end
data/lib/surrealist.rb CHANGED
@@ -3,14 +3,14 @@
3
3
  require_relative 'surrealist/class_methods'
4
4
  require_relative 'surrealist/instance_methods'
5
5
  require_relative 'surrealist/boolean'
6
- require 'multi_json'
6
+ require 'json'
7
7
 
8
- # Main module that provides the +schema+ class method and +surrealize+ instance method.
8
+ # Main module that provides the +json_schema+ class method and +surrealize+ instance method.
9
9
  module Surrealist
10
10
  # Error class for classes without defined +schema+.
11
11
  class UnknownSchemaError < RuntimeError; end
12
12
 
13
- # Error class for classes with +schema+ defined not as a hash.
13
+ # Error class for classes with +json_schema+ defined not as a hash.
14
14
  class InvalidSchemaError < RuntimeError; end
15
15
 
16
16
  # Error class for +NoMethodError+.
@@ -45,7 +45,7 @@ module Surrealist
45
45
  # class User
46
46
  # include Surrealist
47
47
  #
48
- # schema do
48
+ # json_schema do
49
49
  # {
50
50
  # name: String,
51
51
  # age: Integer,
@@ -65,7 +65,7 @@ module Surrealist
65
65
  # # => "{\"name\":\"Nikita\",\"age\":23}"
66
66
  # # For more examples see README
67
67
  def self.surrealize(instance)
68
- ::MultiJson.dump(build_schema(instance))
68
+ ::JSON.dump(build_schema(instance))
69
69
  end
70
70
 
71
71
  # Builds hash from schema provided in the object's class and type-checks the values.
@@ -87,7 +87,7 @@ module Surrealist
87
87
  # class User
88
88
  # include Surrealist
89
89
  #
90
- # schema do
90
+ # json_schema do
91
91
  # {
92
92
  # name: String,
93
93
  # age: Integer,
@@ -107,12 +107,22 @@ module Surrealist
107
107
  # # => { name: 'Nikita', age: 23 }
108
108
  # # For more examples see README
109
109
  def self.build_schema(instance)
110
- schema = instance.__surrealist_schema rescue nil
110
+ schema = instance.class.instance_variable_get('@__surrealist_schema')
111
111
 
112
112
  if schema.nil?
113
113
  raise Surrealist::UnknownSchemaError, "Can't serialize #{instance.class} - no schema was provided."
114
114
  end
115
115
 
116
- Builder.call(schema: schema, instance: instance)
116
+
117
+ Builder.call(schema: deep_copy(schema), instance: instance)
118
+ end
119
+
120
+ # Deep copies the schema hash.
121
+ #
122
+ # @param [Object] obj object to be coopied
123
+ #
124
+ # @return [Object] a copied object
125
+ def self.deep_copy(obj)
126
+ Marshal.load(Marshal.dump(obj))
117
127
  end
118
128
  end
data/surrealist.gemspec CHANGED
@@ -23,10 +23,8 @@ Gem::Specification.new do |spec|
23
23
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
24
24
  spec.require_paths = ['lib']
25
25
 
26
- spec.add_development_dependency 'bundler', '~> 1.11'
27
- spec.add_development_dependency 'rake', '~> 10.0'
28
- spec.add_development_dependency 'pry'
29
- spec.add_development_dependency 'rspec', '~> 3.6.0'
30
-
31
- spec.add_runtime_dependency 'multi_json', '~> 1.0'
26
+ spec.add_development_dependency 'bundler', '~> 1.15'
27
+ spec.add_development_dependency 'rake', '~> 12.0'
28
+ spec.add_development_dependency 'pry', '~> 0.11'
29
+ spec.add_development_dependency 'rspec', '~> 3.6'
32
30
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: surrealist
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nikita Esaulov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-09-10 00:00:00.000000000 Z
11
+ date: 2017-09-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,70 +16,56 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.11'
19
+ version: '1.15'
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
- version: '1.11'
26
+ version: '1.15'
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
- version: '10.0'
33
+ version: '12.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
- version: '10.0'
40
+ version: '12.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: pry
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: rspec
57
43
  requirement: !ruby/object:Gem::Requirement
58
44
  requirements:
59
45
  - - "~>"
60
46
  - !ruby/object:Gem::Version
61
- version: 3.6.0
47
+ version: '0.11'
62
48
  type: :development
63
49
  prerelease: false
64
50
  version_requirements: !ruby/object:Gem::Requirement
65
51
  requirements:
66
52
  - - "~>"
67
53
  - !ruby/object:Gem::Version
68
- version: 3.6.0
54
+ version: '0.11'
69
55
  - !ruby/object:Gem::Dependency
70
- name: multi_json
56
+ name: rspec
71
57
  requirement: !ruby/object:Gem::Requirement
72
58
  requirements:
73
59
  - - "~>"
74
60
  - !ruby/object:Gem::Version
75
- version: '1.0'
76
- type: :runtime
61
+ version: '3.6'
62
+ type: :development
77
63
  prerelease: false
78
64
  version_requirements: !ruby/object:Gem::Requirement
79
65
  requirements:
80
66
  - - "~>"
81
67
  - !ruby/object:Gem::Version
82
- version: '1.0'
68
+ version: '3.6'
83
69
  description: A gem that provides DSL for serialization of plain old Ruby objects to
84
70
  JSON in a declarative style by defining a `schema`. It also provides a trivial type
85
71
  checking in the runtime before serialization.