microscope 0.4.2 → 0.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bbe546a0992badf5f49cdc16de08a22bc41d8c7b
4
- data.tar.gz: e384811bc6c78629902d024d4ad5b1ba35b5de91
3
+ metadata.gz: 5ce7b5f37e16e39e35c66a3656f23102f8e93cf0
4
+ data.tar.gz: c9e3f907ff0e7115aad4b1e6fea83554c6669c3f
5
5
  SHA512:
6
- metadata.gz: b935b723edbfb69c5cc4f971ec09f2a4cf92fcaedc9b7b075b4323e77502cfa24090954a12a2e058278795e5829b7e34ebc0e033d3b9839f6f9a211b544eb929
7
- data.tar.gz: 07087ccd590dd1e350bb57d52358d8e159d29ee1b5ac5cf31bc6b16fd391587bc655f971df64ea1564a54a76ac85100ac30848c38228e13d75e187b1be73037b
6
+ metadata.gz: 8797bc1a795441eb0c4a90028ea8a94fade80a51a2883848be7ec2c065cccaac3911cbc39c34e1d28043653af376d18f5bfcd495c6dac4badbf9b34274cc5f2b
7
+ data.tar.gz: 416d448370602b907d27a6713cd180a93b3510b9ac88f66ba12ab9094af21b3fc1563fcfce8498b32f2ad2d2e74f4315facda104e67d144c3b8e90c48da1d566
@@ -8,4 +8,13 @@ gemfile:
8
8
  - gemfiles/Gemfile.activerecord-4.0
9
9
  - gemfiles/Gemfile.activerecord-3.2.x
10
10
 
11
+ env:
12
+ - DB_ADAPTER=sqlite3
13
+ - DB_ADAPTER=mysql2
14
+ - DB_ADAPTER=postgresql
15
+
16
+ before_script:
17
+ - mysql -e 'create database microscope_test;'
18
+ - psql -c 'create database microscope_test;' -U postgres
19
+
11
20
  script: "echo 'DO IT' && bundle exec rake spec"
@@ -7,6 +7,14 @@ module Microscope
7
7
  @table_name = model.name.tableize
8
8
  end
9
9
 
10
+ def quoted_field
11
+ @quoted_field ||= "#{ActiveRecord::Base.connection.quote_table_name(@table_name)}.#{ActiveRecord::Base.connection.quote_column_name(@field_name)}"
12
+ end
13
+
14
+ def cropped_field
15
+ @cropped_field ||= @field_name.gsub(@cropped_field_regex, '')
16
+ end
17
+
10
18
  # Inject ActiveRecord scopes into a model
11
19
  def self.inject_scopes(model, fields, options = {})
12
20
  fields.each do |field|
@@ -11,7 +11,6 @@ module Microscope
11
11
 
12
12
  def apply
13
13
  return unless @field_name =~ @cropped_field_regex
14
- @cropped_field = @field_name.gsub(@cropped_field_regex, '')
15
14
 
16
15
  model.class_eval <<-RUBY, __FILE__, __LINE__ + 1
17
16
  #{before_scopes}
@@ -25,30 +24,30 @@ module Microscope
25
24
 
26
25
  def before_scopes
27
26
  <<-RUBY
