by

Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
  • 11:51

    timriley on unstable

    (compare)

  • 11:51

    timriley on unstable

    Configure container with applic… (compare)

  • 11:51
    timriley closed #1069
  • 11:14
    timriley milestoned #1069
  • 11:13
    timriley assigned #1069
  • 11:13
    timriley opened #1069
  • 11:12

    timriley on unstable

    Configure container with applic… (compare)

  • 00:14
    vincentying15 starred hanami/hanami
  • Aug 06 20:33

    depfu[bot] on update

    (compare)

  • Aug 06 20:33
    depfu[bot] closed #203
  • Aug 06 20:33
    depfu[bot] commented #203
  • Aug 06 20:33
    depfu[bot] labeled #206
  • Aug 06 20:33
    depfu[bot] opened #206
  • Aug 06 20:28

    depfu[bot] on update

    Update rubocop to version 0.89.0 (compare)

  • Aug 06 20:24

    depfu[bot] on update

    (compare)

  • Aug 06 20:24
    depfu[bot] closed #376
  • Aug 06 20:24
    depfu[bot] commented #376
  • Aug 06 20:24
    depfu[bot] labeled #377
  • Aug 06 20:24
    depfu[bot] opened #377
  • Aug 06 20:22

    depfu[bot] on update

    Update rubocop to version 0.89.0 (compare)

Sebastjan Hribar
@sebastjan-hribar
I mean what are you all using as an alternative to FG? :)
Jeff Dickey
@jdickey
@sebastjan-hribar Have you taken a look at Fabrication? We switched to it from FactoryGirl when we were still a Rails shop, and it plays very nicely with Sequel and other ORMs as well.
Kai Kuchenbecker
@kaikuchn
Yeah, I've a high opinion of fabrication as well. It felt cleaner than FactoryBot to me.
Jeff Dickey
@jdickey
Agreed. A real pleasure to work with
...and only used the old name because that's what it was when we switched. I, too, prefer the new name, but oh well
Sebastjan Hribar
@sebastjan-hribar
Thank you @jdickey and @kaikuchn! It looks great :)
kristjan-brezovnik
@kristjan-brezovnik
Does anyone have any experience with the LESS preprocessor? I've followed the manual, but can't get it to work. I could also work with SASS or SCSS, if it's easier.
Kai Kuchenbecker
@kaikuchn
@kristjan-brezovnik sorry I've only worked with APIs. So I have no hands on setup experience with Hanami and Assets. But maybe I can still help. Could you share the relevant settings you've made in a gist? As well as what errors you get, if any?
Paweł Świątkowski
@katafrakt
kristjan-brezovnik
@kristjan-brezovnik
@katafrakt @kaikuchn Will retest as soon as @sebastjan-hribar migrates the server.
smarthouseprojectdotorg
@smarthouseprojectdotorg
Hi What's a Hanami way of rendering one or another template from the action? After coding in PHP I get used to program 'edit' and 'update' kind of actions like this. 'edit' action is programmed normally, it loads data and renders the template (default behaviour). 'update' action validates params, if validation fails, it renders 'edit' template with all the previously entered valid and invalid data in the fields; if params are valid, 'update' saves data to the db and renders/redirect to the index/list template.
Also found this hanami/view#128 Has this been implemented?
Paweł Świątkowski
@katafrakt
@smarthouseprojectdotorg I wrote this a long time ago, but I believe it still should work http://katafrakt.me/2015/08/14/different-views-for-one-action-in-lotus/
tl;dr
def call(params)
  @page = PageRepository.by_title(params[:id])
  if @page.nil?
    @page = Page.new(title: params[:id])
    self.body = Web::Views::Pages::NotFound.render(exposures)
  end
end
smarthouseprojectdotorg
@smarthouseprojectdotorg
Thanks @katafrakt , I found your article about it but as you said it looks like a magic and I agree. It seems to me there should be a more straightforward and standard approach for such a generic task.
smarthouseprojectdotorg
@smarthouseprojectdotorg
Following my own question above I have found these 4 articles which are very helpful and they answer all my questions above. Posting the links here as they may be a real help for those who started using Hanami not long time ago.
http://www.rottensoftware.com/create-record-in-hanami/
http://www.rottensoftware.com/update-record-in-hanami/
http://www.rottensoftware.com/validation_in_hanami/
http://www.rottensoftware.com/delete-records-in-hanami/
Maxim Dorofienko
@mdorfin
Hi there, how can I use already declared env variables in .env.development, I try to do something like this:
DATABASE_URL=postgresql://$POSTGRES_USER:$POSTGRES_PASSWORD@$DATABASE_HOST/$POSTGRES_DB
Kai Kuchenbecker
@kaikuchn
kristjan-brezovnik
@kristjan-brezovnik

I got LESS to work with Hanami!:D
I was going to post the whole troubleshooting process, but it would be too long, so I'll just reiterate what worked for me. This presupposes that your stylesheet file is called styles.css.less. The .less suffix is mandatory.

Some links first:
LESS precompiler site: http://lesscss.org/
Direct link to JS file: https://cdnjs.cloudflare.com/ajax/libs/less.js/3.9.0/less.min.js
W3.CSS download page: https://www.w3schools.com/w3css/w3css_downloads.asp
Direct link to main W3.CSS stylesheet: https://www.w3schools.com/w3css/4/w3.css

The setup:
Install therubyracer and less gems:

gem install therubyracer
gem install less

Put the following lines in the Gemfile file:

gem 'therubyracer'
gem 'less'

In the application.html.erb file of your app, put the following lines:
<%= stylesheet 'styles' %> (without .css.less suffixes!!!) after the other stylesheets
and
<%= javascript 'less.min' %> (with or without the .js suffix) just before the end of the body.
Note that if you use a CDN, you will likely have to modify the Content Security Policy to allow access.

