fiscal_year 0.2.0 → 0.3.0

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: 284c5184ce2fd9503b81a6de26e657eacba6b917d8544e88ee37b771f9316b82
4
- data.tar.gz: 072003b1e2b38f9c8e9e6ec6ce3fe549acd9fc06b9b403065e1605bf73bc0ba2
3
+ metadata.gz: 6cf15774708a32e8499e3228288a15749adf62d98a7dc72ccc31e9cfc0b5b842
4
+ data.tar.gz: 44dc1c5dc58d257bee352257abae21f5e02412d39d5aef76910ef34036a596bb
5
5
  SHA512:
6
- metadata.gz: bae3fd2e63eb14fc7954e40e7e98e4861902b47b1f47a6f8038351373f899767aae0a70133a0d6fae274edefa9872596fa11ce23a81001e055b9b200ddb9245d
7
- data.tar.gz: c3903b8302eb1f86ff53bc7ef74a2f43822e9a83eb2399491da321ab7c5af9a334bf0abd8fcb39db7fc828d451815d204d6baa6d43515768bcf1b8f222e48645
6
+ metadata.gz: 8e38a3d7c476be3d0e2889f608e73b52f04234553f2119fa665dc19143fb0fafadd6ef832dc4c42527096e7a402136992a4e2a4e5222109364522c32fca1de1a
7
+ data.tar.gz: 591f594009aa1cfb7595a3c18720c8d7f88974a7510252f870f981d5518ef296ebdd2fb8b5eb8397bc040c263fc33d4ae0acd09cc76993c4f52731eac15dce36
data/.rubocop.yml CHANGED
@@ -1,5 +1,9 @@
1
1
  AllCops:
2
2
  TargetRubyVersion: 2.6
3
+ Exclude:
4
+ - 'Steepfile'
5
+ - 'vendor/**/*'
6
+ NewCops: enable
3
7
 
4
8
  Style/StringLiterals:
5
9
  Enabled: true
data/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ ## [0.3.0] - 2023-04-23
2
+ - add rbs
3
+ - fit to rbs
4
+
5
+ - improve workflow
6
+ - add dependabot
7
+ - add test coverage
8
+
1
9
  ## [0.2.0] - 2023-03-16
2
10
  - add test
3
11
  - fit to rubocop
data/Gemfile CHANGED
@@ -5,8 +5,9 @@ source "https://rubygems.org"
5
5
  # Specify your gem's dependencies in fiscal_year.gemspec
6
6
  gemspec
7
7
 
