paneron-register 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: 52d7cfff231080db14c14453bd757db38f58b35ffcdbe69588c34fc97facc331
4
- data.tar.gz: f5d14ee0605cc362800849f463a08bacf6cf2e1ef3a055244425b7264933bdf1
3
+ metadata.gz: 560320c2a03e90f346dafccc8a2088c4637ce9d80bf789a01b79d6711409b812
4
+ data.tar.gz: 6a2996fe23f059d525a1ecb8b2d71384a22ba67adcfba27814855c5a2a18fc37
5
5
  SHA512:
6
- metadata.gz: 5a8588a75ec028ce6faa1083f615c120ed289a31924a19276383e8309ac40c2aa0733b299de94d1af23d98406faf67b06548351a605f2ead260ee1f927be30e7
7
- data.tar.gz: '049798fcb8d8308ada3f45ce7effb8d960e3546890c5780c34178c5ad2bd94653f82be52f63a29945d3cf3b98d1b1a251055a1dec529b8056103c8da1ac5b268'
6
+ metadata.gz: 9885fa28ebdcf9c5dfc8899b125480e88d4876cba6473cff144e0f2dc5178d5478a8478b92eb44fd31e638d1a94a68362dd0bef9e324f51919189da601d904eb
7
+ data.tar.gz: ef8c656a0d9c76bd1e38b43befc4689045e00e4cc88a966b9734ef4e2dd473139a037eeabc0f2e784743878748d572c5ac56290b3c8e9be56cfcecf1f23b2352
data/.irbrc CHANGED
@@ -1 +1,2 @@
1
1
  require "paneron/register"
2
+ include Paneron::Register
data/.pryrc CHANGED
@@ -1 +1,2 @@
1
1
  require "paneron/register"
2
+ include Paneron::Register
data/README.adoc CHANGED
@@ -15,75 +15,219 @@ gem install paneron-register
15
15
 
16
16
  == Usage
17
17
 
