mynatra 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,50 @@
1
+ require 'thor/group'
2
+ require 'active_support/inflector'
3
+
4
+ # Mynatra resource generator
5
+ module Mynatra
6
+ module Generators
7
+ class Resource < Thor::Group
8
+ include Thor::Actions
9
+
10
+ # Takes resource name, arguments
11
+ argument :name, type: :string
12
+ argument :attributes, type: :array
13
+
14
+ # Generates model.rb file
15
+ def create_model
16
+ @name_singular = name.singularize
17
+ @name_plural = name.pluralize
18
+ @attributes = attributes
19
+ puts "This is what @name_singular looks like: #{@name_singular}"
20
+ puts "This is what @name_plural looks like: #{@name_plural}"
21
+ puts "This is what @attributes looks like: #{@attributes}"
22
+ template("models/model.erb", "models/#{name}.rb")
23
+ end
24
+
25
+ # Generate contoller.rb file
26
+ def create_controller
27
+ @name_singular = name.singularize
28
+ @name_plural = name.pluralize
29
+ @attributes = attributes
30
+ template("controllers/resource_controller.erb", "controllers/#{name}_controller.rb")
31
+ end
32
+
33
+ # Generate views erb files (index, edit, new)
34
+ def create_views
35
+ @name_singular = name.singularize
36
+ @name_plural = name.pluralize
37
+ @attributes = attributes
38
+ template("views/header.erb", "views/header.erb")
39
+ template("views/resource/edit.erb", "views/#{@name_plural}/edit.erb")
40
+ template("views/resource/index.erb", "views/#{@name_plural}/index.erb")
41
+ template("views/resource/new.erb", "views/#{@name_plural}/new.erb")
42
+ end
43
+
44
+ # Sets source root directory
45
+ def self.source_root
46
+ File.dirname(__FILE__)
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,46 @@
1
+ require 'thor/group'
2
+
3
+ # Mynatra scaffolding generator
4
+ module Mynatra
5
+ module Generators
6
+ class Scaffolding < Thor::Group
7
+ include Thor::Actions
8
+
9
+ # Takes in dir, name arguments
10
+ argument :name, type: :string
11
+
12
+ # Generates empty directory
13
+ def create_dir
14
+ empty_directory(name)
15
+ end
16
+
17
+ # Generates app.rb file
18
+ def create_app
19
+ template("app.erb", "#{name}/app.rb")
20
+ end
21
+
22
+ # Generates controller
23
+ def create_controller
24
+ template("controllers/base_controller.erb", "#{name}/controllers/base_controller.rb")
25
+ end
26
+
27
+ # Generates public folder with CSS style sheet
28
+ def create_public
29
+ directory("public", "#{name}/public", :recursive => true)
30
+ end
31
+
32
+ # Generates views folder
33
+ def create_views
34
+ template("views/footer.erb", "#{name}/views/footer.erb")
35
+ template("views/getting_started.erb", "#{name}/views/getting_started.erb")
36
+ template("views/header.erb", "#{name}/views/header.erb")
37
+ end
38
+
39
+ # Sets source root directory
40
+ def self.source_root
41
+ File.dirname(__FILE__)
42
+ end
43
+ end
44
+ end
45
+ end
46
+
@@ -0,0 +1,3 @@
1
+ <link rel="stylesheet" href="/styles/main.css">
2
+
3
+ <p> <%= Time.now.year %> myatra
@@ -0,0 +1,12 @@
1
+ <%%= erb :header %>
2
+
3
+ <link rel="stylesheet" href="/styles/main.css">
4
+
5
+ <section>
6
+ <h1><%= @name_singular %></h1>
7
+ <h1>Getting Started with mynatra</h1>
8
+ <p>This is the home page of mynatra
9
+ <p>Please come again!
10
+ </section>
11
+
12
+ <%%= erb :footer %>
@@ -0,0 +1,15 @@
1
+ <link rel="stylesheet" href="/styles/main.css">
2
+
3
+ <nav>
4
+ <ul>
5
+ <li>
6
+ <a href="/">Home</a>
7
+ </li>
8
+ <li>
9
+ <a href="/<%= @name_plural %>/new">Create new <%= @name_singular %></a>
10
+ </li>
11
+ <li>
12
+ <a href="/<%= @name_plural %>">List & Edit <%= @name_plural %></a>
13
+ </li>
14
+ </ul>
15
+ </nav>
@@ -0,0 +1,17 @@
1
+ <%%= erb :header %>
2
+
3
+ <div>
4
+ <form method="POST" action='/<%= @name_plural %>/update/<%%= @<%= @name_singular %>.id %>'>
5
+ <% @attributes.each do |attribute| %>
6
+ <p> <%= attribute %>
7
+ <input name="<%= attribute %>" value="<%%= @<%= @name_singular %>.<%= attribute %> %>"><br>
8
+ <% end-%>
9
+ <input type="submit">
10
+ </form>
11
+
12
+ <form method="POST" action="/<%= @name_plural %>/delete/<%%= @<%= @name_singular %>.id %>">
13
+ <input type="submit" value="delete">
14
+ </form>
15
+ </div>
16
+
17
+ <%%= erb :footer %>
@@ -0,0 +1,14 @@
1
+ <%%= erb :header %>
2
+
3
+ <h1><%= @name_plural.capitalize %></h1>
4
+ <%% @<%= @name_plural %>.each do |<%= @name_singular %>| %>
5
+ <li><a href="/<%= @name_plural %>/<%%= <%= @name_singular %>.id %>"><%%= <%= @name_singular %>.id %></a></li>
6
+ <ul>
7
+ <% @attributes.each do |attribute| %>
8
+ <li><%= attribute %>: <%%= <%= @name_singular %>.<%= attribute %> %></li>
9
+ <% end %>
10
+ </ul>
11
+ <%% end %>
12
+ </ul>
13
+
14
+ <%%= erb :footer %>
@@ -0,0 +1,14 @@
1
+ <%%= erb :header %>
2
+
3
+ <div>
4
+ <h1>New <%= @name_singular.capitalize %></h1>
5
+ <form method='POST' action='/<%= @name_plural %>/create'>
6
+ <% @attributes.each do |attribute| %>
7
+ <p><%= attribute %>:
8
+ <input name='<%= attribute %>'><br>
9
+ <% end -%>
10
+ <input type='submit'>
11
+ </form>
12
+ </div>
13
+
14
+ <%%= erb :footer %>
data/lib/mynatra.rb ADDED
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+ require_relative "mynatra/version"
3
+
4
+ module Mynatra
5
+ class Error < StandardError; end
6
+ # Your code goes here...
7
+ end
@@ -0,0 +1,25 @@
1
+ require 'thor'
2
+ require 'mynatra'
3
+ require 'active_support/inflector'
4
+ require 'generators/scaffolding'
5
+ require 'generators/resource'
6
+
7
+ module Mynatra
8
+ class CLI < Thor
9
+ # desc "resource [RESOURCE_NAME] [DIRECTORY DESTINATION]", "Generate a resource"
10
+ # def resource(name, dir)
11
+ # Mynatra::Generators::Resource.start([name, dir])
12
+ # end
13
+ desc "new [NAME]", "Generate mynatra scaffolding"
14
+ def new(name)
15
+ Mynatra::Generators::Scaffolding.start([name.singularize])
16
+ end
17
+
18
+ desc "resource [NAME] [ARG1] [ARG2]", "Generate a resource with 2 arguments i.e mynatra resource post title body"
19
+ def resource(name, *attributes)
20
+ puts "The arguments are: #{attributes}"
21
+ puts "Args is: #{attributes.class}"
22
+ Mynatra::Generators::Resource.start([ name.singularize, attributes ])
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Mynatra
4
+ # Test class
5
+ class User
6
+ attr_accessor :email, :password
7
+
8
+ @@Users = []
9
+
10
+ def delete
11
+ @@Users.each_with_index do |user, index|
12
+ if self.email == user.email
13
+ @@Users.delete_at(index)
14
+ end
15
+ end
16
+ end
17
+
18
+ def self.create(email)
19
+ user = User.new
20
+ user.email = email
21
+ @@Users << user
22
+ end
23
+
24
+ def self.find_by_email(email)
25
+ @@Users.each do |user|
26
+ if user.email == email
27
+ return user
28
+ end
29
+ end
30
+ end
31
+
32
+ def self.create_many
33
+ @@Users = (1..25).map do |num|
34
+ user = User.new
35
+ user.email = "user#{num}@example.com"
36
+ user
37
+ end
38
+ end
39
+
40
+ def self.all
41
+ @@Users
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Mynatra
4
+ VERSION = "0.1.0"
5
+ end
data/mynatra.gemspec ADDED
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "lib/mynatra/version"
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "mynatra"
7
+ spec.version = Mynatra::VERSION
8
+ spec.authors = ["christian"]
9
+ spec.email = ["rewindforward@gmail.com"]
10
+
11
+ spec.summary = "The fast and quick framework."
12
+ spec.homepage = "https://github.com/christianarab"
13
+ spec.required_ruby_version = Gem::Requirement.new(">= 2.4.0")
14
+
15
+ # spec.metadata["allowed_push_host"] = "sss: Set to 'http://mygemserver.com'"
16
+
17
+ spec.metadata["homepage_uri"] = spec.homepage
18
+ spec.metadata["source_code_uri"] = "https://github.com/compsciacademy/fulltime-program-2021-Q2/tree/main/Week06/Day29/foodie/"
19
+ spec.metadata["changelog_uri"] = "https://github.com/compsciacademy/fulltime-program-2021-Q2/tree/main/Week06/Day29/foodie/changelog.md"
20
+
21
+ # Specify which files should be added to the gem when it is released.
22
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
23
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
24
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{\A(?:test|spec|features)/}) }
25
+ end
26
+ spec.bindir = "exe"
27
+ spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
28
+ spec.require_paths = ["lib"]
29
+
30
+ # Uncomment to register a new dependency of your gem
31
+ # spec.add_dependency "example-gem", "~> 1.0"
32
+ spec.add_dependency "activesupport"
33
+ spec.add_dependency "thor"
34
+
35
+ spec.add_development_dependency "rspec"
36
+ spec.add_development_dependency "cucumber"
37
+ spec.add_development_dependency "aruba"
38
+
39
+ # For more information and examples about making a new gem, checkout our
40
+ # guide at: https://bundler.io/guides/creating_gem.html
41
+ end
Binary file
metadata ADDED
@@ -0,0 +1,159 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mynatra
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - christian
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2021-06-10 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: thor
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: cucumber
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: aruba
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ description:
84
+ email:
85
+ - rewindforward@gmail.com
86
+ executables:
87
+ - mynatra
88
+ extensions: []
89
+ extra_rdoc_files: []
90
+ files:
91
+ - ".gitignore"
92
+ - Gemfile
93
+ - Gemfile.lock
94
+ - README.md
95
+ - Rakefile
96
+ - bin/aruba
97
+ - bin/bundle
98
+ - bin/console
99
+ - bin/cucumber
100
+ - bin/cucumber-html-formatter
101
+ - bin/gherkin
102
+ - bin/gherkin-ruby
103
+ - bin/htmldiff
104
+ - bin/ldiff
105
+ - bin/mynatra
106
+ - bin/protoc-gen-ruby
107
+ - bin/rake
108
+ - bin/rpc_server
109
+ - bin/rspec
110
+ - bin/setup
111
+ - bin/thor
112
+ - exe/mynatra
113
+ - lib/generators/Gemfile
114
+ - lib/generators/app.erb
115
+ - lib/generators/controllers/base_controller.erb
116
+ - lib/generators/controllers/resource_controller.erb
117
+ - lib/generators/models/model.erb
118
+ - lib/generators/public/scripts/main.js
119
+ - lib/generators/public/styles/main.css
120
+ - lib/generators/resource.rb
121
+ - lib/generators/scaffolding.rb
122
+ - lib/generators/views/footer.erb
123
+ - lib/generators/views/getting_started.erb
124
+ - lib/generators/views/header.erb
125
+ - lib/generators/views/resource/edit.erb
126
+ - lib/generators/views/resource/index.erb
127
+ - lib/generators/views/resource/new.erb
128
+ - lib/mynatra.rb
129
+ - lib/mynatra/cli.rb
130
+ - lib/mynatra/mynatra.rb
131
+ - lib/mynatra/version.rb
132
+ - mynatra.gemspec
133
+ - pkg/mynatra-0.1.0.gem
134
+ homepage: https://github.com/christianarab
135
+ licenses: []
136
+ metadata:
137
+ homepage_uri: https://github.com/christianarab
138
+ source_code_uri: https://github.com/compsciacademy/fulltime-program-2021-Q2/tree/main/Week06/Day29/foodie/
139
+ changelog_uri: https://github.com/compsciacademy/fulltime-program-2021-Q2/tree/main/Week06/Day29/foodie/changelog.md
140
+ post_install_message:
141
+ rdoc_options: []
142
+ require_paths:
143
+ - lib
144
+ required_ruby_version: !ruby/object:Gem::Requirement
145
+ requirements:
146
+ - - ">="
147
+ - !ruby/object:Gem::Version
148
+ version: 2.4.0
149
+ required_rubygems_version: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - ">="
152
+ - !ruby/object:Gem::Version
153
+ version: '0'
154
+ requirements: []
155
+ rubygems_version: 3.2.19
156
+ signing_key:
157
+ specification_version: 4
158
+ summary: The fast and quick framework.
159
+ test_files: []