├── README.md ├── .DS_Store ├── Gemfile ├── Gemfile.lock ├── cards ├── go.json ├── r.json ├── ruby.json ├── python.json └── javascript.json ├── validate-all.rb └── schema └── card.json /README.md: -------------------------------------------------------------------------------- 1 | # coder-quartett 2 | -------------------------------------------------------------------------------- /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nerds/designer-quartett/master/.DS_Store -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source :rubygems 2 | gem 'json' 3 | gem 'json-schema' 4 | gem 'minitest' 5 | -------------------------------------------------------------------------------- /Gemfile.lock: -------------------------------------------------------------------------------- 1 | GEM 2 | remote: http://rubygems.org/ 3 | specs: 4 | addressable (2.3.8) 5 | json (1.8.3) 6 | json-schema (2.6.1) 7 | addressable (~> 2.3.8) 8 | minitest (5.8.4) 9 | 10 | PLATFORMS 11 | ruby 12 | 13 | DEPENDENCIES 14 | json 15 | json-schema 16 | minitest 17 | 18 | BUNDLED WITH 19 | 1.10.6 20 | -------------------------------------------------------------------------------- /cards/go.json: -------------------------------------------------------------------------------- 1 | { 2 | "card": { 3 | "name": "Go", 4 | "year-of-appereance": "2009", 5 | "stackoverflow-entries": 15146, 6 | "hello-world-length": 75, 7 | "active-github-repos": 22264, 8 | "version-number": "1.6.1", 9 | "created-at": "2016-04-22", 10 | "creator": "Railslove", 11 | "creator-twitter": "railslove", 12 | "creator-github": "railslove" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /cards/r.json: -------------------------------------------------------------------------------- 1 | { 2 | "card": { 3 | "name": "R", 4 | "year-of-appereance": "1993", 5 | "stackoverflow-entries": 134006, 6 | "hello-world-length": 20, 7 | "active-github-repos": 34268, 8 | "version-number": "3.5.2", 9 | "created-at": "2016-04-22", 10 | "creator": "Railslove", 11 | "creator-twitter": "railslove", 12 | "creator-github": "railslove" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /cards/ruby.json: -------------------------------------------------------------------------------- 1 | { 2 | "card": { 3 | "name": "Ruby", 4 | "year-of-appereance": "1995", 5 | "stackoverflow-entries": 158315, 6 | "hello-world-length": 20, 7 | "active-github-repos": 132848, 8 | "version-number": "2.3.0", 9 | "created-at": "2016-04-22", 10 | "creator": "Railslove", 11 | "creator-twitter": "railslove", 12 | "creator-github": "railslove" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /cards/python.json: -------------------------------------------------------------------------------- 1 | { 2 | "card": { 3 | "name": "Python", 4 | "year-of-appereance": "1991", 5 | "stackoverflow-entries": 565574, 6 | "hello-world-length": 20, 7 | "active-github-repos": 164852, 8 | "version-number": "3.5.1", 9 | "created-at": "2016-04-22", 10 | "creator": "Railslove", 11 | "creator-twitter": "railslove", 12 | "creator-github": "railslove" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /cards/javascript.json: -------------------------------------------------------------------------------- 1 | { 2 | "card": { 3 | "name": "Javascript", 4 | "year-of-appereance": "1995", 5 | "stackoverflow-entries": 1105684, 6 | "hello-world-length": 32, 7 | "active-github-repos": 323938, 8 | "version-number": "EcmaScript 6", 9 | "created-at": "2016-04-22", 10 | "creator": "Railslove", 11 | "creator-twitter": "railslove", 12 | "creator-github": "railslove" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /validate-all.rb: -------------------------------------------------------------------------------- 1 | #encoding: UTF-8 2 | require 'minitest/autorun' 3 | require 'json-schema' 4 | require 'json' 5 | 6 | SCHEMA_FILE = File.join(File.dirname(File.expand_path(__FILE__)) , 'schema', 'card.json') 7 | CARDS_PATH = File.join(File.dirname(File.expand_path(__FILE__)) , 'cards') 8 | schema = File.open(SCHEMA_FILE) { |f| JSON.parse(f.read) } 9 | 10 | describe 'card' do 11 | Dir["#{CARDS_PATH}/**/*\.*"].each do |file| 12 | it "#{file.sub(/(\..*$)/,'').sub(/^#{CARDS_PATH}/,'')} contains valid json" do 13 | 14 | 15 | begin 16 | json_str = File.open(file) { |f| f.read } 17 | # force_encoding only available in ruby 1.9.2 18 | card = JSON.parse( json_str.respond_to?(:force_encoding ) ? json_str.force_encoding('UTF-8') : json_str)['card'] 19 | JSON::Validator.validate!(schema, card, version: :draft3 ) 20 | rescue JSON::Schema::ValidationError => schema_error 21 | assertion = false, schema_error.message + "\nIn: #{file}\n[#{card['creator']}, please fix this and send another pull request!]" 22 | rescue JSON::ParserError => parser_error 23 | assertion = false, parser_error.message 24 | else 25 | assertion = true 26 | end 27 | 28 | assert *assertion 29 | end 30 | end 31 | end 32 | -------------------------------------------------------------------------------- /schema/card.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "object", 3 | "title": "Card", 4 | "description":"A card", 5 | "name": "Card", 6 | "properties":{ 7 | "name":{ 8 | "type":"string", 9 | "description":"name of the language", 10 | "maxLength": 30, 11 | "required":true 12 | }, 13 | "year-of-appereance":{ 14 | "type":"string", 15 | "description":"date of appeareance", 16 | "required":true 17 | }, 18 | "stackoverflow-entries":{ 19 | "type":"integer", 20 | "description":"entries on stackoverflow", 21 | "required":true 22 | }, 23 | "hello-world-length":{ 24 | "type":"integer", 25 | "description":"length of the hello world code", 26 | "required":true 27 | }, 28 | "active-github-repos":{ 29 | "type":"integer", 30 | "description":"amount of repositories on github", 31 | "required":true 32 | }, 33 | "version-number":{ 34 | "type":"string", 35 | "description":"version number of the language", 36 | "required":true 37 | }, 38 | "created-at": { 39 | "description": "Date the card was created. Never changes afterwards YYYY-MM-DD", 40 | "format":"date", 41 | "readonly":true, 42 | "type":"string" 43 | }, 44 | "creator": { 45 | "description": "Name of the person who supplied the card", 46 | "readonly":true, 47 | "type":"string", 48 | "required":true 49 | }, 50 | "creator-twitter": { 51 | "description": "Twitter handle of the person who supplied the card", 52 | "readonly":true, 53 | "type":"string" 54 | }, 55 | "creator-github": { 56 | "description": "Github username of the person who supplied the card", 57 | "readonly":true, 58 | "type":"string" 59 | } 60 | } 61 | } 62 | --------------------------------------------------------------------------------