paneron-register 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: 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