utter 1.0.14 → 1.0.15

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: 6d89e0cacdb65447ed70406d5ea3c8a982662d88
4
- data.tar.gz: 2d3349ff8347441a45691bd908ba03b64b9e659e
3
+ metadata.gz: 657fc55c85255c7d663dfc8e831cce0684553b6c
4
+ data.tar.gz: 17df583d30c7b59763e854892f6ef578b76999e0
5
5
  SHA512:
6
- metadata.gz: 419fc6da2ff31cc3bff11fb878ff3430713e24582e2c94397a7b7f0b82f3bdf6df0be9c3fbbd15a9ac8e48dcbde5d669d3c445fb93e29a290dfb25547cb52c9e
7
- data.tar.gz: 141898b8ae378c855757805b37e6b06df42e74e8252dcd3d37bd07b4dd742ebe6551bdef27d59cbdf07f754a29f976ddc270ab192b06285fbed579617ecb0af3
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/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
- path = "./#{project_name}::#{api_version}::#{service_name}"
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
- params = {:path => path, :module_name => project_name, :ext_name => service_name}
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
- # Generates a consumer domain ext to talk to other services
88
- desc "consumer", "Generates an utter consumer domain extension to talk to other services in your domain/lib/ directory"
89
- def consumer module_name="Consumer", ext_name
132
+ desc "package", ""
133
+ def package
90
134
  end
91
135
 
92
- # Generates a consumer domain ext to talk to other services
93
- desc "auth", "Generates an utter auth microservice"
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
@@ -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
- # But not recommended to be set while in production enviroments
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
- #TODO do somthing here to make it secure via some mechanism!
34
- # as we don't do websites, we striclty focus on APIs we can use HTTP basic auth to make it secure!?
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.14"
19
+ VERSION = "1.0.15"
20
20
 
21
21
  $log = Logger.new(STDOUT)
22
22
 
File without changes
@@ -0,0 +1,2 @@
1
+ source 'https://rubygems.org'
2
+ gem 'utter'
@@ -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
@@ -0,0 +1,7 @@
1
+ require 'utter'
2
+ Dir[File.dirname(__FILE__) + '/microservice/**/*.rb'].each {|file| require_relative file }
3
+ Dir[File.dirname(__FILE__) + '/domain/**/*.rb'].each {|file| require_relative file }
4
+
5
+ map "/" do
6
+ run Gitlapse::V1::Lapses
7
+ end
@@ -0,0 +1,11 @@
1
+ class Echo
2
+ def initialize(app, message)
3
+ @app = app
4
+ @message = message
5
+ end
6
+
7
+ def call(env)
8
+ puts @message
9
+ @app.call(env)
10
+ end
11
+ end
@@ -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
@@ -0,0 +1 @@
1
+ logs here uses append-only SSD to write timestamped logs
@@ -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
@@ -22,5 +22,5 @@ end
22
22
 
23
23
 
24
24
  map('/') do
25
- run API::V1::Torrents
25
+ run Upjoystream::V1::Torrents
26
26
  end
@@ -1,6 +1,6 @@
1
1
  #require 'rack/show_exceptions'
2
2
 
3
- module API
3
+ module Upjoystream
4
4
  module V1
5
5
  class Torrents < Utter::Microservice
6
6
  $log.info("mounting #{self}")
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.14
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-04 00:00:00.000000000 Z
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/generators.rb
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