18
- ```ruby
18
+ [source,ruby]
19
+ ----
19
20
  require "paneron/register"
21
+ include Paneron::Register
20
22
 
21
23
  # Initialize a new data set
22
24
  # This example uses a working copy of Paneron's data set.
23
- # => Paneron::Register::Raw::DataSet
24
- raw_data_set = Paneron::Register::Raw::DataSet.new(
25
+ # => Raw::DataSet
26
+ raw_data_set = Raw::DataSet.new(
25
27
  "/Users/username/Library/Application Support/Electron/working_copies/00000000-0001-0000-0000-000000000001",
26
28
  "data_set_name-1"
27
29
  )
28
30
 
29
- # => Paneron::Register::DataSet < Lutaml::Model::Serializable
31
+ # => DataSet < Lutaml::Model::Serializable
30
32
  data_set = raw_data_set.to_lutaml
31
33
 
32
34
  # Alternatively, initialize a new register:
33
35
  # => Paneron::Register::Raw::Register
34
- raw_register = Paneron::Register::Raw::Register.new(
36
+ raw_register = Raw::Register.new(
35
37
  "/Users/username/Library/Application Support/Electron/working_copies/00000000-0001-0000-0000-000000000001",
36
38
  )
37
39
 
38
40
  # This example uses a Git URL
39
- # => Paneron::Register::Raw::Register
40
- raw_register = Paneron::Register::Raw::Register.from_git(
41
+ # => Raw::Register
42
+ raw_register = Raw::Register.from_git(
41
43
  "https://github.com/isogr/registry",
42
44
 
43
45
  # optional. For previously cloned repos, pulls from repo iff true.
44
46
  # update: true,
45
47
  )
46
48
 
47
- # => Paneron::Register::Raw::DataSet
49
+ # => Raw::DataSet
48
50
  raw_data_set = raw_register.data_sets("data_set_name-1")
49
51
 
50
- # => Paneron::Register::DataSet < Lutaml::Model::Serializable
52
+ # => DataSet < Lutaml::Model::Serializable
51
53
  data_set = raw_data_set.to_lutaml
52
54
 
53
55
  # Get all item class objects
54
- # => { item-class-name: Paneron::Register::Raw::ItemClass }
56
+ # => { item-class-name: Raw::ItemClass }
55
57
  raw_data_set.item_classes
56
58
 
57
- # => [ Paneron::Register::ItemClass ]
59
+ # => [ ItemClass ]
58
60
  data_set.item_classes
59
61
 
60
62
  # Get a specific item class object
61
- # => Paneron::Register::Raw::ItemClass
63
+ # => Raw::ItemClass
62
64
  raw_item_class = raw_data_set.item_classes("item-class-1")
63
65
 
64
- # => Paneron::Register::ItemClass < Lutaml::Model::Serializable
66
+ # => ItemClass < Lutaml::Model::Serializable
65
67
  item_class = raw_item_class.to_lutaml
66
68
 
67
69
  # Get all item objects in Ruby Hash format
68
- # => { item-uuid: Paneron::Register::Raw::Item }
70
+ # => { item-uuid: Raw::Item }
69
71
  raw_item_class.items
70
72
 
71
- # => [ Paneron::Register::Item ]
73
+ # => [ Item ]
72
74
  item_class.items
73
75
 
74
76
  # Get a specific item property, using normal Ruby Hash methods
75
- # => Paneron::Register::Raw::Item
77
+ # => Raw::Item
76
78
  raw_item = raw_item_class.items["00000000-0000-0000-0000-000000000001"]
77
79
  id = raw_item["id"]
78
80
  blob1 = raw_item["data"]["blob1"]
79
81
 
80
82
  # Get a specific item property, from a Lutaml object
81
- # => Paneron::Register::Item < Lutaml::Model::Serializable
83
+ # => Item < Lutaml::Model::Serializable
82
84
  item = raw_item.to_lutaml
83
85
  id = item.to_h["id"]
84
86
  blob1 = item.to_h["data"]["blob1"]
85
- ```
87
+ ----
88
+
89
+ For more usage examples, see link:docs/examples.adoc[`Examples`^]
90
+ and related link:spec/worked_examples_spec.rb[`spec/worked_examples_spec.rb`^].
91
+
92
+
93
+ == Development
94
+
95
+ Git clone this repository, then install dependencies.
96
+
97
+ [source,shell]
98
+ ----
99
+ git clone https://github.com/paneron/ruby-paneron-register
100
+ cd ruby-paneron-register
101
+ bundle install
102
+ ----
103
+
104
+ === Without Nix
105
+
106
+ Open development shell (`irb`) with:
107
+
108
+ [source,shell]
109
+ ----
110
+ bundle exec irb
111
+ ----
112
+
113
+ Open development shell (`pry`) with:
114
+
115
+ [source,shell]
116
+ ----
117
+ bundle exec pry
118
+ ----
119
+
120
+ Run tests with:
121
+
122
+ [source,shell]
123
+ ----
124
+ bundle exec rspec
125
+ # or
126
+ bundle exec rake spec
127
+ ----
128
+
129
+ Run lint with:
130
+
131
+ [source,shell]
132
+ ----
133
+ bundle exec rubocop
134
+ ----
135
+
136
+ Run lint with autocorrect with:
137
+
138
+ [source,shell]
139
+ ----
140
+ bundle exec rubocop -a
141
+ ----
142
+
143
+ Release to Rubygem (adds a Git tag, pushes to GitHub and releases to Rubygem) with:
144
+
145
+ [source,shell]
146
+ ----
147
+ bundle exec rake release
148
+ ----
149
+
150
+ === With Nix
151
+
152
+ If your system is using Nix, run the following to gain access to shell aliases:
153
+
154
+ [source,shell]
155
+ ----
156
+ nix develop
157
+ ----
158
+
159
+ Open development shell (`irb`) with:
160
+
161
+ [source,shell]
162
+ ----
163
+ irb
164
+ # or
165
+ console
166
+ ----
167
+
168
+ Open development shell (`pry`) with:
169
+
170
+ [source,shell]
171
+ ----
172
+ pry
173
+ ----
174
+
175
+ Run tests with:
176
+
177
+ [source,shell]
178
+ ----
179
+ rspec
180
+ ----
181
+
182
+ Run lint with:
183
+
184
+ [source,shell]
185
+ ----
186
+ lint
187
+ # or
188
+ rubocop
189
+ ----
190
+
191
+ Run lint with autocorrect with:
192
+
193
+ [source,shell]
194
+ ----
195
+ lint -a
196
+ # or
197
+ rubocop -a
198
+ ----
199
+
200
+ Release to Rubygem (adds a Git tag, pushes to GitHub and releases to Rubygem) with:
201
+
202
+ [source,shell]
203
+ ----
204
+ release
205
+ ----
206
+
207
+ Update Nix flakes with:
208
+
209
+ [source,shell]
210
+ ----
211
+ update-flakes
212
+ ----
213
+
214
+ == Release workflow
215
+
216
+ When actually creating a new version for release, do the following:
217
+
218
+ . Update the `VERSION` in file link:lib/paneron/register/version.rb[`lib/paneron/register/version.rb`^].
219
+ . [[:space:]]
220
+ +
221
+ [source,shell]
222
+ ----
223
+ git add lib/paneron/register/version.rb
224
+ git commit -m 'chore: Release vX.Y.Z' # change X.Y.Z to actual version
225
+ git push
226
+
227
+ # Run rake release
228
+ bundle exec rake release
229
+ ----
86
230
 
87
231
  == License
88
232
 
89
- See LICENSE.txt
233
+ See link:LICENSE.txt[`LICENSE.txt`]
@@ -0,0 +1,91 @@
1
+ = Examples
2
+
3
+ NOTE: Follow link:../spec/worked_examples_spec.rb[`spec/worked_examples_spec.rb`] for continuously integrated examples.
4
+
5
+ In this document, you'll find examples of how to use the library.
6
+
7
+ The following examples assume this preamble:
8
+
9
+ [source,ruby]
10
+ ----
11
+ require "paneron/register"
12
+ include Paneron::Register
13
+ ----
14
+
15
+
16
+ == Create a register
17
+
18
+ === From scratch
19
+
20
+ [source,ruby]
21
+ ----
22
+ register = Raw::Register.generate(
23
+ "/local/path/to/directory/can/be/empty",
24
+ git_url: "git URL",
25
+ )
26
+
27
+ # Create a data set
28
+ ds =
29
+ register.spawn_data_set("data_set_name")
30
+
31
+ # Register#save commits the data to git.
32
+ register.save
33
+
34
+ # Register#sync pushes the commits to git remote.
35
+ register.sync
36
+ ----
37
+
38
+
39
+ === From an existing Git repository
40
+
41
+ [source,ruby]
42
+ ----
43
+ register = Raw::Register.from_git("git URL")
44
+ ----
45
+
46
+
47
+ == Register an item class
48
+
49
+ [source,ruby]
50
+ ----
51
+ data_set = register.spawn_data_set("data_set_name").save
52
+ item_class = data_set.spawn_item_class("item_class_name").save
53
+ ----
54
+
55
+ == Store a file in the item
56
+
57
+ [source,ruby]
58
+ ----
59
+ item = item_class.spawn_item
60
+ item.data = "file contents"
61
+ item.save
62
+
63
+ # Take a note of its UUID for future retrieval
64
+ item_uuid = item.uuid
65
+ ----
66
+
67
+ == Write the item to register (sync local to remote)
68
+
69
+ [source,ruby]
70
+ ----
71
+ # Register#sync
72
+ # Register#sync pushes the commits to git remote.
73
+ register.sync
74
+ ----
75
+
76
+ == Fetch the item for use
77
+
78
+ [source,ruby]
79
+ ----
80
+ # Register.from_git clones the repo to local cache.
81
+ # It automatically calls `git pull --rebase` to sync with remote.
82
+ register = Raw::Register.from_git("git URL")
83
+ item = register.items(item_uuid)
84
+ ----
85
+
86
+ == Obtain the file from the item
87
+
88
+ [source,ruby]
89
+ ----
90
+ file = item.data
91
+ ----
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Paneron
4
+ module Register
5
+ module Hierarchical
6
+ # def self.included(base)
7
+ # base.class_eval do
8
+ # end
9
+ # end
10
+ # Split into parent path and base name
11
+
12
+ def self.split_path(full_path)
13
+ # {
14
+ # parent_path: File.dirname(full_path),
15
+ # basename: File.basename(full_path),
16
+ # }
17
+ [
18
+ File.dirname(full_path),
19
+ File.basename(full_path),
20
+ ]
21
+ end
22
+ end
23
+ end
24
+ end