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 +4 -4
- data/.travis.yml +9 -0
- data/lib/microscope/scope.rb +8 -0
- data/lib/microscope/scope/datetime_scope.rb +9 -10
- data/lib/microscope/version.rb +1 -1
- data/microscope.gemspec +2 -0
- data/spec/spec_helper.rb +6 -9
- data/spec/support/macros/database/database_adapter.rb +9 -0
- data/spec/support/macros/database/mysql2_adapter.rb +16 -0
- data/spec/support/macros/database/postgresql_adapter.rb +17 -0
- data/spec/support/macros/database/sqlite3_adapter.rb +14 -0
- data/spec/support/macros/database_macros.rb +4 -15
- metadata +37 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5ce7b5f37e16e39e35c66a3656f23102f8e93cf0
|
4
|
+
data.tar.gz: c9e3f907ff0e7115aad4b1e6fea83554c6669c3f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8797bc1a795441eb0c4a90028ea8a94fade80a51a2883848be7ec2c065cccaac3911cbc39c34e1d28043653af376d18f5bfcd495c6dac4badbf9b34274cc5f2b
|
7
|
+
data.tar.gz: 416d448370602b907d27a6713cd180a93b3510b9ac88f66ba12ab9094af21b3fc1563fcfce8498b32f2ad2d2e74f4315facda104e67d144c3b8e90c48da1d566
|
data/.travis.yml
CHANGED
@@ -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"
|
data/lib/microscope/scope.rb
CHANGED
@@ -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 "#{
|
29
|
-
scope "#{
|
30
|
-
scope "#{
|
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 "#{
|
37
|
-
scope "#{
|
38
|
-
scope "#{
|
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 "#{
|
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 "#{
|
51
|
-
scope "not_#{
|
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
|
data/lib/microscope/version.rb
CHANGED
data/microscope.gemspec
CHANGED
@@ -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
|
data/spec/spec_helper.rb
CHANGED
@@ -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
|
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
|
17
|
-
|
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,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
|
15
|
-
|
16
|
-
|
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
|
+
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
|