microscope 0.4.2 → 0.5

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: 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