28
- scope "#{@cropped_field}_before", lambda { |time| where("`#{@table_name}`.`#{@field_name}` < ?", time) }
29
- scope "#{@cropped_field}_before_or_at", lambda { |time| where("`#{@table_name}`.`#{@field_name}` <= ?", time) }
30
- scope "#{@cropped_field}_before#{@now_suffix}", lambda { where("`#{@table_name}`.`#{@field_name}` < ?", #{@now}) }
27
+ scope "#{cropped_field}_before", lambda { |time| where('#{quoted_field} < ?', time) }
28
+ scope "#{cropped_field}_before_or_at", lambda { |time| where('#{quoted_field} <= ?', time) }
29
+ scope "#{cropped_field}_before#{@now_suffix}", lambda { where('#{quoted_field} < ?', #{@now}) }
31
30
  RUBY
32
31
  end
33
32
 
34
33
  def after_scopes
35
34
  <<-RUBY
36
- scope "#{@cropped_field}_after", lambda { |time| where("`#{@table_name}`.`#{@field_name}` > ?", time) }
37
- scope "#{@cropped_field}_after_or_at", lambda { |time| where("`#{@table_name}`.`#{@field_name}` >= ?", time) }
38
- scope "#{@cropped_field}_after#{@now_suffix}", lambda { where("`#{@table_name}`.`#{@field_name}` > ?", #{@now}) }
35
+ scope "#{cropped_field}_after", lambda { |time| where('#{quoted_field} > ?', time) }
36
+ scope "#{cropped_field}_after_or_at", lambda { |time| where('#{quoted_field} >= ?', time) }
37
+ scope "#{cropped_field}_after#{@now_suffix}", lambda { where('#{quoted_field} > ?', #{@now}) }
39
38
  RUBY
40
39
  end
41
40
 
42
41
  def between_scopes
43
42
  <<-RUBY
44
- scope "#{@cropped_field}_between", lambda { |range| where("#{@field_name}" => range) }
43
+ scope "#{cropped_field}_between", lambda { |range| where("#{@field_name}" => range) }
45
44
  RUBY
46
45
  end
47
46
 
48
47
  def boolean_scopes
49
48
  <<-RUBY
50
- scope "#{@cropped_field}", lambda { where("`#{@table_name}`.`#{@field_name}` IS NOT NULL AND `#{@table_name}`.`#{@field_name}` <= ?", #{@now}) }
51
- scope "not_#{@cropped_field}", lambda { where("`#{@table_name}`.`#{@field_name}` IS NULL OR `#{@table_name}`.`#{@field_name}` > ?", #{@now}) }
49
+ scope "#{cropped_field}", lambda { where('#{quoted_field} IS NOT NULL AND #{quoted_field} <= ?', #{@now}) }
50
+ scope "not_#{cropped_field}", lambda { where('#{quoted_field} IS NULL OR #{quoted_field} > ?', #{@now}) }
52
51
  RUBY
53
52
  end
54
53
  end
@@ -1,3 +1,3 @@
1
1
  module Microscope
2
- VERSION = "0.4.2"
2
+ VERSION = '0.5'
3
3
  end
@@ -25,4 +25,6 @@ Gem::Specification.new do |spec|
25
25
  spec.add_development_dependency 'rake'
26
26
  spec.add_development_dependency 'rspec'
27
27
  spec.add_development_dependency 'sqlite3'
28
+ spec.add_development_dependency 'pg'
29
+ spec.add_development_dependency 'mysql2', '~> 0.3.13'
28
30
  end
@@ -2,24 +2,21 @@ $:.unshift File.expand_path('../lib', __FILE__)
2
2
 
3
3
  require 'rspec'
4
4
  require 'sqlite3'
5
+ require 'mysql2'
6
+ require 'pg'
5
7
 
6
8
  require 'microscope'
7
9
 
8
10
  # Require our macros and extensions
9
- Dir[File.expand_path('../../spec/support/macros/*.rb', __FILE__)].map(&method(:require))
11
+ Dir[File.expand_path('../../spec/support/macros/**/*.rb', __FILE__)].map(&method(:require))
10
12
 
11
13
  RSpec.configure do |config|
12
14
  # Include our macros
13
15
  config.include DatabaseMacros
14
16
  config.include ModelMacros
15
17
 
16
- config.before(:each) do
17
- # Create the SQLite database
18
- setup_database
19
- end
20
-
21
- config.after(:each) do
22
- # Make sure we remove our test database file
23
- cleanup_database
18
+ config.before :each do
19
+ adapter = ENV['DB_ADAPTER'] || 'sqlite3'
20
+ setup_database(adapter: adapter, database: 'microscope_test')
24
21
  end
25
22
  end
@@ -0,0 +1,9 @@
1
+ class DatabaseAdapter
2
+ def initialize(opts = {})
3
+ @database = opts[:database]
4
+ end
5
+
6
+ def establish_connection!
7
+ ActiveRecord::Base.establish_connection(database_configuration)
8
+ end
9
+ end
@@ -0,0 +1,16 @@
1
+ require_relative 'database_adapter'
2
+
3
+ class Mysql2Adapter < DatabaseAdapter
4
+ def database_configuration
5
+ {
6
+ adapter: 'mysql2',
7
+ database: @database,
8
+ username: 'travis',
9
+ encoding: 'utf8'
10
+ }
11
+ end
12
+
13
+ def reset_database!
14
+ ActiveRecord::Base.connection.execute("SELECT concat('DROP TABLE IF EXISTS ', table_name, ';') FROM information_schema.tables WHERE table_schema = '#{@database}';")
15
+ end
16
+ end
@@ -0,0 +1,17 @@
1
+ require_relative 'database_adapter'
2
+
3
+ class PostgresqlAdapter < DatabaseAdapter
4
+ def database_configuration
5
+ {
6
+ adapter: 'postgresql',
7
+ database: @database,
8
+ user: 'postgres',
9
+ schema_search_path: 'public'
10
+ }
11
+ end
12
+
13
+ def reset_database!
14
+ ActiveRecord::Base.connection.execute('drop schema public cascade;')
15
+ ActiveRecord::Base.connection.execute('create schema public;')
16
+ end
17
+ end
@@ -0,0 +1,14 @@
1
+ require_relative 'database_adapter'
2
+
3
+ class Sqlite3Adapter < DatabaseAdapter
4
+ def database_configuration
5
+ {
6
+ adapter: 'sqlite3',
7
+ database: ':memory:'
8
+ }
9
+ end
10
+
11
+ def reset_database!
12
+ ActiveRecord::Base.connection.execute("select 'drop table ' || name || ';' from sqlite_master where type = 'table';")
13
+ end
14
+ end
@@ -11,23 +11,12 @@ module DatabaseMacros
11
11
  klass.new.up
12
12
  end
13
13
 
14
- def self.database_file
15
- @database_file || File.expand_path('../test.db', __FILE__)
16
- end
17
-
18
- def setup_database
19
- # Make sure the test database file is gone
20
- cleanup_database
21
-
22
- # Establish the connection
23
- SQLite3::Database.new FileUtils.touch(DatabaseMacros.database_file).first
24
- ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: DatabaseMacros.database_file)
14
+ def setup_database(opts = {})
15
+ adapter = "#{opts[:adapter].capitalize}Adapter".constantize.new(database: opts[:database])
16
+ adapter.establish_connection!
17
+ adapter.reset_database!
25
18
 
26
19
  # Silence everything
27
20
  ActiveRecord::Base.logger = ActiveRecord::Migration.verbose = false
28
21
  end
29
-
30
- def cleanup_database
31
- FileUtils.rm(DatabaseMacros.database_file) if File.exists?(DatabaseMacros.database_file)
32
- end
33
22
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: microscope
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: '0.5'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Simon Prévost
@@ -95,6 +95,34 @@ dependencies:
95
95
  - - '>='
96
96
  - !ruby/object:Gem::Version
97
97
  version: '0'
98
+ - !ruby/object:Gem::Dependency
99
+ name: pg
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - '>='
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ type: :development
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - '>='
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ - !ruby/object:Gem::Dependency
113
+ name: mysql2
114
+ requirement: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ~>
117
+ - !ruby/object:Gem::Version
118
+ version: 0.3.13
119
+ type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ~>
124
+ - !ruby/object:Gem::Version
125
+ version: 0.3.13
98
126
  description: Microscope adds useful scopes targeting ActiveRecord boolean and datetime
99
127
  fields.
100
128
  email:
@@ -130,6 +158,10 @@ files:
130
158
  - spec/microscope/scope/datetime_scope_spec.rb
131
159
  - spec/microscope_spec.rb
132
160
  - spec/spec_helper.rb
161
+ - spec/support/macros/database/database_adapter.rb
162
+ - spec/support/macros/database/mysql2_adapter.rb
163
+ - spec/support/macros/database/postgresql_adapter.rb
164
+ - spec/support/macros/database/sqlite3_adapter.rb
133
165
  - spec/support/macros/database_macros.rb
134
166
  - spec/support/macros/model_macros.rb
135
167
  homepage: https://github.com/mirego/microscope
@@ -165,5 +197,9 @@ test_files:
165
197
  - spec/microscope/scope/datetime_scope_spec.rb
166
198
  - spec/microscope_spec.rb
167
199
  - spec/spec_helper.rb
200
+ - spec/support/macros/database/database_adapter.rb
201
+ - spec/support/macros/database/mysql2_adapter.rb
202
+ - spec/support/macros/database/postgresql_adapter.rb
203
+ - spec/support/macros/database/sqlite3_adapter.rb
168
204
  - spec/support/macros/database_macros.rb
169
205
  - spec/support/macros/model_macros.rb