8
- gem "rake", "~> 13.0"
9
-
10
- gem "rspec", "~> 3.0"
11
-
12
- gem "rubocop", "~> 1.21"
8
+ group :development do
9
+ gem "rake"
10
+ gem "rspec"
11
+ gem "rubocop"
12
+ gem "simplecov"
13
+ end
data/README.md CHANGED
@@ -1,10 +1,14 @@
1
- ![build badge](https://github.com/TsubasaKawajiri/fiscal_year/actions/workflows/main.yml/badge.svg?branch=master)
1
+ ![build badge](https://github.com/TsubasaKawajiri/fiscal_year/actions/workflows/test.yml/badge.svg?branch=master)
2
+ [![Gem Version](https://badge.fury.io/rb/fiscal_year.svg)](https://badge.fury.io/rb/fiscal_year)
2
3
  [![Maintainability](https://api.codeclimate.com/v1/badges/39fdb48501c5f53235a9/maintainability)](https://codeclimate.com/github/TsubasaKawajiri/fiscal_year/maintainability)
3
4
  [![Test Coverage](https://api.codeclimate.com/v1/badges/39fdb48501c5f53235a9/test_coverage)](https://codeclimate.com/github/TsubasaKawajiri/fiscal_year/test_coverage)
4
5
 
5
6
  # FiscalYear
6
7
 
7
- Calculate fiscal year half, quarter, and year to date.
8
+ FiscalYear is calculates half-year, quarter-year, and YTD figures.
9
+ It can take in a year's numerical value or a year and month and return the results as a Range.
10
+
11
+ Additionally, it allows for the customization of the starting month of the fiscal period.
8
12
 
9
13
  ## Installation
10
14
 
@@ -54,7 +58,7 @@ configure start month
54
58
 
55
59
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
56
60
 
57
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
61
+ To install this gem onto your local machine, run `bundle exec rake install`.
58
62
 
59
63
  ## Contributing
60
64
 
data/Steepfile ADDED
@@ -0,0 +1,6 @@
1
+ target :lib do
2
+ signature "sig"
3
+ check "lib"
4
+
5
+ library "date", "activesupport"
6
+ end
@@ -4,11 +4,17 @@ module FiscalYear
4
4
  class Half
5
5
  class << self
6
6
  def first
7
- FiscalYear.halfs.first
7
+ first = FiscalYear.halfs.first
8
+ return first if first.is_a? Array
9
+
10
+ []
8
11
  end
9
12
 
10
13
  def second
11
- FiscalYear.halfs.second
14
+ second = FiscalYear.halfs.second
15
+ return second if second.is_a? Array
16
+
17
+ []
12
18
  end
13
19
 
14
20
  def first?(month)
@@ -23,19 +29,26 @@ module FiscalYear
23
29
  # care Date#parse 2 digit year auto complete.
24
30
  # 99 + 1 = 100, but expect 2000 this context.
25
31
  year = 1999 if year == 99
26
- end_year = normalize_year_by_month(year, first.last)
32
+ end_month = first.last
33
+ raise StandardError if end_month.nil?
27
34
 
28
- Date.parse("#{year}/#{first.first}/01")..Date.parse("#{end_year}/#{first.last}/01").end_of_month
35
+ end_year = normalize_year_by_month(year, end_month)
36
+
37
+ Date.parse("#{year}/#{first.first}/01")..Date.parse("#{end_year}/#{end_month}/01").end_of_month
29
38
  end
30
39
 
31
40
  def second_range_by(year)
32
41
  # care Date#parse 2 digit year auto complete.
33
42
  # 99 + 1 = 100, but expect 2000 this context.
34
43
  year = 1999 if year == 99
35
- start_year = normalize_year_by_month(year, second.first)
36
- end_year = normalize_year_by_month(year, second.last)
44
+ first_month = second.first
45
+ end_month = second.last
46
+ raise StandardError if first_month.nil? || end_month.nil?
47
+
48
+ start_year = normalize_year_by_month(year, first_month)
49
+ end_year = normalize_year_by_month(year, end_month)
37
50
 
38
- Date.parse("#{start_year}/#{second.first}/01")..Date.parse("#{end_year}/#{second.last}/01").end_of_month
51
+ Date.parse("#{start_year}/#{first_month}/01")..Date.parse("#{end_year}/#{end_month}/01").end_of_month
39
52
  end
40
53
 
41
54
  def range_by(date)
@@ -26,7 +26,10 @@ module FiscalYear
26
26
  end
27
27
 
28
28
  def months(month)
29
- FiscalYear.quarters.find { |a| a.include?(month) }
29
+ months = FiscalYear.quarters.find { |a| a.include?(month) }
30
+ raise ::StandardError if months.nil?
31
+
32
+ months
30
33
  end
31
34
 
32
35
  def range_by(date)
@@ -38,7 +41,9 @@ module FiscalYear
38
41
  end
39
42
 
40
43
  def quater_num(month)
41
- (FiscalYear.quarters.rindex(months(month)) + 1)
44
+ rindex = FiscalYear.quarters.rindex(months(month))
45
+
46
+ rindex.nil? ? 0 : (rindex + 1)
42
47
  end
43
48
 
44
49
  def cross_year_in_quarter?(quarter)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module FiscalYear
4
- VERSION = "0.2.0"
4
+ VERSION = "0.3.0"
5
5
  end
@@ -14,11 +14,15 @@ module FiscalYear
14
14
  end
15
15
  end
16
16
 
17
- def year_month_pairs(date)
17
+ # TODO: fit to Abc size
18
+ def year_month_pairs(date) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
18
19
  month = date.month
20
+ month_index = FiscalYear.months.index(month)
21
+ months = FiscalYear.months[(0..month_index)]
22
+ raise StandardError if months.nil?
19
23
 
20
24
  pair = []
21
- [date.year].product(FiscalYear.months.slice(0..FiscalYear.months.index(month))) do |e|
25
+ [date.year].product(months).each do |e|
22
26
  pair << if FiscalYear.cross_year_month?(month)
23
27
  (FiscalYear.cross_year_month?(e.second) ? e : [e.first - 1, e.second])
24
28
  else
data/lib/fiscal_year.rb CHANGED
@@ -11,8 +11,8 @@ require "active_support"
11
11
  require "active_support/core_ext"
12
12
 
13
13
  module FiscalYear
14
+ # @type ivar @config: FiscalYear::Config
14
15
  @config ||= FiscalYear::Config.new
15
-
16
16
  class << self
17
17
  attr_reader :config
18
18
 
@@ -35,14 +35,21 @@ module FiscalYear
35
35
  def cross_year_months
36
36
  return [] if @config.start_month == 1
37
37
 
38
- months.slice(months.rindex(1), months.length)
38
+ rindex = months.rindex(1).to_i
39
+
40
+ m = months.slice(rindex, months.length)
41
+ raise StandardError if m.nil?
42
+
43
+ m
39
44
  end
40
45
 
41
46
  def halfs
47
+ # @type self: singleton(FiscalYear)
42
48
  months.in_groups(2)
43
49
  end
44
50
 
45
51
  def quarters
52
+ # @type self: singleton(FiscalYear)
46
53
  months.in_groups(4)
47
54
  end
48
55
  end
@@ -0,0 +1,89 @@
1
+ ---
2
+ sources:
3
+ - name: ruby/gem_rbs_collection
4
+ remote: https://github.com/ruby/gem_rbs_collection.git
5
+ revision: main
6
+ repo_dir: gems
7
+ path: ".gem_rbs_collection"
8
+ gems:
9
+ - name: activesupport
10
+ version: '7.0'
11
+ source:
12
+ type: git
13
+ name: ruby/gem_rbs_collection
14
+ revision: 641dae8a456dc964cf7e447b7d994c709c7e5f96
15
+ remote: https://github.com/ruby/gem_rbs_collection.git
16
+ repo_dir: gems
17
+ - name: ast
18
+ version: '2.4'
19
+ source:
20
+ type: git
21
+ name: ruby/gem_rbs_collection
22
+ revision: 641dae8a456dc964cf7e447b7d994c709c7e5f96
23
+ remote: https://github.com/ruby/gem_rbs_collection.git
24
+ repo_dir: gems
25
+ - name: concurrent-ruby
26
+ version: '1.1'
27
+ source:
28
+ type: git
29
+ name: ruby/gem_rbs_collection
30
+ revision: 641dae8a456dc964cf7e447b7d994c709c7e5f96
31
+ remote: https://github.com/ruby/gem_rbs_collection.git
32
+ repo_dir: gems
33
+ - name: i18n
34
+ version: '1.10'
35
+ source:
36
+ type: git
37
+ name: ruby/gem_rbs_collection
38
+ revision: 641dae8a456dc964cf7e447b7d994c709c7e5f96
39
+ remote: https://github.com/ruby/gem_rbs_collection.git
40
+ repo_dir: gems
41
+ - name: json
42
+ version: '0'
43
+ source:
44
+ type: stdlib
45
+ - name: minitest
46
+ version: '0'
47
+ source:
48
+ type: stdlib
49
+ - name: parallel
50
+ version: '1.20'
51
+ source:
52
+ type: git
53
+ name: ruby/gem_rbs_collection
54
+ revision: 641dae8a456dc964cf7e447b7d994c709c7e5f96
55
+ remote: https://github.com/ruby/gem_rbs_collection.git
56
+ repo_dir: gems
57
+ - name: rainbow
58
+ version: '3.0'
59
+ source:
60
+ type: git
61
+ name: ruby/gem_rbs_collection
62
+ revision: 641dae8a456dc964cf7e447b7d994c709c7e5f96
63
+ remote: https://github.com/ruby/gem_rbs_collection.git
64
+ repo_dir: gems
65
+ - name: date
66
+ version: '0'
67
+ source:
68
+ type: stdlib
69
+ - name: logger
70
+ version: '0'
71
+ source:
72
+ type: stdlib
73
+ - name: monitor
74
+ version: '0'
75
+ source:
76
+ type: stdlib
77
+ - name: mutex_m
78
+ version: '0'
79
+ source:
80
+ type: stdlib
81
+ - name: singleton
82
+ version: '0'
83
+ source:
84
+ type: stdlib
85
+ - name: time
86
+ version: '0'
87
+ source:
88
+ type: stdlib
89
+ gemfile_lock_path: Gemfile.lock
@@ -0,0 +1,15 @@
1
+ # Download sources
2
+ sources:
3
+ - name: ruby/gem_rbs_collection
4
+ remote: https://github.com/ruby/gem_rbs_collection.git
5
+ revision: main
6
+ repo_dir: gems
7
+
8
+ # A directory to install the downloaded RBSs
9
+ path: .gem_rbs_collection
10
+
11
+ gems:
12
+ # Skip loading rbs gem's RBS.
13
+ # It's unnecessary if you don't use rbs as a library.
14
+ - name: rbs
15
+ ignore: true
@@ -0,0 +1,5 @@
1
+ module FiscalYear
2
+ class Config
3
+ attr_reader start_month: Integer
4
+ end
5
+ end
@@ -0,0 +1,13 @@
1
+ module FiscalYear
2
+ class Half
3
+ def self.first: () -> Array[Integer] | -> Array[untyped]
4
+ def self.second: () -> Array[Integer] | -> Array[untyped]
5
+ def self.first?: (Integer) -> bool
6
+ def self.second?: (Integer) -> bool
7
+ def self.first_range_by: (Integer) -> Range[Date]
8
+ def self.second_range_by: (Integer) -> Range[Date]
9
+ def self.range_by: (Date) -> Range[Date]
10
+ def self.normalize_year_by_month: (Integer, Integer) -> Integer
11
+ def self.cross_year_in_half?: (Array[Integer]) -> bool
12
+ end
13
+ end
@@ -0,0 +1,16 @@
1
+ module FiscalYear
2
+ class Quarter
3
+ def self.first: () -> Array[Integer]
4
+ def self.second: () -> Array[Integer]
5
+ def self.third: () -> Array[Integer]
6
+ def self.fourth: () -> Array[Integer]
7
+ def self.first?: (Integer) -> bool
8
+ def self.second?: (Integer) -> bool
9
+ def self.third?: (Integer) -> bool
10
+ def self.fourth?: (Integer) -> bool
11
+ def self.months: (Integer) -> Array[Integer]
12
+ def self.range_by: (Date) -> Range[Date]
13
+ def self.quarter_num: (Integer) -> Integer
14
+ def self. cross_year_in_quarter?: (Array[Integer]) -> bool
15
+ end
16
+ end
@@ -0,0 +1,8 @@
1
+ module FiscalYear
2
+ class YearToDate
3
+ def self.range_by: (Date) -> Range[Date]
4
+ def self.year_month_pairs: (Date) -> Array[[Integer, Integer]]
5
+ def self.half_range_by: (Date) -> Range[Date]
6
+ def self.quarter_range_by: (Date) -> Range[Date]
7
+ end
8
+ end
data/sig/fiscal_year.rbs CHANGED
@@ -1,4 +1,13 @@
1
1
  module FiscalYear
2
2
  VERSION: String
3
- # See the writing guide of rbs: https://github.com/ruby/rbs#guides
3
+ @config: FiscalYear::Config
4
+
5
+ attr_reader self.config: FiscalYear::Config
6
+ def self.configure: () { (FiscalYear::Config) -> void } -> void | -> void
7
+ def self.cross_year_month?: (Integer) -> bool
8
+ def self.cross_year?: () -> bool
9
+ def self.months: -> Array[Integer]
10
+ def self.cross_year_months: () -> Array[Integer]
11
+ def self.halfs: () -> [Array[Integer], Array[Integer]]
12
+ def self.quarters: () -> [Array[Integer], Array[Integer], Array[Integer], Array[Integer]]
4
13
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fiscal_year
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tsubasa Kawajiri
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-03-15 00:00:00.000000000 Z
11
+ date: 2023-04-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -24,34 +24,6 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
- - !ruby/object:Gem::Dependency
28
- name: rake
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: rspec
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
27
  description: fiscal year, quarter, year to date calculate
56
28
  email:
57
29
  - tk.music.jpn@gmail.com
@@ -67,13 +39,20 @@ files:
67
39
  - LICENSE.txt
68
40
  - README.md
69
41
  - Rakefile
42
+ - Steepfile
70
43
  - lib/fiscal_year.rb
71
44
  - lib/fiscal_year/config.rb
72
45
  - lib/fiscal_year/half.rb
73
46
  - lib/fiscal_year/quarter.rb
74
47
  - lib/fiscal_year/version.rb
75
48
  - lib/fiscal_year/year_to_date.rb
49
+ - rbs_collection.lock.yaml
50
+ - rbs_collection.yaml
76
51
  - sig/fiscal_year.rbs
52
+ - sig/fiscal_year/config.rbs
53
+ - sig/fiscal_year/half.rbs
54
+ - sig/fiscal_year/quarter.rbs
55
+ - sig/fiscal_year/year_to_date.rbs
77
56
  homepage: https://github.com/TsubasaKawajiri/fiscal_year
78
57
  licenses:
79
58
  - MIT
@@ -82,6 +61,7 @@ metadata:
82
61
  homepage_uri: https://github.com/TsubasaKawajiri/fiscal_year
83
62
  source_code_uri: https://github.com/TsubasaKawajiri/fiscal_year
84
63
  changelog_uri: https://github.com/TsubasaKawajiri/fiscal_year/CHANGEROG.md
64
+ rubygems_mfa_required: 'true'
85
65
  post_install_message:
86
66
  rdoc_options: []
87
67
  require_paths: