acts_as_footprintable 0.6.1 → 0.6.2

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
  SHA256:
3
- metadata.gz: 0a242404e9828c149fcb0df3ca811377e6209e3486e15c2d38f7281ae56a78cd
4
- data.tar.gz: 59b66fbd5006dea2eb60561f46faa50d70f013dfa779ebbb6df12ae7acc78ae7
3
+ metadata.gz: a4dda61f4d4e76bc6ee5251d8591b51f6888e7d70609cb16d21601faa07d2014
4
+ data.tar.gz: '0148bca9da729db5fe61d7c92da7c84ae5e0812ea15d49e73fdb328d37d4ba1e'
5
5
  SHA512:
6
- metadata.gz: d58d23cb349e23dba9370d87536a7f4d530e4358f2d1d5b5d61ebb1c00fc73eaf259a4990665a8bb9068da50e90b76298404f6da00d1824533a4d6a5b840cb2a
7
- data.tar.gz: 6af3b769f4c2cb0fe47b4c11a3142a7c246b64ddff2933de3b5a04411eef1237d8339fc7a51516a9ef0b15b63d508fce202854574a8c1c940c8458656d2ddbeb
6
+ metadata.gz: a96376414507b2bb3067460c0f0a359afe11afe92ebb863dd2d69d8b7dd9cc82ada52c5e2a53f3f21b871780bc4edf71d1b57257c7af7bcc1232da8e99c13bde
7
+ data.tar.gz: a239b306ad678c186d65284c50099d2183eded818c78723ffdaa04f05819a110d7cba5f8e838d0aa100d9efe5d5c87563db753b95f400067b6572b4fb6e9d9b1
data/.rubocop.yml ADDED
@@ -0,0 +1,32 @@
1
+ require:
2
+ - rubocop-performance
3
+ - rubocop-rake
4
+ - rubocop-minitest
5
+
6
+ inherit_from: .rubocop_todo.yml
7
+
8
+ AllCops:
9
+ NewCops: enable
10
+ TargetRubyVersion: 2.6
11
+ Exclude:
12
+ - 'lib/generators/acts_as_footprintable/migration/templates/active_record/migration.rb'
13
+
14
+ Layout/LineLength:
15
+ AllowHeredoc: true
16
+ AllowURI: true
17
+
18
+ Metrics/MethodLength:
19
+ IgnoredMethods:
20
+ - acts_as_footprintable
21
+ - recent_footprint_ids
22
+
23
+ Metrics/BlockLength:
24
+ IgnoredMethods:
25
+ - describe
26
+ - refine
27
+
28
+ Layout/DotPosition:
29
+ EnforcedStyle: trailing
30
+
31
+ Style/Documentation:
32
+ Enabled: false
data/Gemfile CHANGED
@@ -1,9 +1,10 @@
1
- # coding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  source 'https://rubygems.org'
3
- git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
+ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
4
5
 
5
6
  # Specify your gem's dependencies in acts_as_footprintable.gemspec
6
7
  gemspec
7
8
 
8
- gem 'rails'
9
- gem 'sqlite3'
9
+ gem 'activerecord'
10
+ gem 'sqlite3'
data/Rakefile CHANGED
@@ -1,7 +1,9 @@
1
- require "bundler/gem_tasks"
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/gem_tasks'
2
4
  require 'rake/testtask'
3
5
 
4
- task :default => [:test]
6
+ task default: [:test]
5
7
 
6
8
  Rake::TestTask.new do |test|
7
9
  test.libs << 'lib'
@@ -1,24 +1,33 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
1
+ # frozen_string_literal: true
2
+
3
+ require 'English'
4
+ lib = File.expand_path('lib', __dir__)
3
5
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
6
  require 'acts_as_footprintable/version'
5
7
 
6
8
  Gem::Specification.new do |spec|
7
- spec.name = "acts_as_footprintable"
9
+ spec.name = 'acts_as_footprintable'
8
10
  spec.version = ActsAsFootprintable::VERSION
