hanreki 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e19a99e96ee72d1f6259a403d3be1b18aa8141f2
4
- data.tar.gz: 61b77c384c40eb397c0ca071cecbeac193332de7
3
+ metadata.gz: a867b87334a1a1be5954d74b9059cd465651f1a5
4
+ data.tar.gz: 2961b20754273404809b8c9f8f1d2d789edfb879
5
5
  SHA512:
6
- metadata.gz: dc07f84b3368ffe36618ce9d39918cc4e8fd89c79b67d7b0719a5b8d34626bb76189046b6179090e083b8173b73165a16d47344a14da60042c3da11ab196f978
7
- data.tar.gz: c9737f48c8221baaf4e50c4b7d0545d9469db75237041697eab1c5548d501e6020630857e7c2d8f5b1c51200ac2021b722574bfcc23872b96060d93c2540702a
6
+ metadata.gz: a04b6f1fe15222d4de38772121cfe025a0df77008a58a726e09cec72bf0f2b4fa3650ac7ec4e4ef1f4ef1eca17d850bd8889369c920bab1dd332114a15d44709
7
+ data.tar.gz: 8579bada5beea05a9b7cf71eea9e2e423a456425430e28034dc77e2c19e3a0f36cb2fba1db85351ac6b097a9bca8ec536c53036b288d96e2f466eb3d6ffed9e7
data/README.md CHANGED
@@ -25,12 +25,15 @@ And then execute:
25
25
  $ bundle exec hanreki
26
26
 
27
27
  ## Usage
28
- TODO
28
+ Run `hanreki help` or `bundle exec hanreki help`.
29
29
 
30
30
  ## Development
