fixed_record 0.4.4 → 0.5.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: ff8338a931bf7c56128b3865f814cff42f0383db1fe48d97cf36d621ab53e244
4
- data.tar.gz: 9f3378e6a0423fbbd6cb042973a1c29b315114cdb3accd4b82d3dd8e94a2d529
3
+ metadata.gz: 0e28a9a9f85d811dca1463d6d5ae8944d0d5fd66a098be6e93a9c86b939f4807
4
+ data.tar.gz: 1849d6bb120d51aa6f275f1bc9c2d8e78166bf492c4e39887ed2fa010dbfa1fd
5
5
  SHA512:
6
- metadata.gz: 7eb69a020b70344a11ccdbd5010ab9035cc016235ee462291fd8eef54e0d0829d70ab8581213d264d6f1a12fd99581794938258c50b2af550bb6d3b6d5785643
7
- data.tar.gz: abc3b1526a5ce6b2f19271044692e4d4c1eff1acc8aadf05579075a96fd4d3aae30e594f5f1c4035eff034342a05e2d7d6c622fe09ac4e761b6a498d5c42f70a
6
+ metadata.gz: a03e177ac9d18c4ee7bd5f5589cdc9657369cc7444dd7b371ca644ec53c0030d160a2fd76ab3669093e44364baae267e1c165f47d23cbe481c7d2c04b61999ed
7
+ data.tar.gz: a6462fa10d6eff0704dbd51aa3001a5a5ee367947eea83a32962de27c8fe68c907204b20860270063ac23cbd8ce50aea2697a01d1d0649bc7b58cb1962164165
data/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # Gem fixed_record Changelog
2
2
 
3
+ ## 0.5.0
4
+ * Added class method `valid_names` to return valid names in records
5
+ * Documented class method `filename`
6
+ * Add instance method `present?` to test if a value was supplied for an optional field
7
+
3
8
  ## 0.4.4
4
9
  * Syntax Errors in YAML file now reported as ArgumentError
5
10
 
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- fixed_record (0.4.3)
4
+ fixed_record (0.5.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -48,7 +48,7 @@ Then to load these, create a class
48
48
  require 'fixed_record'
49
49
 
50
50
  class MyFavoriteWebsite < FixedRecord
51
- data "#{Rails.root}/data/my_favorite_websites.yml", required: [:name, :url]
51
+ data "#{Rails.root}/data/my_favorite_websites.yml", required: [:name, :url], optional: [:title]
52
52
 
53
53
  # Return hostname of url for company
54
54
  def hostname
@@ -76,6 +76,20 @@ A count of the number of records is available:
76
76
  puts MyFavoriteWebsite.count
77
77
  ```
78
78
 
79
+ As is the filename and the set of valid field names:
80
+ ```ruby
81
+ puts MyFavoriteWebsite.filename # .../my_favorite_websites.yml
82
+ puts MyFavoriteWebsite.valid_keys.include?( :name ) # true
83
+ ```
84
+ ## Value presence
85
+
86
+ It's possible to check whether a value is supplied for an optional field for an item:
87
+
88
+ ```ruby
89
+ puts MyFavoriteWebsite.all.first.present?(:title) # true
90
+ ```
91
+ This makes it possible to distinguish between an optional value being omitted and explicitly being given the value nil.
92
+
79
93
  The declared class will also include all the methods from the `Enumerable` module.
80
94
 
81
95
  ### Hash of Records
@@ -136,7 +150,7 @@ The declared class will also include all the methods from the `Enumerable` modul
136
150
 
137
151
  ### Singleton Record
138
152
 
139
- Create a YAML file `site_settingss.yml` defining a single records like this:
153
+ Create a YAML file `site_settings.yml` defining a single records like this:
140
154
 
141
155
  ```yaml
142
156
 
data/lib/fixed_record.rb CHANGED
@@ -4,7 +4,7 @@ require 'psych'
4
4
  require 'set'
5
5
 
6
6
  class FixedRecord
7
- VERSION = "0.4.4"
7
+ VERSION = "0.5.0"
8
8
 
9
9
  # Lazy load data from given filename
10
10
  # creating accessors for top level attributes
@@ -61,7 +61,7 @@ class FixedRecord
61
61
  end
62
62
  end
63
63
 
64
- def self.has_key?( k )
64
+ def self.has_item_key?( k )
65
65
  if all.is_a?(Hash)
66
66
  all.has_key?( k )
67
67
  else
@@ -77,6 +77,10 @@ class FixedRecord
77
77
  @@filename
78
78
  end
79
79
 
80
+ def self.valid_names
81
+ load!
82
+ @@valid_keys
83
+ end
80
84
 
81
85
  def self.load!
82
86
  if @@items.nil?
@@ -150,8 +154,16 @@ private
150
154
  valid_keys.each do |key|
151
155
  define_method( key.to_sym) { @values[key] }
152
156
  end
157
+ # Test if a value is defined (could be nil) for a name
158
+ class_eval %Q{
159
+ def present?(name)
160
+ @values.key?( name.to_s )
161
+ end
162
+ }
153
163
  end
154
164
 
165
+
166
+
155
167
  # Validate the top level of the data structure returned
156
168
  # Validate the top level of the data structure returned
157
169
  def self.validate_structure( y, singleton, filename )
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fixed_record
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.4
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Bell
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-03-05 00:00:00.000000000 Z
11
+ date: 2020-03-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler