hanami 1.1.0.beta3 → 1.1.0.rc1

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: 453bcdf8124ac473f5d4245104b5a47d2d4d9090
4
- data.tar.gz: 06ec8e1b359f3b85f11153a9ca6f9ea72e8934b9
3
+ metadata.gz: 68c2bd230a6f3488602c161d3a59708efe81e221
4
+ data.tar.gz: 56b19feffa7910a757ec4a2503e3d18be88408d6
5
5
  SHA512:
6
- metadata.gz: '009ebd38540c0ce0ebdd40d86ae490ecd875b1845fa9b0dabe9b1b49c4c5f8cb3bfb243c0d1f3170ee4b2fd1ce42b4456038610eb5f44c8ef64f0bf6252ce917'
7
- data.tar.gz: 52b785fed5b9064d5282c3ed3eee797091b671b59c6470082b9bfdf850c009ea438beb673a27ad718cc823aa7b9e75c2865b27ff5296f24449732f5630fbdd04
6
+ metadata.gz: be888d3a7c3c3a1ee2509a77ec08c7e9e9a89602d5b03c1004545afa60e37d48db83ef98a30fded1e8a3523a7a9df63f05afbf4659022096551c54af06bda48a
7
+ data.tar.gz: cdf6dfb4d86ed2de9f42ab2b23fcc26382748375269ecb28be9194f422d21f930e220843c242090ef7047c82bca736167014eeb1ae0283c3de6a4e1e8911467c
@@ -1,6 +1,11 @@
1
1
  # Hanami
2
2
  The web, with simplicity.
3
3
 
4
+ ## v1.1.0.rc1 - 2017-10-16
5
+ ### Added
6
+ - [Yuji Ueki] Generate RSpec tests with `:type` metadata (eg `type: :action`)
7
+ - [Kirill] Add `--relation` option for `hanami generate model` (eg `bundle exec hanami generate model user --relation=accounts`)
8
+
4
9
  ## v1.1.0.beta3 - 2017-10-04
5
10
  ### Fixed
6
11
  - [Luca Guidi] Don't require `:plugins` group when running `hanami new`
@@ -21,15 +21,15 @@ Gem::Specification.new do |spec|
21
21
 
22
22
  spec.metadata['allowed_push_host'] = 'https://rubygems.org'
23
23
 
24
- spec.add_dependency 'hanami-utils', '1.1.0.beta3'
25
- spec.add_dependency 'hanami-validations', '1.1.0.beta3'
26
- spec.add_dependency 'hanami-router', '1.1.0.beta3'
27
- spec.add_dependency 'hanami-controller', '1.1.0.beta3'
28
- spec.add_dependency 'hanami-view', '1.1.0.beta3'
29
- spec.add_dependency 'hanami-helpers', '1.1.0.beta3'
30
- spec.add_dependency 'hanami-mailer', '1.1.0.beta3'
31
- spec.add_dependency 'hanami-assets', '1.1.0.beta3'
32
- spec.add_dependency 'hanami-cli', '0.1.0.beta3'
24
+ spec.add_dependency 'hanami-utils', '1.1.0.rc1'
25
+ spec.add_dependency 'hanami-validations', '1.1.0.rc1'
26
+ spec.add_dependency 'hanami-router', '1.1.0.rc1'
27
+ spec.add_dependency 'hanami-controller', '1.1.0.rc1'
28
+ spec.add_dependency 'hanami-view', '1.1.0.rc1'
29
+ spec.add_dependency 'hanami-helpers', '1.1.0.rc1'
30
+ spec.add_dependency 'hanami-mailer', '1.1.0.rc1'
31
+ spec.add_dependency 'hanami-assets', '1.1.0.rc1'
32
+ spec.add_dependency 'hanami-cli', '0.1.0.rc1'
33
33
  spec.add_dependency 'concurrent-ruby', '~> 1.0'
34
34
  spec.add_dependency 'bundler'
35
35
 
@@ -2,14 +2,14 @@ module Hanami
2
2
  class CLI
3
3
  module Commands
4
4
  module Db
5
- # @since x.x.x
5
+ # @since 1.1.0
6
6
  # @api private
7
7
  class Create < Command
8
8
  requires "model.configuration"
9
9
 
10
10
  desc "Create the database (only for development/test)"