9
- spec.author = "Toyoaki Oko"
10
- spec.email = "chariderpato@gmail.com"
11
- spec.description = %q{Rails gem to allowing records to leave footprints}
12
- spec.summary = %q{Rails gem to allowing records to leave footprints}
13
- spec.homepage = "https://github.com/patorash/acts_as_footprintable"
14
- spec.license = "MIT"
11
+ spec.author = 'Toyoaki Oko'
12
+ spec.email = 'chariderpato@gmail.com'
13
+ spec.description = 'Rails gem to allowing records to leave footprints'
14
+ spec.summary = 'Rails gem to allowing records to leave footprints'
15
+ spec.homepage = 'https://github.com/patorash/acts_as_footprintable'
16
+ spec.license = 'MIT'
17
+ spec.metadata['rubygems_mfa_required'] = 'true'
15
18
 
16
- spec.files = `git ls-files`.split($/)
19
+ spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
17
20
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
21
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
- spec.require_paths = ["lib"]
22
+ spec.require_paths = ['lib']
23
+ spec.required_ruby_version = '>= 2.6'
20
24
 
21
- spec.add_development_dependency 'rake', '~> 13.0'
22
- spec.add_development_dependency 'timecop', '~> 0'
25
+ spec.add_dependency 'activerecord', '< 7.1.0', '>= 5.0.0'
23
26
  spec.add_development_dependency 'database_cleaner', '~> 2.0'
27
+ spec.add_development_dependency 'rake', '~> 13.0'
28
+ spec.add_development_dependency 'rubocop', '~> 1.24'
29
+ spec.add_development_dependency 'rubocop-minitest', '~> 0.17'
30
+ spec.add_development_dependency 'rubocop-performance', '~> 1.13'
31
+ spec.add_development_dependency 'rubocop-rake', '~> 0.6'
32
+ spec.add_development_dependency 'sqlite3', '~> 1.3'
24
33
  end
data/config.ru CHANGED
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "rubygems"
4
- require "bundler"
3
+ require 'rubygems'
4
+ require 'bundler'
5
5
 
6
6
  Bundler.require :default, :development
7
7
 
8
8
  Combustion.initialize! :all
9
- run Combustion::Application
9
+ run Combustion::Application
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  gem 'activerecord', '~> 5.0.0'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  gem 'activerecord', '~> 5.1.0'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  gem 'activerecord', '~> 5.2.0'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  gem 'activerecord', '~> 6.0.0'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  gem 'activerecord', '~> 6.1.0'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  gem 'activerecord', '~> 7.0.1'
@@ -1,4 +1,5 @@
1
- # coding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  module ActsAsFootprintable
3
4
  module Extenders
4
5
  module Footprintable
@@ -15,9 +16,9 @@ module ActsAsFootprintable
15
16
  true
16
17
  end
17
18
 
18
- def self.access_ranking(range=nil, limit=nil)
19
+ def self.access_ranking(range = nil, limit = nil)
19
20
  records = Footprint.for_type(self)
20
- records = records.where(:created_at => range) unless range.nil?
21
+ records = records.where(created_at: range) unless range.nil?
21
22
  records = records.limit(limit) unless limit.nil?
22
23
  records.group(:footprintable_id).order('count_footprintable_id desc').count(:footprintable_id)
23
24
  end
@@ -25,4 +26,4 @@ module ActsAsFootprintable
25
26
  end
26
27
  end
27
28
  end
28
- end
29
+ end
@@ -1,4 +1,5 @@
1
- # coding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  module ActsAsFootprintable
3
4
  module Extenders
4
5
  module Footprinter
@@ -6,7 +7,7 @@ module ActsAsFootprintable
6
7
  false
7
8
  end
8
9
 
9
- def acts_as_footprinter(*args)
10
+ def acts_as_footprinter(*_args)
10
11
  require 'acts_as_footprintable/footprinter'
11
12
  include ActsAsFootprintable::Footprinter
