utter 1.0.11 → 1.0.12
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 +10 -0
- data/bin/cli.rb +100 -0
- data/bin/generators.rb +93 -0
- data/bin/quotes.rb +171 -0
- data/lib/utter.rb +1 -1
- data/samples/upjoystream::v1::torrents/Gemfile +1 -1
- data/samples/upjoystream::v1::torrents/Gemfile.lock +42 -1
- data/samples/upjoystream::v1::torrents/config.ru +13 -4
- data/samples/upjoystream::v1::torrents/microservice/lib/app.rb +3 -0
- metadata +6 -6
- data/CODE_OF_CONDUCT.md +0 -49
- data/LICENSE.txt +0 -21
- data/bin/templates/README.md +0 -7
- /data/bin/{scaffold.rb → highline.rb} +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cdf2b5c8c75676a9605a818673f990b68474ffe3
|
4
|
+
data.tar.gz: eab9137f7b86d03b26f1dccd28abd7687c0d3c5b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 79f51c198aefd0586da59a5550ca214eef5829c2ba97936013ef38faa98c0d082ec0e0d99a5c1ae19a74976bc7ba6dc61baff7a034698281ce194bd029d7ad7e
|
7
|
+
data.tar.gz: 3c3a04af7302911994775a69ccae096b46ffc04f8b01918d2b78d1d588f30826de8423c52fb07807d0d85ce49dcbd07328c2224450912c56ec737509c6558995
|
data/README.md
CHANGED
@@ -66,10 +66,20 @@ Rule-based programs also separate the knowledge from the rest of the program in
|
|
66
66
|
|
67
67
|
Microservice Documentation
|
68
68
|
==========================
|
69
|
+
TODO Checkout Thor soucecode to see how they implment Desc methods to make it similar to generate documentation.
|
70
|
+
TODO Also checkout grape sourcecode
|
69
71
|
Utter under the hood uses sinatra gem to auto-generate an live interactive documentation from your code comments, in example
|
70
72
|
if you mount your microservice on api.mystartup.com/v1/products the live interactive documenations will be auto-generated on api.mystartup/v1/products/docs
|
71
73
|
each user can read it and send json from the documentation pages to your live api.
|
72
74
|
|
75
|
+
URL: http://nameko.readthedocs.io/en/stable/about_microservices.html#single-purpose
|
76
|
+
|
77
|
+
UseCases
|
78
|
+
=========
|
79
|
+
if your enviroment is a polygot of microservcies with different technologies and languages, Utter is the one you should use if you want to write Ruby code.
|
80
|
+
|
81
|
+
Somthing like Uber can use Utter to the mess of their system. Utter will divide their system on domain basis, provide their engineers with Rule-based communication to other services, and a dramatically smaller number of services (using domain design as guideline for isolating services)! https://eng.uber.com/soa/
|
82
|
+
https://eng.uber.com/building-tincup/
|
73
83
|
What's Utter Main UseCase?
|
74
84
|
===========================
|
75
85
|
WRITING EFFECTIVE USE CASES: http://alistair.cockburn.us/get/2465
|
data/bin/cli.rb
ADDED
@@ -0,0 +1,100 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "thor"
|
4
|
+
require_relative 'quotes'
|
5
|
+
require_relative 'generators'
|
6
|
+
|
7
|
+
module Utter
|
8
|
+
#This directory contains common microservice templates
|
9
|
+
#- auth microservice template
|
10
|
+
#- logging microservice template
|
11
|
+
#- admin microservice template
|
12
|
+
#
|
13
|
+
#- User generate a template and specifiy certain attr to customize the template to their own needs.
|
14
|
+
#- User then use/further developm the generated microservice.
|
15
|
+
class CLI < Thor
|
16
|
+
include Utter::Quotes
|
17
|
+
|
18
|
+
no_commands do
|
19
|
+
def seprator
|
20
|
+
puts (" ")
|
21
|
+
puts("-------------------------------------------------------------------------------")
|
22
|
+
puts(" ")
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
utter_banner
|
27
|
+
# Generates a microservice
|
28
|
+
desc "microservice", "Generates an utter microservice project"
|
29
|
+
def microservice
|
30
|
+
microservices_quotes
|
31
|
+
|
32
|
+
seprator
|
33
|
+
|
34
|
+
info = set_color(" INFO ", :green, :on_white, :bold)
|
35
|
+
message = " e.g. api.github.com/v1/repos "
|
36
|
+
puts (info + message)
|
37
|
+
|
38
|
+
project_name = ask(set_color("Organization/Project Name, e.g. 'github': ", :bold))
|
39
|
+
|
40
|
+
api_version = ask(set_color("API Version, e.g. 'v1': ",:bold))
|
41
|
+
|
42
|
+
service_name = ask(set_color("Microservice Name, e.g. 'repos': ", :bold))
|
43
|
+
|
44
|
+
seprator
|
45
|
+
|
46
|
+
path = "./#{project_name}::#{api_version}::#{service_name}"
|
47
|
+
|
48
|
+
params = {:path => path, :module_name => project_name, :ext_name => service_name}
|
49
|
+
|
50
|
+
generator = Utter::Generators::Microservice.new
|
51
|
+
generator.destination_root = path
|
52
|
+
|
53
|
+
generator.create_microservice_directory_structure
|
54
|
+
generator.create_domain_directory_structure
|
55
|
+
generator.create_configru(params)
|
56
|
+
generator.create_gemfile(params)
|
57
|
+
|
58
|
+
#generator.create_domain_directory ({:path => path, :module_name => project_name, :ext_name => service_name})
|
59
|
+
#generator.invoke_all
|
60
|
+
|
61
|
+
message = set_color " DONE ", :green, :on_white, :bold
|
62
|
+
motive = set_color " You're Awesome!" + " ", :yellow
|
63
|
+
say(message + motive)
|
64
|
+
say("run `bundle install; bundle exec rackup`")
|
65
|
+
end
|
66
|
+
|
67
|
+
=begin
|
68
|
+
say("Configure SSL now?")
|
69
|
+
choices = ["YES","NO"]
|
70
|
+
choices = choices.map.with_index{ |a, i| [i+1, *a]}
|
71
|
+
print_table choices
|
72
|
+
selection = ask("Answer:", :green).to_i
|
73
|
+
p selection
|
74
|
+
=end
|
75
|
+
|
76
|
+
# Generates a domain ext
|
77
|
+
desc "ext", "Generates an utter domain extension in your domain/lib/ directory"
|
78
|
+
def ext module_name, ext_name
|
79
|
+
ddd_quotes
|
80
|
+
params = {:path => path, :module_name => project_name, :ext_name => service_name}
|
81
|
+
generator = Utter::Generators::Ext.new
|
82
|
+
generator.create_ext params={}
|
83
|
+
#generator.invoke_all
|
84
|
+
end
|
85
|
+
|
86
|
+
# Generates a consumer domain ext to talk to other services
|
87
|
+
desc "consumer", "Generates an utter consumer domain extension to talk to other services in your domain/lib/ directory"
|
88
|
+
def consumer module_name="Consumer", ext_name
|
89
|
+
end
|
90
|
+
|
91
|
+
# Generates a consumer domain ext to talk to other services
|
92
|
+
desc "auth", "Generates an utter auth microservice"
|
93
|
+
def auth module_name="Consumer", ext_name
|
94
|
+
end
|
95
|
+
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
Utter::CLI.start
|
100
|
+
#Ext.new.generate "DomainName", "Lapse"
|
data/bin/generators.rb
ADDED
@@ -0,0 +1,93 @@
|
|
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
|
data/bin/quotes.rb
ADDED
@@ -0,0 +1,171 @@
|
|
1
|
+
module Utter
|
2
|
+
module Quotes
|
3
|
+
|
4
|
+
def self.included(klass)
|
5
|
+
klass.extend self
|
6
|
+
end
|
7
|
+
|
8
|
+
|
9
|
+
|
10
|
+
# Design qoutes
|
11
|
+
@@design_qoutes= [
|
12
|
+
"Good Design Is Innovative ~ Dieter Rams",
|
13
|
+
"Good Design Makes a Product Useful ~ ",
|
14
|
+
"Good Design Is Aesthetic ~ ",
|
15
|
+
"Good Design Is Unobtrusive ~ ",
|
16
|
+
"Good Design Is Honest ~ ",
|
17
|
+
"Good Design Is Long-lasting ~ ",
|
18
|
+
"Good Design Is Thorough Down to the Last Detail ~ ",
|
19
|
+
"Good Design Is Environmentally Friendly ~ ",
|
20
|
+
"Good Design Is as Little Design as Possible ~ ",
|
21
|
+
"Good Design Makes A Product Understandable ~ "]
|
22
|
+
|
23
|
+
# Display microservices qoutes
|
24
|
+
@@microservices_quotes = [
|
25
|
+
"Microservices are important simply because they add unique value in a way of simplification of complexity in systems.",
|
26
|
+
"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
|
+
"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.",
|
28
|
+
"One of the biggest problems with Microservices is the dependencies and challenges with designing services to not be all-in dependent on each other and the solutions to this."]
|
29
|
+
|
30
|
+
# Domain Driven Design qoutes
|
31
|
+
@@ddd_quotes = [
|
32
|
+
"“The indirectness of communication conceals the formation of schisms—different team members use terms differently but don’t realize it.”
|
33
|
+
― Eric Evans, Domain-Driven Design: Tackling Complexity in the Heart of Software",
|
34
|
+
|
35
|
+
"“The effort of translation prevents the interplay of knowledge and ideas that lead to deep model insights.”
|
36
|
+
― Eric Evans, Domain-Driven Design: Tackling Complexity in the Heart of Software",
|
37
|
+
|
38
|
+
"“By using the model-based language pervasively and not being satisfied until it flows, we approach a model that is complete and comprehensible, made up of simple elements that combine to express complex ideas.”
|
39
|
+
― Eric Evans, Domain-Driven Design: Tackling Complexity in the Heart of Software",
|
40
|
+
|
41
|
+
"“Every software program relates to some activity or interest of its user.”
|
42
|
+
― Eric Evans, Domain-Driven Design: Tackling Complexity in the Heart of Software",
|
43
|
+
|
44
|
+
"“A model is a selectively simplified and consciously structured form of knowledge.”
|
45
|
+
― Eric Evans, Domain-Driven Design: Tackling Complexity in the Heart of Software",
|
46
|
+
|
47
|
+
"“Success comes in an emerging set of abstract concepts that makes sense of all the detail. This distillation is a rigorous expression of the particular knowledge that has been found most relevant.”
|
48
|
+
― Eric Evans, Domain-Driven Design: Tackling Complexity in the Heart of Software",
|
49
|
+
|
50
|
+
"“The heart of software is its ability to solve domain-related problems for its user.”
|
51
|
+
― Eric Evans, Domain-Driven Design: Tackling Complexity in the Heart of Software",
|
52
|
+
|
53
|
+
"“In the old waterfall method, the business experts talk to the analysts, and analysts digest and abstract and pass the result along to the programmers, who code the software. This approach fails because it completely lacks feedback.”
|
54
|
+
― Eric Evans, Domain-Driven Design: Tackling Complexity in the Heart of Software",
|
55
|
+
|
56
|
+
"“Knowledge trickles in one direction, but does not accumulate.”
|
57
|
+
― Eric Evans, Domain-Driven Design: Tackling Complexity in the Heart of Software",
|
58
|
+
|
59
|
+
"“That shallowness of knowledge produces software that does a basic job but lacks a deep connection to the domain expert’s way of thinking.”
|
60
|
+
― Eric Evans, Domain-Driven Design: Tackling Complexity in the Heart of Software",
|
61
|
+
|
62
|
+
"“Diagrams are a means of communication and explanation, and they facilitate brainstorming. They serve these ends best if they are minimal.”
|
63
|
+
― Eric Evans, Domain-Driven Design: Tackling Complexity in the Heart of Software",
|
64
|
+
|
65
|
+
"“They show design constraints, but they are not design specifications in every detail. They represent the skeletons of ideas.”
|
66
|
+
― Eric Evans, Domain-Driven Design: Tackling Complexity in the Heart of Software",
|
67
|
+
|
68
|
+
"“the model is not the diagram.”
|
69
|
+
― Eric Evans, Domain-Driven Design: Tackling Complexity in the Heart of Software",
|
70
|
+
|
71
|
+
"“The behavior of running code is unambiguous.”
|
72
|
+
― Eric Evans, Domain-Driven Design: Tackling Complexity in the Heart of Software",
|
73
|
+
|
74
|
+
"“documenting exclusively through code has some of the same basic problems as using comprehensive UML diagrams.”
|
75
|
+
― Eric Evans, Domain-Driven Design: Tackling Complexity in the Heart of Software",
|
76
|
+
|
77
|
+
"“A document shouldn’t try to do what the code already does well.”
|
78
|
+
― Eric Evans, Domain-Driven Design: Tackling Complexity in the Heart of Software",
|
79
|
+
|
80
|
+
"“Written documents should complement the code and the talking.”
|
81
|
+
― Eric Evans, Domain-Driven Design: Tackling Complexity in the Heart of Software",
|
82
|
+
|
83
|
+
"“you may hear the UBIQUITOUS LANGUAGE changing naturally while a document is being left behind.”
|
84
|
+
― Eric Evans, Domain-Driven Design: Tackling Complexity in the Heart of Software",
|
85
|
+
|
86
|
+
"“It takes fastidiousness to write code that doesn’t just do the right thing but also says the right thing.”
|
87
|
+
― Eric Evans, Domain-Driven Design: Tackling Complexity in the Heart of Software",
|
88
|
+
|
89
|
+
"“To communicate effectively, the code must be based on the same language used to write the requirements—the same language that the developers speak with each other and with domain experts.”
|
90
|
+
― Eric Evans, Domain-Driven Design: Tackling Complexity in the Heart of Software",
|
91
|
+
|
92
|
+
"“There is no need for explanatory models to be object models, and it is generally best if they are not.”
|
93
|
+
― Eric Evans, Domain-Driven Design: Tackling Complexity in the Heart of Software",
|
94
|
+
|
95
|
+
"“The astrolabe was a mechanical implementation of an object-oriented model of the sky.”
|
96
|
+
― Eric Evans, Domain-Driven Design: Tackling Complexity in the Heart of Software",
|
97
|
+
|
98
|
+
"“crucial discoveries always emerge during the design/implementation effort.”
|
99
|
+
― Eric Evans, Domain-Driven Design: Tackling Complexity in the Heart of Software",
|
100
|
+
|
101
|
+
"“If the design, or some central part of it, does not map to the domain model, that model is of little value, and the correctness of the software is suspect.”
|
102
|
+
― Eric Evans, Domain-Driven Design: Tackling Complexity in the Heart of Software",
|
103
|
+
|
104
|
+
"“The heart of software is its ability to solve domain-related problems for its user. All other features, vital though they may be, support this basic purpose. When the domain is complex, this is a difficult task, calling for the concentrated effort of talented and skilled people. Developers have to steep themselves in the domain to build up knowledge of the business. They must hone their modeling skills and master domain design. Yet these are not the priorities on most software projects. Most talented developers do not have much interest in learning about the specific domain in which they are working, much less making a major commitment to expand their domain-modeling skills. Technical people enjoy quantifiable problems that exercise their technical skills. Domain work is messy and demands a lot of complicated new knowledge that doesn’t seem to add to a computer scientist’s capabilities. Instead, the technical talent goes to work on elaborate frameworks, trying to solve domain problems with technology. Learning about and modeling the domain is left to others. Complexity in the heart of software has to be tackled head-on. To do otherwise is to risk irrelevance.”
|
105
|
+
― Eric Evans, Domain-Driven Design: Tackling Complexity in the Heart of Software",
|
106
|
+
|
107
|
+
"“When we set out to write software, we never know enough.”
|
108
|
+
― Eric Evans, Domain-Driven Design: Tackling Complexity in the Heart of Software",
|
109
|
+
|
110
|
+
"“The vital detail about the design is captured in the code. A well-written implementation should be transparent, revealing the model underlying it.”
|
111
|
+
― Eric Evans, Domain-Driven Design: Tackling Complexity in the Heart of Software",
|
112
|
+
|
113
|
+
"“there should be some learning when a domain model is discussed.”
|
114
|
+
― Eric Evans, Domain-Driven Design: Tackling Complexity in the Heart of Software",
|
115
|
+
|
116
|
+
|
117
|
+
"“The domain experts had learned more and had clarified the goal of the application.”
|
118
|
+
― Eric Evans, Domain-Driven Design: Tackling Complexity in the Heart of Software",
|
119
|
+
|
120
|
+
"“The kind of knowledge captured in a model such as the PCB example goes beyond “find the nouns.”
|
121
|
+
― Eric Evans, Domain-Driven Design: Tackling Complexity in the Heart of Software",
|
122
|
+
|
123
|
+
|
124
|
+
"“Business activities and rules are as central to a domain as are the entities involved; any domain will have various categories of concepts.”
|
125
|
+
― Eric Evans, Domain-Driven Design: Tackling Complexity in the Heart of Software",
|
126
|
+
|
127
|
+
"“Knowledge crunching is an exploration, and you can’t know where you will end up.”
|
128
|
+
― Eric Evans, Domain-Driven Design: Tackling Complexity in the Heart of Software",
|
129
|
+
|
130
|
+
|
131
|
+
"“Translation muddles model concepts, which leads to destructive refactoring of code.”
|
132
|
+
― Eric Evans, Domain-Driven Design: Tackling Complexity in the Heart of Software"
|
133
|
+
|
134
|
+
]
|
135
|
+
|
136
|
+
def method_missing(m, *args, &block)
|
137
|
+
case m
|
138
|
+
|
139
|
+
when :utter_banner
|
140
|
+
extend Thor::Shell
|
141
|
+
utter_title = set_color " Utter ", :red, :on_white, :bold
|
142
|
+
utter_version = set_color Utter::VERSION + " ", :black, :on_white, :bold
|
143
|
+
say(utter_title + utter_version )
|
144
|
+
|
145
|
+
return # back to the calling routine
|
146
|
+
|
147
|
+
when :about_utter
|
148
|
+
#say("Utter is a Domain-specific Microservices Framework written in Ruby for building both regular and advanced Rule-based web APIs")
|
149
|
+
|
150
|
+
when :ddd_quotes
|
151
|
+
quote = @@ddd_quotes.sample
|
152
|
+
|
153
|
+
when :design_qoutes
|
154
|
+
quote = @@design_quotes.sample
|
155
|
+
|
156
|
+
when :microservices_quotes
|
157
|
+
quote = @@microservices_quotes.sample
|
158
|
+
|
159
|
+
else
|
160
|
+
puts " Utter doesn't know #{m} -- please try again."
|
161
|
+
end
|
162
|
+
|
163
|
+
def wrap(s, width=75)
|
164
|
+
s.gsub(/(.{1,#{width}})(\s+|\Z)/, "\\1\n")
|
165
|
+
end
|
166
|
+
|
167
|
+
say(wrap(quote))
|
168
|
+
end
|
169
|
+
|
170
|
+
end
|
171
|
+
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.12"
|
20
20
|
|
21
21
|
$log = Logger.new(STDOUT)
|
22
22
|
|
@@ -1,13 +1,54 @@
|
|
1
1
|
GEM
|
2
2
|
remote: https://rubygems.org/
|
3
3
|
specs:
|
4
|
-
|
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.11)
|
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
|
5
45
|
|
6
46
|
PLATFORMS
|
7
47
|
ruby
|
8
48
|
|
9
49
|
DEPENDENCIES
|
10
50
|
rack
|
51
|
+
utter
|
11
52
|
|
12
53
|
RUBY VERSION
|
13
54
|
ruby 2.3.1p112
|
@@ -7,10 +7,19 @@
|
|
7
7
|
#require 'bundler/setup'
|
8
8
|
#Bundler.require(:default)
|
9
9
|
|
10
|
-
|
11
|
-
require_relative './../../lib/utter'
|
12
|
-
|
13
|
-
Dir[
|
10
|
+
require 'utter'
|
11
|
+
#require_relative './../../lib/utter'
|
12
|
+
#
|
13
|
+
Dir["domain/lib/**/*.rb"].each do |file|
|
14
|
+
p file
|
15
|
+
require_relative file
|
16
|
+
end
|
17
|
+
|
18
|
+
Dir["microservice/lib/**/*.rb"].each do |file|
|
19
|
+
p file
|
20
|
+
require_relative file
|
21
|
+
end
|
22
|
+
|
14
23
|
|
15
24
|
map('/') do
|
16
25
|
run API::V1::Torrents
|
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.12
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- zotherstupidguy
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-10-
|
11
|
+
date: 2016-10-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pry
|
@@ -329,15 +329,15 @@ extra_rdoc_files: []
|
|
329
329
|
files:
|
330
330
|
- ".gitignore"
|
331
331
|
- ".travis.yml"
|
332
|
-
- CODE_OF_CONDUCT.md
|
333
332
|
- Gemfile
|
334
|
-
- LICENSE.txt
|
335
333
|
- README.md
|
336
334
|
- Rakefile
|
335
|
+
- bin/cli.rb
|
337
336
|
- bin/console
|
338
|
-
- bin/
|
337
|
+
- bin/generators.rb
|
338
|
+
- bin/highline.rb
|
339
|
+
- bin/quotes.rb
|
339
340
|
- bin/setup
|
340
|
-
- bin/templates/README.md
|
341
341
|
- lib/internals/core/auth.rb
|
342
342
|
- lib/internals/core/microservice.rb
|
343
343
|
- lib/internals/core/service_discovery.rb
|
data/CODE_OF_CONDUCT.md
DELETED
@@ -1,49 +0,0 @@
|
|
1
|
-
# Contributor Code of Conduct
|
2
|
-
|
3
|
-
As contributors and maintainers of this project, and in the interest of
|
4
|
-
fostering an open and welcoming community, we pledge to respect all people who
|
5
|
-
contribute through reporting issues, posting feature requests, updating
|
6
|
-
documentation, submitting pull requests or patches, and other activities.
|
7
|
-
|
8
|
-
We are committed to making participation in this project a harassment-free
|
9
|
-
experience for everyone, regardless of level of experience, gender, gender
|
10
|
-
identity and expression, sexual orientation, disability, personal appearance,
|
11
|
-
body size, race, ethnicity, age, religion, or nationality.
|
12
|
-
|
13
|
-
Examples of unacceptable behavior by participants include:
|
14
|
-
|
15
|
-
* The use of sexualized language or imagery
|
16
|
-
* Personal attacks
|
17
|
-
* Trolling or insulting/derogatory comments
|
18
|
-
* Public or private harassment
|
19
|
-
* Publishing other's private information, such as physical or electronic
|
20
|
-
addresses, without explicit permission
|
21
|
-
* Other unethical or unprofessional conduct
|
22
|
-
|
23
|
-
Project maintainers have the right and responsibility to remove, edit, or
|
24
|
-
reject comments, commits, code, wiki edits, issues, and other contributions
|
25
|
-
that are not aligned to this Code of Conduct, or to ban temporarily or
|
26
|
-
permanently any contributor for other behaviors that they deem inappropriate,
|
27
|
-
threatening, offensive, or harmful.
|
28
|
-
|
29
|
-
By adopting this Code of Conduct, project maintainers commit themselves to
|
30
|
-
fairly and consistently applying these principles to every aspect of managing
|
31
|
-
this project. Project maintainers who do not follow or enforce the Code of
|
32
|
-
Conduct may be permanently removed from the project team.
|
33
|
-
|
34
|
-
This code of conduct applies both within project spaces and in public spaces
|
35
|
-
when an individual is representing the project or its community.
|
36
|
-
|
37
|
-
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
38
|
-
reported by contacting a project maintainer at zotherstupidguy@gmail.com. All
|
39
|
-
complaints will be reviewed and investigated and will result in a response that
|
40
|
-
is deemed necessary and appropriate to the circumstances. Maintainers are
|
41
|
-
obligated to maintain confidentiality with regard to the reporter of an
|
42
|
-
incident.
|
43
|
-
|
44
|
-
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
45
|
-
version 1.3.0, available at
|
46
|
-
[http://contributor-covenant.org/version/1/3/0/][version]
|
47
|
-
|
48
|
-
[homepage]: http://contributor-covenant.org
|
49
|
-
[version]: http://contributor-covenant.org/version/1/3/0/
|
data/LICENSE.txt
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
The MIT License (MIT)
|
2
|
-
|
3
|
-
Copyright (c) 2016 zotherstupidguy
|
4
|
-
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
7
|
-
in the Software without restriction, including without limitation the rights
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
10
|
-
furnished to do so, subject to the following conditions:
|
11
|
-
|
12
|
-
The above copyright notice and this permission notice shall be included in
|
13
|
-
all copies or substantial portions of the Software.
|
14
|
-
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
-
THE SOFTWARE.
|
data/bin/templates/README.md
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
This directory contains common microservice templates
|
2
|
-
- auth microservice template
|
3
|
-
- logging microservice template
|
4
|
-
- admin microservice template
|
5
|
-
|
6
|
-
- User generate a template and specifiy certain attr to customize the template to their own needs.
|
7
|
-
- User then use/further developm the generated microservice.
|
File without changes
|