rammer 2.0.0 → 3.0.0

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.
@@ -2,6 +2,8 @@ lib/rammer.rb
2
2
  lib/rammer/version.rb
3
3
  lib/rammer/rammer_generator.rb
4
4
  lib/rammer/module_generator.rb
5
+ lib/rammer/scaffold_generator.rb
6
+ lib/rammer/reserved_words.rb
5
7
  lib/modules/migrations/01_create_users.rb
6
8
  lib/modules/migrations/02_create_sessions.rb
7
9
  lib/modules/migrations/03_create_owners.rb
@@ -23,10 +25,14 @@ lib/modules/common/server.rb
23
25
  lib/modules/models/session.rb
24
26
  lib/modules/common/tree.rb
25
27
  lib/modules/models/user.rb
28
+ lib/modules/scaffold/model.rb
29
+ lib/modules/scaffold/migration.rb
30
+ lib/modules/scaffold/base_apis.rb
26
31
  test/helper.rb
27
- test/test_rammer_root_structure.rb
28
- test/test_viber_module_plugin.rb
29
- test/test_viber_module_unplug.rb
32
+ test/hierarchy/test_rammer_root_structure.rb
33
+ test/scaffold/test_scaffold_generator.rb
34
+ test/viber/test_viber_module_plugin.rb
35
+ test/viber/test_viber_module_unplug.rb
30
36
  Gemfile
31
37
  LICENSE.txt
32
38
  README.md
data/bin/rammer CHANGED
@@ -1,5 +1,42 @@
1
1
  #!/usr/bin/env ruby
2
2
  require 'rammer'
3
3
 
4
- generator = Rammer::RammerGenerator.new(*ARGV)
5
- generator.run
4
+ #Returns usage message
5
+ def options_message
6
+ STDOUT.puts <<-EOF
7
+ Please provide command options
8
+
9
+ Usage:
10
+ rammer generate/g scaffold [scaffold_name] [field_name:type]
11
+ EOF
12
+ end
13
+
14
+ #Validates the command line arguments for invoking generators.
15
+ def validate_options
16
+ scaffold_generator = true
17
+ case ARGV[1]
18
+ when 'scaffold'
19
+ unless ARGV[2].nil?
20
+ argv = ARGV.drop(3)
21
+ target_dir = Dir.pwd.split('/',Dir.pwd.count('/')+1).last
22
+ options = { :project_name => target_dir, :scaffold_name => ARGV[2], :arguments => argv}
23
+ scaffold_generator = Rammer::ScaffoldGenerator.new(options)
24
+ scaffold_generator.run
25
+ else
26
+ options_message
27
+ end
28
+ else
29
+ options_message
30
+ end
31
+ end
32
+
33
+ #Execution initiates here.
34
+ case ARGV[0]
35
+ when 'g', 'generate'
36
+ validate_options
37
+ when nil
38
+ $stdout.puts "\e[1;31mError:\e[0m Please specify an application name."
39
+ else
40
+ generator = Rammer::RammerGenerator.new(*ARGV)
41
+ generator.run
42
+ end
data/bin/viber CHANGED
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
  require 'rammer'
3
3
 
4
+ #Validates command line arguments.
4
5
  def parse_options
5
6
  case ARGV[1]
6
7
  when "-p", "-plugin"
@@ -12,12 +13,13 @@ def parse_options
12
13
  end
13
14
  end
14
15
 
16
+ #Returns usage message
15
17
  def options_message
16
18
  STDOUT.puts <<-EOF
17
19
  Please include module name
18
20
 
19
21
  Usage:
20
- viber module #{ARGV[1]}
22
+ viber module #{ARGV[1]} [options]
21
23
 
22
24
  options:
23
25
  authentication
@@ -26,6 +28,7 @@ Usage:
26
28
  EOF
27
29
  end
28
30
 
31
+ #Builds parameters and invokes the generator.
29
32
  def execute(module_name,action)
30
33
  target_dir = Dir.pwd.split('/',Dir.pwd.count('/')+1).last
31
34
  name = target_dir.split('_').map(&:capitalize)*''
@@ -43,6 +46,7 @@ def execute(module_name,action)
43
46
  module_generator.run
44
47
  end
45
48
 
49
+ #Execution initiates here.
46
50
  case ARGV[0]
47
51
  when "module"
48
52
  if parse_options
@@ -62,7 +66,7 @@ when "module"
62
66
  Please provide command options
63
67
 
64
68
  Usage:
65
- viber module
69
+ viber module [options]
66
70
 
67
71
  options:
68
72
  -p,-plugin :Plugs in rammer specified modules.