12
13
 
@@ -18,4 +19,4 @@ module ActsAsFootprintable
18
19
  end
19
20
  end
20
21
  end
21
- end
22
+ end
@@ -1,12 +1,14 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ActsAsFootprintable
2
4
  class Footprint < ::ActiveRecord::Base
3
5
  belongs_to :footprintable, polymorphic: true
4
6
  belongs_to :footprinter, polymorphic: true
5
7
 
6
- scope :for_type, lambda{|klass| where(footprintable_type: klass.name)}
7
- scope :by_type, lambda{|klass| where(footprinter_type: klass.name)}
8
+ scope :for_type, ->(klass) { where(footprintable_type: klass.name) }
9
+ scope :by_type, ->(klass) { where(footprinter_type: klass.name) }
8
10
 
9
11
  validates :footprintable_id, presence: true
10
12
  validates :footprinter_id, presence: true
11
13
  end
12
- end
14
+ end
@@ -1,6 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ActsAsFootprintable
2
4
  module Footprintable
3
-
4
5
  def self.included(base)
5
6
  base.class_eval do
6
7
  has_many :footprints, class_name: 'ActsAsFootprintable::Footprint', as: :footprintable, dependent: :destroy do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ActsAsFootprintable
2
4
  module Footprinter
3
5
  def self.included(base)
@@ -15,30 +17,46 @@ module ActsAsFootprintable
15
17
  footprint.save
16
18
  end
17
19
 
18
- def access_histories_for(klass, limit=nil)
20
+ def access_histories_for(klass, limit = nil)
19
21
  get_access_history_records(footprints.for_type(klass), limit)
20
22
  end
21
23
 
22
- def access_histories(limit=nil)
24
+ def access_histories(limit = nil)
23
25
  get_access_history_records(footprints, limit)
24
26
  end
25
27
 
26
28
  private
27
- def get_access_history_records(target, limit=nil)
28
- footprints.where(id: recent_footprint_ids(target, limit)).order("created_at DESC")
29
+
30
+ def get_access_history_records(target, limit = nil)
31
+ footprints.where(id: recent_footprint_ids(target, limit)).order('created_at DESC')
29
32
  end
30
33
 
31
34
  def table_name
32
35
  ActsAsFootprintable::Footprint.table_name
33
36
  end
34
37
 