Put the styles.css.less file (with the .css.less suffixes) in your apps/<YourApp>/assets/stylesheets folder and the less.min.js (with the .js suffix) in your apps/<YourApp>/assets/javascripts folder (if you're using it locally).

That's it!

The use:
If you use other stylesheets and want to use their classes in mixins, you first need to import them. In the styles.css.less file, add the following line at the beginning (the example is for the W3.CSS stylesheet):

@import (less) "w3.css";

Then you can do the following, for example:

.tmsr-card-list-item-link-index{
    .w3-padding();
}
select {
    .w3-select()
}
.tmsr-form-row{
  .w3-section();
}
.tmsr-form-row:extend(.w3-row-padding all){}
.tmsr-form-field2:extend(.w3-row-padding, .w3-col, .w3-half all){}

Note, the ":extend" pseudo-class and the "all" keyword with the last two entries. The ":extend" pseudo-class basically extends your class with the W3.CSS class. The "all" keywords means that it will find all instances. In principle, I think you could do all entries with ":extend", but I haven't tested it. The reason for both types of entries is because some classes break LESS. Which ones you'll have to figure out for yourself.

Anyway, it would be nice if someone could independently MTC this, to make sure nothing else on my setup affected this. I tried this twice and it worked.

Other thant that, happy preprocessing!:D

smarthouseprojectdotorg
@smarthouseprojectdotorg

When implementing a destroy action in my controller's code using redirect_to keeps the original i.e. DELETE HTTP method for redirection. Is it an expected behaviour?

ClientRepository.new.delete(params[:id])
redirect_to routes.clients_index_path

HTTP/1.1 DELETE 302 127.0.0.2 /admin/clients/4 5 {"id"=>"4"} 0.019853
HTTP/1.1 DELETE 405 127.0.0.2 /admin/clients - {} 0.007363

I ended up with using halt 200 in the controller's code instead of redirect_to and doing a redirection from JS

Kai Kuchenbecker
@kaikuchn
No, that's not right.
Something is wrong there. It works perfectly for my app:
[notification] [INFO] [2019-11-28 10:03:20 +0100] HTTP/1.1 DELETE 302 ::1 /notifications/alerts/373 5 {"_method"=>"DELETE", "_csrf_token"=>"f352a44fe416edbf1f2c4bf1f13773c99f6edf9c30012d15bac14db7003c10be", "id"=>"373"} 0.045338
[notification] [INFO] [2019-11-28 10:03:20 +0100] (0.000604s) SELECT "id", "topic", "criterion", "action", "created_at", "updated_at", "name" FROM "alert_rules" ORDER BY "alert_rules"."id"
[notification] [INFO] [2019-11-28 10:03:20 +0100] HTTP/1.1 GET 200 ::1 /notifications/alerts 4629 {} 0.032162
I wonder about your route name @smarthouseprojectdotorg clients_index_path sounds wrong to me. Shouldn't it be clients_path?
Maybe show us your route definitions. Also, what version of Hanami are you using?
Eric
@ericplezi

Hi guys,

I'm requesting your help!
I'm using Hanami controller coupling with Rails. For some reason I can't figure why my application is not outputting logs info in staging environment. ActiveSupport does not seem to work out with Hanami controller use only. We made sure the testing config file is enabling logs output.
Any idea what I could be doing wrong?

Your feedbacks are appreciated, thanks!

Kai Kuchenbecker
@kaikuchn
Hanami, and Rails for that matter, actually use the standard logging interface. So you should be able to plug the ActiveSupport logger into hanami-controller without problems (mind you, I have never tried this!). Maybe the configured log-level is not what you expected?
Eric
@ericplezi

this is what I have in the config.ru file:

console = ActiveSupport::Logger.new($stdout)
console.formatter = Rails.logger.formatter
console.level = Rails.logger.level

Rails.logger.extend(ActiveSupport::Logger.broadcast(console))

run Rails.application

the log-level is set to :debug
somehow it doesn't print the http request info (duration, params, ip address, etc). is there a middleware to add?

Kai Kuchenbecker
@kaikuchn
Right, so I just had a look into hanami/controller and it seems that it's not responsible for logging requests. I'm guessing some rack middleware does that. I'll have to further look into it.
Yeah, the hanami/hanami gem wires logging up.
It uses a common_logger component that is based on the rack/common_logger.
Kai Kuchenbecker
@kaikuchn
I.e., I suppose you could insert rack/common_logger into your middle-ware stack and you should get your request logs.
Kai Kuchenbecker
@kaikuchn
You may also consider using this: https://api.rubyonrails.org/classes/Rails/Rack/Logger.html
Which is the rails middleware for request logging.
Without knowing how you integrated hanami/controller into your rails app I'm not sure what makes sense and what doesn't :)
Eric
@ericplezi
I added rack/common_logger file in my project and added require 'rack/common_logger' in my config.ru
nothing was printed :(
Michael Trommer
@entropie
How does one access cookies from the view? Works fine from the controller, I feel I must miss something.
Kai Kuchenbecker
@kaikuchn
@ericplezi You need to insert the middleware it as well!
@entropie why would you? wouldn't it be better to expose a variable to the view?
Eric
@ericplezi
I added the middleware @kaikuchn
Kai Kuchenbecker
@kaikuchn
Ah ok. Where did you add it?
Eric
@ericplezi
in the lib folder under rack/common_logger.rb
Kai Kuchenbecker
@kaikuchn
No, I mean where in the middleware-stack did you insert it? See this guide to middleware if you're unsure on what to do.
Eric
@ericplezi
# frozen_string_literal: true

# This file is used by Rack-based servers to start the application.

require_relative 'config/environment'
require 'rack/common_logger'


console = ActiveSupport::Logger.new($stdout)
console.formatter = Rails.logger.formatter
console.level = Rails.logger.level

#Hanami::Logger.extend(ActiveSupport::Logger.broadcast(console))
Rails.logger.extend(ActiveSupport::Logger.broadcast(console))

run Rails.application
here I added it
Kai Kuchenbecker
@kaikuchn
There you simply required it. But now you also need to insert it into the middleware-stack. See the guide I posted in my previous message on middlewares / rack.
Eric
@ericplezi
yeah i'm not sure where to added it and how to include it
Eric
@ericplezi
I added config.middleware.insert_before 0, Rack::CommonLogger in the application.rb
seems to do the job
Thanks mate @kaikuchn !
Kai Kuchenbecker
@kaikuchn
:+1: