clear-election-sdk 0.1.1 → 0.1.2

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: 4c2f64455ee4387de1eb977fc25515c9b2dbb7a7
4
- data.tar.gz: c00208f338e024f01314fafeaf78a05235e1b51b
3
+ metadata.gz: e304320e6664ae5f0b56944eda5209ae7eda87d4
4
+ data.tar.gz: 344e5b381317c69805c682453f4d11d84a553ca3
5
5
  SHA512:
6
- metadata.gz: ce8dd25dc21cd37f839deff1a143f0ad554fa704085909f480ed456992e5212d967a1211a863e7a8a05dce13b2244012664c867d49313df97e63b8175252edc2
7
- data.tar.gz: d58995616559a3434fd00af7152f850cab8363f21858e3e8734c9f5b7dc7a04bce5e4bb23c572b1e97bfb5e6b6ad5b19de2a8e8956a6032837e9ae345d33c121
6
+ metadata.gz: 4b078c52a8326387f4212edcd2f2de3fc36ff55e9cf2ec0fad132b9e6c90be3d8a633562f1cb2e5b90f1f28d83bdf7a08857950fc1d03752a32834c16dafb09a
7
+ data.tar.gz: 971f9d2b3cebcfeda1a420b6d089569c4bc3ea4776c87008da8db42a6e780c55b624110b8539553e8ffcf1d7c55e101dd3d357159673640c72e16ffd994b0afb
@@ -1 +1 @@
1
- ruby-2.1.5
1
+ ruby-2.2.2
data/Gemfile CHANGED
@@ -4,7 +4,4 @@ source 'https://rubygems.org'
4
4
  gemspec
5
5
 
6
6
  gem 'coveralls', require: false
7
-
8
- # for now use my forks in which warnings have been eliminated
9
- gem "timecop", git: 'https://github.com/ronen/timecop.git' # PR is in https://github.com/travisjeffery/timecop/pull/131
10
- gem "addressable", git: 'https://github.com/ronen/addressable.git', branch: "patch-1"
7
+ gem 'byebug'
data/README.md CHANGED
@@ -48,6 +48,13 @@ Or install it yourself as:
48
48
 
49
49
  $ gem install clear_election
50
50
 
51
+ ## History
52
+
53
+ * 0.1.2 Bug fix: schema expansion
54
+ * 0.1.1 Dependency fix
55
+ * 0.1.0 Results, json roundtrip
56
+ * 0.0.1 Initial release
57
+
51
58
  ## Contributing
52
59
 