35
- def recent_footprint_ids(target, limit=nil)
36
- recent_footprints = target.group("#{table_name}.footprintable_id, #{table_name}.footprintable_type").
37
- select("#{table_name}.footprintable_id, #{table_name}.footprintable_type, MAX(#{table_name}.created_at) AS created_at")
38
- records = footprints.where("(#{table_name}.footprintable_id, #{table_name}.footprintable_type, #{table_name}.created_at) IN (#{recent_footprints.to_sql})")
39
- records = records.order("footprints.created_at desc")
38
+ def recent_footprint_ids(target, limit = nil)
39
+ records = footprints.where(<<~SQL)
40
+ (
41
+ #{table_name}.footprintable_id,
42
+ #{table_name}.footprintable_type,
43
+ #{table_name}.created_at
44
+ ) IN (#{recent_footprints_by(target).to_sql})
45
+ SQL
46
+ records = records.order('footprints.created_at desc')
40
47
  records = records.limit(limit) unless limit.nil?
41
- records.pluck(:id)
48
+ records.ids
49
+ end
50
+
51
+ def recent_footprints_by(target)
52
+ target.group(
53
+ "#{table_name}.footprintable_id",
54
+ "#{table_name}.footprintable_type"
55
+ ).select(
56
+ "#{table_name}.footprintable_id",
57
+ "#{table_name}.footprintable_type",
58
+ "MAX(#{table_name}.created_at) AS created_at"
59
+ )
42
60
  end
43
61
  end
44
- end
62
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ActsAsFootprintable
2
- VERSION = '0.6.1'
4
+ VERSION = '0.6.2'
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'active_record'
2
4
  require 'active_support/inflector'
3
5
 
@@ -1,41 +1,43 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rails/generators/migration'
2
4
 
3
5
  module ActsAsFootprintable
4
6
  class MigrationGenerator < Rails::Generators::Base
5
7
  include Rails::Generators::Migration
6
8
 
7
- desc "Generators migration for footprintable(footprints table)"
9
+ desc 'Generators migration for footprintable(footprints table)'
8
10
 
9
11
  def self.orm
10
12
  Rails::Generators.options[:rails][:orm]
11
13
  end
12
14
 
13
15
  def self.source_root
14
- File.join(File.dirname(__FILE__), 'templates', (orm.to_s unless orm.class.eql?(String)))
16
+ File.join(File.dirname(__FILE__), 'templates', (orm.to_s unless orm.instance_of?(String)))
15
17
  end
16
18
 
17
19
  def self.orm_has_migration?
18
20
  [:active_record].include? orm
19
21
  end
20
22
 
21
- def self.next_migration_number(path)
22
- Time.now.utc.strftime("%Y%m%d%H%M%S")
23
+ def self.next_migration_number(_path)
24
+ Time.now.utc.strftime('%Y%m%d%H%M%S')
23
25
  end
24
26
 
25
27
  def create_migration_file
26
- if self.class.orm_has_migration?
27
- migration_template 'migration.rb', 'db/migrate/acts_as_footprintable_migration.rb', migration_version: migration_version
28
- end
28
+ return unless self.class.orm_has_migration?
29
+
30
+ migration_template 'migration.rb',
31
+ 'db/migrate/acts_as_footprintable_migration.rb',
32
+ migration_version: migration_version
29
33
  end
30
34
 
31
35
  def migration_version
32
- if over_rails5?
33
- "[#{Rails::VERSION::MAJOR}.#{Rails::VERSION::MINOR}]"
34
- end
36
+ "[#{Rails::VERSION::MAJOR}.#{Rails::VERSION::MINOR}]" if over_rails5?
35
37
  end
36
38
 
37
39
  def over_rails5?
38
40
  Rails::VERSION::MAJOR >= 5
39
41
  end
40
42
  end
41
- end
43
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class ActsAsFootprintableMigration < ActiveRecord::Migration<%= migration_version %>
2
4
  def self.up
3
5
  create_table :footprints do |t|
@@ -1,65 +1,66 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
  require 'acts_as_footprintable/footprintable'
3
5
 
4
6
  describe ActsAsFootprintable::Footprintable do
5
-
6
- it "should not be a footprintable" do
7
+ it 'should not be a footprintable' do
7
8
  expect(NotFootprintable).wont_be :footprintable?
8
9
  end
9
10
 
10
- it "should be a footprintable" do
11
+ it 'should be a footprintable' do
11
12
  expect(Footprintable).must_be :footprintable?
12
13
  end
13
14
 
14
15
  describe 'leave footprints by footprinter' do
15
- let(:user) { User.create!(:name => 'i can footprint!') }
16
- let(:user2) { User.create!(:name => 'a new person') }
17
- let(:footprintable) { Footprintable.create!(:name => 'a footprinting model') }
18
- let(:footprintable2) { Footprintable.create!(:name => 'a 2nd footprinting model') }
16
+ let(:user) { User.create!(name: 'i can footprint!') }
17
+ let(:user2) { User.create!(name: 'a new person') }
18
+ let(:footprintable) { Footprintable.create!(name: 'a footprinting model') }
19
+ let(:footprintable2) { Footprintable.create!(name: 'a 2nd footprinting model') }
19
20
 
20
- it "should be leave footprints" do
21
+ it 'should be leave footprints' do
21
22
  expect(footprintable.leave_footprints(user)).must_equal true
22
23
  end
23
24
 
24
- it "足跡の数が増えていること" do
25
+ it '足跡の数が増えていること' do
25
26
  expect(footprintable.footprint_count).must_equal 0
26
27
  footprintable.leave_footprints user
27
28
  expect(footprintable.footprint_count).must_equal 1
28
29
  end
29
30
 
30
- it "10回アクセスしたら10になること" do
31
+ it '10回アクセスしたら10になること' do
31
32
  expect(footprintable.footprint_count).must_equal 0
32
33
  10.times { footprintable.leave_footprints user }
33
34
  expect(footprintable.footprint_count).must_equal 10
34
35
  end
35
36
 
36
- it "複数人でアクセスしたら合計されること" do
37
+ it '複数人でアクセスしたら合計されること' do
37
38
  expect(footprintable.footprint_count).must_equal 0
38
39
  5.times { footprintable.leave_footprints user }
39
40
  5.times { footprintable.leave_footprints user2 }
40
41
  expect(footprintable.footprint_count).must_equal 10
41
42
  end
42
43
 
43
- describe "期間指定をする" do
44
+ describe '期間指定をする' do
44
45
  before do
45
- (1..30).each do |day|
46
- Timecop.travel(Time.parse("2013-09-#{day}")) do
46
+ 1.upto(30) do |day|
47
+ travel_to Time.parse("2013-09-#{day}") do
47
48
  5.times { footprintable.leave_footprints user }
48
49
  end
49
50
  end
50
51
  end
51
52
 
52
- describe "1週間の場合" do
53
- it "35の足跡があること" do
54
- Timecop.travel(Time.parse("2013-09-30 10:00:00")) do
53
+ describe '1週間の場合' do
54
+ it '35の足跡があること' do
55
+ travel_to Time.parse('2013-09-30 10:00:00') do
55
56
  expect(footprintable.footprint_count_between(1.week.ago..Time.now)).must_equal 35
56
57
  end
57
58
  end
58
59
  end
59
60
 
60
- describe "1ヶ月の場合" do
61
- it "150の足跡があること" do
62
- Timecop.travel(Time.parse("2013-09-30 10:00:00")) do
61
+ describe '1ヶ月の場合' do
62
+ it '150の足跡があること' do
63
+ travel_to Time.parse('2013-09-30 10:00:00') do
63
64
  expect(footprintable.footprint_count_between(1.month.ago..Time.now)).must_equal 150
64
65
  end
65
66
  end
@@ -67,14 +68,14 @@ describe ActsAsFootprintable::Footprintable do
67
68
  end
68
69
  end
69
70
 
70
- describe "アクセスランキングを作成" do
71
- let(:user) { User.create!(:name => 'i can footprint!') }
71
+ describe 'アクセスランキングを作成' do
72
+ let(:user) { User.create!(name: 'i can footprint!') }
72
73
 
73
- describe "件数と期間を制限" do
74
+ describe '件数と期間を制限' do
74
75
  before do
75
- (1..30).each do |index|
76
- Timecop.travel(Time.parse("2013-09-#{index}")) do
77
- footprintable = Footprintable.create!(:name => "Footprintable#{index}")
76
+ 1.upto(30) do |index|
77
+ travel_to Time.parse("2013-09-#{index}") do
78
+ footprintable = Footprintable.create!(name: "Footprintable#{index}")
78
79
  index.times { footprintable.leave_footprints user }
79
80
  end
80
81
  end
@@ -85,7 +86,7 @@ describe ActsAsFootprintable::Footprintable do
85
86
  end
86
87
 
87
88
  it 'アクセスランキングが取得できること' do
88
- expect(subject).must_equal ({ 7 => 7, 6 => 6, 5 => 5, 4 => 4, 3 => 3 })
89
+ expect(subject).must_equal({ 7 => 7, 6 => 6, 5 => 5, 4 => 4, 3 => 3 })
89
90
  end
90
91
 
91
92
  it '5件取得できること' do
@@ -93,4 +94,4 @@ describe ActsAsFootprintable::Footprintable do
93
94
  end
94
95
  end
95
96
  end
96
- end
97
+ end
@@ -1,61 +1,63 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
  require 'acts_as_footprintable/footprinter'
3
5
 
4
6
  describe ActsAsFootprintable::Footprinter do
5
-
6
- it "should not be a footprinter" do
7
+ it 'should not be a footprinter' do
7
8
  expect(NotUser).wont_be :footprinter?
8
9
  end
9
10
 
10
- it "should be a footprinter" do
11
+ it 'should be a footprinter' do
11
12
  expect(User).must_be :footprinter?
12
13
  end
13
14
 
14
- describe "ユーザーのアクセス履歴を" do
15
- let(:user_1) { User.create!(name: "user_1") }
15
+ describe 'ユーザーのアクセス履歴を' do
16
+ let(:user1) { User.create!(name: 'user1') }
16
17
  before do
17
- (1..5).each do |index|
18
+ 1.upto(5) do |index|
18
19
  footprintable = Footprintable.create!(name: "footprintable#{index}")
19
20
  second_footprintable = SecondFootprintable.create!(name: "second_footprintable#{index}")
20
21
  3.times do
21
- footprintable.leave_footprints user_1
22
- second_footprintable.leave_footprints user_1
22
+ footprintable.leave_footprints user1
23
+ second_footprintable.leave_footprints user1
23
24
  end
24
25
  end
25
26
  end
26
27
 
27
- describe "対象のモデル毎に" do
28
- it "取得できること" do
29
- expect(user_1.access_histories_for(Footprintable).count).must_equal 5
30
- expect(user_1.access_histories_for(Footprintable).map { |footprint| footprint.footprintable.name }).must_equal (1..5).to_a.reverse.map { |index| "footprintable#{index}" }
28
+ describe '対象のモデル毎に' do
29
+ it '取得できること' do
30
+ expect(user1.access_histories_for(Footprintable).count).must_equal 5
31
+ expected_data = 5.downto(1).map { |i| "footprintable#{i}" }
32
+ expect(user1.access_histories_for(Footprintable).map(&:footprintable).pluck(:name)).must_equal expected_data
31
33
  end
32
34
 
33
- it "件数を絞り込めること" do
34
- expect(user_1.access_histories_for(Footprintable, 3).count).must_equal 3
35
- expect(user_1.access_histories_for(Footprintable, 3).map { |footprint| footprint.footprintable.name }).must_equal (3..5).to_a.reverse.map { |index| "footprintable#{index}" }
35
+ it '件数を絞り込めること' do
36
+ expect(user1.access_histories_for(Footprintable, 3).count).must_equal 3
37
+ expected_data = 5.downto(3).map { |i| "footprintable#{i}" }
38
+ expect(user1.access_histories_for(Footprintable, 3).map(&:footprintable).pluck(:name)).must_equal expected_data
36
39
  end
37
40
  end
38
41
 
39
- describe "全てのモデルを通じて" do
40
- it "取得できること" do
41
- expect(user_1.access_histories.count).must_equal 10
42
- footprintable_names = (1..5).to_a.reverse.inject([]) do |results, index|
42
+ describe '全てのモデルを通じて' do
43
+ it '取得できること' do
44
+ expect(user1.access_histories.count).must_equal 10
45
+ footprintable_names = 5.downto(1).each_with_object([]) do |index, results|
43
46
  results.push "second_footprintable#{index}"
44
47
  results.push "footprintable#{index}"
45
- results
46
48
  end
47
- expect(user_1.access_histories.map { |footprint| footprint.footprintable.name }).must_equal footprintable_names
49
+ expect(user1.access_histories.map(&:footprintable).pluck(:name)).must_equal footprintable_names
48
50
  end
49
51
 
50
- it "件数を絞り込める事" do
51
- expect(user_1.access_histories(3).count).must_equal 3
52
+ it '件数を絞り込める事' do
53
+ expect(user1.access_histories(3).count).must_equal 3
52
54
  end
53
55
  end
54
56
 
55
57
  describe 'アクセス履歴のないユーザーの場合' do
56
- let(:user_2) { User.create!(:name => "user_2") }
58
+ let(:user2) { User.create!(name: 'user2') }
57
59
  it '件数が0件であること' do
58
- expect(user_2.access_histories_for(Footprintable).count).must_equal 0
60
+ expect(user2.access_histories_for(Footprintable).count).must_equal 0
59
61
  end
60
62
  end
61
63
  end
@@ -1,5 +1,6 @@
1
- # coding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  class Footprintable < ActiveRecord::Base
3
4
  acts_as_footprintable
4
- validates :name, :presence => true
5
- end
5
+ validates :name, presence: true
6
+ end
@@ -1,4 +1,5 @@
1
- # coding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  class NotFootprintable < ActiveRecord::Base
3
- validates :name, :presence => true
4
- end
4
+ validates :name, presence: true
5
+ end
@@ -1,3 +1,4 @@
1
- # coding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  class NotUser < ActiveRecord::Base
3
- end
4
+ end
@@ -1,5 +1,6 @@
1
- # coding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  class SecondFootprintable < ActiveRecord::Base
3
4
  acts_as_footprintable
4
- validates :name, :presence => true
5
- end
5
+ validates :name, presence: true
6
+ end
@@ -1,4 +1,5 @@
1
- # coding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  class User < ActiveRecord::Base
3
4
  acts_as_footprinter
4
- end
5
+ end
data/test/test_helper.rb CHANGED
@@ -1,53 +1,57 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'minitest/autorun'
2
4
  require 'active_record'
3
-
5
+ require 'active_support/testing/time_helpers'
4
6
  require 'database_cleaner/active_record'
5
- require "acts_as_footprintable"
6
- require 'timecop'
7
+ require 'acts_as_footprintable'
7
8
 
8
- Dir["#{Dir.pwd}/test/internal/app/models/*.rb"].each(&method(:require))
9
+ Dir["#{Dir.pwd}/test/internal/app/models/*.rb"].sort.each { |f| require f }
9
10
 
10
11
  ActiveRecord::Base.establish_connection('adapter' => 'sqlite3', 'database' => ':memory:')
11
12
  ActiveRecord::Schema.define do
12
- create_table :footprints, :force => true do |t|
13
- t.references :footprintable, :polymorphic => true
14
- t.references :footprinter, :polymorphic => true
15
- t.timestamps :null => false
13
+ create_table :footprints, force: true do |t|
14
+ t.references :footprintable, polymorphic: true
15
+ t.references :footprinter, polymorphic: true
16
+ t.timestamps null: false
16
17
  end
17
18
 
18
- add_index :footprints, [:footprintable_id, :footprintable_type]
19
- add_index :footprints, [:footprinter_id, :footprinter_type]
19
+ add_index :footprints, %i[footprintable_id footprintable_type]
20
+ add_index :footprints, %i[footprinter_id footprinter_type]
20
21
 
21
- create_table :users, :force => true do |t|
22
+ create_table :users, force: true do |t|
22
23
  t.string :name
23
24
  end
24
25
 
25
- create_table :not_users, :force => true do |t|
26
+ create_table :not_users, force: true do |t|
26
27
  t.string :name
27
28
  end
28
29
 
29
- create_table :footprintables, :force => true do |t|
30
+ create_table :footprintables, force: true do |t|
30
31
  t.string :name
31
32
  end
32
33
 
33
- create_table :second_footprintables, :force => true do |t|
34
+ create_table :second_footprintables, force: true do |t|
34
35
  t.string :name
35
36
  end
36
37
 
37
- create_table :not_footprintables, :force => true do |t|
38
+ create_table :not_footprintables, force: true do |t|
38
39
  t.string :name
39
40
  end
40
41
  end
41
42
 
42
43
  DatabaseCleaner.strategy = :transaction
43
44
 
44
- class Minitest::Spec
45
+ module Minitest
46
+ class Spec
47
+ include ActiveSupport::Testing::TimeHelpers
45
48
 
46
- before :each do
47
- DatabaseCleaner.start
48
- end
49
+ before :each do
50
+ DatabaseCleaner.start
51
+ end
49
52
 
50
- after :each do
51
- DatabaseCleaner.clean
53
+ after :each do
54
+ DatabaseCleaner.clean
55
+ end
52
56
  end
53
57
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: acts_as_footprintable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: 0.6.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Toyoaki Oko
@@ -10,6 +10,40 @@ bindir: bin
10
10
  cert_chain: []
11
11
  date: 2022-01-13 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activerecord
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 5.0.0
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: 7.1.0
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: 5.0.0
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: 7.1.0
33
+ - !ruby/object:Gem::Dependency
34
+ name: database_cleaner
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '2.0'
40
+ type: :development
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '2.0'
13
47
  - !ruby/object:Gem::Dependency
14
48
  name: rake
15
49
  requirement: !ruby/object:Gem::Requirement
@@ -25,33 +59,75 @@ dependencies:
25
59
  - !ruby/object:Gem::Version
26
60
  version: '13.0'
27
61
  - !ruby/object:Gem::Dependency
28
- name: timecop
62
+ name: rubocop
29
63
  requirement: !ruby/object:Gem::Requirement
30
64
  requirements:
31
65
  - - "~>"
32
66
  - !ruby/object:Gem::Version
33
- version: '0'
67
+ version: '1.24'
34
68
  type: :development
35
69
  prerelease: false
36
70
  version_requirements: !ruby/object:Gem::Requirement
37
71
  requirements:
38
72
  - - "~>"
39
73
  - !ruby/object:Gem::Version
40
- version: '0'
74
+ version: '1.24'
41
75
  - !ruby/object:Gem::Dependency
42
- name: database_cleaner
76
+ name: rubocop-minitest
43
77
  requirement: !ruby/object:Gem::Requirement
44
78
  requirements:
45
79
  - - "~>"
46
80
  - !ruby/object:Gem::Version
47
- version: '2.0'
81
+ version: '0.17'
48
82
  type: :development
49
83
  prerelease: false
50
84
  version_requirements: !ruby/object:Gem::Requirement
51
85
  requirements:
52
86
  - - "~>"
53
87
  - !ruby/object:Gem::Version
54
- version: '2.0'
88
+ version: '0.17'
89
+ - !ruby/object:Gem::Dependency
90
+ name: rubocop-performance
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '1.13'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '1.13'
103
+ - !ruby/object:Gem::Dependency
104
+ name: rubocop-rake
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '0.6'
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: '0.6'
117
+ - !ruby/object:Gem::Dependency
118
+ name: sqlite3
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: '1.3'
124
+ type: :development
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: '1.3'
55
131
  description: Rails gem to allowing records to leave footprints
56
132
  email: chariderpato@gmail.com
57
133
  executables: []
@@ -61,6 +137,7 @@ files:
61
137
  - ".github/workflows/gem-push.yml"
62
138
  - ".github/workflows/test.yml"
63
139
  - ".gitignore"
140
+ - ".rubocop.yml"
64
141
  - Gemfile
65
142
  - LICENSE.txt
66
143
  - README.md
@@ -93,7 +170,8 @@ files:
93
170
  homepage: https://github.com/patorash/acts_as_footprintable
94
171
  licenses:
95
172
  - MIT
96
- metadata: {}
173
+ metadata:
174
+ rubygems_mfa_required: 'true'
97
175
  post_install_message:
98
176
  rdoc_options: []
99
177
  require_paths:
@@ -102,7 +180,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
102
180
  requirements:
103
181
  - - ">="
104
182
  - !ruby/object:Gem::Version
105
- version: '0'
183
+ version: '2.6'
106
184
  required_rubygems_version: !ruby/object:Gem::Requirement
107
185
  requirements:
108
186
  - - ">="