11
11
 
12
- # @since x.x.x
12
+ # @since 1.1.0
13
13
  # @api private
14
14
  def call(**options)
15
15
  context = Context.new(options: options)
@@ -19,7 +19,7 @@ module Hanami
19
19
 
20
20
  private
21
21
 
22
- # @since x.x.x
22
+ # @since 1.1.0
23
23
  # @api private
24
24
  def create_database(*)
25
25
  require "hanami/model/migrator"
@@ -1,7 +1,7 @@
1
1
  module Hanami
2
2
  class CLI
3
3
  module Commands
4
- # @since x.x.x
4
+ # @since 1.1.0
5
5
  # @api private
6
6
  module Db
7
7
  class Drop < Command
@@ -9,7 +9,7 @@ module Hanami
9
9
 
10
10
  desc "Drop the database (only for development/test)"
11
11
 
12
- # @since x.x.x
12
+ # @since 1.1.0
13
13
  # @api private
14
14
  def call(**options)
15
15
  context = Context.new(options: options)
@@ -19,7 +19,7 @@ module Hanami
19
19
 
20
20
  private
21
21
 
22
- # @since x.x.x
22
+ # @since 1.1.0
23
23
  # @api private
24
24
  def drop_database(*)
25
25
  require "hanami/model/migrator"
@@ -2,7 +2,7 @@ module Hanami
2
2
  class CLI
3
3
  module Commands
4
4
  module Db
5
- # @since x.x.x
5
+ # @since 1.1.0
6
6
  # @api private
7
7
  class Rollback < Command
8
8
  requires "model.sql"
@@ -16,7 +16,7 @@ module Hanami
16
16
  "2 # Rollbacks last two migrations"
17
17
  ]
18
18
 
19
- # @since x.x.x
19
+ # @since 1.1.0
20
20
  # @api private
21
21
  def call(steps:, **)
22
22
  context = Context.new(steps: steps.to_int)
@@ -26,7 +26,7 @@ module Hanami
26
26
 
27
27
  private
28
28
 
29
- # @since x.x.x
29
+ # @since 1.1.0
30
30
  # @api private
31
31
  def rollback_database(context)
32
32
  require "hanami/model/migrator"
@@ -1,4 +1,4 @@
1
- RSpec.describe <%= app.classify %>::Controllers::<%= classified_controller_name %>::<%= action.classify %> do
1
+ RSpec.describe <%= app.classify %>::Controllers::<%= classified_controller_name %>::<%= action.classify %>, type: :action do
2
2
  let(:action) { described_class.new }
3
3
  let(:params) { Hash[] }
4
4
 
@@ -1,4 +1,4 @@
1
- RSpec.describe <%= app.classify %>::Views::<%= classified_controller_name %>::<%= action.classify %> do
1
+ RSpec.describe <%= app.classify %>::Views::<%= classified_controller_name %>::<%= action.classify %>, type: :view do
2
2
  let(:exposures) { Hash[foo: 'bar'] }
3
3
  let(:template) { Hanami::View::Template.new('<%= template %>') }
4
4
  let(:view) { described_class.new(template, exposures) }
@@ -1,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- RSpec.describe <%= app.classify %>::Views::ApplicationLayout do
3
+ RSpec.describe <%= app.classify %>::Views::ApplicationLayout, type: :view do
4
4
  let(:layout) { <%= app.classify %>::Views::ApplicationLayout.new(template, {}) }
5
5
  let(:rendered) { layout.render }
6
6
  let(:template) { Hanami::View::Template.new('apps/<%= app %>/templates/application.html.<%= template %>') }
@@ -1,4 +1,4 @@
1
- RSpec.describe Mailers::<%= mailer.classify %> do
1
+ RSpec.describe Mailers::<%= mailer.classify %>, type: :mailer do
2
2
  it 'delivers email' do
3
3
  mail = Mailers::<%= mailer.classify %>.deliver
4
4
  end
@@ -11,19 +11,23 @@ module Hanami
11
11
 
12
12
  argument :model, required: true, desc: "Model name (eg. `user`)"
13
13
  option :skip_migration, type: :boolean, default: false, desc: "Skip migration"
14
+ option :relation, type: :string, desc: "Name of the database relation, default: pluralized model name"
14
15
 
15
16
  example [
16
- "user # Generate `User` entity, `UserRepository` repository, and the migration",
17
- "user --skip-migration # Generate `User` entity and `UserRepository` repository"
17
+ "user # Generate `User` entity, `UserRepository` repository, and the migration",
18
+ "user --skip-migration # Generate `User` entity and `UserRepository` repository",
19
+ "user --relation=accounts # Generate `User` entity, `UserRepository` and migration to create `accounts` table"
18
20
  ]
19
21
 
20
22
  # @since 1.1.0
21
23
  # @api private
22
24
  def call(model:, **options)
23
25
  model = Utils::String.underscore(model)
24
- relation = Utils::String.pluralize(model)
26
+ relation = relation_name(options, model)
25
27
  migration = "create_#{relation}"
26
- context = Context.new(model: model, relation: relation, migration: migration, test: options.fetch(:test), options: options)
28
+ context = Context.new(model: model, relation: relation, migration: migration, test: options.fetch(:test), override_relation_name: override_relation_name?(options), options: options)
29
+
30
+ assert_valid_relation!(context)
27
31
 
28
32
  generate_entity(context)
29
33
  generate_repository(context)
@@ -34,6 +38,13 @@ module Hanami
34
38
 
35
39
  private
36
40
 
41
+ def assert_valid_relation!(context)
42
+ if Utils::Blank.blank?(context.relation)
43
+ warn "`#{context.relation}' is not a valid relation name"
44
+ exit(1)
45
+ end
46
+ end
47
+
37
48
  # @since 1.1.0
38
49
  # @api private
39
50
  def generate_entity(context)
@@ -91,6 +102,22 @@ module Hanami
91
102
  def skip_migration?(context)
92
103
  context.options.fetch(:skip_migration, false)
93
104
  end
105
+
106
+ # @since 1.1.0
107
+ # @api private
108
+ def relation_name(options, model)
109
+ if override_relation_name?(options)
110
+ Utils::String.underscore(options[:relation])
111
+ else
112
+ Utils::String.pluralize(model)
113
+ end
114
+ end
115
+
116
+ # @since 1.1.0
117
+ # @api private
118
+ def override_relation_name?(options)
119
+ !options.fetch(:relation, nil).nil?
120
+ end
94
121
  end
95
122
  end
96
123
  end
@@ -1,3 +1,3 @@
1
- RSpec.describe <%= model.classify %> do
1
+ RSpec.describe <%= model.classify %>, type: :entity do
2
2
  # place your tests here
3
3
  end
@@ -1,2 +1,5 @@
1
1
  class <%= model.classify %>Repository < Hanami::Repository
2
+ <%- if override_relation_name -%>
3
+ self.relation = :<%= relation %>
4
+ <%- end -%>
2
5
  end
@@ -1,3 +1,3 @@
1
- RSpec.describe <%= model.classify %>Repository do
1
+ RSpec.describe <%= model.classify %>Repository, type: :repository do
2
2
  # place your tests here
3
3
  end
@@ -299,7 +299,7 @@ module Hanami
299
299
  application_name: options.fetch(:application_name),
300
300
  application_base_url: options.fetch(:application_base_url),
301
301
  hanami_head: options.fetch(:hanami_head),
302
- hanami_model_version: '1.1.0.beta3',
302
+ hanami_model_version: '1.1.0.rc1',
303
303
  code_reloading: code_reloading?,
304
304
  hanami_version: hanami_version,
305
305
  project_module: Utils::String.classify(project),
@@ -36,11 +36,11 @@ module Hanami
36
36
  # @api private
37
37
  RACK_ERRORS = 'rack.errors'.freeze
38
38
 
39
- # @since x.x.x
39
+ # @since 1.1.0
40
40
  # @api private
41
41
  QUERY_HASH = 'rack.request.query_hash'.freeze
42
42
 
43
- # @since x.x.x
43
+ # @since 1.1.0
44
44
  # @api private
45
45
  FORM_HASH = 'rack.request.form_hash'.freeze
46
46
 
@@ -8,12 +8,22 @@ module Hanami
8
8
  # @since 0.1.0
9
9
  # @api private
10
10
  class LoadPaths < Utils::LoadPaths