31
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
31
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `bundle exec rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
32
32
 
33
33
  To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
34
34
 
35
35
  ## Contributing
36
36
  Bug reports and pull requests are welcome on GitHub at https://github.com/camphor-/hanreki.
37
+
38
+ ## Why "hanreki"?
39
+ This application is named after a Japanese word "[頒暦](https://ja.wikipedia.org/wiki/頒暦)".
data/hanreki.gemspec CHANGED
@@ -14,7 +14,12 @@ Gem::Specification.new do |spec|
14
14
  spec.homepage = 'https://github.com/camphor-/hanreki'
15
15
  spec.license = 'MIT'
16
16
 
17
- spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
17
+ spec.files = `git ls-files -z`.split("\x0").reject { |f|
18
+ f.match(%r{^(
19
+ (bin|test|spec|features)/|
20
+ \.gitignore|\.rspec|\.travis\.yml|Rakefile
21
+ )}x)
22
+ }
18
23
  spec.bindir = 'exe'
19
24
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
25
  spec.require_paths = ['lib']
@@ -23,6 +28,7 @@ Gem::Specification.new do |spec|
23
28
 
24
29
  spec.add_dependency 'thor', '~> 0.19'
25
30
  spec.add_dependency 'icalendar', '~> 2.3'
31
+ spec.add_dependency 'json-schema', '~> 2.7'
26
32
 
27
33
  spec.add_development_dependency 'bundler', '~> 1.12'
28
34
  spec.add_development_dependency 'rake', '~> 12.0'
@@ -1,6 +1,7 @@
1
1
  require 'csv'
2
2
  require 'date'
3
3
  require 'json'
4
+ require 'json-schema'
4
5
  require 'hanreki/event'
5
6
  require 'hanreki/i_calendar'
6
7
  require 'hanreki/time_util'
@@ -14,6 +15,7 @@ class Schedule
14
15
  JSON_PRIVATE_PATH = 'json/camphor_private_events.json'
15
16
  JSONP_PUBLIC_PATH = 'jsonp/camphor_public_events.js'
16
17
  JSONP_PRIVATE_PATH = 'jsonp/camphor_private_events.js'
18
+ JSON_SCHEMA_PATH = File.expand_path('../schema.json', __FILE__)
17
19
 
18
20
  def initialize
19
21
  # マスターファイルを生成する際のファイル名の決定に使用
@@ -55,22 +57,20 @@ class Schedule
55
57
  # Output private and public JSON calendar files
56
58
  def out_json
57
59
  File.open(JSON_PUBLIC_PATH, 'w') do |f|
58
- JSON.dump(public_events.map { |event| event.to_h(:public, :string) } , f)
60
+ f.write(events_to_json(public_events, :public, validate: true))
59
61
  end
60
62
  File.open(JSON_PRIVATE_PATH, 'w') do |f|
61
- JSON.dump(private_events.map { |event| event.to_h(:private, :string) } , f)
63
+ f.write(events_to_json(private_events, :private, validate: true))
62
64
  end
63
65
  end
64
66
 
65
67
  # Output private and public JSONP calendar files
66
68
  def out_jsonp(callback = 'callback')
67
69
  File.open(JSONP_PUBLIC_PATH, 'w') do |f|
68
- events = public_events.map { |event| event.to_h(:public, :string) }
69
- f.write("#{callback}(#{events.to_json});")
70
+ f.write("#{callback}(#{events_to_json(public_events, :public)});")
70
71
  end
71
72
  File.open(JSONP_PRIVATE_PATH, 'w') do |f|
72
- events = private_events.map { |event| event.to_h(:private, :string) }
73
- f.write("#{callback}(#{events.to_json});")
73
+ f.write("#{callback}(#{events_to_json(private_events, :private)});")
74
74
  end
75
75
  end
76
76
 
@@ -123,4 +123,14 @@ class Schedule
123
123
  def private_events
124
124
  @events.select(&:private?)
125
125
  end
126
+
127
+ def events_to_json(events, type, validate = false)
128
+ json = events.map { |event| event.to_h(type, :string) }.to_json
129
+ validate_json!(json) if validate
130
+ json
131
+ end
132
+
133
+ def validate_json!(json)
134
+ JSON::Validator.validate!(JSON_SCHEMA_PATH, json)
135
+ end
126
136
  end
@@ -0,0 +1,27 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-04/schema#",
3
+ "type": "array",
4
+ "items": [
5
+ {
6
+ "type": "object",
7
+ "properties": {
8
+ "title": {"type": "string"},
9
+ "start": {
10
+ "type": "string",
11
+ "format": "date-time"
12
+ },
13
+ "end": {
14
+ "type": "string",
15
+ "format": "date-time"
16
+ },
17
+ "url": {
18
+ "anyOf": [
19
+ {"type": "string"},
20
+ {"type": "null"}
21
+ ]
22
+ }
23
+ },
24
+ "required": ["title", "start", "end", "url"]
25
+ }
26
+ ]
27
+ }
@@ -1,3 +1,3 @@
1
1
  module Hanreki
2
- VERSION = '1.1.0'
2
+ VERSION = '1.2.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hanreki
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - CAMPHOR-
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-03-30 00:00:00.000000000 Z
11
+ date: 2017-05-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '2.3'
41
+ - !ruby/object:Gem::Dependency
42
+ name: json-schema
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '2.7'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '2.7'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: bundler
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -88,15 +102,9 @@ executables:
88
102
  extensions: []
89
103
  extra_rdoc_files: []
90
104
  files:
91
- - ".gitignore"
92
- - ".rspec"
93
- - ".travis.yml"
94
105
  - Gemfile
95
106
  - LICENSE
96
107
  - README.md
97
- - Rakefile
98
- - bin/console
99
- - bin/setup
100
108
  - exe/hanreki
101
109
  - hanreki.gemspec
102
110
  - lib/hanreki.rb
@@ -104,6 +112,7 @@ files:
104
112
  - lib/hanreki/event.rb
105
113
  - lib/hanreki/i_calendar.rb
106
114
  - lib/hanreki/schedule.rb
115
+ - lib/hanreki/schema.json
107
116
  - lib/hanreki/time_util.rb
108
117
  - lib/hanreki/version.rb
109
118
  homepage: https://github.com/camphor-/hanreki
@@ -126,7 +135,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
126
135
  version: '0'
127
136
  requirements: []
128
137
  rubyforge_project:
129
- rubygems_version: 2.2.0
138
+ rubygems_version: 2.6.8
130
139
  signing_key:
131
140
  specification_version: 4
132
141
  summary: Simple schedule manager for CAMPHOR-
data/.gitignore DELETED
@@ -1,11 +0,0 @@
1
- *.gem
2
- /.bundle/
3
- /.yardoc
4
- /Gemfile.lock
5
- /_yardoc/
6
- /coverage/
7
- /doc/
8
- /pkg/
9
- /spec/reports/
10
- /tmp/
11
- /vendor/bundle/
data/.rspec DELETED
@@ -1,2 +0,0 @@
1
- --format documentation
2
- --color
data/.travis.yml DELETED
@@ -1,12 +0,0 @@
1
- sudo: false
2
- language: ruby
3
- rvm:
4
- - 2.1
5
- - 2.2.4
6
- - 2.3.1
7
- - 2.4.0
8
- before_install:
9
- - gem install bundler
10
- notifications:
11
- slack:
12
- secure: SqYPNEedzTJqs9XHn0SW1RvPVG2GPcMJWMrE4hg35WnzZk7rSk9DbHqjjZo1+qAS8MF/du68KKPRJe1KewerK+Zub2wwsFAR2Wvp0Elrq2fgKKNMY67ulG+ET6f2Mz9Uij83CO9fBxbCXxqja+nTbHZhx7YM5B9KSAqwNs6DYahxtueLiqK4y4YVULt/KUvo9mA2gjIbeTZE0TZ/se0pXVtunh/UFW+CE34rkTT3zoUtk4CcCO/wMXu56vwqyHluwwmhVVjvMB96WYrJ3O2R9ef3Cm9rfzAeyJ0LDBddOwr+z4ZsI2Yz+b270bM6F1Mb6sDO48WGi12u8JRRGECy/GA8R93Jo6mnC+cEPx50XElPE5njbI56LRBuzAjimEyxpwfA9UWBgRDGmHyEc3B16ri/DKknEE+YxEvsEfgKSt012sXBS0gYO6jIz318GMxdj6+EYYVJXwJMj8MZlCUtvfgqq4qQwk/vBDK9BAcfDjIbayWLEnenXJWnRwW7gVn4hQG4qx+TUUZDcgiZ+adFcMLZjvd500GSOeV8H+4U5pR0MWIzuC1MTAIYB4E7Tma2QQqU2dG3ztHqo4ubApTb/qBpcYrFOjCBPT2ItGC85mSlGMs4vgMnVUGyFaLR5u4PYe6Hd/uNfE6i8ayJ2E1STFVUuwD0EdOXqEZT6ulnvD4=
data/Rakefile DELETED
@@ -1,6 +0,0 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
3
-
4
- RSpec::Core::RakeTask.new(:spec)
5
-
6
- task :default => :spec
data/bin/console DELETED
@@ -1,14 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require "bundler/setup"
4
- require "hanreki"
5
-
6
- # You can add fixtures and/or initialization code here to make experimenting
7
- # with your gem easier. You can also use a different console, if you like.
8
-
9
- # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require "pry"
11
- # Pry.start
12
-
13
- require "irb"
14
- IRB.start
data/bin/setup DELETED
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
- IFS=$'\n\t'
4
- set -vx
5
-
6
- bundle install
7
-
8
- # Do any other automated setup that you need to do here