melodiest 1.0.0 → 2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: eece355e0a6414d9bc928d73070eee099b9df27a
4
- data.tar.gz: 18e71602d9b587def177b120c8bedf2947125d06
3
+ metadata.gz: 79d0d120efedd4b0f01025a4ce1c98e50af974c5
4
+ data.tar.gz: 46b4f818997bbbfed1bf3c3b4309ebc6bfeb229e
5
5
  SHA512:
6
- metadata.gz: 34b276aab69efe0e3239d75441a06e82a86aabfd139fd6c2dfa46daed8c93f06d1e1020c569d5d6ad0b552d9487532e799ee4fdb164835347151a3bbcd6836a0
7
- data.tar.gz: fbde39029c8854b4703a3a653499750e83faf28436e70c5000423a6e46a16cabe195731159393cdc4bb828dd0517c65d6dde102225f3fba2eb7a95e425b4fdbc
6
+ metadata.gz: f1203ee900d402a4922792a3edf5a9a771305bc7a2174dd497f7de26be4f6929d8b7cbd9c28657e3bde9c7597feb2c25db73c703b752f2424c3b9003222a907f
7
+ data.tar.gz: e7ae8844ff29e53e0af62067e625e0e1348e2215ebf2fd3e1c2abe9f2aa842e4dd772fad1fd86822f26b5d9c364b827f97e56eb48a52d20214c859da5c69b30c
data/.gitignore CHANGED
@@ -2,3 +2,4 @@
2
2
  *.swp
3
3
  *.swo
4
4
  *.gem
5
+ .DS_Store
@@ -1,4 +1,4 @@
1
- development:
1
+ 1.0.0:
2
2
  * prevent tux to be required
3
3
  * add sinatra assets pipeline extension
4
4
  * restructure generated app
@@ -1,23 +1,12 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- melodiest (0.4.0)
5
- encrypted_cookie (= 0.0.4)
6
- sinatra (= 1.4.6)
7
- sinatra-contrib (= 1.4.2)
4
+ melodiest (1.0.0)
8
5
 
9
6
  GEM
10
7
  remote: https://rubygems.org/
11
8
  specs:
12
- backports (3.6.4)
13
9
  diff-lcs (1.2.5)
14
- encrypted_cookie (0.0.4)
15
- multi_json (1.11.2)
16
- rack (1.6.0)
17
- rack-protection (1.5.3)
18
- rack
19
- rack-test (0.6.3)
20
- rack (>= 1.0)
21
10
  rspec (3.2.0)
22
11
  rspec-core (~> 3.2.0)
23
12
  rspec-expectations (~> 3.2.0)
@@ -31,18 +20,6 @@ GEM
31
20
  diff-lcs (>= 1.2.0, < 2.0)
32
21
  rspec-support (~> 3.2.0)
33
22
  rspec-support (3.2.2)
34
- sinatra (1.4.6)
35
- rack (~> 1.4)
36
- rack-protection (~> 1.4)
37
- tilt (>= 1.3, < 3)
38
- sinatra-contrib (1.4.2)
39
- backports (>= 2.0)
40
- multi_json
41
- rack-protection
42
- rack-test
43
- sinatra (~> 1.4.0)
44
- tilt (~> 1.3)
45
- tilt (1.4.1)
46
23
 
47
24
  PLATFORMS
48
25
  ruby
@@ -50,5 +27,4 @@ PLATFORMS
50
27
  DEPENDENCIES
51
28
  bundler (~> 1.7)
52
29
  melodiest!
53
- rack-test (= 0.6.3)
54
30
  rspec (= 3.2.0)
@@ -1,4 +1,4 @@
1
- Copyright (c) 2015 kuntoaji
1
+ Copyright (c) 2015-2016 Kunto Aji Kristianto
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -35,20 +35,6 @@ generate app in current directory with database. `-d` option will generate app w
35
35
  melodiest -n my_app -d
36
36
  ```
37
37
 
38
- ### Melodiest::Application
39
- Because Melodiest is already required Sinatra, you don't have to require 'sinatra' anymore, just require 'melodiest'.
40
-
41
- `Melodiest::Application` is subclass from `Sinatra::Application`.
42
-
43
- ```ruby
44
- # my_app.rb
45
-
46
- class App < Melodiest::Application
47
- cookie_secret 'this_is_secret_for_encrypted_cookie'
48
- ...
49
- end
50
- ```
51
-
52
38
  ### Example Usage
53
39
  This example assume that PostgreSQL is already running and desired database is already exist.
54
40
  For complete example see [github.com/kuntoaji/todo_melodiest](https://github.com/kuntoaji/todo_melodiest)
@@ -57,7 +43,7 @@ For complete example see [github.com/kuntoaji/todo_melodiest](https://github.com
57
43
  3. run `bundle install`
58
44
  4. create `config/database.yml` and configure your database setting
59
45
  5. create file `db/migrations/001_create_artists.rb` and put the following code:
60
-
46
+
61
47
  ```ruby
62
48
  Sequel.migration do
63
49
  up do
@@ -66,42 +52,42 @@ For complete example see [github.com/kuntoaji/todo_melodiest](https://github.com
66
52
  String :name, :null=>false
67
53
  end
68
54
  end
69
-
55
+
70
56
  down do
71
57
  drop_table(:artists)
72
58
  end
73
59
  end
74
60
  ```
75
-
61
+
76
62
  6. run `rake db:migrate`
77
63
  7. create file `app/models/Artist.rb` and put the following code:
78
-
64
+
79
65
  ```ruby
80
66
  class Artist < Sequel::Model
81
67
  end
82
68
  ```
83
-
69
+
84
70
  8. create file `app/routes/artists.rb` and put the following code:
85
-
71
+
86
72
  ```ruby
87
73
  class MyApp
88
74
  get '/artists' do
89
75
  @artists = Artist.all
90
76
  erb :"artists/index"
91
77
  end
92
-
78
+
93
79
  post '/artists' do
94
80
  @artist = Artist.new
95
81
  @artist.name = params[:name]
96
82
  @artist.save
97
-
83
+
98
84
  redirect '/artists'
99
85
  end
100
86
  end
101
87
  ```
102
-
88
+
103
89
  9. create file `app/views/artists/index.erb` and put the following code:
104
-
90
+
105
91
  ```erb
106
92
  <h1>List of Artist</h1>
107
93
  <ul>
@@ -109,22 +95,22 @@ For complete example see [github.com/kuntoaji/todo_melodiest](https://github.com
109
95
  <li><%= artist.name %></li>
110
96
  <% end %>
111
97
  </ul>
112
-
98
+
113
99
  <form action="/artists" method="post">
114
100
  <%= Rack::Csrf.tag(env) %>
115
101
  <input type="text" name="name" />
116
102
  <button>Submit</button>
117
103
  </form>
118
104
  ```
119
-
105
+
120
106
  10. run the server `bundle exec thin start`
121
107
  11. open url `localhost:3000/artists`
122
108
 
123
109
  ### List of Ruby Gems
124
110
 
125
- * sinatra (required by default)
126
- * sinatra-contrib (required by default)
127
- * encrypted_cookie (required by default)
111
+ * sinatra
112
+ * sinatra-contrib
113
+ * encrypted_cookie
128
114
  * `Sinatra::Reloader` in development environment only
129
115
  * thin
130
116
  * `Rack::Session::EncryptedCookie`
@@ -1,17 +1 @@
1
- require 'sinatra/base'
2
- require 'encrypted_cookie'
3
-
4
- module Melodiest
5
- class Application < Sinatra::Application
6
- def self.cookie_secret(secret)
7
- use Rack::Session::EncryptedCookie,
8
- secret: secret
9
- end
10
-
11
- # http://www.sinatrarb.com/contrib/reloader.html
12
- configure :development do
13
- require 'sinatra/reloader'
14
- register Sinatra::Reloader
15
- end
16
- end
17
- end
1
+ # :)
@@ -1,6 +1,8 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- gem 'melodiest', '<%= Melodiest::VERSION %>'
3
+ gem 'sinatra'
4
+ gem 'sinatra-contrib'
5
+ gem 'encrypted_cookie'
4
6
  gem 'thin'
5
7
  gem 'tux', require: false
6
8
  gem 'sinatra-asset-pipeline', require: 'sinatra/asset_pipeline'
@@ -1,6 +1,7 @@
1
1
  <%= "require 'yaml'\n\n" if @with_database -%>
2
- class <%= @app_class_name %> < Melodiest::Application
3
- cookie_secret '<%= SecureRandom.hex 32 %>'
2
+ class <%= @app_class_name %> < Sinatra::Application
3
+ use Rack::Session::EncryptedCookie,
4
+ secret: '<%= SecureRandom.hex 32 %>'
4
5
 
5
6
  set :app_file, __FILE__
6
7
  set :views, Proc.new { File.join(root, "app/views") }
@@ -19,8 +20,10 @@ class <%= @app_class_name %> < Melodiest::Application
19
20
  end
20
21
 
21
22
  configure :development do
23
+ require 'sinatra/reloader'
22
24
  require 'logger'
23
25
 
26
+ register Sinatra::Reloader
24
27
  Sequel.connect YAML.load_file(File.expand_path("../config/database.yml", __FILE__))['development'],
25
28
  loggers: [Logger.new($stdout)]
26
29
  end
@@ -41,7 +44,7 @@ class <%= @app_class_name %> < Melodiest::Application
41
44
  end
42
45
  <% else -%>
43
46
  configure do
44
- # Load up database and such
47
+ # do something
45
48
  end
46
49
  <% end -%>
47
50
  end
@@ -1,3 +1,3 @@
1
1
  module Melodiest
2
- VERSION = '1.0.0'
2
+ VERSION = '2.0.0'
3
3
  end
@@ -7,7 +7,7 @@ Gem::Specification.new do |s|
7
7
  s.summary = "Sinatra application boilerplate generator"
8
8
  s.description = "Melodiest provides generator and contains minimal configuration to develop application with Sinatra"
9
9
  s.author = 'Kunto Aji Kristianto'
10
- s.email = 'kunto.aji.kr@slackware-id.org'
10
+ s.email = 'kuntoaji@kaklabs.com'
11
11
  s.files = `git ls-files -z`.split("\x0")
12
12
  s.executables << 'melodiest'
13
13
  s.homepage = 'http://github.com/kuntoaji/melodiest'
@@ -16,8 +16,4 @@ Gem::Specification.new do |s|
16
16
  s.required_ruby_version = '>= 2.1'
17
17
  s.add_development_dependency 'bundler', '~> 1.7'
18
18
  s.add_development_dependency 'rspec', '3.2.0'
19
- s.add_development_dependency 'rack-test', '0.6.3'
20
- s.add_runtime_dependency 'sinatra', '1.4.6'
21
- s.add_runtime_dependency 'sinatra-contrib', '1.4.2'
22
- s.add_runtime_dependency 'encrypted_cookie', '0.0.4'
23
19
  end
@@ -1,7 +1,8 @@
1
1
  require 'yaml'
2
2
 
3
- class MyApp < Melodiest::Application
4
- cookie_secret 'supersecretcookiefromgenerator'
3
+ class MyApp < Sinatra::Application
4
+ use Rack::Session::EncryptedCookie,
5
+ secret: 'supersecretcookiefromgenerator'
5
6
 
6
7
  set :app_file, __FILE__
7
8
  set :views, Proc.new { File.join(root, "app/views") }
@@ -19,8 +20,10 @@ class MyApp < Melodiest::Application
19
20
  end
20
21
 
21
22
  configure :development do
23
+ require 'sinatra/reloader'
22
24
  require 'logger'
23
25
 
26
+ register Sinatra::Reloader
24
27
  Sequel.connect YAML.load_file(File.expand_path("../config/database.yml", __FILE__))['development'],
25
28
  loggers: [Logger.new($stdout)]
26
29
  end
@@ -1,6 +1,8 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- gem 'melodiest', '0.4.0'
3
+ gem 'sinatra'
4
+ gem 'sinatra-contrib'
5
+ gem 'encrypted_cookie'
4
6
  gem 'thin'
5
7
  gem 'tux', require: false
6
8
  gem 'sinatra-asset-pipeline', require: 'sinatra/asset_pipeline'
@@ -1,5 +1,6 @@
1
- class MyApp < Melodiest::Application
2
- cookie_secret 'supersecretcookiefromgenerator'
1
+ class MyApp < Sinatra::Application
2
+ use Rack::Session::EncryptedCookie,
3
+ secret: 'supersecretcookiefromgenerator'
3
4
 
4
5
  set :app_file, __FILE__
5
6
  set :views, Proc.new { File.join(root, "app/views") }
@@ -10,6 +11,6 @@ class MyApp < Melodiest::Application
10
11
  use Rack::Csrf, raise: true
11
12
 
12
13
  configure do
13
- # Load up database and such
14
+ # do something
14
15
  end
15
16
  end
@@ -1,6 +1,8 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- gem 'melodiest', '0.4.0'
3
+ gem 'sinatra'
4
+ gem 'sinatra-contrib'
5
+ gem 'encrypted_cookie'
4
6
  gem 'thin'
5
7
  gem 'tux', require: false
6
8
  gem 'sinatra-asset-pipeline', require: 'sinatra/asset_pipeline'
@@ -0,0 +1,46 @@
1
+ module Helper
2
+ module Generator
3
+ def expect_file_eq(file, expected_file)
4
+ file_content = File.read(file)
5
+ expected_file_content = File.read(expected_file)
6
+
7
+ expect(File.exists?(file)).to be_truthy
8
+ expect(file_content).to eq(expected_file_content)
9
+ end
10
+
11
+ def expected_default_files(target_dir, expected_value)
12
+ config_dir = "#{target_dir}/config"
13
+ assets_dir = "#{target_dir}/assets"
14
+ public_dir = "#{target_dir}/public"
15
+ boot = "#{config_dir}/boot.rb"
16
+ application = "#{config_dir}/application.rb"
17
+
18
+ app_dir = "#{target_dir}/app"
19
+ routes_dir = "#{target_dir}/app/routes"
20
+ views_dir = "#{target_dir}/app/views"
21
+ layout = "#{target_dir}/app/views/layout.erb"
22
+ home_index = "#{target_dir}/app/views/home/index.erb"
23
+
24
+ expect(File.exists?(config_dir)).to eq(expected_value)
25
+ expect(File.exists?("#{config_dir}/boot.rb")).to eq(expected_value)
26
+ expect(File.exists?("#{config_dir}/application.rb")).to eq(expected_value)
27
+ expect(File.exists?(assets_dir)).to eq(expected_value)
28
+ expect(File.exists?(public_dir)).to eq(expected_value)
29
+
30
+ expect(Dir.exists?(app_dir)).to eq(expected_value)
31
+ expect(Dir.exists?(routes_dir)).to eq(expected_value)
32
+ expect(Dir.exists?(views_dir)).to eq(expected_value)
33
+ expect(File.exists?(layout)).to eq(expected_value)
34
+ expect(File.exists?(home_index)).to eq(expected_value)
35
+ end
36
+
37
+ def expected_generated_files_with_db(target_dir, expected_value)
38
+ sample_migration = "#{target_dir}/db/migrations/000_example.rb"
39
+
40
+ expect(Dir.exists?("#{target_dir}/app/models")).to eq(expected_value)
41
+ expect(File.exists?("#{target_dir}/config/database.yml.example")).to eq(expected_value)
42
+ expect(File.exists?(sample_migration)).to eq(expected_value)
43
+ end
44
+
45
+ end
46
+ end
@@ -3,14 +3,17 @@ require_relative '../../lib/melodiest/command'
3
3
  describe Melodiest::Command do
4
4
 
5
5
  describe "parse" do
6
- before do
6
+ def remove_existing_app_if_exists
7
7
  FileUtils.rm_r "my_app" if Dir.exists?("my_app")
8
8
  FileUtils.rm_r "/tmp/my_app" if Dir.exists?("/tmp/my_app")
9
9
  end
10
10
 
11
+ before do
12
+ remove_existing_app_if_exists
13
+ end
14
+
11
15
  after :all do
12
- FileUtils.rm_r "my_app" if Dir.exists?("my_app")
13
- FileUtils.rm_r "/tmp/my_app" if Dir.exists?("/tmp/my_app")
16
+ remove_existing_app_if_exists
14
17
  end
15
18
 
16
19
  it "has --help option" do
@@ -1,25 +1,26 @@
1
1
  require_relative '../../lib/melodiest/generator'
2
+ require_relative '../helpers/generator'
2
3
 
3
4
  describe Melodiest::Generator do
5
+ include Helper::Generator
6
+
4
7
  let(:generator) { Melodiest::Generator.new @app, destination: @dest }
5
8
  let(:generator_with_db) { Melodiest::Generator.new @app, destination: @dest_with_db, with_database: true }
6
9
  let(:target_dir) { "#{@dest}/#{@app}" }
7
10
  let(:target_dir_with_db) { "#{@dest_with_db}/#{@app}" }
8
11
 
9
- before :all do
12
+ before do
10
13
  @dest = "/tmp/melodiest"
11
14
  @dest_with_db = "#{@dest}_with_db"
12
15
  @app = "my_app"
13
- end
14
16
 
15
- before :all do
16
17
  FileUtils.rm_r @dest if Dir.exists?(@dest)
17
18
  FileUtils.rm_r @dest_with_db if Dir.exists?(@dest_with_db)
18
19
  end
19
20
 
20
- after :all do
21
- FileUtils.rm_r @dest
22
- FileUtils.rm_r @dest_with_db
21
+ after do
22
+ FileUtils.rm_r @dest if Dir.exists?(@dest)
23
+ FileUtils.rm_r @dest_with_db if Dir.exists?(@dest_with_db)
23
24
  end
24
25
 
25
26
  it "sets app_name" do
@@ -33,105 +34,68 @@ describe Melodiest::Generator do
33
34
  it "has default destination path app_name" do
34
35
  FileUtils.rm_r @app if Dir.exists?(@app)
35
36
  expect(Melodiest::Generator.new(@app).destination).to eq File.expand_path(@app)
36
- FileUtils.rm_r @app
37
+ FileUtils.rm_r @app if Dir.exists?(@app)
37
38
  end
38
39
 
39
40
  it "sets new destination path even if it's not exist yet" do
40
- expect("/tmp/melodiest/my_app").to eq target_dir
41
+ expect(Melodiest::Generator.new(@dest).destination).to eq File.expand_path(@dest)
41
42
  end
42
43
 
43
44
  describe "#generate_gemfile" do
44
45
  context "without database" do
45
46
  let(:gemfile) { "#{target_dir}/Gemfile" }
47
+ let(:expected_gemfile) { File.expand_path("../../fixtures/without_db/gemfile.txt", __FILE__) }
46
48
 
47
49
  it "should generate Gemfile without sequel" do
48
50
  generator.generate_gemfile
49
- file_content = File.read(gemfile)
50
- expected_file_content = File.read(File.expand_path("../../fixtures/without_db/gemfile.txt", __FILE__))
51
-
52
- expect(File.exists?(gemfile)).to be_truthy
53
- expect(file_content).to eq(expected_file_content)
51
+ expect_file_eq(gemfile, expected_gemfile)
54
52
  end
55
53
  end
56
54
 
57
55
  context "with database" do
58
56
  let(:gemfile) { "#{target_dir_with_db}/Gemfile" }
57
+ let(:expected_gemfile) { File.expand_path("../../fixtures/with_db/gemfile.txt", __FILE__) }
59
58
 
60
59
  it "should generate Gemfile with sequel" do
61
60
  generator_with_db.generate_gemfile
62
- file_content = File.read(gemfile)
63
- expected_file_content = File.read(File.expand_path("../../fixtures/with_db/gemfile.txt", __FILE__))
64
-
65
- expect(File.exists?(gemfile)).to be_truthy
66
- expect(file_content).to eq(expected_file_content)
61
+ expect_file_eq(gemfile, expected_gemfile)
67
62
  end
68
63
  end
69
64
  end
70
65
 
71
66
  describe "#generate_bundle_config" do
72
67
  let(:bundle_config) { "#{target_dir}/config.ru" }
68
+ let(:expected_bundle_config) { File.expand_path("../../fixtures/config_ru.txt", __FILE__) }
73
69
 
74
70
  it "should generate config.ru with correct content" do
75
71
  generator.generate_bundle_config
76
- file_content = File.read(bundle_config)
77
- expected_file_content = File.read(File.expand_path("../../fixtures/config_ru.txt", __FILE__))
78
-
79
- expect(File.exists?(bundle_config)).to be_truthy
80
- expect(file_content).to eq(expected_file_content)
72
+ expect_file_eq(bundle_config, expected_bundle_config)
81
73
  end
82
74
  end
83
75
 
84
76
  describe "#generate_app" do
85
- before { FileUtils.rm_r @dest if Dir.exists?(@dest) }
86
- before { FileUtils.rm_r @dest_with_db if Dir.exists?(@dest_with_db) }
87
-
88
77
  it "generates home route" do
89
78
  generator.generate_app
90
79
 
91
- app_file = "#{target_dir}/app/routes/home.rb"
92
80
  erb_file = "#{target_dir}/app/routes/home.erb"
93
- file_content = File.read(app_file)
94
- expected_file_content = File.read(File.expand_path("../../fixtures/app_routes_home.txt", __FILE__))
81
+ generated_file = "#{target_dir}/app/routes/home.rb"
82
+ expected_file = File.expand_path("../../fixtures/app_routes_home.txt", __FILE__)
95
83
 
96
- expect(File.exists?(app_file)).to be_truthy
97
84
  expect(File.exists?(erb_file)).to be_falsey
98
- expect(file_content).to eq expected_file_content
85
+ expect(File.exists?(generated_file)).to be_truthy
86
+ expect_file_eq(generated_file, expected_file)
99
87
  end
100
88
 
101
89
  context "when generating without database" do
102
90
  describe "copy_templates" do
103
- let(:config_dir) { "#{target_dir}/config" }
104
- let(:assets_dir) { "#{target_dir}/assets" }
105
- let(:public_dir) { "#{target_dir}/public" }
106
- let(:without_db_sample_migration) { "#{target_dir}/db_migrations/000_example.rb" }
107
-
108
91
  it "copies from melodiest templates" do
109
- expect(File.exists?(config_dir)).to be_falsey
110
- expect(File.exists?(without_db_sample_migration)).to be_falsey
111
- expect(File.exists?(assets_dir)).to be_falsey
112
- expect(File.exists?(public_dir)).to be_falsey
113
-
114
- expect(Dir.exists?("#{target_dir}/app")).to be_falsey
115
- expect(Dir.exists?("#{target_dir}/app/routes")).to be_falsey
116
- expect(Dir.exists?("#{target_dir}/app/models")).to be_falsey
117
- expect(Dir.exists?("#{target_dir}/app/views")).to be_falsey
118
- expect(File.exists?("#{target_dir}/app/views/layout.erb")).to be_falsey
119
- expect(File.exists?("#{target_dir}/app/views/home/index.erb")).to be_falsey
92
+ expected_default_files(target_dir, false)
93
+ expected_generated_files_with_db(target_dir, false)
120
94
 
121
95
  generator.generate_app
122
96
 
123
- expect(File.exists?(config_dir)).to be_truthy
124
- expect(File.exists?("#{config_dir}/database.yml.example")).to be_falsey
125
- expect(File.exists?(without_db_sample_migration)).to be_falsey
126
- expect(File.exists?(assets_dir)).to be_truthy
127
- expect(File.exists?(public_dir)).to be_truthy
128
-
129
- expect(Dir.exists?("#{target_dir}/app")).to be_truthy
130
- expect(Dir.exists?("#{target_dir}/app/routes")).to be_truthy
131
- expect(Dir.exists?("#{target_dir}/app/models")).to be_falsey
132
- expect(Dir.exists?("#{target_dir}/app/views")).to be_truthy
133
- expect(File.exists?("#{target_dir}/app/views/layout.erb")).to be_truthy
134
- expect(File.exists?("#{target_dir}/app/views/home/index.erb")).to be_truthy
97
+ expected_default_files(target_dir, true)
98
+ expected_generated_files_with_db(target_dir, false)
135
99
  end
136
100
  end
137
101
 
@@ -142,57 +106,24 @@ describe Melodiest::Generator do
142
106
  it "generates <app_name>.rb, public dir, and app dir" do
143
107
  generator.generate_app
144
108
 
145
- app_file = "#{target_dir}/my_app.rb"
146
- file_content = File.read(app_file)
147
- expected_file_content = File.read(File.expand_path("../../fixtures/without_db/app.txt", __FILE__))
109
+ generated_file = "#{target_dir}/my_app.rb"
110
+ expected_file = File.expand_path("../../fixtures/without_db/app.txt", __FILE__)
148
111
 
149
- expect(File.exists?(app_file)).to be_truthy
150
- expect(file_content).to eq expected_file_content
112
+ expect_file_eq(generated_file, expected_file)
151
113
  end
152
114
  end
153
115
  end
154
116
 
155
117
  context "when generating with database" do
156
118
  describe "copy templates" do
157
- let(:config_dir) { "#{target_dir_with_db}/config" }
158
- let(:assets_dir) { "#{target_dir_with_db}/assets" }
159
- let(:public_dir) { "#{target_dir_with_db}/public" }
160
- let(:with_db_sample_migration) { "#{target_dir_with_db}/db/migrations/000_example.rb" }
161
-
162
119
  it "copies from melodiest templates" do
163
- expect(File.exists?(config_dir)).to be_falsey
164
- expect(File.exists?("#{config_dir}/database.yml.example")).to be_falsey
165
- expect(File.exists?("#{config_dir}/boot.rb")).to be_falsey
166
- expect(File.exists?("#{config_dir}/application.rb")).to be_falsey
167
-
168
- expect(File.exists?(with_db_sample_migration)).to be_falsey
169
- expect(File.exists?(assets_dir)).to be_falsey
170
- expect(File.exists?(public_dir)).to be_falsey
171
-
172
- expect(Dir.exists?("#{target_dir_with_db}/app")).to be_falsey
173
- expect(Dir.exists?("#{target_dir_with_db}/app/routes")).to be_falsey
174
- expect(Dir.exists?("#{target_dir_with_db}/app/models")).to be_falsey
175
- expect(Dir.exists?("#{target_dir_with_db}/app/views")).to be_falsey
176
- expect(File.exists?("#{target_dir_with_db}/app/views/layout.erb")).to be_falsey
177
- expect(File.exists?("#{target_dir_with_db}/app/views/home/index.erb")).to be_falsey
120
+ expected_default_files(target_dir_with_db, false)
121
+ expected_generated_files_with_db(target_dir_with_db, false)
178
122
 
179
123
  generator_with_db.generate_app
180
124
 
181
- expect(File.exists?(config_dir)).to be_truthy
182
- expect(File.exists?("#{config_dir}/database.yml.example")).to be_truthy
183
- expect(File.exists?("#{config_dir}/boot.rb")).to be_truthy
184
- expect(File.exists?("#{config_dir}/application.rb")).to be_truthy
185
-
186
- expect(File.exists?(with_db_sample_migration)).to be_truthy
187
- expect(File.exists?(assets_dir)).to be_truthy
188
- expect(File.exists?(public_dir)).to be_truthy
189
-
190
- expect(Dir.exists?("#{target_dir_with_db}/app")).to be_truthy
191
- expect(Dir.exists?("#{target_dir_with_db}/app/routes")).to be_truthy
192
- expect(Dir.exists?("#{target_dir_with_db}/app/models")).to be_truthy
193
- expect(Dir.exists?("#{target_dir_with_db}/app/views")).to be_truthy
194
- expect(File.exists?("#{target_dir_with_db}/app/views/layout.erb")).to be_truthy
195
- expect(File.exists?("#{target_dir_with_db}/app/views/home/index.erb")).to be_truthy
125
+ expected_default_files(target_dir_with_db, true)
126
+ expected_generated_files_with_db(target_dir_with_db, true)
196
127
  end
197
128
  end
198
129
 
@@ -203,11 +134,10 @@ describe Melodiest::Generator do
203
134
  it "has sequel database connector" do
204
135
  generator_with_db.generate_app
205
136
 
206
- app_file = "#{target_dir_with_db}/my_app.rb"
207
- file_content = File.read(app_file)
208
- expected_file_content = File.read(File.expand_path("../../fixtures/with_db/app.txt", __FILE__))
137
+ generated_file = "#{target_dir_with_db}/my_app.rb"
138
+ expected_file = File.expand_path("../../fixtures/with_db/app.txt", __FILE__)
209
139
 
210
- expect(file_content).to eq expected_file_content
140
+ expect_file_eq(generated_file, expected_file)
211
141
  end
212
142
  end
213
143
  end
@@ -215,25 +145,22 @@ describe Melodiest::Generator do
215
145
 
216
146
  describe "#generate_rakefile" do
217
147
  it "generate basic Rakefile tasks" do
218
- expected_rakefile_content =
219
- expected_rakefile_content = File.read(File.expand_path("../../fixtures/without_db/rakefile.txt", __FILE__))
220
-
221
148
  generator.generate_rakefile
222
- rakefile = "#{target_dir}/Rakefile"
223
- rakefile_content = File.read(rakefile)
224
149
 
225
- expect(rakefile_content).to eq expected_rakefile_content
150
+ generated_file = "#{target_dir}/Rakefile"
151
+ expected_file = File.expand_path("../../fixtures/without_db/rakefile.txt", __FILE__)
152
+
153
+ expect_file_eq(generated_file, expected_file)
226
154
  end
227
155
 
228
156
  context "with database" do
229
157
  it "generates db related tasks" do
230
- expected_rakefile_content = File.read(File.expand_path("../../fixtures/with_db/rakefile.txt", __FILE__))
231
-
232
158
  generator_with_db.generate_rakefile
233
- rakefile = "#{target_dir_with_db}/Rakefile"
234
- rakefile_content = File.read(rakefile)
235
159
 
236
- expect(rakefile_content).to eq expected_rakefile_content
160
+ generated_file = "#{target_dir_with_db}/Rakefile"
161
+ expected_file = File.expand_path("../../fixtures/with_db/rakefile.txt", __FILE__)
162
+
163
+ expect_file_eq(generated_file, expected_file)
237
164
  end
238
165
  end
239
166
  end
@@ -1,15 +1 @@
1
- describe Melodiest::Application do
2
- let(:my_app) do
3
- class MyApp < Melodiest::Application
4
- cookie_secret 'mysupersecretcookie'
5
- end
6
-
7
- MyApp
8
- end
9
-
10
-
11
- it "use encrypted cookie" do
12
- expect(my_app.instance_variable_get("@middleware")).to include
13
- [Rack::Session::EncryptedCookie, [{:secret => "mysupersecretcookie"}], nil]
14
- end
15
- end
1
+ # :)
@@ -1,92 +1,29 @@
1
1
  ENV['RACK_ENV'] = 'test'
2
- require 'rack/test'
3
2
  require_relative '../lib/melodiest'
4
3
 
5
- # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
6
4
  RSpec.configure do |config|
7
- config.include Rack::Test::Methods
8
-
9
- # rspec-expectations config goes here. You can use an alternate
10
- # assertion/expectation library such as wrong or the stdlib/minitest
11
- # assertions if you prefer.
12
5
  config.expect_with :rspec do |expectations|
13
- # This option will default to `true` in RSpec 4. It makes the `description`
14
- # and `failure_message` of custom matchers include text for helper methods
15
- # defined using `chain`, e.g.:
16
- # be_bigger_than(2).and_smaller_than(4).description
17
- # # => "be bigger than 2 and smaller than 4"
18
- # ...rather than:
19
- # # => "be bigger than 2"
20
6
  expectations.include_chain_clauses_in_custom_matcher_descriptions = true
21
7
  end
22
8
 
23
- # rspec-mocks config goes here. You can use an alternate test double
24
- # library (such as bogus or mocha) by changing the `mock_with` option here.
25
9
  config.mock_with :rspec do |mocks|
26
- # Prevents you from mocking or stubbing a method that does not exist on
27
- # a real object. This is generally recommended, and will default to
28
- # `true` in RSpec 4.
29
10
  mocks.verify_partial_doubles = true
30
11
  end
31
12
 
32
13
  begin
33
- # These two settings work together to allow you to limit a spec run
34
- # to individual examples or groups you care about by tagging them with
35
- # `:focus` metadata. When nothing is tagged with `:focus`, all examples
36
- # get run.
37
14
  config.filter_run :focus
38
15
  config.run_all_when_everything_filtered = true
39
16
 
40
- # Limits the available syntax to the non-monkey patched syntax that is recommended.
41
- # For more details, see:
42
- # - http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax
43
- # - http://teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
44
- # - http://myronmars.to/n/dev-blog/2014/05/notable-changes-in-rspec-3#new__config_option_to_disable_rspeccore_monkey_patching
45
17
  #config.disable_monkey_patching!
46
-
47
- # This setting enables warnings. It's recommended, but in some cases may
48
- # be too noisy due to issues in dependencies.
49
- #config.warnings = true
50
18
  config.warnings = false
51
19
 
52
- # Many RSpec users commonly either run the entire suite or an individual
53
- # file, and it's useful to allow more verbose output when running an
54
- # individual spec file.
55
20
  if config.files_to_run.one?
56
- # Use the documentation formatter for detailed output,
57
- # unless a formatter has already been configured
58
- # (e.g. via a command-line flag).
59
21
  config.default_formatter = 'doc'
60
22
  end
61
23
 
62
- # Print the 10 slowest examples and example groups at the
63
- # end of the spec run, to help surface which specs are running
64
- # particularly slow.
65
24
  config.profile_examples = 10
66
-
67
- # Run specs in random order to surface order dependencies. If you find an
68
- # order dependency and want to debug it, you can fix the order by providing
69
- # the seed, which is printed after each run.
70
- # --seed 1234
71
25
  config.order = :random
72
26
 
73
- # Seed global randomization in this process using the `--seed` CLI option.
74
- # Setting this allows you to use `--seed` to deterministically reproduce
75
- # test failures related to randomization by passing the same `--seed` value
76
- # as the one that triggered the failure.
77
27
  Kernel.srand config.seed
78
28
  end
79
29
  end
80
-
81
- class SpecApp < Melodiest::Application
82
- cookie_secret 'supersecretcookiespec'
83
- end
84
-
85
- def app
86
- SpecApp
87
- end
88
-
89
- def gem_root_path
90
- File.expand_path "../../", __FILE__
91
- end
92
-
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: melodiest
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kunto Aji Kristianto
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-18 00:00:00.000000000 Z
11
+ date: 2016-03-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -38,65 +38,9 @@ dependencies:
38
38
  - - '='
39
39
  - !ruby/object:Gem::Version
40
40
  version: 3.2.0
41
- - !ruby/object:Gem::Dependency
42
- name: rack-test
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - '='
46
- - !ruby/object:Gem::Version
47
- version: 0.6.3
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - '='
53
- - !ruby/object:Gem::Version
54
- version: 0.6.3
55
- - !ruby/object:Gem::Dependency
56
- name: sinatra
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - '='
60
- - !ruby/object:Gem::Version
61
- version: 1.4.6
62
- type: :runtime
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - '='
67
- - !ruby/object:Gem::Version
68
- version: 1.4.6
69
- - !ruby/object:Gem::Dependency
70
- name: sinatra-contrib
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - '='
74
- - !ruby/object:Gem::Version
75
- version: 1.4.2
76
- type: :runtime
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - '='
81
- - !ruby/object:Gem::Version
82
- version: 1.4.2
83
- - !ruby/object:Gem::Dependency
84
- name: encrypted_cookie
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - '='
88
- - !ruby/object:Gem::Version
89
- version: 0.0.4
90
- type: :runtime
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - '='
95
- - !ruby/object:Gem::Version
96
- version: 0.0.4
97
41
  description: Melodiest provides generator and contains minimal configuration to develop
98
42
  application with Sinatra
99
- email: kunto.aji.kr@slackware-id.org
43
+ email: kuntoaji@kaklabs.com
100
44
  executables:
101
45
  - melodiest
102
46
  extensions: []
@@ -113,7 +57,6 @@ files:
113
57
  - lib/melodiest.rb
114
58
  - lib/melodiest/command.rb
115
59
  - lib/melodiest/generator.rb
116
- - lib/melodiest/setting.rb
117
60
  - lib/melodiest/templates/Gemfile.erb
118
61
  - lib/melodiest/templates/Rakefile.erb
119
62
  - lib/melodiest/templates/app.erb
@@ -130,7 +73,6 @@ files:
130
73
  - lib/melodiest/templates/config/boot.rb
131
74
  - lib/melodiest/templates/config/database.yml.example
132
75
  - lib/melodiest/templates/db/migrations/000_example.rb
133
- - lib/melodiest/templates/public/.DS_Store
134
76
  - lib/melodiest/templates/public/404.html
135
77
  - lib/melodiest/templates/public/apple-touch-icon.png
136
78
  - lib/melodiest/templates/public/browserconfig.xml
@@ -150,6 +92,7 @@ files:
150
92
  - spec/fixtures/without_db/app.txt
151
93
  - spec/fixtures/without_db/gemfile.txt
152
94
  - spec/fixtures/without_db/rakefile.txt
95
+ - spec/helpers/generator.rb
153
96
  - spec/melodiest/command_spec.rb
154
97
  - spec/melodiest/generator_spec.rb
155
98
  - spec/melodiest_spec.rb
@@ -1,8 +0,0 @@
1
- module Melodiest
2
- module Setting
3
- def setup(cookie_secret)
4
- use Rack::Session::EncryptedCookie,
5
- secret: cookie_secret
6
- end
7
- end
8
- end