music_ids 0.3.4 → 0.4.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
  SHA1:
3
- metadata.gz: 01d4df7373cff1ee3e167e3d95e762b2df104885
4
- data.tar.gz: 7b0240d4b59fc374758094344fc16609407a6824
3
+ metadata.gz: 86e0063188644c2b834ba47d11edebc8de761c37
4
+ data.tar.gz: 47738cdae0a47c725ea4eadb9cadb723aeb5b735
5
5
  SHA512:
6
- metadata.gz: 3c6ba9a0f85c9c9b4f719e00bc48a3fc66b67cd831f6147a1b41b7052d9fc5de8b08dc9873bfec5a8065b233b6a55b78a40114898f902268f9d119b66f6ca8ee
7
- data.tar.gz: a0c4686300285053b14b86d33343c1c3d86dfd9f92c4c1aa4c4d630782e75408f9328955920835a0e67faae01088222cb71c04ece05eb1ae4b3f583989b0e46b
6
+ metadata.gz: 5ea07f4aac3e25370b947e51cbc531a5a05702e6ab767cd5166770741f3e85bb70df9c35ea292dd69e6708f636c8b76124dc1dbf8e47d94a25ecb7fb27d880ab
7
+ data.tar.gz: 0a7fc56bb2266614b103e5ee5ec04fa6f34b80415b1f3fbd6a0c3deb3f66c1c69d5096e5a5f2a27a606072145354a7907fc243c5c693c759e23152b05ad181f5
data/README.md CHANGED
@@ -90,6 +90,74 @@ JSON.generate({isrc: isrc, grid: grid})
90
90
  #=> "{\"isrc\":\"FRZ039800212\",\"grid\":\"A12425GABC1234002M\"}"
91
91
  ```
92
92
 
93
+ Problems with your ID will raise an ArgumentError on parsing
94
+
95
+ ```ruby
96
+ require 'music_ids'
97
+
98
+ begin
99
+ isrc = MusicIds::ISRC.parse('FRZ03')
100
+ rescue ArgumentError => e
101
+ e.message
102
+ end
103
+ #=> "'FRZ03' is not the right length to be a MusicIds::ISRC"
104
+
105
+ begin
106
+ grid = MusicIds::GRid.parse('A12425G')
107
+ rescue ArgumentError => e
108
+ e.message
109
+ end
110
+ #=> "'A12425G' is not the right length to be a MusicIds::GRid"
111
+ ```
112
+
113
+ If you have to sometimes deal with bad metadata, then you may want a more
114
+ forgiving approach. Enter 'relaxed' parsing. You can pass `relaxed: true` as an
115
+ options hash to `.parse`, or you can call `.relaxed` directly. A 'bad' instance
116
+ returned by relaxed mode parsing reports that it's not ok with `#ok?` and won't
117
+ return any components, and will only return the input string it was passed and
118
+ not the full or prefixed versions you can get for a well-formed ISRC.
119
+
120
+ ```ruby
121
+ require 'music_ids'
122
+
123
+ bad_isrc = MusicIds::ISRC.parse('bad', relaxed: true)
124
+ bad_isrc.ok? #=> false
125
+ bad_isrc.to_s #=> 'bad'
126
+ bad_isrc.country #=> nil
127
+ bad_isrc.as(:data) #=> 'bad'
128
+ bad_isrc.as(:full) #=> 'bad'
129
+ bad_isrc.as(:prefixed) #=> 'bad'
130
+
131
+ other_bad_isrc = MusicIds::ISRC.relaxed('bad')
132
+ other_bad_isrc.ok? #=> false
133
+ other_bad_isrc.to_s #=> 'bad'
134
+
135
+ bad_grid = MusicIds::GRid.parse('bad', relaxed: true)
136
+ bad_grid.ok? #=> false
137
+ bad_grid.to_s #=> 'bad'
138
+ bad_grid.scheme #=> nil
139
+ bad_grid.as(:data) #=> 'bad'
140
+ bad_grid.as(:full) #=> 'bad'
141
+ bad_grid.as(:prefixed) #=> 'bad'
142
+
143
+ other_bad_grid = MusicIds::GRid.relaxed('bad')
144
+ other_bad_grid.ok? #=> false
145
+ other_bad_grid.to_s #=> 'bad'
146
+
147
+ MusicIds::ISRC.relaxed(nil) #=> nil
148
+ MusicIds::GRid.relaxed(nil) #=> nil
149
+
150
+ # Of course, parsing valid IDs in relaxed mode works just fine:
151
+ MusicIds::ISRC.relaxed('FRZ039800212').ok? #=> true
152
+ MusicIds::GRid.relaxed('A12425GABC1234002M').ok? #=> true
153
+
154
+ # And strict parsed instances can tell you they're okay
155
+ MusicIds::ISRC.parse('FRZ039800212').ok? #=> true
156
+ MusicIds::GRid.parse('A12425GABC1234002M').ok? #=> true
157
+ ```
158
+
159
+ For more details, see the [RDoc](http://www.rubydoc.info/gems/music_ids).
160
+
93
161
  ## Development
94
162
  After checking out the repo, run `bin/setup` to install dependencies. Then, run
95
163
  `bin/console` for an interactive prompt that will allow you to experiment.
@@ -8,7 +8,13 @@ module MusicIds
8
8
  # @option opts [true, false] :relaxed (false) Whether to parse in relaxed mode
9
9
  # @return [ISRC] the ISRC instance
10
10
  def parse(input, opts = {})
11
- opts[:relaxed] ? parse_relaxed(input) : parse_strict(input)
11
+ opts[:relaxed] ? relaxed(input) : parse_strict(input)
12
+ end
13
+
14
+ def relaxed(input)
15
+ parse_string(input) { |input|
16
+ new(input, ok: false) unless input.nil?
17
+ }
12
18
  end
13
19
 
14
20
  private
@@ -21,17 +27,12 @@ module MusicIds
21
27
 
22
28
  def parse_strict(input)
23
29
  parse_string(input) { |input|
24
- raise ArgumentError, "'#{input}' is not the right length to be a #{self.class}"
25
- }
26
- end
27
-
28
- def parse_relaxed(input)
29
- parse_string(input) { |input|
30
- new(input, ok: false)
30
+ raise ArgumentError, "'#{input}' is not the right length to be a #{self.name}"
31
31
  }
32
32
  end
33
33
 
34
34
  def parse_string(input)
35
+ return yield(input) if input.nil?
35
36
  normalised = input.to_s.upcase
36
37
  if match = well_formed_id_matcher.match(normalised)
37
38
  new(match[1].gsub('-', ''))
@@ -1,3 +1,3 @@
1
1
  module MusicIds
2
- VERSION = "0.3.4"
2
+ VERSION = "0.4.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: music_ids
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.4
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Patterson