53
60
  1. Fork it ( https://github.com/[my-github-username]/clear_election/fork )
@@ -11,7 +11,7 @@ module ClearElection
11
11
  end
12
12
 
13
13
  def self.from_json(data)
14
- errors = JSON::Validator.fully_validate(schema, data, insert_defaults: true, errors_as_objects: true)
14
+ errors = ClearElection::Schema.validate(schema, data, insert_defaults: true)
15
15
  return self.new(ballotId: nil, uniquifier: nil, contests: [], errors: errors) unless errors.empty?
16
16
 
17
17
  self.new(
@@ -51,7 +51,7 @@ module ClearElection
51
51
  "contests" => @contests.map(&:as_json),
52
52
  }
53
53
  data["demographic"] = @demographic if @demographic
54
- JSON::Validator.validate!(Ballot.schema, data)
54
+ ClearElection::Schema.validate!(Ballot.schema, data)
55
55
  data
56
56
  end
57
57
 
@@ -23,7 +23,7 @@ module ClearElection
23
23
  end
24
24
 
25
25
  def self.from_json(data, uri: nil)
26
- JSON::Validator.validate!(schema, data, insert_defaults: true)
26
+ ClearElection::Schema.validate!(schema, data, insert_defaults: true)
27
27
  self.new(
28
28
  name: data["name"],
29
29
  signin: Agent.from_json(data["agents"]["signin"]),
@@ -55,7 +55,7 @@ module ClearElection
55
55
  "voters" => @voters,
56
56
  "ballots" => @ballots.map(&:as_json)
57
57
  }
58
- JSON::Validator.validate!(Election.schema, data)
58
+ ClearElection::Schema.validate!(Election.schema, data)
59
59
  data
60
60
  end
61
61
 
@@ -86,7 +86,7 @@ module ClearElection
86
86
  attr_reader :uri
87
87
 
88
88
  def initialize(uri:)
89
- @uri = URI(uri)
89
+ @uri = Addressable::URI.parse(uri)
90
90
  end
91
91
 
92
92
  def self.from_json(data)
@@ -6,12 +6,6 @@ module ClearElection
6
6
  @root ||= Pathname.new(__FILE__).dirname.parent.parent + "schemas"
7
7
  end
8
8
 
9
- def _get(group:nil, item:, version:, expand: false)
10
- JSON.parse(File.read(root + (group||"") + "#{item}-#{version}.schema.json")).tap { |json|
11
- expand_refs!(json) if expand
12
- }
13
- end
14
-
15
9
  def election(version: ELECTION_SCHEMA_VERSION)
16
10
  _get(item: "election", version: version)
17
11
  end
@@ -20,20 +14,45 @@ module ClearElection
20
14
  _get(item: "ballot", version: version)
21
15
  end
22
16
 
17
+ def validate!(*args, **kwd)
18
+ validate(*args, **kwd.merge(raise_on_error: true))
19
+ end
20
+
21
+ def validate(schema, data, insert_defaults: nil, raise_on_error: false)
22
+ errors = []
23
+ Dir.chdir root do
24
+ args = { insert_defaults: insert_defaults }
25
+ if raise_on_error
26
+ method = :validate!
27
+ else
28
+ method = :fully_validate
29
+ args[:errors_as_objects] = true
30
+ end
31
+ errors = JSON::Validator.send method, schema, data, **args
32
+ end
33
+ errors
34
+ end
35
+
36
+ def _get(group:nil, item:, version:, expand: false)
37
+ JSON.parse(File.read(root + (group||"") + "#{item}-#{version}.schema.json")).tap { |json|
38
+ _expand_refs!(json) if expand
39
+ }
40
+ end
41
+
23
42
  def api(agent, version:)
24
43
  _get(group: "api", item: agent, version: version, expand: true)
25
44
  end
26
45
 
27
- def expand_refs!(json)
46
+ def _expand_refs!(json)
28
47
  json.tap {
29
48
  JSON.recurse_proc json do |item|
30
49
  if Hash === item and uri = item['$ref']
31
- uri = URI.parse(uri)
50
+ uri = Addressable::URI.parse(uri)
32
51
  if uri.scheme
33
52
  source = uri
34
53
  source = ClearElection::Schema.root.join uri.path.sub(%r{^/}, '') if uri.scheme == 'file'
35
54
  item.delete '$ref'
36
- item.merge! expand_refs! JSON.parse source.read
55
+ item.merge! _expand_refs! JSON.parse source.read
37
56
  end
38
57
  end
39
58
  end
@@ -1,3 +1,3 @@
1
1
  module ClearElection
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
@@ -67,7 +67,7 @@
67
67
  },
68
68
  "required": ["uri"]
69
69
  },
70
- "ballot": { "$ref": "file:schemas/ballot-0.0.schema.json" }
70
+ "ballot": { "$ref": "file:ballot-0.0.schema.json" }
71
71
  }
72
72
  }
73
73
 
@@ -57,12 +57,22 @@ describe ClearElection::Election do
57
57
  roundtrip ClearElection::Factory.election(returns: true)
58
58
  end
59
59
 
60
+ it "works in arbitrary directory" do
61
+ election = ClearElection::Factory.election
62
+ Dir.chdir Dir.mktmpdir do |dir|
63
+ expect{ election.as_json }.to_not raise_error
64
+ end
65
+ end
66
+
67
+ private
68
+
60
69
  def roundtrip(election)
61
70
  original_json = JSON.generate election.as_json
62
71
  final_json = JSON.generate ClearElection::Election.from_json(JSON.parse original_json).as_json
63
72
  expect(final_json).to eq original_json
64
73
  end
65
74
 
75
+
66
76
  end
67
77
 
68
78
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: clear-election-sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - ronen barzel
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-25 00:00:00.000000000 Z
11
+ date: 2015-09-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -189,7 +189,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
189
189
  version: '0'
190
190
  requirements: []
191
191
  rubyforge_project:
192
- rubygems_version: 2.2.2
192
+ rubygems_version: 2.4.5
193
193
  signing_key:
194
194
  specification_version: 4
195
195
  summary: Ruby SDK for working with ClearElection data