FieldMaskedModel

FieldMaskedModel provides masked accessor methods to model classes.

Installation

Add this line to your application's Gemfile:

gem 'field_masked_model'

And then execute:

$ bundle

Or install it yourself as:

$ gem install field_masked_model

Usage

For example, you have .proto file shown below.

// proto
syntax = "proto3";
package organization.service;

option ruby_package = "UsersPb";

message User {
  int64 id = 1;
  string name = 2;
  int32 age = 3;
  Profile profile = 4;
}

message Profile {
  int64 id = 1;
  string introduction = 2;
}

By using FieldMaskedModel::Base, you can get model classes with masked accessor methods.

# user.rb
class User < FieldMaskedModel::Base
  msgclass UsersPb::User
end

# profile.rb
class Profile < FieldMaskedModel::Base
  msgclass UsersPb::Profile
end
$ u = User.new(
*   field_mask: Google::Protobuf::FieldMask.new(
*     paths: [
*       "id",
*       "name",
*       "profile.id",
*       "profile.introduction"
*     ]
*   ),
*   message: UsersPb::User.new(
*     id: 3,
*     name: "Taro",
*     profile: UsersPb::Profile.new(
*       id: 4,
*       introduction: "My name is Taro"
*     )
*   ),
* )
=> <User
 id: 3,
 name: "Taro",
 age: -,
 profile: Profile>

$ u.id
=> 3

$ u.name
=> "Taro"

$ u.age
=> FieldMaskedModel::InaccessibleError: age is not specified as paths in field_mask!

$ u.profile
=> <Profile
 id: 4,
 introduction: "My name is Taro">

Development

After checking out the repo, run bin/setup to install dependencies. Then, run rake true to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and tags, and push the .gem file to rubygems.org.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/south37/field_masked_model.

License

The gem is available as open source under the terms of the MIT License.