pathtree 0.2.0 → 0.3.0

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
  SHA256:
3
- metadata.gz: 5618618520c5b3e5d9c7d1094ac3ca0e42805d016d5152d3ee42a0b06e912a36
4
- data.tar.gz: 4d1e1bf3729a4393d9d0bd6a9d9dff8a2e9e6490e40a696b7c7ed13f63bcec84
3
+ metadata.gz: 2d8abe169d75eec0e468f2632575fea2087681a73a60792f58bdb13519b71633
4
+ data.tar.gz: 82d71231c2b80f0ec8ebaea69677b2d12c6ee2ebfcb0aec83accf6c67255b1df
5
5
  SHA512:
6
- metadata.gz: 1c1491f67f13883d135417a51986777577ca70119796d8db898dd548b19a8c1f6c1e47d866066210564ad6d586c61ce598ffa5e9ef8b734e0ff628d3ff3aaef8
7
- data.tar.gz: f553ba89a367f84541ddcfba1dcfbbf13b398fefbc9d652f1de83895af66c2b4b8321144a5b23309c89f11a7aec2dd9c62639937857f2f22e3e308b2c6d1e4f3
6
+ metadata.gz: 30599d8e1979cfa9f5589985da12e7711ddbffe60e7407f877f3b9dec78185bff29876951791f8525d0531d9a94d17b47a86a5ed988ea41608fb7c60e7b4d18a
7
+ data.tar.gz: 128c8141f301f80b321af22171203c7bad4c666a03e51b8a477445f6a37ec177cc890026acdf069afdca346f37745341c844085cd9b19a59c81ed2b69edf0ee9
data/CHANGELOG.md CHANGED
@@ -7,6 +7,32 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## Unreleased
9
9
 
10
+ ## 0.3.0 - 2021-12-12
11
+
12
+ ### Added
13
+
14
+ * GitLab CI which checks tests with Minitest and lint rules with RuboCop
15
+ * Enable to pass `Proc` object to `path` argument
16
+ of `Pathtree::Dsl#file` and `Pathtree::Dsl#directory`.
17
+
18
+ ```ruby
19
+ file :main_idr, -> { _1.capitalize } # Main.idr
20
+ ```
21
+
22
+ * `Pathtree::StringRefinements#split_extension`
23
+ * `Pathtree::ObjectRefinements#file_path` and `Pathtree::ObjectRefinements#directory_path`
24
+
25
+ ### Removed
26
+
27
+ * `Pathtree::SymbolRefinements`
28
+ * Move to `Pathtree::StringRefinements#split_extension`
29
+ * `dot` option for `Pathtree::Dsl#file` and `Pathtree::Dsl#directory`
30
+ * Use `Proc` for path instead
31
+
32
+ ### Changed
33
+
34
+ * Visibility of `Pathtree::Dsl#read` to private
35
+
10
36
  ## 0.2.0 - 2021-11-20
11
37
 
12
38
  ### Changed
@@ -3,5 +3,5 @@
3
3
  require 'pathname'
4
4
 
5
5
  class Pathtree < Pathname
6
- VERSION = '0.2.0'
6
+ VERSION = '0.3.0'
7
7
  end
data/lib/pathtree.rb CHANGED
@@ -4,23 +4,6 @@ require 'pathname'
4
4
  require_relative 'pathtree/version'
5
5
 
6
6
  class Pathtree < Pathname
7
- module SymbolRefinements
8
- refine Symbol do
9
- # +type+ option can be one of the following:
10
- #
11
- # +:directory+:: +:directory+ simply converts to +String+.
12
- # +:file+:: +:file+ converts to +String+, and turn +aaa_bbb_ccc+ into +aaa_bbb.ccc+ for example.
13
- def path(type: :directory)
14
- case type
15
- in :directory
16
- to_s
17
- in :file
18
- to_s.sub(/\A[a-z0-9_]*\K_(?=[a-z0-9]+\Z)/, '.')
19
- end
20
- end
21
- end
22
- end
23
-
24
7
  module StringRefinements
25
8
  refine String do
26
9
  def prefix_dot
@@ -28,16 +11,48 @@ class Pathtree < Pathname
28
11
 
29
12
  ".#{self}"
30
13
  end
14
+
15
+ # Split at last underscore `_` and turn last part into file extension
16
+ #
17
+ # "aaa_bbb_ccc".split_extension #=> aaa_bbb.ccc
18
+ def split_extension
19
+ sub(/\A[a-z0-9_]*\K_(?=[a-z0-9]+\Z)/, '.')
20
+ end
31
21
  end
32
22
  end
33
23
 
34
- class Dsl
35
- using SymbolRefinements
24
+ module ObjectRefinements
36
25
  using StringRefinements
37
26
 