@@ -0,0 +1,62 @@
1
+ =begin
2
+ **************************************************************************
3
+ * The MIT License (MIT)
4
+
5
+ * Copyright (c) 2013-2014 QBurst Technologies Inc.
6
+
7
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
8
+ * of this software and associated documentation files (the "Software"), to deal
9
+ * in the Software without restriction, including without limitation the rights
10
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
+ * copies of the Software, and to permit persons to whom the Software is
12
+ * furnished to do so, subject to the following conditions:
13
+
14
+ * The above copyright notice and this permission notice shall be included in
15
+ * all copies or substantial portions of the Software.
16
+
17
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23
+ * THE SOFTWARE.
24
+
25
+ **************************************************************************
26
+ =end
27
+
28
+ module AppName
29
+ module ScaffoldName
30
+ class BaseApis < Grape::API
31
+ format :json
32
+
33
+ =begin
34
+ Handles read functionality
35
+ =end
36
+ get '/model' do
37
+ Model.read
38
+ end
39
+
40
+ =begin
41
+ Handles new record creation
42
+ =end
43
+ post '/model' do
44
+ Model.create(params)
45
+ end
46
+
47
+ =begin
48
+ Handles a record updation with respect to record id passed
49
+ =end
50
+ post '/model/:id' do
51
+ Model.edit(params)
52
+ end
53
+
54
+ =begin
55
+ Handles a record deletion with respect to record id passed
56
+ =end
57
+ delete '/model/:id' do
58
+ Model.destroy(params)
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,39 @@
1
+ =begin
2
+ **************************************************************************
3
+ * The MIT License (MIT)
4
+
5
+ * Copyright (c) 2013-2014 QBurst Technologies Inc.
6
+
7
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
8
+ * of this software and associated documentation files (the "Software"), to deal
9
+ * in the Software without restriction, including without limitation the rights
10
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
+ * copies of the Software, and to permit persons to whom the Software is
12
+ * furnished to do so, subject to the following conditions:
13
+
14
+ * The above copyright notice and this permission notice shall be included in
15
+ * all copies or substantial portions of the Software.
16
+
17
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23
+ * THE SOFTWARE.
24
+
25
+ **************************************************************************
26
+ =end
27
+
28
+ class CreateMigration < ActiveRecord::Migration
29
+ def self.up
30
+ create_table :migration do |t|
31
+
32
+ t.timestamps
33
+ end
34
+ end
35
+
36
+ def self.down
37
+ drop_table :migration
38
+ end
39
+ end
@@ -0,0 +1,89 @@
1
+ =begin
2
+ **************************************************************************
3
+ * The MIT License (MIT)
4
+
5
+ * Copyright (c) 2013-2014 QBurst Technologies Inc.
6
+
7
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
8
+ * of this software and associated documentation files (the "Software"), to deal
9
+ * in the Software without restriction, including without limitation the rights
10
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
+ * copies of the Software, and to permit persons to whom the Software is
12
+ * furnished to do so, subject to the following conditions:
13
+
14
+ * The above copyright notice and this permission notice shall be included in
15
+ * all copies or substantial portions of the Software.
16
+
17
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23
+ * THE SOFTWARE.
24
+
25
+ **************************************************************************
26
+ =end
27
+
28
+ class Model < ActiveRecord::Base
29
+
30
+ #Reads all the records
31
+ def self.read
32
+ @model = Model.all
33
+ return @model
34
+ end
35
+
36
+ #Creates new record
37
+ def self.create(params)
38
+ param = Model.build_param(params,1)
39
+ @model = Model.new(param)
40
+ response = @model.save ? @model.success_response("Added") : @model.error_response
41
+ return response
42
+ end
43
+
44
+ #Updates a record
45
+ def self.edit(params)
46
+ Model.set_model(params)
47
+ param = Model.build_param(params,2)
48
+ response = @model.update_attributes(param) ? @model.success_response("Edited") : @model.error_response
49
+ return response
50
+ end
51
+
52
+ #Deletes a record
53
+ def self.destroy(params)
54
+ Model.set_model(params)
55
+ @model.destroy
56
+ return @model.success_response("Deleted")
57
+ end
58
+
59
+ # Use callbacks to share common setup or constraints between actions.
60
+ def self.set_model(params)
61
+ @model = Model.find(params[:id])
62
+ end
63
+
64
+ #Builds parameter hash to handle the web request parameters.
65
+ def self.build_param(params,index)
66
+ param = params.to_a.reverse.drop(index)
67
+ hash_value = Hash.new
68
+ param.each do |value|
69
+ hash_value["#{value.first}"] = value.last
70
+ end
71
+ return hash_value
72
+ end
73
+
74
+ #Success response hash
75
+ def success_response(message)
76
+ success_message = {
77
+ "message" => "#{message} successfully.",
78
+ "details" => self
79
+ }
80
+ end
81
+
82
+ #Error response hash
83
+ def error_response
84
+ error_message = {
85
+ "error" => "Error",
86
+ "message" => self.errors
87
+ }
88
+ end
89
+ end
@@ -27,6 +27,7 @@
27
27
 
28
28
  require "rammer/rammer_generator"
29
29
  require "rammer/module_generator"
30
+ require "rammer/scaffold_generator"
30
31
 
31
32
  module Rammer
32
33
  end
@@ -27,6 +27,7 @@
27
27
 
28
28
  require "rammer/version"
29
29
  require 'fileutils'
30
+ require_relative 'reserved_words'
30
31
 
31
32
  $gem_file_name = "rammer-"+Rammer::VERSION
32
33
 
@@ -37,10 +38,6 @@ and the runs bundle install.
37
38
  =end
38
39
  class ModuleGenerator
39
40
  attr_accessor :target_dir, :project_name, :module_class, :module_name, :gem_path, :action
40
- AUTH_MIGRATE = ['01_create_users.rb','02_create_sessions.rb']
41
- OAUTH_MIGRATE = ['03_create_owners.rb', '04_create_oauth2_authorizations.rb', '05_create_oauth2_clients.rb']
42
- AUTH_MODELS = ['user.rb', 'session.rb', 'oauth2_authorization.rb']
43
- OAUTH_MODELS = ['oauth2_client.rb', 'owner.rb']
44
41
 
45
42
  =begin
46
43
  Initiliazes the following attributes :
@@ -48,27 +45,27 @@ Initiliazes the following attributes :
48
45
  module_name (rammer module name), action (viber action to plugin or unplug) and gem_path (path at which the gem is installed)
49
46
  =end
50
47
  def initialize(options)
51
- self.project_name = options[:project_name]
52
- self.module_class = options[:module_class]
53
- self.module_name = options[:module_name]
54
- self.action = options[:action]
55
- self.target_dir = Dir.pwd
48
+ @project_name = options[:project_name]
49
+ @module_class = options[:module_class]
50
+ @module_name = options[:module_name]
51
+ @action = options[:action]
52
+ @target_dir = Dir.pwd
56
53
  path = `gem which rammer`
57
- self.gem_path = path.split($gem_file_name,2).first + "/" + $gem_file_name
54
+ @gem_path = path.split($gem_file_name,2).first + "/" + $gem_file_name
58
55
  end
59
56
 
60
57
  =begin
61
58
  Creates the required files and configuration setup while module plugin or unplug.
62
59
  =end
63
60
  def run
64
- case action
61
+ case @action
65
62
  when "-p","-plugin"
66
63
  flag = require_module_to_base
