maker_website 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.rspec +3 -0
- data/exe/maker +24 -24
- data/lib/maker/client.rb +34 -0
- data/lib/maker/commands/register.rb +26 -0
- data/lib/maker/commands/verify.rb +58 -0
- data/lib/maker/server.rb +40 -0
- data/lib/maker_website.rb +9 -0
- data/lib/maker_website/run_rspec.rb +55 -0
- data/lib/maker_website/{website_spec.rb → stages/stage_1_spec.rb} +0 -7
- data/lib/maker_website/version.rb +1 -1
- data/maker_website-0.1.2.gem +0 -0
- data/maker_website.gemspec +2 -0
- metadata +38 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 46b9d18e9fcf7fd16f8279aa19e4e5dc15baa7ef
|
4
|
+
data.tar.gz: 8a719726030976c471bed0d78a5a4090b436775e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9e6673cdc470f31d090cf84075a26596a8f162afb7f463c78c6b0c16c12b66191ebaa12e18d89835a53b61e2c54f1b676a83574cb91ad9c92c3dd2aa4b8a430a
|
7
|
+
data.tar.gz: e78d615ed1121312664ddfd7a49dfe2ba9a921fde637534de5d77ac4e0993fd0803cb10ea780d293aef1d71b29e8428541c099b64b2e4b78b6483aaf9cf7a050
|
data/.gitignore
CHANGED
data/.rspec
ADDED
data/exe/maker
CHANGED
@@ -1,27 +1,27 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require '
|
4
|
-
require '
|
3
|
+
require 'rubygems'
|
4
|
+
require 'commander/import'
|
5
|
+
|
6
|
+
require_relative '../lib/maker_website'
|
7
|
+
|
8
|
+
program :version, '0.0.1'
|
9
|
+
program :description, 'Makers Academy student command line interface'
|
10
|
+
|
11
|
+
command :register do |c|
|
12
|
+
c.syntax = 'maker register EMAIL'
|
13
|
+
c.summary = ''
|
14
|
+
c.description = ''
|
15
|
+
c.example 'description', 'command example'
|
16
|
+
c.when_called Maker::Commands::Register
|
17
|
+
end
|
18
|
+
|
19
|
+
command :verify do |c|
|
20
|
+
c.syntax = 'maker verify [options]'
|
21
|
+
c.summary = ''
|
22
|
+
c.description = ''
|
23
|
+
c.example 'description', 'command example'
|
24
|
+
c.option '--some-switch', 'Some switch that does something'
|
25
|
+
c.when_called Maker::Commands::Verify
|
26
|
+
end
|
5
27
|
|
6
|
-
config = RSpec.configuration
|
7
|
-
|
8
|
-
formatter = RSpec::Core::Formatters::JsonFormatter.new(config.output_stream)
|
9
|
-
|
10
|
-
# create reporter with json formatter
|
11
|
-
reporter = RSpec::Core::Reporter.new(config)
|
12
|
-
config.instance_variable_set(:@reporter, reporter)
|
13
|
-
|
14
|
-
# internal hack
|
15
|
-
# api may not be stable, make sure lock down Rspec version
|
16
|
-
loader = config.send(:formatter_loader)
|
17
|
-
notifications = loader.send(:notifications_for,
|
18
|
-
RSpec::Core::Formatters::JsonFormatter)
|
19
|
-
|
20
|
-
reporter.register_listener(formatter, *notifications)
|
21
|
-
|
22
|
-
|
23
|
-
spec_file = File.expand_path( "../lib/maker_website/website_spec.rb", File.dirname(__FILE__))
|
24
|
-
RSpec::Core::Runner.run([spec_file])
|
25
|
-
|
26
|
-
# here's your json hash
|
27
|
-
p formatter.output_hash
|
data/lib/maker/client.rb
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
module Maker
|
4
|
+
class Client
|
5
|
+
FILE_NAME = './.maker'
|
6
|
+
|
7
|
+
def save(data)
|
8
|
+
File.write(FILE_NAME, data.to_yaml)
|
9
|
+
@data = nil
|
10
|
+
end
|
11
|
+
|
12
|
+
def data
|
13
|
+
@data ||= load_data
|
14
|
+
end
|
15
|
+
|
16
|
+
def registered?
|
17
|
+
!!fields['email']
|
18
|
+
end
|
19
|
+
|
20
|
+
def fields
|
21
|
+
data[data.keys.first] || {}
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def load_data
|
27
|
+
if File.exists? FILE_NAME
|
28
|
+
YAML.load(File.read(FILE_NAME))
|
29
|
+
else
|
30
|
+
{}
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Maker
|
2
|
+
module Commands
|
3
|
+
class Register
|
4
|
+
attr_reader :email
|
5
|
+
|
6
|
+
def initialize(args, options)
|
7
|
+
@email = args.first
|
8
|
+
run
|
9
|
+
end
|
10
|
+
|
11
|
+
def run
|
12
|
+
student = server.student
|
13
|
+
|
14
|
+
client.save(student)
|
15
|
+
end
|
16
|
+
|
17
|
+
def server
|
18
|
+
@server ||= Server.new(email)
|
19
|
+
end
|
20
|
+
|
21
|
+
def client
|
22
|
+
@client ||= Client.new
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'commander/import'
|
2
|
+
|
3
|
+
module Maker
|
4
|
+
module Commands
|
5
|
+
class Verify
|
6
|
+
def initialize(args, options)
|
7
|
+
run
|
8
|
+
end
|
9
|
+
|
10
|
+
def run
|
11
|
+
fail Maker::NotRegisteredError unless client.registered?
|
12
|
+
@results = MakerWebsite::RunRSpec.with(file_name: file_name)
|
13
|
+
handle_results
|
14
|
+
end
|
15
|
+
|
16
|
+
def server
|
17
|
+
@server ||= Maker::Server.new(client.fields['email'])
|
18
|
+
end
|
19
|
+
|
20
|
+
def client
|
21
|
+
@client ||= Maker::Client.new
|
22
|
+
end
|
23
|
+
|
24
|
+
def stage
|
25
|
+
client.fields['stage']
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def handle_results
|
31
|
+
@results[:summary][:failure_count] > 0 ? handle_failure : handle_success
|
32
|
+
end
|
33
|
+
|
34
|
+
def handle_failure
|
35
|
+
say 'You haven\'t completed this stage yet, please see the test results below:'
|
36
|
+
@results[:examples].select {|example| example[:status] = 'failed'}.each do |example|
|
37
|
+
say "Feature: #{example[:full_description]}"
|
38
|
+
say "Issue: #{example[:exception][:message]}"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def handle_success
|
43
|
+
say "Congratulations! Stage #{stage} complete!"
|
44
|
+
next_stage
|
45
|
+
say "Stage #{stage} is now unlocked - good luck!"
|
46
|
+
end
|
47
|
+
|
48
|
+
def next_stage
|
49
|
+
server.next_stage
|
50
|
+
client.save(server.student)
|
51
|
+
end
|
52
|
+
|
53
|
+
def file_name
|
54
|
+
"stage_#{stage}_spec.rb"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
data/lib/maker/server.rb
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'firebase'
|
2
|
+
|
3
|
+
module Maker
|
4
|
+
class Server
|
5
|
+
attr_reader :email
|
6
|
+
|
7
|
+
def initialize(email)
|
8
|
+
@email = email
|
9
|
+
end
|
10
|
+
|
11
|
+
def student
|
12
|
+
@student ||= load_student
|
13
|
+
end
|
14
|
+
|
15
|
+
def firebase
|
16
|
+
@firebase ||= Firebase::Client.new('https://resplendent-fire-7855.firebaseio.com')
|
17
|
+
end
|
18
|
+
|
19
|
+
def next_stage
|
20
|
+
fields['stage'] += 1
|
21
|
+
firebase.set("students/#{student_id}", fields)
|
22
|
+
end
|
23
|
+
|
24
|
+
def fields
|
25
|
+
student[student_id] || {}
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def student_id
|
31
|
+
student.keys.first
|
32
|
+
end
|
33
|
+
|
34
|
+
def load_student
|
35
|
+
response = firebase.get('students', orderBy: "\"email\"", startAt: "\"#{email}\"", endAt: "\"#{email}\"")
|
36
|
+
fail 'could not fetch email address from server' unless response.success?
|
37
|
+
response.body
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
data/lib/maker_website.rb
CHANGED
@@ -1,5 +1,14 @@
|
|
1
1
|
require "maker_website/version"
|
2
|
+
require 'maker_website/run_rspec'
|
3
|
+
require 'maker/commands/register'
|
4
|
+
require 'maker/commands/verify'
|
5
|
+
require 'maker/client'
|
6
|
+
require 'maker/server'
|
2
7
|
|
3
8
|
module MakerWebsite
|
4
9
|
# Your code goes here...
|
5
10
|
end
|
11
|
+
|
12
|
+
module Maker
|
13
|
+
class NotRegisteredError < StandardError; end
|
14
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'rspec'
|
2
|
+
require 'rspec/core/formatters/json_formatter'
|
3
|
+
|
4
|
+
# Capybara stuff
|
5
|
+
require 'capybara'
|
6
|
+
require 'capybara/rspec'
|
7
|
+
|
8
|
+
module MakerWebsite
|
9
|
+
class RunRSpec
|
10
|
+
attr_reader :file_name
|
11
|
+
|
12
|
+
def self.with(file_name:)
|
13
|
+
self.new(file_name).run
|
14
|
+
end
|
15
|
+
|
16
|
+
def initialize(file_name)
|
17
|
+
@file_name = file_name
|
18
|
+
end
|
19
|
+
|
20
|
+
def run
|
21
|
+
reporter.register_listener(formatter, *notifications)
|
22
|
+
RSpec::Core::Runner.run([spec_file])
|
23
|
+
|
24
|
+
formatter.output_hash
|
25
|
+
end
|
26
|
+
|
27
|
+
def spec_file
|
28
|
+
@spec_file ||= File.expand_path( "stages/#{file_name}", File.dirname(__FILE__))
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def config
|
34
|
+
@config ||= RSpec.configuration
|
35
|
+
end
|
36
|
+
|
37
|
+
def formatter
|
38
|
+
@formatter ||= RSpec::Core::Formatters::JsonFormatter.new(StringIO.new)
|
39
|
+
end
|
40
|
+
|
41
|
+
def reporter
|
42
|
+
# create reporter with json formatter
|
43
|
+
@reporter ||= RSpec::Core::Reporter.new(config)
|
44
|
+
config.instance_variable_set(:@reporter, @reporter)
|
45
|
+
end
|
46
|
+
|
47
|
+
def notifications
|
48
|
+
# internal hack
|
49
|
+
# api may not be stable, make sure lock down Rspec version
|
50
|
+
@loader ||= config.send(:formatter_loader)
|
51
|
+
@notifications ||= @loader.send(:notifications_for,
|
52
|
+
RSpec::Core::Formatters::JsonFormatter)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
Binary file
|
data/maker_website.gemspec
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: maker_website
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ben Forrest
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-10-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -66,6 +66,34 @@ dependencies:
|
|
66
66
|
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: firebase
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: commander
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
69
97
|
description:
|
70
98
|
email:
|
71
99
|
- ben@silvabox.com
|
@@ -75,16 +103,23 @@ extensions: []
|
|
75
103
|
extra_rdoc_files: []
|
76
104
|
files:
|
77
105
|
- ".gitignore"
|
106
|
+
- ".rspec"
|
78
107
|
- Gemfile
|
79
108
|
- README.md
|
80
109
|
- Rakefile
|
81
110
|
- bin/console
|
82
111
|
- bin/setup
|
83
112
|
- exe/maker
|
113
|
+
- lib/maker/client.rb
|
114
|
+
- lib/maker/commands/register.rb
|
115
|
+
- lib/maker/commands/verify.rb
|
116
|
+
- lib/maker/server.rb
|
84
117
|
- lib/maker_website.rb
|
118
|
+
- lib/maker_website/run_rspec.rb
|
119
|
+
- lib/maker_website/stages/stage_1_spec.rb
|
85
120
|
- lib/maker_website/version.rb
|
86
|
-
- lib/maker_website/website_spec.rb
|
87
121
|
- maker_website-0.1.1.gem
|
122
|
+
- maker_website-0.1.2.gem
|
88
123
|
- maker_website.gemspec
|
89
124
|
homepage: http://www.makersacademy.com
|
90
125
|
licenses: []
|