utter 1.0.14 → 1.0.15
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 +4 -4
- data/README.md +1 -0
- data/bin/utter +106 -64
- data/lib/generators/container.rb +63 -0
- data/lib/generators/domain.rb +32 -0
- data/lib/generators/extension.rb +47 -0
- data/lib/generators/microservice.rb +46 -0
- data/lib/generators/tips.rb +7 -0
- data/lib/internals/core/microservice.rb +3 -5
- data/lib/utter.rb +1 -1
- data/samples/gitlapse::v1::lapses/Dockerfile +0 -0
- data/samples/gitlapse::v1::lapses/Gemfile +2 -0
- data/samples/gitlapse::v1::lapses/Gemfile.lock +53 -0
- data/samples/gitlapse::v1::lapses/README.md +1 -0
- data/samples/gitlapse::v1::lapses/config.ru +7 -0
- data/samples/gitlapse::v1::lapses/domain/echo/README.md +0 -0
- data/samples/gitlapse::v1::lapses/domain/echo/lib/main.rb +11 -0
- data/samples/gitlapse::v1::lapses/domain/main.rb +19 -0
- data/samples/gitlapse::v1::lapses/gitlapse::v1::lapses.gemspec +0 -0
- data/samples/gitlapse::v1::lapses/log/README.md +1 -0
- data/samples/gitlapse::v1::lapses/microservice/README.md +0 -0
- data/samples/gitlapse::v1::lapses/microservice/lib/main.rb +16 -0
- data/samples/upjoystream::v1::torrents/config.ru +1 -1
- data/samples/upjoystream::v1::torrents/microservice/lib/app.rb +1 -1
- metadata +18 -4
- data/bin/highline.rb +0 -131
- data/lib/generators/generators.rb +0 -93
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 657fc55c85255c7d663dfc8e831cce0684553b6c
|
4
|
+
data.tar.gz: 17df583d30c7b59763e854892f6ef578b76999e0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3618fe6d5b1e817aef68d1ed6e9d4e93376ad4ba96e37ba9a1028546fe7f91c469e2a5fb7434245dd32f43c95307cf5457bc8d94f769cb4ad5b902397a6b6100
|
7
|
+
data.tar.gz: df2e32cdf31fa7109100f483dba900bde99afd98f3237525b125f77bb8b0a19bac5ae98ef236364b53949bb585d1a01e332aaca979682e38d156f404d77c7eaa
|
data/README.md
CHANGED
@@ -2,6 +2,7 @@ What is Utter?
|
|
2
2
|
==============
|
3
3
|
Utter is a Domain-specific Microservices Framework written in Ruby for building both regular and advanced Rule-based web APIs.
|
4
4
|
|
5
|
+
irc: #utter@freenode.net
|
5
6
|
|
6
7
|
What is a Domain-specific Microservice?
|
7
8
|
========================================
|
data/bin/utter
CHANGED
@@ -3,7 +3,10 @@
|
|
3
3
|
require "thor"
|
4
4
|
require_relative './../lib/utter'
|
5
5
|
require_relative './../lib/generators/tips'
|
6
|
-
require_relative './../lib/generators/
|
6
|
+
require_relative './../lib/generators/container'
|
7
|
+
require_relative './../lib/generators/microservice'
|
8
|
+
require_relative './../lib/generators/domain'
|
9
|
+
require_relative './../lib/generators/extension'
|
7
10
|
|
8
11
|
module Utter
|
9
12
|
#This directory contains common microservice templates
|
@@ -18,84 +21,123 @@ module Utter
|
|
18
21
|
|
19
22
|
no_commands do
|
20
23
|
def seprator
|
21
|
-
puts
|
24
|
+
puts(" ")
|
22
25
|
puts("-------------------------------------------------------------------------------")
|
23
26
|
puts(" ")
|
24
27
|
end
|
28
|
+
|
29
|
+
def done
|
30
|
+
message = set_color " DONE ", :green, :on_white, :bold
|
31
|
+
motive = set_color " You're Awesome!" + " ", :yellow
|
32
|
+
say(message + motive)
|
33
|
+
#say("run your microservice via `bundle install; bundle exec rackup`")
|
34
|
+
end
|
25
35
|
end
|
26
36
|
|
27
37
|
utter_banner
|
28
|
-
# Generates a microservice
|
29
|
-
desc "microservice", "Generates an utter microservice project"
|
30
|
-
def microservice
|
31
|
-
microservices_quotes
|
32
|
-
|
33
|
-
seprator
|
34
|
-
|
35
|
-
info = set_color(" INFO ", :green, :on_white, :bold)
|
36
|
-
message = " e.g. api.github.com/v1/repos "
|
37
|
-
puts (info + message)
|
38
|
-
|
39
|
-
project_name = ask(set_color("Organization/Project Name, e.g. 'github': ", :bold))
|
40
|
-
|
41
|
-
api_version = ask(set_color("API Version, e.g. 'v1': ",:bold))
|
42
|
-
|
43
|
-
service_name = ask(set_color("Microservice Name, e.g. 'repos': ", :bold))
|
44
|
-
|
45
|
-
seprator
|
46
38
|
|
47
|
-
|
39
|
+
desc "new", "Generates a new utter docker-based container for a microservice/ a new utter domain extension"
|
40
|
+
def new command, params = {}
|
41
|
+
#if params is empty then use ineractive mode
|
42
|
+
if params.empty? then
|
43
|
+
case command
|
44
|
+
when "microservice", "service"
|
45
|
+
microservices_quotes
|
46
|
+
|
47
|
+
seprator
|
48
|
+
|
49
|
+
info = set_color(" INFO ", :green, :on_white, :bold)
|
50
|
+
message = " e.g. api.github.com/v1/repos "
|
51
|
+
puts (info + message)
|
52
|
+
|
53
|
+
project_name = ask(set_color("Organization/Project Name, e.g. 'github': ", :bold)).capitalize
|
54
|
+
api_version = ask(set_color("API Version, e.g. 'v1': ",:bold)).capitalize
|
55
|
+
service_name = ask(set_color("Microservice Name, e.g. 'repos': ", :bold)).capitalize
|
56
|
+
#domain_name = ask(set_color("Domain Name, e.g. 'scm': ", :bold))
|
57
|
+
|
58
|
+
seprator
|
59
|
+
|
60
|
+
path = "./#{project_name}::#{api_version}::#{service_name}"
|
61
|
+
|
62
|
+
#params = {:path => path, :module_name => project_name, :ext_name => service_name, :domain_name => domain_name}
|
63
|
+
params = {:path => path, :module_name => project_name, :ext_name => service_name}
|
64
|
+
|
65
|
+
|
66
|
+
# Dockerfile
|
67
|
+
# Gemfile
|
68
|
+
# config.ru
|
69
|
+
# README.md
|
70
|
+
generator = Utter::Generators::Container.new
|
71
|
+
#generator.destination_root = path
|
72
|
+
generator.create_container params
|
73
|
+
|
74
|
+
# microservice/
|
75
|
+
# microservice/lib/
|
76
|
+
# microservice/lib/internals/
|
77
|
+
# microservice/lib/main.rb
|
78
|
+
# microservice/spec/main_spec.rb
|
79
|
+
# microservice/spec/helper.rb
|
80
|
+
# microservice/README.md
|
81
|
+
generator = Utter::Generators::Microservice.new
|
82
|
+
#generator.destination_root = path
|
83
|
+
generator.create_microservice params
|
84
|
+
|
85
|
+
# domain/extensions/
|
86
|
+
# domain/main.rb
|
87
|
+
generator = Utter::Generators::Domain.new
|
88
|
+
#generator.destination_root = path
|
89
|
+
generator.create_domain params
|
90
|
+
|
91
|
+
done # Says Done you are awesome!
|
92
|
+
when "extension", "ext"
|
93
|
+
# domain/extensions/ext_name
|
94
|
+
ddd_quotes
|
95
|
+
|
96
|
+
seprator
|
97
|
+
|
98
|
+
info = set_color(" INFO ", :green, :on_white, :bold)
|
99
|
+
message = " Generates an utter domain extension in your domain/lib/ directory. e.g. domain/ext_name.rb "
|
100
|
+
puts (info + message)
|
101
|
+
|
102
|
+
#TODO should search rubygems for for the given keywords and suggest a relevant Domain-specific Framework to use
|
103
|
+
#domain_framework_name = ask(set_color("Domain-specific Framework name, e.g. 'GameOn': ", :bold))
|
104
|
+
#domain_keywords = ask(set_color("Domain keywords, e.g. 'gamification': ", :bold))
|
105
|
+
ext_name = ask(set_color("Extension Name, e.g. 'badges': ",:bold))
|
106
|
+
|
107
|
+
params = {:ext_name => ext_name}
|
108
|
+
generator = Utter::Generators::Ext.new
|
109
|
+
generator.create_ext params
|
110
|
+
|
111
|
+
when "auth"
|
112
|
+
#TODO Generates an utter auth microservice
|
113
|
+
#say("Configure SSL now?")
|
114
|
+
#choices = ["YES","NO"]
|
115
|
+
#choices = choices.map.with_index{ |a, i| [i+1, *a]}
|
116
|
+
#print_table choices
|
117
|
+
#selection = ask("Answer:", :green).to_i
|
118
|
+
#p selection
|
119
|
+
when "consumer"
|
120
|
+
#TODO Generates an utter consumer domain extension to talk to other services in your domain/lib/ directory
|
121
|
+
when "sdk"
|
122
|
+
#TODO generates an sdk library directory structure e.g. gitlapse SDK
|
123
|
+
else
|
124
|
+
p "not known"
|
125
|
+
end
|
126
|
+
else
|
127
|
+
#if params is not empty then use direct mode (good for piping from other programs)
|
48
128
|
|
49
|
-
|
50
|
-
|
51
|
-
generator = Utter::Generators::Microservice.new
|
52
|
-
generator.destination_root = path
|
53
|
-
|
54
|
-
generator.create_microservice_directory_structure
|
55
|
-
generator.create_domain_directory_structure
|
56
|
-
generator.create_configru(params)
|
57
|
-
generator.create_gemfile(params)
|
58
|
-
|
59
|
-
#generator.create_domain_directory ({:path => path, :module_name => project_name, :ext_name => service_name})
|
60
|
-
#generator.invoke_all
|
61
|
-
|
62
|
-
message = set_color " DONE ", :green, :on_white, :bold
|
63
|
-
motive = set_color " You're Awesome!" + " ", :yellow
|
64
|
-
say(message + motive)
|
65
|
-
say("run `bundle install; bundle exec rackup`")
|
66
|
-
end
|
67
|
-
|
68
|
-
=begin
|
69
|
-
say("Configure SSL now?")
|
70
|
-
choices = ["YES","NO"]
|
71
|
-
choices = choices.map.with_index{ |a, i| [i+1, *a]}
|
72
|
-
print_table choices
|
73
|
-
selection = ask("Answer:", :green).to_i
|
74
|
-
p selection
|
75
|
-
=end
|
76
|
-
|
77
|
-
# Generates a domain ext
|
78
|
-
desc "ext", "Generates an utter domain extension in your domain/lib/ directory"
|
79
|
-
def ext module_name, ext_name
|
80
|
-
ddd_quotes
|
81
|
-
params = {:path => path, :module_name => project_name, :ext_name => service_name}
|
82
|
-
generator = Utter::Generators::Ext.new
|
83
|
-
generator.create_ext params={}
|
84
|
-
#generator.invoke_all
|
129
|
+
end
|
85
130
|
end
|
86
131
|
|
87
|
-
|
88
|
-
|
89
|
-
def consumer module_name="Consumer", ext_name
|
132
|
+
desc "package", ""
|
133
|
+
def package
|
90
134
|
end
|
91
135
|
|
92
|
-
|
93
|
-
|
94
|
-
def auth module_name="Consumer", ext_name
|
136
|
+
desc "deploy", ""
|
137
|
+
def deploy
|
95
138
|
end
|
96
139
|
|
97
140
|
end
|
98
141
|
end
|
99
142
|
|
100
143
|
Utter::CLI.start
|
101
|
-
#Ext.new.generate "DomainName", "Lapse"
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'thor'
|
2
|
+
require 'thor/group'
|
3
|
+
|
4
|
+
module Utter
|
5
|
+
module Generators
|
6
|
+
class Container < Thor::Group
|
7
|
+
include Thor::Actions
|
8
|
+
|
9
|
+
desc 'Generate an utter project skleton'
|
10
|
+
def create_container params={}
|
11
|
+
path = params[:path]
|
12
|
+
|
13
|
+
# config.ru
|
14
|
+
@file = <<-FOO
|
15
|
+
Dir[File.dirname(__FILE__) + '/microservice/**/*.rb'].each {|file| require file }
|
16
|
+
Dir[File.dirname(__FILE__) + '/domain/**/*.rb'].each {|file| require file }
|
17
|
+
map "/" do
|
18
|
+
run Sonopace::API::Status
|
19
|
+
end
|
20
|
+
FOO
|
21
|
+
create_file "#{path}/config.ru"
|
22
|
+
append_to_file "#{path}/config.ru", @file
|
23
|
+
# end of config.ru
|
24
|
+
############################
|
25
|
+
# Gemfile
|
26
|
+
@file = <<-FOO
|
27
|
+
source 'https://rubygems.org'
|
28
|
+
gem 'utter'
|
29
|
+
FOO
|
30
|
+
create_file "#{path}/Gemfile"
|
31
|
+
append_to_file "#{path}/Gemfile", @file
|
32
|
+
# end of Gemfile
|
33
|
+
############################
|
34
|
+
# Dockerfile
|
35
|
+
@file = <<-FOO
|
36
|
+
Docker stuff here
|
37
|
+
FOO
|
38
|
+
create_file "#{path}/Dockerfile"
|
39
|
+
append_to_file "#{path}/Dockerfile", @file
|
40
|
+
# end of Dockerfile
|
41
|
+
############################
|
42
|
+
# README.md for the utter container
|
43
|
+
@file = <<-FOO
|
44
|
+
Abou this utter project. 1.Microservice 2.Domain
|
45
|
+
FOO
|
46
|
+
create_file "#{path}/README.md"
|
47
|
+
append_to_file "#{path}/README.md", @file
|
48
|
+
# end of README.md
|
49
|
+
############################
|
50
|
+
# Log for the utter container
|
51
|
+
@file = <<-FOO
|
52
|
+
Abou this log directory
|
53
|
+
FOO
|
54
|
+
empty_directory "#{path}/log"
|
55
|
+
create_file "#{path}/log/README.md"
|
56
|
+
append_to_file "#{path}/log/README.md", @file
|
57
|
+
# end of log
|
58
|
+
############################
|
59
|
+
#TODO container_name.gemspec
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'thor'
|
2
|
+
require 'thor/group'
|
3
|
+
|
4
|
+
module Utter
|
5
|
+
module Generators
|
6
|
+
class Domain < Thor::Group
|
7
|
+
include Thor::Actions
|
8
|
+
|
9
|
+
desc 'Generate an utter project skleton'
|
10
|
+
def create_domain params={}
|
11
|
+
path = params[:path]
|
12
|
+
# config.ru
|
13
|
+
create_file "#{path}/domain/main.rb"
|
14
|
+
@file = <<-FOO
|
15
|
+
#TODO require all extentions in the domain/extentions dir
|
16
|
+
#TODO require a relevant domain-specific framework
|
17
|
+
#TODO write some domain-specific rules here thus that the
|
18
|
+
#recievied rules{}from the microservices gets evaluated based on them.
|
19
|
+
FOO
|
20
|
+
append_to_file "#{path}/domain/main.rb", @file
|
21
|
+
|
22
|
+
#open("#{path}/domain/main.rb", 'a') do |f|
|
23
|
+
# f.puts @file
|
24
|
+
#end
|
25
|
+
# end of config.ru
|
26
|
+
############################
|
27
|
+
# create domain/extensions
|
28
|
+
#empty_directory "#{path}/domain/extensions"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'thor'
|
2
|
+
require 'thor/group'
|
3
|
+
|
4
|
+
module Utter
|
5
|
+
module Generators
|
6
|
+
|
7
|
+
class Ext < Thor::Group
|
8
|
+
include Thor::Actions
|
9
|
+
|
10
|
+
desc 'Generate an utter domain extension'
|
11
|
+
def create_ext params={}
|
12
|
+
@ext_name = params[:ext_name].downcase
|
13
|
+
|
14
|
+
empty_directory "domain/#{@ext_name.downcase}/lib/internals"
|
15
|
+
|
16
|
+
@file = <<-FOO
|
17
|
+
module #{@ext_name.capitalize}
|
18
|
+
VERSION = "0.0.0"
|
19
|
+
class Main
|
20
|
+
def initialize(app, opts={}, params={})
|
21
|
+
@app = app
|
22
|
+
@opts = opts
|
23
|
+
@params = params
|
24
|
+
end
|
25
|
+
|
26
|
+
def call(env)
|
27
|
+
#TODO manipulate value objects, before passing to the stack!
|
28
|
+
@app.call(env)
|
29
|
+
#TODO manipulate value objects, after passing to the stack!
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
FOO
|
34
|
+
create_file "domain/#{@ext_name.downcase}/lib/main.rb"
|
35
|
+
append_to_file "domain/#{@ext_name.downcase}/lib/main.rb", @file
|
36
|
+
|
37
|
+
empty_directory "domain/#{@ext_name.downcase}/spec"
|
38
|
+
create_file "domain/#{@ext_name.downcase}/spec/spec_helper.rb"
|
39
|
+
create_file "domain/#{@ext_name.downcase}/spec/main_spec.rb"
|
40
|
+
|
41
|
+
create_file "domain/#{@ext_name.downcase}/README.md"
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'thor'
|
2
|
+
require 'thor/group'
|
3
|
+
|
4
|
+
module Utter
|
5
|
+
module Generators
|
6
|
+
# Usage
|
7
|
+
# generator = Utter::Generators::Microservice.new
|
8
|
+
# generator.destination_root = path #optional, will use current directory by default
|
9
|
+
# generator.invoke_all
|
10
|
+
class Microservice < Thor::Group
|
11
|
+
include Thor::Actions
|
12
|
+
|
13
|
+
desc 'Generate an utter microservice directory structure'
|
14
|
+
def create_microservice params={}
|
15
|
+
path = params[:path]
|
16
|
+
empty_directory "#{path}/microservice"
|
17
|
+
empty_directory "#{path}/microservice/lib"
|
18
|
+
empty_directory "#{path}/microservice/lib/internals"
|
19
|
+
# microservice/lib/main.rb
|
20
|
+
create_file "#{path}/microservice/lib/main.rb"
|
21
|
+
@file = <<-FOO
|
22
|
+
#main.rb
|
23
|
+
FOO
|
24
|
+
append_to_file "#{path}/microservice/lib/main.rb", @file
|
25
|
+
|
26
|
+
# end of microservice/lib/main.rb
|
27
|
+
|
28
|
+
empty_directory "#{path}/microservice/spec"
|
29
|
+
create_file "#{path}/microservice/spec/main_spec.rb"
|
30
|
+
create_file "#{path}/microservice/spec/spec_helper.rb"
|
31
|
+
|
32
|
+
# microservice/README.md
|
33
|
+
create_file "#{path}/microservice/README.md"
|
34
|
+
@file = <<-FOO
|
35
|
+
# describe how to use the microservice here
|
36
|
+
FOO
|
37
|
+
|
38
|
+
append_to_file "#{path}/microservice/README.md", @file
|
39
|
+
|
40
|
+
# end of microservice/README.md
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
data/lib/generators/tips.rb
CHANGED
@@ -22,6 +22,9 @@ module Utter
|
|
22
22
|
|
23
23
|
# Display microservices qoutes
|
24
24
|
@@microservices_quotes = [
|
25
|
+
"“The things you own end up owning you. It's only after you lose everything that you're free to do anything.”
|
26
|
+
― Chuck Palahniuk, Fight Club #rails_must_die",
|
27
|
+
|
25
28
|
"Microservices are important simply because they add unique value in a way of simplification of complexity in systems.",
|
26
29
|
"By breaking apart your system or application into many smaller parts, you show ways of reducing duplication, increasing cohesion and lowering your coupling between parts, thus making your overall system parts easier to understand, more scalable, and easier to change.",
|
27
30
|
"The downside of a distributed system is that it is always more complex from a systems standpoint. The overhead of many small services to manage is another factor to consider.",
|
@@ -29,6 +32,9 @@ module Utter
|
|
29
32
|
|
30
33
|
# Domain Driven Design qoutes
|
31
34
|
@@ddd_quotes = [
|
35
|
+
"“May I never be complete. May I never be content. May I never be perfect.”
|
36
|
+
― Chuck Palahniuk, Fight Club",
|
37
|
+
|
32
38
|
"“The indirectness of communication conceals the formation of schisms—different team members use terms differently but don’t realize it.”
|
33
39
|
― Eric Evans, Domain-Driven Design: Tackling Complexity in the Heart of Software",
|
34
40
|
|
@@ -141,6 +147,7 @@ module Utter
|
|
141
147
|
utter_title = set_color " Utter ", :red, :on_white, :bold
|
142
148
|
utter_version = set_color Utter::VERSION + " ", :black, :on_white, :bold
|
143
149
|
say(utter_title + utter_version )
|
150
|
+
say("visit #utter @freenode.net for direct support")
|
144
151
|
|
145
152
|
return # back to the calling routine
|
146
153
|
|
@@ -16,7 +16,7 @@ module Utter
|
|
16
16
|
|
17
17
|
#TODO set a flag to disable this in production for security
|
18
18
|
# this helps testing APIs on localmachines as CORS fucks developers time.
|
19
|
-
#
|
19
|
+
# But not recommended to be set while in production enviroments
|
20
20
|
before do
|
21
21
|
response.headers["Access-Control-Allow-Origin"] = "*"
|
22
22
|
response.headers["Access-Control-Allow-Methods"] = "POST"
|
@@ -28,11 +28,9 @@ module Utter
|
|
28
28
|
end
|
29
29
|
|
30
30
|
#class Public::Microservice < Utter::Microservice; end
|
31
|
-
|
32
31
|
#class Private::Microservice < Utter::Microservice
|
33
|
-
|
34
|
-
|
35
|
-
|
32
|
+
#TODO do somthing here to make it secure via some mechanism!
|
33
|
+
# as we don't do websites, we striclty focus on APIs we can use HTTP basic auth to make it secure!?
|
36
34
|
#end
|
37
35
|
|
38
36
|
end
|
data/lib/utter.rb
CHANGED
@@ -16,7 +16,7 @@ module Utter
|
|
16
16
|
# MAJOR version when you make incompatible API changes,
|
17
17
|
# MINOR version when you add functionality in a backwards-compatible manner, and
|
18
18
|
# PATCH version when you make backwards-compatible bug fixes.
|
19
|
-
VERSION = "1.0.
|
19
|
+
VERSION = "1.0.15"
|
20
20
|
|
21
21
|
$log = Logger.new(STDOUT)
|
22
22
|
|
File without changes
|
@@ -0,0 +1,53 @@
|
|
1
|
+
GEM
|
2
|
+
remote: https://rubygems.org/
|
3
|
+
specs:
|
4
|
+
coderay (1.1.1)
|
5
|
+
ibsciss-middleware (0.4.1)
|
6
|
+
method_source (0.8.2)
|
7
|
+
minitest (5.9.1)
|
8
|
+
multi_json (1.12.1)
|
9
|
+
mushin (0.1.0)
|
10
|
+
ibsciss-middleware (~> 0.3)
|
11
|
+
pry (0.10.4)
|
12
|
+
coderay (~> 1.1.0)
|
13
|
+
method_source (~> 0.8.1)
|
14
|
+
slop (~> 3.4)
|
15
|
+
puma (3.6.0)
|
16
|
+
rack (1.6.4)
|
17
|
+
rack-protection (1.5.3)
|
18
|
+
rack
|
19
|
+
rack-test (0.6.3)
|
20
|
+
rack (>= 1.0)
|
21
|
+
rake (11.3.0)
|
22
|
+
sinatra (1.4.7)
|
23
|
+
rack (~> 1.5)
|
24
|
+
rack-protection (~> 1.4)
|
25
|
+
tilt (>= 1.3, < 3)
|
26
|
+
sinatra-cross_origin (0.3.2)
|
27
|
+
sinatra-json (0.1.0)
|
28
|
+
multi_json (~> 1.0)
|
29
|
+
sinatra (~> 1.0)
|
30
|
+
slop (3.6.0)
|
31
|
+
thor (0.19.1)
|
32
|
+
tilt (2.0.5)
|
33
|
+
utter (1.0.14)
|
34
|
+
bundler
|
35
|
+
minitest
|
36
|
+
mushin
|
37
|
+
pry
|
38
|
+
puma
|
39
|
+
rack-test
|
40
|
+
rake
|
41
|
+
sinatra
|
42
|
+
sinatra-cross_origin
|
43
|
+
sinatra-json
|
44
|
+
thor
|
45
|
+
|
46
|
+
PLATFORMS
|
47
|
+
ruby
|
48
|
+
|
49
|
+
DEPENDENCIES
|
50
|
+
utter
|
51
|
+
|
52
|
+
BUNDLED WITH
|
53
|
+
1.12.5
|
@@ -0,0 +1 @@
|
|
1
|
+
#TODO say somthing about the microservice here
|
File without changes
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# this file is named after the domain_name (later a mushin generated framework name)
|
2
|
+
# this should be a framework of some sort providing its way for inversion of control
|
3
|
+
# but for now it only acts like require_relative for config.ru
|
4
|
+
|
5
|
+
# How to use this main.rb file
|
6
|
+
# ------------------------------
|
7
|
+
# require 'gameon' #thats a mushin domain-specific framework for gamification
|
8
|
+
# require all the extenstions that you created here, configru
|
9
|
+
# write your rules (this file acts as your rulebook)
|
10
|
+
# GameOn.rules do
|
11
|
+
# #TODO here i write the rules i want for this microservice
|
12
|
+
# end
|
13
|
+
|
14
|
+
# Usage within the microservice/main.rb will be like
|
15
|
+
# GamOn::Stack.new(recivied_params_hash) do
|
16
|
+
# use ....
|
17
|
+
# use ....
|
18
|
+
# use ....
|
19
|
+
# end
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
logs here uses append-only SSD to write timestamped logs
|
File without changes
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Gitlapse
|
2
|
+
module V1
|
3
|
+
class Lapses < Utter::Microservice
|
4
|
+
#$log.info("mounting #{self}")
|
5
|
+
get '/' do
|
6
|
+
"public info"
|
7
|
+
"private info (eyes only)"
|
8
|
+
x = Utter::Stack.new do
|
9
|
+
use Echo, "this is my message"
|
10
|
+
end
|
11
|
+
x.to_s
|
12
|
+
end
|
13
|
+
#run! if app_file == $0
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: utter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.15
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- zotherstupidguy
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-10-
|
11
|
+
date: 2016-10-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pry
|
@@ -334,10 +334,12 @@ files:
|
|
334
334
|
- README.md
|
335
335
|
- Rakefile
|
336
336
|
- bin/console
|
337
|
-
- bin/highline.rb
|
338
337
|
- bin/setup
|
339
338
|
- bin/utter
|
340
|
-
- lib/generators/
|
339
|
+
- lib/generators/container.rb
|
340
|
+
- lib/generators/domain.rb
|
341
|
+
- lib/generators/extension.rb
|
342
|
+
- lib/generators/microservice.rb
|
341
343
|
- lib/generators/tips.rb
|
342
344
|
- lib/internals/core/auth.rb
|
343
345
|
- lib/internals/core/microservice.rb
|
@@ -348,6 +350,18 @@ files:
|
|
348
350
|
- lib/internals/testing/spec.rb
|
349
351
|
- lib/utter.rb
|
350
352
|
- samples/README.md
|
353
|
+
- samples/gitlapse::v1::lapses/Dockerfile
|
354
|
+
- samples/gitlapse::v1::lapses/Gemfile
|
355
|
+
- samples/gitlapse::v1::lapses/Gemfile.lock
|
356
|
+
- samples/gitlapse::v1::lapses/README.md
|
357
|
+
- samples/gitlapse::v1::lapses/config.ru
|
358
|
+
- samples/gitlapse::v1::lapses/domain/echo/README.md
|
359
|
+
- samples/gitlapse::v1::lapses/domain/echo/lib/main.rb
|
360
|
+
- samples/gitlapse::v1::lapses/domain/main.rb
|
361
|
+
- samples/gitlapse::v1::lapses/gitlapse::v1::lapses.gemspec
|
362
|
+
- samples/gitlapse::v1::lapses/log/README.md
|
363
|
+
- samples/gitlapse::v1::lapses/microservice/README.md
|
364
|
+
- samples/gitlapse::v1::lapses/microservice/lib/main.rb
|
351
365
|
- samples/upjoystream::v1::auth/Gemfile
|
352
366
|
- samples/upjoystream::v1::auth/Gemfile.lock
|
353
367
|
- samples/upjoystream::v1::auth/config.ru
|
data/bin/highline.rb
DELETED
@@ -1,131 +0,0 @@
|
|
1
|
-
#TODO remove highline and use Thor generators
|
2
|
-
# http://whatisthor.com/
|
3
|
-
# http://blog.plataformatec.com.br/2009/07/creating-your-own-generators-with-thor/
|
4
|
-
|
5
|
-
require 'highline'
|
6
|
-
# Basic usage
|
7
|
-
|
8
|
-
cli = HighLine.new
|
9
|
-
|
10
|
-
|
11
|
-
# project name
|
12
|
-
answer = cli.ask "What's your project name?"
|
13
|
-
puts "You have answered: #{answer}"
|
14
|
-
|
15
|
-
# microservice version
|
16
|
-
answer = cli.ask "What's your microservice version?"
|
17
|
-
puts "You have answered: #{answer}"
|
18
|
-
|
19
|
-
|
20
|
-
cli.choose do |menu|
|
21
|
-
menu.prompt = "What's your miroservice version?"
|
22
|
-
menu.choice(:v1) do
|
23
|
-
cli.say("confirmed v1")
|
24
|
-
end
|
25
|
-
|
26
|
-
menu.choices(:v2) do
|
27
|
-
cli.say("confirmed v2")
|
28
|
-
end
|
29
|
-
|
30
|
-
menu.choices(:v3) do
|
31
|
-
cli.say("confirmed v3")
|
32
|
-
end
|
33
|
-
|
34
|
-
menu.choices(:v4) do
|
35
|
-
cli.say("confirmed v4")
|
36
|
-
end
|
37
|
-
|
38
|
-
menu.choices(:v5) do
|
39
|
-
cli.say("confirmed v5")
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
# microservice version
|
47
|
-
answer = cli.ask "What's your microservice name?"
|
48
|
-
puts "You have answered: #{answer}"
|
49
|
-
|
50
|
-
# microservice type
|
51
|
-
#answer = cli.ask "Is your microservice public or private?"
|
52
|
-
#puts "You have answered: #{answer}"
|
53
|
-
|
54
|
-
|
55
|
-
cli.choose do |menu|
|
56
|
-
menu.prompt = "What's your miroservice type?"
|
57
|
-
menu.choice(:public) do
|
58
|
-
cli.say("confirmed 'Public' microservice!")
|
59
|
-
end
|
60
|
-
menu.choices(:private) do
|
61
|
-
cli.say("confirmed 'Private' microservice!")
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
# microservice deployment
|
68
|
-
#answer = cli.ask "What's your microservice host IP?"
|
69
|
-
#puts "You have answered: #{answer}"
|
70
|
-
#cli.ask("Enter your host password: ") { |q| q.echo = "x" }
|
71
|
-
|
72
|
-
#cli.choose do |menu|
|
73
|
-
# menu.prompt = "Please choose your favorite programming language? "
|
74
|
-
# menu.choice(:ruby) { cli.say("Good choice!") }
|
75
|
-
# menu.choices(:python, :perl) { cli.say("Not from around here, are you?") }
|
76
|
-
#end
|
77
|
-
|
78
|
-
|
79
|
-
=begin
|
80
|
-
|
81
|
-
# Default answer
|
82
|
-
|
83
|
-
cli.ask("Company? ") { |q| q.default = "none" }
|
84
|
-
|
85
|
-
|
86
|
-
# Validation
|
87
|
-
|
88
|
-
cli.ask("Age? ", Integer) { |q| q.in = 0..105 }
|
89
|
-
cli.ask("Name? (last, first) ") { |q| q.validate = /\A\w+, ?\w+\Z/ }
|
90
|
-
|
91
|
-
|
92
|
-
# Type conversion for answers:
|
93
|
-
|
94
|
-
cli.ask("Birthday? ", Date)
|
95
|
-
cli.ask("Interests? (comma sep list) ", lambda { |str| str.split(/,\s*/) })
|
96
|
-
|
97
|
-
|
98
|
-
# Reading passwords:
|
99
|
-
|
100
|
-
cli.ask("Enter your password: ") { |q| q.echo = false }
|
101
|
-
cli.ask("Enter your password: ") { |q| q.echo = "x" }
|
102
|
-
|
103
|
-
|
104
|
-
# ERb based output (with HighLine's ANSI color tools):
|
105
|
-
cli.say("This should be <%= color('bold', BOLD) %>!")
|
106
|
-
|
107
|
-
|
108
|
-
# Menus:
|
109
|
-
|
110
|
-
cli.choose do |menu|
|
111
|
-
menu.prompt = "Please choose your favorite programming language? "
|
112
|
-
menu.choice(:ruby) { cli.say("Good choice!") }
|
113
|
-
menu.choices(:python, :perl) { cli.say("Not from around here, are you?") }
|
114
|
-
menu.default = :ruby
|
115
|
-
end
|
116
|
-
|
117
|
-
|
118
|
-
## Using colored indices on Menus
|
119
|
-
|
120
|
-
#HighLine::Menu.index_color = :rgb_77bbff # set default index color
|
121
|
-
|
122
|
-
cli.choose do |menu|
|
123
|
-
# menu.index_color = :rgb_999999 # override default color of index
|
124
|
-
# you can also use constants like :blue
|
125
|
-
menu.prompt = "Please choose your favorite programming language? "
|
126
|
-
menu.choice(:ruby) { cli.say("Good choice!") }
|
127
|
-
menu.choices(:python, :perl) { cli.say("Not from around here, are you?") }
|
128
|
-
end
|
129
|
-
|
130
|
-
|
131
|
-
=end
|
@@ -1,93 +0,0 @@
|
|
1
|
-
require 'thor'
|
2
|
-
require 'thor/group'
|
3
|
-
|
4
|
-
module Utter
|
5
|
-
module Generators
|
6
|
-
# Usage
|
7
|
-
# generator = Utter::Generators::Microservice.new
|
8
|
-
# generator.destination_root = path #optional, will use current directory by default
|
9
|
-
# generator.invoke_all
|
10
|
-
class Microservice < Thor::Group
|
11
|
-
include Thor::Actions
|
12
|
-
desc 'Generate an utter microservice directory structure'
|
13
|
-
|
14
|
-
def create_microservice_directory_structure
|
15
|
-
#empty_directory 'microservice'
|
16
|
-
empty_directory 'microservice/lib'
|
17
|
-
empty_directory 'microservice/spec'
|
18
|
-
end
|
19
|
-
|
20
|
-
def create_domain_directory_structure
|
21
|
-
#empty_directory 'domain'
|
22
|
-
empty_directory 'domain/lib'
|
23
|
-
empty_directory 'domain/spec'
|
24
|
-
end
|
25
|
-
|
26
|
-
def create_configru params={}
|
27
|
-
create_file "config.ru"
|
28
|
-
@file = <<-FOO
|
29
|
-
Dir[File.dirname(__FILE__) + '/microservice/**/*.rb'].each {|file| require file }
|
30
|
-
Dir[File.dirname(__FILE__) + '/domain/**/*.rb'].each {|file| require file }
|
31
|
-
|
32
|
-
map "/" do
|
33
|
-
run Sonopace::API::Status
|
34
|
-
end
|
35
|
-
|
36
|
-
FOO
|
37
|
-
|
38
|
-
open("#{params[:path]}/config.ru", 'a') do |f|
|
39
|
-
f.puts @file
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
def create_gemfile params={}
|
44
|
-
create_file "Gemfile"
|
45
|
-
@file = <<-FOO
|
46
|
-
source 'https://rubygems.org'
|
47
|
-
gem 'utter'
|
48
|
-
FOO
|
49
|
-
|
50
|
-
open("#{params[:path]}/Gemfile", 'a') do |f|
|
51
|
-
f.puts @file
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
end
|
56
|
-
|
57
|
-
class Ext < Thor::Group
|
58
|
-
include Thor::Actions
|
59
|
-
desc 'Generate an utter domain extension'
|
60
|
-
|
61
|
-
def create_ext params={}
|
62
|
-
@module_name = params[:module_name].downcase
|
63
|
-
@ext_name = params[:ext_name].downcase
|
64
|
-
|
65
|
-
create_file "domain/lib/#{@ext_name.downcase}.rb"
|
66
|
-
@file = <<-FOO
|
67
|
-
module #{@module_name.capitalize}
|
68
|
-
VERSION = "0.0.0"
|
69
|
-
class #{@ext_name.capitalize}
|
70
|
-
def initialize(app, opts={}, params={})
|
71
|
-
@app = app
|
72
|
-
@opts = opts
|
73
|
-
@params = params
|
74
|
-
end
|
75
|
-
|
76
|
-
def call(env)
|
77
|
-
#TODO manipulate value objects, before passing to the stack!
|
78
|
-
@app.call(env)
|
79
|
-
#TODO manipulate value objects, after passing to the stack!
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
83
|
-
FOO
|
84
|
-
|
85
|
-
open("domain/lib/#{@ext_name.downcase}.rb", 'a') do |f|
|
86
|
-
f.puts @file
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
end
|
91
|
-
|
92
|
-
end
|
93
|
-
end
|