27
+ refine Object do
28
+ # Use Pathtree::StringRefinements#split_extension by default
29
+ def file_path(name:)
30
+ path(name: name, proc_for_nil: -> { _1.split_extension })
31
+ end
32
+
33
+ def directory_path(name:)
34
+ path(name: name, proc_for_nil: -> { _1 })
35
+ end
36
+
37
+ private
38
+
39
+ def path(name:, proc_for_nil:) # :nodoc:
40
+ case self
41
+ in String
42
+ self
43
+ in NilClass
44
+ proc_for_nil.call(name.to_s)
45
+ in Proc
46
+ call(name.to_s)
47
+ end
48
+ end
49
+ end
50
+ end
51
+
52
+ class Dsl
38
53
  def self.read(file_path, working_directory: Pathname.pwd)
39
54
  new(working_directory: working_directory)
40
- .tap { _1.read(file_path) }
55
+ .tap { _1.send(:read, file_path) }
41
56
  .instance_variable_get(:@working_directory)
42
57
  end
43
58
 
@@ -46,23 +61,21 @@ class Pathtree < Pathname
46
61
  @working_directory = Pathtree.new(working_directory)
47
62
  end
48
63
 
49
- def read(file_path)
50
- instance_eval File.read(file_path)
51
- end
64
+ using ObjectRefinements
65
+
66
+ def file(name, path = nil)
67
+ path = path.file_path(name: name)
52
68
 
53
- def file(name, path = name.path(type: :file), dot: false)
54
69
  # NOTE: Temporal variable is needed
55
70
  # since define_singleton_method's block is evaluated using instance_eval
56
71
  # which is same as define_method.
57
72
  working_directory = @working_directory
58
73
 
59
- path = path.prefix_dot if dot
60
-
61
74
  @working_directory.define_singleton_method(name) { working_directory / path }
62
75
  end
63
76
 
64
- def directory(name, path = name.path, dot: false, &block)
65
- path = path.prefix_dot if dot
77
+ def directory(name, path = nil, &block)
78
+ path = path.directory_path(name: name)
66
79
 
67
80
  # NOTE: Temporal variable is needed
68
81
  # since define_singleton_method's block is evaluated using instance_eval
@@ -77,5 +90,13 @@ class Pathtree < Pathname
77
90
  end
78
91
 
79
92
  alias dir directory
93
+
94
+ private
95
+
96
+ using StringRefinements
97
+
98
+ def read(file_path)
99
+ instance_eval File.read(file_path)
100
+ end
80
101
  end
81
102
  end
metadata CHANGED
@@ -1,127 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pathtree
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
  - gemmaro
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-11-19 00:00:00.000000000 Z
12
- dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: pathname
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: 0.2.0
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: 0.2.0
27
- - !ruby/object:Gem::Dependency
28
- name: minitest
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '5.0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '5.0'
41
- - !ruby/object:Gem::Dependency
42
- name: rake
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '13.0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '13.0'
55
- - !ruby/object:Gem::Dependency
56
- name: rdoc
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '6.3'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: '6.3'
69
- - !ruby/object:Gem::Dependency
70
- name: rubocop
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "~>"
74
- - !ruby/object:Gem::Version
75
- version: '1.7'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: '1.7'
83
- - !ruby/object:Gem::Dependency
84
- name: rubocop-minitest
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - "~>"
88
- - !ruby/object:Gem::Version
89
- version: 0.15.2
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - "~>"
95
- - !ruby/object:Gem::Version
96
- version: 0.15.2
97
- - !ruby/object:Gem::Dependency
98
- name: rubocop-rake
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - "~>"
102
- - !ruby/object:Gem::Version
103
- version: 0.6.0
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - "~>"
109
- - !ruby/object:Gem::Version
110
- version: 0.6.0
111
- - !ruby/object:Gem::Dependency
112
- name: solargraph
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - "~>"
116
- - !ruby/object:Gem::Version
117
- version: 0.44.0
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - "~>"
123
- - !ruby/object:Gem::Version
124
- version: 0.44.0
11
+ date: 2021-12-12 00:00:00.000000000 Z
12
+ dependencies: []
125
13
  description: Tree structure of Pathname
126
14
  email:
127
15
  - gemmaro.dev@gmail.com
@@ -137,7 +25,8 @@ files:
137
25
  homepage: https://gitlab.com/gemmaro/pathtree
138
26
  licenses:
139
27
  - MIT
140
- metadata: {}
28
+ metadata:
29
+ rubygems_mfa_required: 'true'
141
30
  post_install_message:
142
31
  rdoc_options: []
143
32
  require_paths:
@@ -153,7 +42,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
153
42
  - !ruby/object:Gem::Version
154
43
  version: '0'
155
44
  requirements: []
156
- rubygems_version: 3.2.22
45
+ rubygems_version: 3.2.32
157
46
  signing_key:
158
47
  specification_version: 4
159
48
  summary: Tree structure of Pathname