kabari hendrick
2011-Oct-17 13:49 UTC
Re: Digest for rubyonrails-core@googlegroups.com - 9 Messages in 3 Topics
Sorry, but I''m out of the office until 10/17 and, because my new iPhone hasn''t arrived yet, I won''t have access to email. But don''t fret, Jon Pirc may be able to help you with your inquiry: jpirc@lab42.com Thanks! On Oct 17, 2011, at 8:11 AM, rubyonrails-core@googlegroups.com wrote:> Today''s Topic Summary > Group: http://groups.google.com/group/rubyonrails-core/topics > • Unobtrusive Image Mouseover [1 Update] > • Uniqueness Validator and Case Sensitivity [1 Update] > • A proper way to test that database is not accessed? [7 Updates] > Topic: Unobtrusive Image Mouseover > • Tim Shaffer <timshaffer@me.com> Oct 17 04:54AM -0700 ^ > • > > • Thanks for the input. That''s exactly what I needed to know. > • > Topic: Uniqueness Validator and Case Sensitivity > • Panayotis Matsinopoulos <panayotis@matsinopoulos.gr> Oct 16 12:25AM -0700 ^ > • > > • Hi, > • > • I would like to ask what is the reason behind the fact that > • ActiveRecord Uniqueness Validator does the following: > • > • if value.nil? || (options[:case_sensitive] || !column.text?) > • sql = "#{sql_attribute} #{operator}" > • else > • sql = "LOWER(#{sql_attribute}) = LOWER(?)" > • end > • > • In other words, why it sends the ''LOWER" when case sensitivity is set > • to false (for string attributes) > • > • This generates sql queries that do not use the index on the attribute. > • > • My opinion is that ActiveRecod should just pass the requirement (case > • sensitive or not) to adapter (e.g. mysql2) and let the > • adapter decide how to do the job/construct the query (which would > • probably take into account db colation or do nothing and let db decide > • how to handle it) > • > • Moreover, I find it inconsistent the fact that default behaviour > • of :uniqueness validator is case sensitive TRUE when finders are all > • case insensitive "don''t care". Maybe, as a workaround, except from > • false and true, you can consider something like :uniqueness => > • {:case_sensitive => :db} and the db colation decide about it. > • > • Currently, I have decided to stop using :uniqueness validator on > • string type attributes, because of all this mess with MySQL colation. > • > • Panayotis > • > Topic: A proper way to test that database is not accessed? > • "Mislav Marohnić" <mislav.marohnic@gmail.com> Oct 16 05:52PM +0200 ^ > • > > • On Oct 16, 2011, at 8:35 AM, KIR wrote: > • > • > ActiveRecord::Base.establish_connection Rails.env > • > • > I don''t quite understand what do you mean here? > • > • I know what your problem is. If because of changes to Rails reconnecting to the db by using the old connection doesn''t work, then I suggested that you give up on using the old connection and just instruct AR to connect as if the application was just booting up. Have you tried what I suggested at all? Are you having the same problem? > • > • def without_database_connection > • ActiveRecord::Base.remove_connection > • begin > • yield > • ensure > • ActiveRecord::Base.establish_connection Rails.env > • end > • end > • > • KIR <kir@maxkir.com> Oct 16 06:22PM +0200 ^ > • > > • > ActiveRecord::Base.establish_connection Rails.env > • > end > • > end > • > • Thanks Mislav, I tried your suggestion, but it doesn''t work. > • > • My actual problem is not about restoring the connection (but thanks for > • the tip, I may need it eventually). > • It is about the fact that I _always_ get exception when I''m trying to > • access model attributes when connection was removed with remove_connection > • (i.e. I get exception in the yield part). > • > • BTW, have you tried your helper on Rails 3.1.1? > • > • Thanks, > • KIR > • > • > • > • > • > rubyonrails-core+unsubscribe@googlegroups.com. > • > For more options, visit this group at > • > http://groups.google.com/group/rubyonrails-core?hl=en. > • > • -- > • > • Kirill (KIR) Maximov > • > • Software Engineer & Starter > • > • > • Twitter: http://twitter.com/maxkir > • > • Skype: maxkir > • > • http://kirblog.idetalk.com | http://checkvist.com | > • http://www.jetbrains.com/teamcity > • > • "Mislav Marohnić" <mislav.marohnic@gmail.com> Oct 16 07:19PM +0200 ^ > • > > • On Oct 16, 2011, at 6:22 PM, KIR wrote: > • > • > BTW, have you tried your helper on Rails 3.1.1? > • > • I haven''t tried my code, I just pulled it out of the air. Sorry that I misunderstood your problem – I thought it was about reconnecting. > • > • I have the feeling that others also didn''t get what you were saying; people who got notified about your comment on the issue tracker probably thought that you have a problem in your custom helper. > • > • The most important thing right now to establish whether this is a real bug or not. The behavior which you relied on before the offending change might not have been intentional. It''s possible that you might be testing wrong things in your application. > • > • You should describe what are you doing inside the no connection block. (You mentioned using attribute accessors, but in order to generate these accessors, AR must have an open connection so it can fetch information about table columns.) Describe shortly what you were expecting to get and how the new behavior surprises you and breaks your tests. > • > • KIR <kir@maxkir.com> Oct 16 07:42PM +0200 ^ > • > > • > accessors, AR must have an open connection so it can fetch information about > • > table columns.) Describe shortly what you were expecting to get and how the > • > new behavior surprises you and breaks your tests. > • > • Basically, I have a test that I don''t have N+1 problem when collecting > • data. > • I do something like this: > • > • # in the production, this may generate hundreds of items (which have own > • associations) > • sub_model_items = model.preload_subitems > • > • assert_no_database { > • json = sub_model_items.build_json > • } > • > • What I''m trying to test - that my code doesn''t perform SQL operations > • when building json, i.e. all data should be preloaded. > • > • Thanks, > • KIR > • > • > • -- > • > • Kirill (KIR) Maximov > • > • Software Engineer & Starter > • > • > • Twitter: http://twitter.com/maxkir > • > • Skype: maxkir > • > • http://kirblog.idetalk.com | http://checkvist.com | > • http://www.jetbrains.com/teamcity > • > • "Mislav Marohnić" <mislav.marohnic@gmail.com> Oct 16 07:58PM +0200 ^ > • > > • On Oct 16, 2011, at 7:42 PM, KIR wrote: > • > What I''m trying to test - that my code doesn''t perform SQL operations when building json, i.e. all data should be preloaded. > • > • That''s a perfectly valid thing to test. Looks like it might be a regression. I suggest that you update the issue (where you commented on) with this information, including your own code related to this and provide a stack trace pasted into a Gist. > • > • Until you have a solution for this problem, I suggest testing this another way. In will_paginate, I subscribe to all SQL queries performed and then I check them in tests to see whether there have been too many executed during a particular test. > • > • KIR <kir@maxkir.com> Oct 16 09:08PM +0200 ^ > • > > • > way. In will_paginate, I subscribe to all SQL queries performed<https://github.com/mislav/will_paginate/blob/d56a8436/spec/finders/activerecord_test_connector.rb#L5-23> and > • > then I check them in tests to see whether there have been too many executed > • > during a particular test. > • > • Thanks a lot for the hint, will investigate it. > • May be, I''ll be able to rewrite my assert_no_database assertion using > • its approach. > • > • All the best, > • KIR > • > • > • > rubyonrails-core+unsubscribe@googlegroups.com. > • > For more options, visit this group at > • > http://groups.google.com/group/rubyonrails-core?hl=en. > • > • -- > • > • Kirill (KIR) Maximov > • > • Software Engineer & Starter > • > • > • Twitter: http://twitter.com/maxkir > • > • Skype: maxkir > • > • http://kirblog.idetalk.com | http://checkvist.com | > • http://www.jetbrains.com/teamcity > • > • Will Bryant <will.bryant@gmail.com> Oct 17 03:54PM +1300 ^ > • > > • On 17/10/2011, at 08:08 , KIR wrote: > • > • > • > Thanks a lot for the hint, will investigate it. > • > May be, I''ll be able to rewrite my assert_no_database assertion using its approach. > • > • There''s assert_queries/assert_no_queries in the test case support code, which sound quite similar to what you want. But it needs a subscriber implementation (such as Mislav was talking about for will_paginate), which you need to feed into the global variable that the assertions check. > • > • Rails has a subscriber implementation for its own tests, but it isn''t exposed. IMHO it would be great it did, so we could just instantiate that in app test code without having to copy it in (it''s somewhat version-specific). > • > • Have a look at activerecord/test/cases/helper.rb to see how it works. The assertions that use it are defined in activerecord/lib/active_record/test_case.rb, so they are exposed, which doesn''t make much sense at the moment. > • > > -- > You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group. > To post to this group, send email to rubyonrails-core@googlegroups.com. > To unsubscribe from this group, send email to rubyonrails-core+unsubscribe@googlegroups.com. > For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en.-- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group. To post to this group, send email to rubyonrails-core@googlegroups.com. To unsubscribe from this group, send email to rubyonrails-core+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en.
Prem Sichanugrist
2011-Oct-17 13:52 UTC
Re: Digest for rubyonrails-core@googlegroups.com - 9 Messages in 3 Topics
This is so awesome. Hopefully this guy will enjoy his new iPhone soon. On Oct 17, 2011, at 9:49 AM, kabari hendrick wrote:> Sorry, but I''m out of the office until 10/17 and, because my new iPhone hasn''t arrived yet, I won''t have access to email. But don''t fret, Jon Pirc may be able to help you with your inquiry: jpirc@lab42.com > > Thanks! > > On Oct 17, 2011, at 8:11 AM, rubyonrails-core@googlegroups.com wrote: > >> Today''s Topic Summary >> Group: http://groups.google.com/group/rubyonrails-core/topics >> • Unobtrusive Image Mouseover [1 Update] >> • Uniqueness Validator and Case Sensitivity [1 Update] >> • A proper way to test that database is not accessed? [7 Updates] >> Topic: Unobtrusive Image Mouseover >> • Tim Shaffer <timshaffer@me.com> Oct 17 04:54AM -0700 ^ >> • >> >> • Thanks for the input. That''s exactly what I needed to know. >> • >> Topic: Uniqueness Validator and Case Sensitivity >> • Panayotis Matsinopoulos <panayotis@matsinopoulos.gr> Oct 16 12:25AM -0700 ^ >> • >> >> • Hi, >> • >> • I would like to ask what is the reason behind the fact that >> • ActiveRecord Uniqueness Validator does the following: >> • >> • if value.nil? || (options[:case_sensitive] || !column.text?) >> • sql = "#{sql_attribute} #{operator}" >> • else >> • sql = "LOWER(#{sql_attribute}) = LOWER(?)" >> • end >> • >> • In other words, why it sends the ''LOWER" when case sensitivity is set >> • to false (for string attributes) >> • >> • This generates sql queries that do not use the index on the attribute. >> • >> • My opinion is that ActiveRecod should just pass the requirement (case >> • sensitive or not) to adapter (e.g. mysql2) and let the >> • adapter decide how to do the job/construct the query (which would >> • probably take into account db colation or do nothing and let db decide >> • how to handle it) >> • >> • Moreover, I find it inconsistent the fact that default behaviour >> • of :uniqueness validator is case sensitive TRUE when finders are all >> • case insensitive "don''t care". Maybe, as a workaround, except from >> • false and true, you can consider something like :uniqueness => >> • {:case_sensitive => :db} and the db colation decide about it. >> • >> • Currently, I have decided to stop using :uniqueness validator on >> • string type attributes, because of all this mess with MySQL colation. >> • >> • Panayotis >> • >> Topic: A proper way to test that database is not accessed? >> • "Mislav Marohnić" <mislav.marohnic@gmail.com> Oct 16 05:52PM +0200 ^ >> • >> >> • On Oct 16, 2011, at 8:35 AM, KIR wrote: >> • >> • > ActiveRecord::Base.establish_connection Rails.env >> • >> • > I don''t quite understand what do you mean here? >> • >> • I know what your problem is. If because of changes to Rails reconnecting to the db by using the old connection doesn''t work, then I suggested that you give up on using the old connection and just instruct AR to connect as if the application was just booting up. Have you tried what I suggested at all? Are you having the same problem? >> • >> • def without_database_connection >> • ActiveRecord::Base.remove_connection >> • begin >> • yield >> • ensure >> • ActiveRecord::Base.establish_connection Rails.env >> • end >> • end >> • >> • KIR <kir@maxkir.com> Oct 16 06:22PM +0200 ^ >> • >> >> • > ActiveRecord::Base.establish_connection Rails.env >> • > end >> • > end >> • >> • Thanks Mislav, I tried your suggestion, but it doesn''t work. >> • >> • My actual problem is not about restoring the connection (but thanks for >> • the tip, I may need it eventually). >> • It is about the fact that I _always_ get exception when I''m trying to >> • access model attributes when connection was removed with remove_connection >> • (i.e. I get exception in the yield part). >> • >> • BTW, have you tried your helper on Rails 3.1.1? >> • >> • Thanks, >> • KIR >> • >> • >> • >> • >> • > rubyonrails-core+unsubscribe@googlegroups.com. >> • > For more options, visit this group at >> • > http://groups.google.com/group/rubyonrails-core?hl=en. >> • >> • -- >> • >> • Kirill (KIR) Maximov >> • >> • Software Engineer & Starter >> • >> • >> • Twitter: http://twitter.com/maxkir >> • >> • Skype: maxkir >> • >> • http://kirblog.idetalk.com | http://checkvist.com | >> • http://www.jetbrains.com/teamcity >> • >> • "Mislav Marohnić" <mislav.marohnic@gmail.com> Oct 16 07:19PM +0200 ^ >> • >> >> • On Oct 16, 2011, at 6:22 PM, KIR wrote: >> • >> • > BTW, have you tried your helper on Rails 3.1.1? >> • >> • I haven''t tried my code, I just pulled it out of the air. Sorry that I misunderstood your problem – I thought it was about reconnecting. >> • >> • I have the feeling that others also didn''t get what you were saying; people who got notified about your comment on the issue tracker probably thought that you have a problem in your custom helper. >> • >> • The most important thing right now to establish whether this is a real bug or not. The behavior which you relied on before the offending change might not have been intentional. It''s possible that you might be testing wrong things in your application. >> • >> • You should describe what are you doing inside the no connection block. (You mentioned using attribute accessors, but in order to generate these accessors, AR must have an open connection so it can fetch information about table columns.) Describe shortly what you were expecting to get and how the new behavior surprises you and breaks your tests. >> • >> • KIR <kir@maxkir.com> Oct 16 07:42PM +0200 ^ >> • >> >> • > accessors, AR must have an open connection so it can fetch information about >> • > table columns.) Describe shortly what you were expecting to get and how the >> • > new behavior surprises you and breaks your tests. >> • >> • Basically, I have a test that I don''t have N+1 problem when collecting >> • data. >> • I do something like this: >> • >> • # in the production, this may generate hundreds of items (which have own >> • associations) >> • sub_model_items = model.preload_subitems >> • >> • assert_no_database { >> • json = sub_model_items.build_json >> • } >> • >> • What I''m trying to test - that my code doesn''t perform SQL operations >> • when building json, i.e. all data should be preloaded. >> • >> • Thanks, >> • KIR >> • >> • >> • -- >> • >> • Kirill (KIR) Maximov >> • >> • Software Engineer & Starter >> • >> • >> • Twitter: http://twitter.com/maxkir >> • >> • Skype: maxkir >> • >> • http://kirblog.idetalk.com | http://checkvist.com | >> • http://www.jetbrains.com/teamcity >> • >> • "Mislav Marohnić" <mislav.marohnic@gmail.com> Oct 16 07:58PM +0200 ^ >> • >> >> • On Oct 16, 2011, at 7:42 PM, KIR wrote: >> • > What I''m trying to test - that my code doesn''t perform SQL operations when building json, i.e. all data should be preloaded. >> • >> • That''s a perfectly valid thing to test. Looks like it might be a regression. I suggest that you update the issue (where you commented on) with this information, including your own code related to this and provide a stack trace pasted into a Gist. >> • >> • Until you have a solution for this problem, I suggest testing this another way. In will_paginate, I subscribe to all SQL queries performed and then I check them in tests to see whether there have been too many executed during a particular test. >> • >> • KIR <kir@maxkir.com> Oct 16 09:08PM +0200 ^ >> • >> >> • > way. In will_paginate, I subscribe to all SQL queries performed<https://github.com/mislav/will_paginate/blob/d56a8436/spec/finders/activerecord_test_connector.rb#L5-23> and >> • > then I check them in tests to see whether there have been too many executed >> • > during a particular test. >> • >> • Thanks a lot for the hint, will investigate it. >> • May be, I''ll be able to rewrite my assert_no_database assertion using >> • its approach. >> • >> • All the best, >> • KIR >> • >> • >> • > rubyonrails-core+unsubscribe@googlegroups.com. >> • > For more options, visit this group at >> • > http://groups.google.com/group/rubyonrails-core?hl=en. >> • >> • -- >> • >> • Kirill (KIR) Maximov >> • >> • Software Engineer & Starter >> • >> • >> • Twitter: http://twitter.com/maxkir >> • >> • Skype: maxkir >> • >> • http://kirblog.idetalk.com | http://checkvist.com | >> • http://www.jetbrains.com/teamcity >> • >> • Will Bryant <will.bryant@gmail.com> Oct 17 03:54PM +1300 ^ >> • >> >> • On 17/10/2011, at 08:08 , KIR wrote: >> • >> • >> • > Thanks a lot for the hint, will investigate it. >> • > May be, I''ll be able to rewrite my assert_no_database assertion using its approach. >> • >> • There''s assert_queries/assert_no_queries in the test case support code, which sound quite similar to what you want. But it needs a subscriber implementation (such as Mislav was talking about for will_paginate), which you need to feed into the global variable that the assertions check. >> • >> • Rails has a subscriber implementation for its own tests, but it isn''t exposed. IMHO it would be great it did, so we could just instantiate that in app test code without having to copy it in (it''s somewhat version-specific). >> • >> • Have a look at activerecord/test/cases/helper.rb to see how it works. The assertions that use it are defined in activerecord/lib/active_record/test_case.rb, so they are exposed, which doesn''t make much sense at the moment. >> • >> >> -- >> You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group. >> To post to this group, send email to rubyonrails-core@googlegroups.com. >> To unsubscribe from this group, send email to rubyonrails-core+unsubscribe@googlegroups.com. >> For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en.-- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group. To post to this group, send email to rubyonrails-core@googlegroups.com. To unsubscribe from this group, send email to rubyonrails-core+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en.