67
64
  mount_module unless flag
68
65
  copy_module
69
66
  create_migrations_and_models
70
67
  add_gems
71
- oauth_message if module_name == "oauth" && !flag
68
+ oauth_message if @module_name == "oauth" && !flag
72
69
  when "-u","-unplug"
73
70
  unmount_module
74
71
  end
@@ -78,39 +75,39 @@ Creates the required files and configuration setup while module plugin or unplug
78
75
  Mounts the module onto the application.
79
76
  =end
80
77
  def mount_module
81
- file = File.open("#{target_dir}/app/apis/#{project_name}/base.rb", "r+")
78
+ file = File.open("#{@target_dir}/app/apis/#{@project_name}/base.rb", "r+")
82
79
  file.each do |line|
83
80
  while line == "\tclass Base < Grape::API\n" do
84
81
  pos = file.pos
85
82
  rest = file.read
86
83
  file.seek pos
87
84
  file.write("\t\tmount ")
88
- file.puts(module_class)
85
+ file.puts(@module_class)
89
86
  file.write(rest)
90
87
  break
91
88
  end
92
89
  end
93
- $stdout.puts "\e[1;35m\tmounted\e[0m\t#{module_class}"
90
+ $stdout.puts "\e[1;35m\tmounted\e[0m\t#{@module_class}"
94
91
  end
95
92
 
96
93
  =begin
97
94
  Checks whether the module is already mounted and if not then configures for mounting.
98
95
  =end
99
96
  def require_module_to_base
100
- file = File.open("#{target_dir}/app/apis/#{project_name}/base.rb", "r+")
97
+ file = File.open("#{@target_dir}/app/apis/#{@project_name}/base.rb", "r+")
101
98
  file.each do |line|
102
- while line == "require_relative './modules/#{module_name}_apis'\n" do
99
+ while line == "require_relative './modules/#{@module_name}_apis'\n" do
103
100
  $stdout.puts "\e[33mModule already mounted.\e[0m"
104
101
  return true
105
102
  end
106
103
  end
107
104
 
108
- File.open("#{target_dir}/app/apis/#{project_name}/base.rb", "r+") do |f|
105
+ File.open("#{@target_dir}/app/apis/#{@project_name}/base.rb", "r+") do |f|
109
106
  pos = f.pos
110
107
  rest = f.read
111
108
  f.seek pos
112
109
  f.write("require_relative './modules/")
113
- f.write(module_name)
110
+ f.write(@module_name)
114
111
  f.write("_apis'\n")
115
112
  f.write(rest)
116
113
  end
@@ -121,29 +118,29 @@ Checks whether the module is already mounted and if not then configures for moun
121
118
  Function to copy the module of interest to project location.
122
119
  =end
123
120
  def copy_module
124
- src = "#{gem_path}/lib/modules/#{module_name}/#{module_name}_apis.rb"
125
- dest = "#{target_dir}/app/apis/#{project_name}/modules"
126
- presence = File.exists?("#{dest}/#{module_name}_apis.rb")? true : false
121
+ src = "#{@gem_path}/lib/modules/#{@module_name}/#{@module_name}_apis.rb"
122
+ dest = "#{@target_dir}/app/apis/#{@project_name}/modules"
123
+ presence = File.exists?("#{dest}/#{@module_name}_apis.rb")? true : false
127
124
  FileUtils.mkdir dest unless File.exists?(dest)
128
125
  FileUtils.cp(src,dest) unless presence
129
126
  configure_module_files
130
- $stdout.puts "\e[1;32m \tcreate\e[0m\tapp/apis/#{project_name}/modules/#{module_name}_apis.rb" unless presence
127
+ $stdout.puts "\e[1;32m \tcreate\e[0m\tapp/apis/#{@project_name}/modules/#{@module_name}_apis.rb" unless presence
131
128
  end
132
129
 
133
130
  =begin
134
131
  Function to create the necessary migrations and models.
135
132
  =end
136
133
  def create_migrations_and_models
137
- src = "#{gem_path}/lib/modules/migrations"
138
- dest = "#{target_dir}/db/migrate"
134
+ src = "#{@gem_path}/lib/modules/migrations"
135
+ dest = "#{@target_dir}/db/migrate"
139
136
  copy_files(src,dest,AUTH_MIGRATE)
140
- if module_name == "oauth"
137
+ if @module_name == "oauth"
141
138
  copy_files(src,dest,OAUTH_MIGRATE)
142
139
  end
143
- src_path = "#{gem_path}/lib/modules/models"
144
- dest_path = "#{target_dir}/app/models"
140
+ src_path = "#{@gem_path}/lib/modules/models"
141
+ dest_path = "#{@target_dir}/app/models"
145
142
  copy_files(src_path,dest_path,AUTH_MODELS)
146
- if module_name == "oauth"
143
+ if @module_name == "oauth"
147
144
  copy_files(src_path,dest_path,OAUTH_MODELS)
148
145
  end
149
146
  end
@@ -166,8 +163,8 @@ Function to copy the module files to project location.
166
163
  Function to configure the module files.
167
164
  =end
168
165
  def configure_module_files
169
- source = "#{target_dir}/app/apis/#{project_name}/modules/#{module_name}_apis.rb"
170
- application_module = project_name.split('_').map(&:capitalize)*''
166
+ source = "#{@target_dir}/app/apis/#{@project_name}/modules/#{@module_name}_apis.rb"
167
+ application_module = @project_name.split('_').map(&:capitalize)*''
171
168
  file = File.read(source)
172
169
  replace = file.gsub(/module Rammer/, "module #{application_module}")
173
170
  File.open(source, "w"){|f|
@@ -179,13 +176,13 @@ Function to configure the module files.
179
176
  Function to add the module dependency gems to project Gemfile.
180
177
  =end
181
178
  def add_gems
182
- file = File.open("#{target_dir}/Gemfile", "r+")
179
+ file = File.open("#{@target_dir}/Gemfile", "r+")
183
180
  file.each do |line|
184
181
  while line == "gem 'oauth2'\n" do
185
182
  return
186
183
  end
187
184
  end
188
- File.open("#{target_dir}/Gemfile", "a+") do |f|
185
+ File.open("#{@target_dir}/Gemfile", "a+") do |f|
189
186
  f.write("gem 'multi_json'\ngem 'oauth2'\ngem 'songkick-oauth2-provider'\ngem 'ruby_regex'\ngem 'oauth'\n")
190
187
  end
191
188
  $stdout.puts "\e[1;35m \tGemfile\e[0m\tgem 'multi_json'\n\t\tgem 'oauth2'
@@ -198,15 +195,15 @@ Function to add the module dependency gems to project Gemfile.
198
195
  Unmounts the modules by removing the respective module files.
199
196
  =end
200
197
  def unmount_module
201
- path = "#{target_dir}/app/apis/#{project_name}"
198
+ path = "#{@target_dir}/app/apis/#{@project_name}"
202
199
  temp_file = "#{path}/tmp.rb"
203
200
  source = "#{path}/base.rb"
204
- delete_file = "#{path}/modules/#{module_name}_apis.rb"
201
+ delete_file = "#{path}/modules/#{@module_name}_apis.rb"
205
202
 
206
203
  File.open(temp_file, "w") do |out_file|
207
204
  File.foreach(source) do |line|
208
- unless line == "require_relative './modules/#{module_name}_apis'\n"
209
- out_file.puts line unless line == "\t\tmount #{module_class}\n"
205
+ unless line == "require_relative './modules/#{@module_name}_apis'\n"
206
+ out_file.puts line unless line == "\t\tmount #{@module_class}\n"
210
207
  end
211
208
  end
212
209
  FileUtils.mv(temp_file, source)
@@ -214,8 +211,8 @@ Unmounts the modules by removing the respective module files.
214
211
 
215
212
  if File.exists?(delete_file)
216
213
  FileUtils.rm(delete_file)
217
- $stdout.puts "\e[1;35m\tunmounted\e[0m\t#{module_class}"
218
- $stdout.puts "\e[1;31m\tdelete\e[0m\t\tapp/apis/#{project_name}/modules/#{module_name}_apis.rb"
214
+ $stdout.puts "\e[1;35m\tunmounted\e[0m\t#{@module_class}"
215
+ $stdout.puts "\e[1;31m\tdelete\e[0m\t\tapp/apis/#{@project_name}/modules/#{@module_name}_apis.rb"
219
216
  else
220
217
  $stdout.puts "\e[33mModule already unmounted.\e[0m"
221
218
  end
@@ -27,6 +27,7 @@
27
27
 
28
28
  require "rammer/version"
29
29
  require 'fileutils'
30
+ require_relative 'reserved_words'
30
31
 
31
32
  $gem_file_name = "rammer-"+Rammer::VERSION
32
33
 
@@ -36,10 +37,7 @@ module Rammer
36
37
  Generator class for creating application basic folder structure
37
38
  =end
38
39
  class RammerGenerator
39
- attr_accessor :project_name, :target_dir, :module_name, :gem_path, :valid_name
40
- BASE_DIR = ['app', 'app/apis', 'config', 'db', 'db/migrate', 'app/models']
41
- COMMON_RAMMER_FILES = ['Gemfile','Gemfile.lock','Procfile','Rakefile','server.rb', 'tree.rb']
42
- RESERVED_WORDS = ['rammer', 'viber', 'test', 'lib', 'template', 'authorization', 'authentication', 'app', 'apis', 'models', 'migrate', 'oauth', 'oauth2']
40
+ attr_accessor :project_name, :target_dir, :module_name, :gem_path, :valid_name
43
41
 
44
42
  =begin
45
43
  Initiliazes the following attributes :
@@ -47,38 +45,38 @@ Initiliazes the following attributes :
47
45
  and gem_path (path at which the gem is installed)
48
46
  =end
49
47
  def initialize(dir_name)
50
- self.project_name = dir_name
51
- self.valid_name = true
52
- if self.project_name.nil? || self.project_name.squeeze.strip == ""
53
- $stdout.puts "\e[1;31mError:\e[0m Please specify an application name."
54
- self.valid_name = false
55
- elsif RESERVED_WORDS.include? self.project_name
56
- $stdout.puts "\e[1;31mError:\e[0m Invalid application name #{project_name}. Please give a name which does not match one of the reserved rammer words."
57
- self.valid_name = false
48
+ @project_name = dir_name
49
+ @valid_name = true
50
+
51
+ if RESERVED_WORDS.include? @project_name
52
+ $stdout.puts "\e[1;31mError:\e[0m Invalid application name #{@project_name}. Please give a name which does not match one of the reserved rammer words."
53
+ @valid_name = false
58
54
  end
59
55
 
60
- self.target_dir = Dir.pwd + "/" + self.project_name
56
+ @target_dir = Dir.pwd + "/" + @project_name
61
57
  path = `gem which rammer`
62
- self.gem_path = path.split($gem_file_name,2).first + $gem_file_name
58
+ @gem_path = path.split($gem_file_name,2).first + $gem_file_name
63
59
  end
64
60
 
65
61
  =begin
66
62
  Creates a basic folder structure with required files and configuration setup.
67
63
  =end
68
64
  def run
69
- unless !valid_name || File.exists?(project_name) || File.directory?(project_name)
70
- $stdout.puts "Creating goliath application under the directory #{project_name}"
71
- FileUtils.mkdir project_name
65
+ unless !@valid_name || File.exists?(@project_name) || File.directory?(@project_name)
66
+ $stdout.puts "Creating goliath application under the directory #{@project_name}"
67
+ FileUtils.mkdir @project_name
72
68
 
73
69
  create_base_dirs
74
70
  copy_files_to_target
75
71
  setup_api_module
76
72
  copy_files_to_dir 'application.rb','config'
77
73
  copy_files_to_dir 'database.yml','config'
78
- $stdout.puts "\e[33mRun `bundle install` to install missing gems.\e[0m"
74
+ $stdout.puts "\e[1;32m \trun\e[0m\tbundle install"
75
+ Dir.chdir("#{@project_name}")
76
+ system("bundle install")
79
77
  else
80
- unless !valid_name
81
- $stdout.puts "\e[1;31mError:\e[0m The directory #{project_name} already exists, aborting. Maybe move it out of the way before continuing."
78
+ unless !@valid_name
79
+ $stdout.puts "\e[1;31mError:\e[0m The directory #{@project_name} already exists, aborting. Maybe move it out of the way before continuing."
82
80
  end
83
81
  end
84
82
  end
@@ -90,18 +88,18 @@ Creates the application base directories.
90
88
  =end
91
89
  def create_base_dirs
92
90
  BASE_DIR.each do |dir|
93
- FileUtils.mkdir "#{project_name}/#{dir}"
91
+ FileUtils.mkdir "#{@project_name}/#{dir}"
94
92
  $stdout.puts "\e[1;32m \tcreate\e[0m\t#{dir}"
95
93
  end
96
- FileUtils.mkdir "#{project_name}/app/apis/#{project_name}"
97
- $stdout.puts "\e[1;32m \tcreate\e[0m\tapp/apis/#{project_name}"
94
+ FileUtils.mkdir "#{@project_name}/app/apis/#{@project_name}"
95
+ $stdout.puts "\e[1;32m \tcreate\e[0m\tapp/apis/#{@project_name}"
98
96
  end
99
97
 
100
98
  =begin
101
99
  Function to setup the API modules.
102
100
  =end
103
101
  def setup_api_module
104
- self.module_name = project_name.split('_').map(&:capitalize).join('')
102
+ @module_name = @project_name.split('_').map(&:capitalize).join('')
105
103
  create_api_module
106
104
  config_server
107
105
  end
@@ -110,26 +108,26 @@ Function to setup the API modules.
110
108
  Function to create the API modules.
111
109
  =end
112
110
  def create_api_module
113
- File.open("#{project_name}/app/apis/#{project_name}/base.rb", "w") do |f|
111
+ File.open("#{@project_name}/app/apis/#{@project_name}/base.rb", "w") do |f|
114
112
  f.write('module ')
115
- f.puts(module_name)
113
+ f.puts(@module_name)
116
114
  f.write("\tclass Base < Grape::API\n\tend\nend")
117
115
  end
118
- $stdout.puts "\e[1;32m \tcreate\e[0m\tapp/apis/#{project_name}/base.rb"
116
+ $stdout.puts "\e[1;32m \tcreate\e[0m\tapp/apis/#{@project_name}/base.rb"
119
117
  end
120
118
 
121
119
  =begin
122
120
  Function to configure the Goliath server.
123
121
  =end
124
122
  def config_server
125
- file = File.open("#{project_name}/server.rb", "r+")
123
+ file = File.open("#{@project_name}/server.rb", "r+")
126
124
  file.each do |line|
127
125
  while line == " def response(env)\n" do
128
126
  pos = file.pos
129
127
  rest = file.read
130
128
  file.seek pos
131
129
  file.write("\t::")
132
- file.write(module_name)
130
+ file.write(@module_name)
133
131
  file.write("::Base.call(env)\n")
134
132
  file.write(rest)
135
133
  $stdout.puts "\e[1;35m \tconfig\e[0m\tserver.rb"
@@ -143,8 +141,8 @@ Function to copy the template files project location.
143
141
  =end
144
142
  def copy_files_to_target
145
143
  COMMON_RAMMER_FILES.each do |file|
146
- source = File.join("#{gem_path}/lib/modules/common/",file)
147
- FileUtils.cp(source,"#{project_name}")
144
+ source = File.join("#{@gem_path}/lib/modules/common/",file)
145
+ FileUtils.cp(source,"#{@project_name}")
148
146
  $stdout.puts "\e[1;32m \tcreate\e[0m\t#{file}"
149
147
  end
150
148
  end
@@ -153,7 +151,7 @@ Function to copy the template files project location.
153
151
  Creates api modules, required files and configures the server with respect to new application.
154
152
  =end
155
153
  def copy_files_to_dir(file,destination)
156
- FileUtils.cp("#{gem_path}/lib/modules/common/#{file}","#{project_name}/#{destination}")
154
+ FileUtils.cp("#{@gem_path}/lib/modules/common/#{file}","#{@project_name}/#{destination}")
157
155
  $stdout.puts "\e[1;32m \tcreate\e[0m\t#{destination}/#{file}"
158
156
  end
159
157
  end
@@ -0,0 +1,70 @@
1
+ =begin
2
+ **************************************************************************
3
+ * The MIT License (MIT)
4
+
5
+ * Copyright (c) 2013-2014 QBurst Technologies Inc.
6
+
7
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
8
+ * of this software and associated documentation files (the "Software"), to deal
9
+ * in the Software without restriction, including without limitation the rights
10
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
+ * copies of the Software, and to permit persons to whom the Software is
12
+ * furnished to do so, subject to the following conditions:
13
+
14
+ * The above copyright notice and this permission notice shall be included in
15
+ * all copies or substantial portions of the Software.
16
+
17
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23
+ * THE SOFTWARE.
24
+
25
+ **************************************************************************
26
+ =end
27
+
28
+ RESERVED_WORDS = [ 'rammer',
29
+ 'viber',
30
+ 'test',
31
+ 'lib',
32
+ 'template',
33
+ 'authorization',
34
+ 'authentication',
35
+ 'app',
36
+ 'apis',
37
+ 'models',
38
+ 'migrate',
39
+ 'oauth',
40
+ 'oauth2',
41
+ 'scaffold'
42
+ ]
43
+ AUTH_MIGRATE = [ '01_create_users.rb',
44
+ '02_create_sessions.rb'
45
+ ]
46
+ OAUTH_MIGRATE = [ '03_create_owners.rb',
47
+ '04_create_oauth2_authorizations.rb',
48
+ '05_create_oauth2_clients.rb'
49
+ ]
50
+ AUTH_MODELS = [ 'user.rb',
51
+ 'session.rb',
52
+ 'oauth2_authorization.rb'
53
+ ]
54
+ OAUTH_MODELS = [ 'oauth2_client.rb',
55
+ 'owner.rb'
56
+ ]
57
+ BASE_DIR = [ 'app',
58
+ 'app/apis',
59
+ 'config',
60
+ 'db',
61
+ 'db/migrate',
62
+ 'app/models'
63
+ ]
64
+ COMMON_RAMMER_FILES = [ 'Gemfile',
65
+ 'Gemfile.lock',
66
+ 'Procfile',
67
+ 'Rakefile',
68
+ 'server.rb',
69
+ 'tree.rb'
70
+ ]
@@ -0,0 +1,227 @@
1
+ =begin
2
+ **************************************************************************
3
+ * The MIT License (MIT)
4
+
5
+ * Copyright (c) 2013-2014 QBurst Technologies Inc.
6
+
7
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
8
+ * of this software and associated documentation files (the "Software"), to deal
9
+ * in the Software without restriction, including without limitation the rights
10
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
+ * copies of the Software, and to permit persons to whom the Software is
12
+ * furnished to do so, subject to the following conditions:
13
+
14
+ * The above copyright notice and this permission notice shall be included in
15
+ * all copies or substantial portions of the Software.
16
+
17
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23
+ * THE SOFTWARE.
24
+
25
+ **************************************************************************
26
+ =end
27
+
28
+ require "rammer/version"
29
+ require 'fileutils'
30
+ require_relative 'reserved_words'
31
+
32
+ $gem_file_name = "rammer-"+Rammer::VERSION
33
+
34
+ module Rammer
35
+
36
+ =begin
37
+ Generator class for scaffolding
38
+ =end
39
+ class ScaffoldGenerator
40
+ attr_accessor :scaffold_name, :project_name, :gem_path, :model_class, :attributes, :data_types,
41
+ :arguments, :project_class, :valid
42
+
43
+ =begin
44
+ Initiliazes the basic attributes required for scaffolding.
45
+ =end
46
+ def initialize(options)
47
+ @scaffold_name = to_underscore(options[:scaffold_name])
48
+ @model_class = @scaffold_name.split('_').map(&:capitalize).join('')
49
+ @project_name = options[:project_name]
50
+ @project_class = @project_name.split('_').map(&:capitalize).join('')
51
+ @arguments = options[:arguments]
52
+ @attributes, @data_types = [],[]
53
+ path = `gem which rammer`
54
+ @gem_path = path.split($gem_file_name,2).first + $gem_file_name
55
+ @valid = false
56
+ end
57
+
58
+ =begin
59
+ Initiates scaffolding functionality by creating model, migration and api files.
60
+ =end
61
+ def run
62
+ create_model_file
63
+ create_migration if @valid==true
64
+ enable_apis if @valid==true
65
+ end
66
+
67
+ =begin
68
+ Generates the model file with CRED functionality.
69
+ =end
70
+ def create_model_file
71
+ dir = "/app/models/#{@scaffold_name}.rb"
72
+ unless File.exists?(File.join(Dir.pwd,dir))
73
+ File.join(Dir.pwd,dir)
74
+ source = "#{@gem_path}/lib/modules/scaffold/model.rb"
75
+ FileUtils.cp(source,File.join(Dir.pwd,dir))
76
+ config_model
77
+ @valid = true
78
+ $stdout.puts "\e[1;32m \tcreate\e[0m\t#{dir}"
79
+ else
80
+ $stdout.puts "\e[1;31mError:\e[0m Model named #{@scaffold_name} already exists, aborting."
81
+ end
82
+ end
83
+
84
+ =begin
85
+ Configures the model file in accordance to user input.
86
+ =end
87
+ def config_model
88
+ source = "#{Dir.pwd}/app/models/#{@scaffold_name}.rb"
89
+ modify_content(source, 'Model', "#{model_class}")
90
+ modify_content(source, '@model', "@#{@scaffold_name}")
91
+ end
92
+
93
+ =begin
94
+ Generates migration files for the scaffold.
95
+ =end
96
+ def create_migration
97
+ migration_version = Time.now.to_i
98
+ dir = "/db/migrate/#{migration_version}_create_#{@scaffold_name}s.rb"
99
+ unless File.exists?(File.join(Dir.pwd,dir))
100
+ source = "#{@gem_path}/lib/modules/scaffold/migration.rb"
101
+ FileUtils.cp(source,File.join(Dir.pwd,dir))
102
+ config_migration(migration_version)
103
+ $stdout.puts "\e[1;32m \tcreate\e[0m\t#{dir}"
104
+ end
105
+ end
106
+
107
+ =begin
108
+ Configures the migration file with the required user input.
109
+ =end
110
+ def config_migration(migration_version)
111
+ source = "#{Dir.pwd}/db/migrate/#{migration_version}_create_#{@scaffold_name}s.rb"
112
+ modify_content(source, 'CreateMigration', "Create#{@model_class}s")
113
+ modify_content(source, 'migration', "#{@scaffold_name}s")
114
+
115
+ @arguments.each do |value|
116
+ @attributes << value.split(':').first
117
+ @data_types << value.split(':').last
118
+ end
119
+
120
+ attribute_data_types = @data_types.reverse
121
+ @attributes.reverse.each_with_index do |value,index|
122
+ add_attributes(source, value, attribute_data_types[index])
123
+ end
124
+ end
125
+
126
+ =begin
127
+ Edits the migration file with the user specified model attributes.
128
+ =end
129
+ def add_attributes(source,attribute,data_type)
130
+ file = File.open(source, "r+")
131
+ file.each do |line|
132
+ while line == " create_table :#{@scaffold_name}s do |t|\n" do
133
+ pos = file.pos
134
+ rest = file.read
135
+ file.seek pos
136
+ file.write(" t.#{data_type} :#{attribute}\n")
137
+ file.write(rest)
138
+ break
139
+ end
140
+ end
141
+ end
142
+
143
+ =begin
144
+ Generates the api file with CRED functionality apis enabled.
145
+ =end
146
+ def enable_apis
147
+ dir = "/app/apis/#{@project_name}/#{@scaffold_name}s/base_apis.rb"
148
+ base_dir = "#{Dir.pwd}/app/apis/#{@project_name}/#{@scaffold_name}s"
149
+ unless File.exists?(File.join(Dir.pwd,dir))
150
+ FileUtils.mkdir base_dir unless File.exists?(base_dir)
151
+ source = "#{@gem_path}/lib/modules/scaffold/base_apis.rb"
152
+ FileUtils.cp(source,File.join(Dir.pwd,dir))
153
+ config_apis
154
+ $stdout.puts "\e[1;32m \tcreate\e[0m\t#{dir}"
155
+ mount_apis
156
+ end
157
+ end
158
+
159
+ =begin
160
+ Configures the api file with respect to the user input.
161
+ =end
162
+ def config_apis
163
+ source = "#{Dir.pwd}/app/apis/#{@project_name}/#{@scaffold_name}s/base_apis.rb"
164
+ content = ['AppName','ScaffoldName', 'Model', 'model']
165
+ replacement = ["#{@project_class}", "#{model_class}s", "#{model_class}", "#{@scaffold_name}"]
166
+ for i in 0..3 do
167
+ modify_content(source, content[i], replacement[i])
168
+ end
169
+ end
170
+
171
+ =begin
172
+ Mounts the scaffold apis onto the application.
173
+ =end
174
+ def mount_apis
175
+ require_apis_to_base
176
+ mount_class = "::#{@project_class}::#{@model_class}s::BaseApis"
177
+ file = File.open("#{Dir.pwd}/app/apis/#{@project_name}/base.rb", "r+")
178
+ file.each do |line|
179
+ while line == "\tclass Base < Grape::API\n" do
180
+ pos = file.pos
181
+ rest = file.read
182
+ file.seek pos
183
+ file.write("\t\tmount ")
184
+ file.puts(mount_class)
185
+ file.write(rest)
186
+ break
187
+ end
188
+ end
189
+ $stdout.puts "\e[1;35m\tmounted\e[0m\t#{mount_class}"
190
+ end
191
+
192
+ =begin
193
+ Configures for mounting the scaffold apis.
194
+ =end
195
+ def require_apis_to_base
196
+ File.open("#{Dir.pwd}/app/apis/#{@project_name}/base.rb", "r+") do |f|
197
+ pos = f.pos
198
+ rest = f.read
199
+ f.seek pos
200
+ f.write("require_relative '#{@scaffold_name}s/base_apis'\n")
201
+ f.write(rest)
202
+ end
203
+ end
204
+
205
+ private
206
+
207
+ =begin
208
+ Converts the string into snake case format.
209
+ =end
210
+ def to_underscore(value)
211
+ underscore_value = value.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
212
+ gsub(/([a-z\d])([A-Z])/,'\1_\2').tr("-", "_").downcase
213
+ return underscore_value
214
+ end
215
+
216
+ =begin
217
+ Modifies the content(specified) of a file(specified) with another value(specified).
218
+ =end
219
+ def modify_content(source, content, replace_value)
220
+ file = File.read(source)
221
+ replace = file.gsub(/#{content}/, replace_value)
222
+ File.open(source, "w"){|f|
223
+ f.puts replace
224
+ }
225
+ end
226
+ end
227
+ end
@@ -26,5 +26,5 @@
26
26
  =end
27
27
 
28
28
  module Rammer
29
- VERSION = "2.0.0"
29
+ VERSION = "3.0.0"
30
30
  end
@@ -25,7 +25,7 @@
25
25
  **************************************************************************
26
26
  =end
27
27
 
28
- require_relative './helper'
28
+ require_relative '../helper'
29
29
 
30
30
  $test_file = "dummy"
31
31
  $test_file_root = "#{Dir.pwd}/test"
@@ -39,8 +39,7 @@ class TestRammerRootStructure < Test::Unit::TestCase
39
39
  def test_generator_directory_name
40
40
  Dir.chdir("#{$test_file_root}")
41
41
  dir_path = Dir.pwd
42
- generator = Rammer::RammerGenerator.new(" ")
43
- generator.run
42
+ $stdout.puts `rammer `
44
43
  assert_equal(false, File.directory?("#{dir_path}/ "))
45
44
  end
46
45
 
@@ -62,13 +61,15 @@ class TestRammerRootStructure < Test::Unit::TestCase
62
61
  end
63
62
 
64
63
  def test_generator_root_directory_exisiting
64
+ Dir.chdir("#{$test_file_root}")
65
65
  dir_path = Dir.pwd
66
66
  generator = Rammer::RammerGenerator.new("#{$test_file}")
67
67
  generator.run
68
68
  assert_equal(true, File.directory?("#{dir_path}/#{$test_file}"))
69
69
  end
70
70
 
71
- def test_generator_root_folder_structure
71
+ def test_generator_root_folder_structure
72
+ Dir.chdir("#{$test_file_root}")
72
73
  dir_path = Dir.pwd
73
74
  DIR.each do |dir|
74
75
  assert_equal(true, File.directory?("#{dir_path}/#{$test_file}/#{dir}"))
@@ -0,0 +1,59 @@
1
+ =begin
2
+ **************************************************************************
3
+ * The MIT License (MIT)
4
+
5
+ * Copyright (c) 2013-2014 QBurst Technologies Inc.
6
+
7
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
8
+ * of this software and associated documentation files (the "Software"), to deal
9
+ * in the Software without restriction, including without limitation the rights
10
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
+ * copies of the Software, and to permit persons to whom the Software is
12
+ * furnished to do so, subject to the following conditions:
13
+
14
+ * The above copyright notice and this permission notice shall be included in
15
+ * all copies or substantial portions of the Software.
16
+
17
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23
+ * THE SOFTWARE.
24
+
25
+ **************************************************************************
26
+ =end
27
+
28
+ require_relative '../helper'
29
+
30
+ $test_file = "dummy"
31
+ $test_file_root = "#{Dir.pwd}/test"
32
+ $scaffold_name = "test"
33
+
34
+ SCAFFOLD_FILES = ["app/models/#{$scaffold_name}.rb","app/apis/#{$test_file}/#{$scaffold_name}s/base_apis.rb"]
35
+
36
+ class TestScaffoldGenerator < Test::Unit::TestCase
37
+ def test_generator_scaffold_folder
38
+ Dir.chdir("#{$test_file_root}/#{$test_file}")
39
+ options = { :project_name => $test_file, :scaffold_name => $scaffold_name, :arguments => ['name:string']}
40
+ scaffold_generator = Rammer::ScaffoldGenerator.new(options)
41
+ scaffold_generator.run
42
+ dir_path = Dir.pwd
43
+ SCAFFOLD_FILES.each do |file|
44
+ assert_equal(true, File.file?("#{dir_path}/#{file}"))
45
+ end
46
+ Dir.entries('db/migrate/.').each do |file|
47
+ assert true if file.include?('create_#{scaffold_name}s')
48
+ end
49
+ end
50
+
51
+ def test_generator_scaffold_folder_duplicate
52
+ Dir.chdir("#{$test_file_root}/#{$test_file}")
53
+ options = { :project_name => $test_file, :scaffold_name => $scaffold_name, :arguments => ['name:string']}
54
+ scaffold_generator = Rammer::ScaffoldGenerator.new(options)
55
+ scaffold_generator.run
56
+ expected_valid_attr = false
57
+ assert_equal(expected_valid_attr, scaffold_generator.valid)
58
+ end
59
+ end
@@ -25,7 +25,7 @@
25
25
  **************************************************************************
26
26
  =end
27
27
 
28
- require_relative './helper'
28
+ require_relative '../helper'
29
29
 
30
30
  $test_file = "dummy"
31
31
  $test_file_root = "#{Dir.pwd}/test"
@@ -42,7 +42,6 @@ class TestViberModulePlugin < Test::Unit::TestCase
42
42
  MODULE_CLASS = $test_file.split('_').map(&:capitalize)*''
43
43
 
44
44
  def test_generator_root_module_mount_authenticate
45
- Dir.chdir("#{Dir.pwd}/#{$test_file}")
46
45
  dir_path = Dir.pwd
47
46
  module_class = "::#{MODULE_CLASS}::AuthenticationApis"
48
47
  options = { :project_name => "#{$test_file}", :module_class => module_class,
@@ -25,12 +25,12 @@
25
25
  **************************************************************************
26
26
  =end
27
27
 
28
- require_relative './helper'
28
+ require_relative '../helper'
29
29
 
30
30
  $test_file = "dummy"
31
31
  $test_file_root = "#{Dir.pwd}/test"
32
32
 
33
- class TestViberModuleUnmplug < Test::Unit::TestCase
33
+ class TestViberModuleUnplug < Test::Unit::TestCase
34
34
 
35
35
  AUTHENTICATE_MODULE_FILES = ["app/apis/#{$test_file}/modules/authentication_apis.rb"]
36
36
  AUTHORIZE_MODULE_FILES = ["app/apis/#{$test_file}/modules/authorization_apis.rb"]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rammer
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 3.0.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-11-29 00:00:00.000000000 Z
12
+ date: 2014-03-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -97,6 +97,8 @@ files:
97
97
  - lib/rammer/version.rb
98
98
  - lib/rammer/rammer_generator.rb
99
99
  - lib/rammer/module_generator.rb
100
+ - lib/rammer/scaffold_generator.rb
101
+ - lib/rammer/reserved_words.rb
100
102
  - lib/modules/migrations/01_create_users.rb
101
103
  - lib/modules/migrations/02_create_sessions.rb
102
104
  - lib/modules/migrations/03_create_owners.rb
@@ -118,10 +120,14 @@ files:
118
120
  - lib/modules/models/session.rb
119
121
  - lib/modules/common/tree.rb
120
122
  - lib/modules/models/user.rb
123
+ - lib/modules/scaffold/model.rb
124
+ - lib/modules/scaffold/migration.rb
125
+ - lib/modules/scaffold/base_apis.rb
121
126
  - test/helper.rb
122
- - test/test_rammer_root_structure.rb
123
- - test/test_viber_module_plugin.rb
124
- - test/test_viber_module_unplug.rb
127
+ - test/hierarchy/test_rammer_root_structure.rb
128
+ - test/scaffold/test_scaffold_generator.rb
129
+ - test/viber/test_viber_module_plugin.rb
130
+ - test/viber/test_viber_module_unplug.rb
125
131
  - bin/rammer
126
132
  - bin/viber
127
133
  homepage: http://github.com/qburstruby/rammer
@@ -137,18 +143,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
137
143
  - - ! '>='
138
144
  - !ruby/object:Gem::Version
139
145
  version: '0'
140
- segments:
141
- - 0
142
- hash: 2624680165410903349
143
146
  required_rubygems_version: !ruby/object:Gem::Requirement
144
147
  none: false
145
148
  requirements:
146
149
  - - ! '>='
147
150
  - !ruby/object:Gem::Version
148
151
  version: '0'
149
- segments:
150
- - 0
151
- hash: 2624680165410903349
152
152
  requirements: []
153
153
  rubyforge_project:
154
154
  rubygems_version: 1.8.25
@@ -158,6 +158,8 @@ summary: Rammer is a framework dedicated to build high performance Async API ser
158
158
  on top of non-blocking (asynchronous) Ruby web server called Goliath.
159
159
  test_files:
160
160
  - test/helper.rb
161
- - test/test_rammer_root_structure.rb
162
- - test/test_viber_module_plugin.rb
163
- - test/test_viber_module_unplug.rb
161
+ - test/hierarchy/test_rammer_root_structure.rb
162
+ - test/scaffold/test_scaffold_generator.rb
163
+ - test/viber/test_viber_module_plugin.rb
164
+ - test/viber/test_viber_module_unplug.rb
165
+ has_rdoc: