diff --git a/config/environment.rb b/config/environment.rb index a1ac61d..a17dcfd 100644 --- a/config/environment.rb +++ b/config/environment.rb @@ -91,6 +91,9 @@ Tag.hierarchical = true # several local libraries require 'noosfero' +# sqlite extensions to able to test/develop georeference with sqlite +require 'sqlite_extension' + # locally-developed modules require 'acts_as_filesystem' require 'acts_as_searchable' diff --git a/lib/sqlite_extension.rb b/lib/sqlite_extension.rb new file mode 100644 index 0000000..5e746c0 --- /dev/null +++ b/lib/sqlite_extension.rb @@ -0,0 +1,17 @@ +if ActiveRecord::Base.connection.adapter_name =~ /^sqlite$/i + + database = ActiveRecord::Base.connection.raw_connection + + database.create_function('sin', 1, :numeric) do |func, value| + func.set_result(Math.sin(value)) + end + + database.create_function('cos', 1, :numeric) do |func, value| + func.set_result(Math.cos(value)) + end + + database.create_function('pow', 2, :numeric) do |func, base, exponent| + func.set_result(base.to_f ** exponent.to_f) + end + +end diff --git a/test/unit/sqlite_extension_test.rb b/test/unit/sqlite_extension_test.rb new file mode 100644 index 0000000..d481331 --- /dev/null +++ b/test/unit/sqlite_extension_test.rb @@ -0,0 +1,19 @@ +require File.dirname(__FILE__) + '/../test_helper' + +# if this test is run without SQLite (e.g. with mysql or postgres), the tests +# will just pass. The idea is to test our local extensions to SQLite. +class SQliteExtensionTest < Test::Unit::TestCase + + should 'have sine function' do + assert_in_delta 0.0, ActiveRecord::Base.connection.execute('select sin(3.14159265358979) as sin').first['sin'], 0.0001 + end + + should 'have cosine function' do + assert_in_delta -1.0, ActiveRecord::Base.connection.execute('select cos(3.14159265358979) as cos').first['cos'], 0.0001 + end + + should 'have power function' do + assert_in_delta 8.0, ActiveRecord::Base.connection.execute('select pow(2.0, 3.0) as result').first['result'], 0.0001 + end + +end -- libgit2 0.21.2