json-spec 0.1.2 → 0.2.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: d7c5b0ef1b9b89e5fc9b8a67cea2b1b73eb6a82e
4
- data.tar.gz: 0a6e0a666f87d2d67f39d9670784ed97cca370d2
3
+ metadata.gz: 2136aa485a249788e83e6b962ae039d5cf3ceac9
4
+ data.tar.gz: 4786b07cf34a2c1045fcd64a8901e20709cc136a
5
5
  SHA512:
6
- metadata.gz: 0fd7aab56ea788ef106e904274ce45118418981f7dfb132823ff11f3f1dd36f57dec2724a7f1bdfd9fbae7c4f2ec6d9a600dc445db8ac831a7b21011321f98d2
7
- data.tar.gz: f29dde5f94bdd8e5e9b167ddb91074cb8f3ab3c54e00812e6696b2ca37d4ee8faf11b284ef93a5e6ae8b4581d96e0065c171ba7d7d6f47575bf71e93b08ac137
6
+ metadata.gz: 74cc87284c78691d63eeca202be7b6216e1591bf047efa885fb99366956686db57c0ce31014fa1418ee11bd90bb22a25a1eb2864c606868047ec8a19f7179243
7
+ data.tar.gz: f77c2df721f9c977958774551650a6fe16098fbefd0bab75f826a2d92a6aacaf166bb3915e4d1c4ffd2e1dd8c884776b01100edc4980398cb523fac572dc2ff3
data/README.md CHANGED
@@ -13,7 +13,7 @@ A framework to declare expectations and verify that a json object satisfies thos
13
13
  Add this line to your application's Gemfile:
14
14
 
15
15
  ```ruby
16
- gem 'json-spec', '~> 0.1'
16
+ gem 'json-spec', '~> 0.2'
17
17
  ```
18
18
 
19
19
  And then execute:
@@ -394,6 +394,10 @@ So now we have the class
394
394
 
395
395
  ```ruby
396
396
  class ComposerJson
397
+ def self.validate_string(json_string)
398
+ self.new.spec.validate_string(json_string)
399
+ end
400
+
397
401
  def spec()
398
402
  CabezaDeTermo::JsonSpec::JsonSpec.new do |json_spec|
399
403
  json_spec.expect_an(:object) do |object|
@@ -486,7 +490,7 @@ end
486
490
  and to run the validation all we have to do is
487
491
 
488
492
  ```ruby
489
- validator = ComposerJson.new.spec.validate_string(json_string)
493
+ validator = ComposerJson.validate_string(json_string)
490
494
  ```
491
495
 
492
496
  If you want to validate a not very complex json, you can get away with it without factorizing the expectations. But as soon as the validation gets more complex, you can refactor the expectations using `:to_be_as_defined_in(some_object, :some_method)`.
@@ -803,8 +807,12 @@ Something like this:
803
807
 
804
808
  ```ruby
805
809
  class ComposerLibraryInitializer
810
+ def self.new_library()
811
+ self.new.new_library
812
+ end
813
+
806
814
  def new_library()
807
- initialize_library CabezaDeTermo::JsonSpec::DefaultLibraryInitializer.new.new_library
815
+ initialize_library CabezaDeTermo::JsonSpec::DefaultLibraryInitializer.new_library
808
816
  end
809
817
 
810
818
  def initialize_library(library)
@@ -815,14 +823,23 @@ class ComposerLibraryInitializer
815
823
  end
816
824
  ```
817
825
 
818
- and now plug the initializer into the ExpectationsLibrary at your application bootstrap with
826
+ and now plug your library in the spec that will use it:
819
827
 
820
828
  ```ruby
821
- CabezaDeTermo::JsonSpec::ExpectationsLibrary
822
- .set_default_library_initializer( ComposerLibraryInitializer.new )
829
+ CabezaDeTermo::JsonSpec::JsonSpec.new do
830
+ use_expectations_library ComposerLibraryInitializer.new_library
831
+
832
+ expect_an(:object) do
833
+ ...
834
+ end
835
+ end
823
836
  ```
824
837
 
825
- and that's it, now you can use the ExpectationsLibrary with all your custom additions.
838
+ or, if you are going to use that library all around in your application, you can set it globally:
839
+
840
+ ```ruby
841
+ CabezaDeTermo::JsonSpec::ExpectationsLibrary.set_current ComposerLibraryInitializer.new_library
842
+ ```
826
843
 
827
844
  To see how all the pieces fitted together, check and run the [seventh example](examples/example-7-full-example.rb) in the `examples/` folder.
828
845
 
@@ -950,7 +967,7 @@ and that's it. You have a fully prepared, ready to use development environment.
950
967
  # Running the tests
951
968
 
952
969
  * `bundle install`
953
- * `rake test`
970
+ * `bundle exec rake`
954
971
 
955
972
  ## Contributing
956
973
 
@@ -19,13 +19,17 @@ class Example_4_ToBeAsDefinedIn
19
19
  end
20
20
  end
21
21
 
22
- validator = ComposerJson.new.spec.validate_string(Fixtures.named :simple)
22
+ validator = ComposerJson.validate_string(Fixtures.named :simple)
23
23
 
24
24
  ValidationPrinter.new.print_report_of validator
25
25
  end
26
26
  end
27
27
 
28
28
  class ComposerJson
29
+ def self.validate_string(json_string)
30
+ self.new.spec.validate_string(json_string)
31
+ end
32
+
29
33
  def spec()
30
34
  CabezaDeTermo::JsonSpec::JsonSpec.new do |json_spec|
31
35
  json_spec.expect_an(:object) do |object|
@@ -48,7 +48,7 @@ class Example_5_CustomExpectations
48
48
  end
49
49
  end
50
50
 
51
- validator = ComposerJson.new.spec.validate_string(Fixtures.named :simple)
51
+ validator = ComposerJson.validate_string(Fixtures.named :simple)
52
52
 
53
53
  ValidationPrinter.new.print_report_of validator
54
54
  end
@@ -62,6 +62,10 @@ class IsVersionExpectation < CabezaDeTermo::JsonSpec::Expectation
62
62
  end
63
63
 
64
64
  class ComposerJson
65
+ def self.validate_string(json_string)
66
+ self.new.spec.validate_string(json_string)
67
+ end
68
+
65
69
  def spec()
66
70
  CabezaDeTermo::JsonSpec::JsonSpec.new do |json_spec|
67
71
  json_spec.expect_an(:object) do |object|
@@ -12,10 +12,6 @@ class Example_7_FullExample
12
12
  end
13
13
 
14
14
  def run()
15
- # Set our ExpectationsLibrary initializer before using it
16
- CabezaDeTermo::JsonSpec::ExpectationsLibrary
17
- .set_default_library_initializer( ComposerLibraryInitializer.new )
18
-
19
15
  fixtures = [:simple, :empty, :'with-errors-and-non-expected-fields']
20
16
  fixtures.each do |eachFixture|
21
17
  runFixture(eachFixture)
@@ -25,7 +21,7 @@ class Example_7_FullExample
25
21
  def runFixture(fixture_name)
26
22
  puts "--- Running the fixture '#{fixture_name}' ---\n".colorize(:blue)
27
23
 
28
- validator = ComposerJson.new.spec.validate_string( Fixtures.named(fixture_name) )
24
+ validator = ComposerJson.validate_string( Fixtures.named(fixture_name) )
29
25
 
30
26
  ValidationPrinter.new.print_report_of validator
31
27
  end
@@ -47,8 +43,12 @@ end
47
43
  # need to validate a composer.json.
48
44
  #
49
45
  class ComposerLibraryInitializer
46
+ def self.new_library()
47
+ self.new.new_library
48
+ end
49
+
50
50
  def new_library()
51
- library = CabezaDeTermo::JsonSpec::DefaultLibraryInitializer.new.new_library
51
+ library = CabezaDeTermo::JsonSpec::DefaultLibraryInitializer.new_library
52
52
  define_library(library)
53
53
  end
54
54
 
@@ -119,8 +119,14 @@ end
119
119
  # to validate.
120
120
  #
121
121
  class ComposerJson
122
+ def self.validate_string(json_string)
123
+ self.new.spec.validate_string(json_string)
124
+ end
125
+
122
126
  def spec()
123
127
  CabezaDeTermo::JsonSpec::JsonSpec.new do |spec|
128
+ spec.use_expectations_library ComposerLibraryInitializer.new_library
129
+
124
130
  spec.expect_an(:object) do |object|
125
131
  object.expect('name') .not_blank
126
132
  object.expect('type') .not_blank
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
10
10
  spec.email = ["martin.rubi@gmail.com"]
11
11
 
12
12
  spec.summary = %q{A framework to declare expectations on a json format and validate that a json object satisfies those expectations.}
13
- spec.description = %q{You can use this json expectations to validate jsons you send or receive in your application, or to test your API with unit tests.}
13
+ spec.description = %q{A framework to declare expectations on a json format and validate that a json object satisfies those expectations. You can use this json expectations to validate jsons you send or receive in your application, or to test your API with unit tests.}
14
14
  spec.homepage = "https://github.com/cabeza-de-termo/ruby-json-spec"
15
15
  spec.license = "MIT"
16
16
 
@@ -11,7 +11,6 @@ module CabezaDeTermo
11
11
  module JsonSpec
12
12
  class ExpectationsLibrary
13
13
  @current = nil
14
- @default_library_initializer = nil
15
14
 
16
15
  # Instance accessing
17
16
 
@@ -37,25 +36,8 @@ module CabezaDeTermo
37
36
 
38
37
  # Initializing
39
38
 
40
- def self.default_library_initializer()
41
- set_default_library_initializer(new_default_library_initializer) if @default_library_initializer.nil?
42
-
43
- @default_library_initializer
44
- end
45
-
46
- def self.set_default_library_initializer(library_initializer)
47
- to_be_replaced = @default_library_initializer
48
- @default_library_initializer = library_initializer
49
-
50
- to_be_replaced
51
- end
52
-
53
- def self.new_default_library_initializer()
54
- DefaultLibraryInitializer.new
55
- end
56
-
57
39
  def self.new_default()
58
- default_library_initializer.new_library
40
+ DefaultLibraryInitializer.new_library
59
41
  end
60
42
 
61
43
  # Instance methods
@@ -10,6 +10,10 @@ require "cabeza-de-termo/json-spec/modifiers/can-be-null-modifier"
10
10
  module CabezaDeTermo
11
11
  module JsonSpec
12
12
  class DefaultLibraryInitializer < LibraryInitializer
13
+ def self.new_library()
14
+ self.new.new_library
15
+ end
16
+
13
17
  def new_library()
14
18
  library = ExpectationsLibrary.new
15
19
  define_library(library)
@@ -71,8 +71,8 @@ module CabezaDeTermo
71
71
  #
72
72
  # @return JsonSpec
73
73
  #
74
- def global_expectations_library()
75
- json_spec.global_expectations_library
74
+ def expectations_library()
75
+ json_spec.expectations_library
76
76
  end
77
77
 
78
78
  # Error handling
@@ -108,7 +108,7 @@ module CabezaDeTermo
108
108
  # @return boolean
109
109
  #
110
110
  def is_an_expectations_library_method?(message)
111
- global_expectations_library.has_expectation_for?(message.method_name)
111
+ expectations_library.has_expectation_for?(message.method_name)
112
112
  end
113
113
 
114
114
  #
@@ -119,7 +119,7 @@ module CabezaDeTermo
119
119
  # @return boolean
120
120
  #
121
121
  def is_a_modifier_library_method?(message)
122
- global_expectations_library.has_modifier_for?(message.method_name)
122
+ expectations_library.has_modifier_for?(message.method_name)
123
123
  end
124
124
 
125
125
  # Defining Expectations
@@ -151,7 +151,7 @@ module CabezaDeTermo
151
151
  # @return JsonExpression
152
152
  #
153
153
  def add_expectation_from_library(message)
154
- expectation = global_expectations_library.new_expectation_from_message(message)
154
+ expectation = expectations_library.new_expectation_from_message(message)
155
155
 
156
156
  expectation.set_expectation_method(message.method_name)
157
157
  expectation.set_json_spec(json_spec)
@@ -173,7 +173,7 @@ module CabezaDeTermo
173
173
  # @return JsonExpression
174
174
  #
175
175
  def perform_modifier_from_library(message)
176
- modifier = global_expectations_library
176
+ modifier = expectations_library
177
177
  .new_modifier_from_message(message)
178
178
 
179
179
  run_modifier(modifier)
@@ -26,6 +26,8 @@ module CabezaDeTermo
26
26
  @expectation_messages_mapping = new_expectations_messages_mapping
27
27
  @default_expectations = new_default_expectations_mapping
28
28
 
29
+ use_expectations_library(global_expectations_library)
30
+
29
31
  CdT.bind_evaluation_of block, to: self unless block.nil?
30
32
  end
31
33
 
@@ -39,14 +41,18 @@ module CabezaDeTermo
39
41
  @default_expectations
40
42
  end
41
43
 
42
- def global_expectations_library()
43
- ExpectationsLibrary.current
44
+ def expectations_library()
45
+ @expectations_library
44
46
  end
45
47
 
46
48
  def root_expression()
47
49
  @root_expression
48
50
  end
49
51
 
52
+ def use_expectations_library(expectations_library)
53
+ @expectations_library = expectations_library
54
+ end
55
+
50
56
  # Default expectations
51
57
 
52
58
  def define(&block)
@@ -122,7 +128,7 @@ module CabezaDeTermo
122
128
  return @expectation_messages_mapping.message_formatter_for(expectation_method)
123
129
  end
124
130
 
125
- global_expectations_library.message_formatter_for(expectation_method)
131
+ expectations_library.message_formatter_for(expectation_method)
126
132
  end
127
133
 
128
134
  def define_message_formatter_for(expectation_method, message_block)
@@ -145,7 +151,7 @@ module CabezaDeTermo
145
151
  end
146
152
 
147
153
  def global_default_expectations_for(json_expression_type)
148
- global_expectations_library.default_expectations.expectations_for(json_expression_type)
154
+ expectations_library.default_expectations.expectations_for(json_expression_type)
149
155
  end
150
156
 
151
157
  # Validating
@@ -170,6 +176,12 @@ module CabezaDeTermo
170
176
  def explain()
171
177
  new_expression_explainer.explain(self)
172
178
  end
179
+
180
+ protected
181
+
182
+ def global_expectations_library()
183
+ ExpectationsLibrary.current
184
+ end
173
185
  end
174
186
  end
175
187
  end
@@ -1,5 +1,5 @@
1
1
  module CabezaDeTermo
2
2
  module JsonSpec
3
- VERSION = "0.1.2"
3
+ VERSION = "0.2.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: json-spec
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Martin Rubi
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-12-15 00:00:00.000000000 Z
11
+ date: 2015-12-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cdt-utilities
@@ -94,8 +94,10 @@ dependencies:
94
94
  - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
- description: You can use this json expectations to validate jsons you send or receive
98
- in your application, or to test your API with unit tests.
97
+ description: A framework to declare expectations on a json format and validate that
98
+ a json object satisfies those expectations. You can use this json expectations to
99
+ validate jsons you send or receive in your application, or to test your API with
100
+ unit tests.
99
101
  email:
100
102
  - martin.rubi@gmail.com
101
103
  executables: []
@@ -240,7 +242,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
240
242
  version: '0'
241
243
  requirements: []
242
244
  rubyforge_project:
243
- rubygems_version: 2.4.6
245
+ rubygems_version: 2.4.5.1
244
246
  signing_key:
245
247
  specification_version: 4
246
248
  summary: A framework to declare expectations on a json format and validate that a