11
+ # Overrides Utils::LoadPath initialize method
12
+ #
13
+ # @see Hanami::Utils::LoadPaths#initialize
14
+ #
15
+ # @since 0.1.0
11
16
  # @api private
12
17
  def initialize(root)
13
18
  super()
14
19
  @root = root
15
20
  end
16
21
 
22
+ # Requires relative @pats [Utils::Kernel.Array] variable via each method
23
+ #
24
+ # @see Hanami::Utils::LoadPaths#each
25
+ #
26
+ # @since 0.1.0
17
27
  # @api private
18
28
  def load!
19
29
  each do |path|
@@ -23,6 +33,10 @@ module Hanami
23
33
 
24
34
  protected
25
35
 
36
+ # Overrides Utils::LoadPath realpath method
37
+ #
38
+ # @see Hanami::Utils::LoadPaths#realpath
39
+ #
26
40
  # @api private
27
41
  def realpath(path)
28
42
  @root.join(path).realpath
@@ -6,7 +6,7 @@ module Hanami
6
6
  module Version
7
7
  # @since 0.9.0
8
8
  # @api private
9
- VERSION = '1.1.0.beta3'.freeze
9
+ VERSION = '1.1.0.rc1'.freeze
10
10
 
11
11
  # @since 0.9.0
12
12
  # @api private
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hanami
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0.beta3
4
+ version: 1.1.0.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Luca Guidi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-10-04 00:00:00.000000000 Z
11
+ date: 2017-10-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hanami-utils
@@ -16,126 +16,126 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 1.1.0.beta3
19
+ version: 1.1.0.rc1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 1.1.0.beta3
26
+ version: 1.1.0.rc1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: hanami-validations
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - '='
32
32
  - !ruby/object:Gem::Version
33
- version: 1.1.0.beta3
33
+ version: 1.1.0.rc1
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - '='
39
39
  - !ruby/object:Gem::Version
40
- version: 1.1.0.beta3
40
+ version: 1.1.0.rc1
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: hanami-router
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - '='
46
46
  - !ruby/object:Gem::Version
47
- version: 1.1.0.beta3
47
+ version: 1.1.0.rc1
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - '='
53
53
  - !ruby/object:Gem::Version
54
- version: 1.1.0.beta3
54
+ version: 1.1.0.rc1
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: hanami-controller
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - '='
60
60
  - !ruby/object:Gem::Version
61
- version: 1.1.0.beta3
61
+ version: 1.1.0.rc1
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - '='
67
67
  - !ruby/object:Gem::Version
68
- version: 1.1.0.beta3
68
+ version: 1.1.0.rc1
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: hanami-view
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - '='
74
74
  - !ruby/object:Gem::Version
75
- version: 1.1.0.beta3
75
+ version: 1.1.0.rc1
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - '='
81
81
  - !ruby/object:Gem::Version
82
- version: 1.1.0.beta3
82
+ version: 1.1.0.rc1
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: hanami-helpers
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - '='
88
88
  - !ruby/object:Gem::Version
89
- version: 1.1.0.beta3
89
+ version: 1.1.0.rc1
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - '='
95
95
  - !ruby/object:Gem::Version
96
- version: 1.1.0.beta3
96
+ version: 1.1.0.rc1
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: hanami-mailer
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - '='
102
102
  - !ruby/object:Gem::Version
103
- version: 1.1.0.beta3
103
+ version: 1.1.0.rc1
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - '='
109
109
  - !ruby/object:Gem::Version
110
- version: 1.1.0.beta3
110
+ version: 1.1.0.rc1
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: hanami-assets
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - '='
116
116
  - !ruby/object:Gem::Version
117
- version: 1.1.0.beta3
117
+ version: 1.1.0.rc1
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - '='
123
123
  - !ruby/object:Gem::Version
124
- version: 1.1.0.beta3
124
+ version: 1.1.0.rc1
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: hanami-cli
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
129
  - - '='
130
130
  - !ruby/object:Gem::Version
131
- version: 0.1.0.beta3
131
+ version: 0.1.0.rc1
132
132
  type: :runtime
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
136
  - - '='
137
137
  - !ruby/object:Gem::Version
138
- version: 0.1.0.beta3
138
+ version: 0.1.0.rc1
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: concurrent-ruby
141
141
  requirement: !ruby/object:Gem::Requirement